Unclassified Python ngrok RAT Family
Low-skill commodity Windows RAT distributed as a batch script that bootstraps a Python embeddable runtime and runs an obfuscated Python payload. C2 is a free-tier ngrok TCP tunnel. Capabilities span credential theft (Chrome DPAPI, WiFi), screen/webcam capture, remote shell, and system sabotage (BSOD trigger).
Capabilities
- batch-python-embed-download-stager
- base64-line-split-obfuscation
- zlib-compressed-payload
- xor-single-byte-encryption
- tcp-cleartext-c2-ngrok
- chrome-dpapi-master-key-extraction
- chrome-login-data-exfiltration
- chrome-cookie-exfiltration
- wifi-credential-dump-netsh
- screenshot-sendkeys-clipboard
- remote-shell-subprocess-popen
- schtasks-onlogon-persistence
- bsod-rtladjustprivilege-ntraiseharderror
- whatsapp-session-localstorage-zip-exfil
- avicap32-webcam-stub
Build / RE
- Language: DOS batch + Python 3.10.11 embeddable
- Packer/Obfuscation: None — manual base64 line-splitting in batch, zlib + XOR in Python layer
- Anti-analysis: None. No VM checks, debug checks, or timing gates
- Code quality: Low — dead imports (
cv2,numpy), stub commands (webcam,keylog_start), verbose comments admitting incomplete features - Signing: None
- Resources: Downloads Python runtime from legitimate
python.org; leverages trust in open-source infrastructure
Deploy / ATT&CK
| Tactic | Technique | Evidence |
|---|---|---|
| Execution | T1059.003 | Batch script launch ^[sample 028301d6/strings.txt:1] |
| Execution | T1059.006 | Python inner payload ^[raw/analyses/028301d695ca8918d856cacd951ae7fa54c6a9ab77edf975e1259fa243cc5b71/decoded_payload.py:1] |
| Command and Control | T1071.001 | HTTP to ip-api.com for victim geo ^[decoded_payload.py:32] |
| Credential Access | T1555.003 | Chrome Login Data SQLite theft ^[decoded_payload.py:145] |
| Credential Access | T1552.004 | DPAPI CryptUnprotectData on os_crypt.encrypted_key ^[decoded_payload.py:120] |
| Discovery | T1082 | System info enumeration (platform, socket.gethostname) ^[decoded_payload.py:34] |
| Discovery | T1049 | netsh wlan show profiles key=clear ^[decoded_payload.py:47] |
| Collection | T1005 | Raw file reads of browser databases ^[decoded_payload.py:148] |
| Collection | T1113 | PowerShell SendKeys + Clipboard JPEG screenshot ^[decoded_payload.py:41] |
| Collection | T1125 | AVICAP32 capture window stub ^[decoded_payload.py:105] |
| Exfiltration | T1041 | TCP socket exfil of stolen data ^[decoded_payload.py:26] |
| Persistence | T1053.005 | schtasks /create /tn "SystemUpdate" /sc onlogon /rl highest ^[decoded_payload.py:69] |
| Impact | T1490 | BSOD via NtRaiseHardError(0xC000007B) ^[decoded_payload.py:73] |
Sibling Analyses
028301d695ca8918d856cacd951ae7fa54c6a9ab77edf975e1259fa243cc5b71(Update.bat) — First observed sample: batch stager + Python embed + ngrok C2 + Chrome/WiFi theft + BSOD trigger. ^[/intel/analyses/028301d695ca8918d856cacd951ae7fa54c6a9ab77edf975e1259fa243cc5b71.html]
Related
- python-packed-payload — Concept page for malware whose logic lives in Python inside a PE or script carrier
- unclassified-batch-powershell-dropper — Different batch-dropper family (PowerShell reflective .NET load), similar staging concept but different toolchain
- schtasks-onlogon-persistence — Procedure page for the persistence mechanism observed here