Behinder and Godzilla are Java-based clients that talk to small server-side stubs and encrypt each request and response, usually with AES. That defeats simple content rules, but both ship with default keys, passwords and client behaviours, and both leave distinctive patterns in headers, cookies and response structure. Public analyses document these defaults; operators who do not change them are easy to find.
Signals at a Glance
| Signal | Where | ATT&CK |
|---|---|---|
| Default key material in server stubs (Behinder: first 16 hex characters of the MD5 of the default password) | File scan, YARA | T1505.003 |
| Octet-stream POST bodies of non-text content to a script URI | Proxy, IDS, WAF | T1573.001 |
| Java-style default Accept header on requests to web shell URIs | Web logs, IDS | T1071.001 |
| Cookie values ending with a trailing semicolon (Godzilla default behaviour) | Web logs, IDS | T1071.001 |
| Responses that are one long base64 or hex blob, with fixed-length prefix or suffix | IDS, packet capture | T1132.001 |
Default Traffic Characteristics
Both frameworks are written in Java, so earlier client versions send the Java default Accept header (text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2) unless the operator overrides it. Behinder uses an application/octet-stream style body for its encrypted requests; Godzilla responses commonly wrap a base64 blob between fixed-length hash fragments. Treat these as hunting leads and tune them to your own web traffic.
alert http $EXTERNAL_NET any -> $HOME_NET any ( msg:"HUNT Java default Accept on POST with octet-stream body (encrypted web shell client)"; flow:established,to_server; http.method; content:"POST"; http.header; content:"Accept|3a| text/html, image/gif, image/jpeg, *|3b| q=.2, */*|3b| q=.2|0d 0a|"; content:"Content-Type|3a| application/octet-stream"; threshold:type limit, track by_src, count 1, seconds 3600; classtype:web-application-attack; sid:1000701; rev:1; ) # Tune/validate: legitimate Java clients and API integrations also send this Accept header. # Restrict $HOME_NET destinations to servers that do not normally receive Java client traffic.
Default keys are the other half. A server stub for Behinder embeds the AES key, which for a default install is the first 16 hex characters of the MD5 hash of the password rebeyond, e45e329feb5d925b. Godzilla ships with the default key 3c6e0b8a9c15224a. Scanning web roots for either string is cheap and will find careless deployments.
Host Signals That Survive Encryption
index=web sourcetype=access_combined method=POST
| eval is_octet=if(like(content_type, "application/octet-stream"), 1, 0)
| stats count as reqs dc(clientip) as clients avg(bytes) as avg_bytes
stdev(bytes) as sd_bytes max(is_octet) as octet by uri_path
| where reqs > 50 AND clients <= 3 AND octet=1
| eval bytes_cv = if(avg_bytes>0, sd_bytes/avg_bytes, null())
| sort - reqs
# Tune/validate: field names depend on your web log parser and content-type extraction.
- Child processes remain the strongest signal. Whatever the transport, a command run through the shell appears as a web server child process.
- Scan web roots for the default key strings above and for stubs that call AES decrypt followed by a reflective class-load or eval.
- Look for long-lived, regular sessions from a single client to one script URI. Interactive use produces bursts, and automated tasking produces a rhythm.
- Inspect TLS-terminated traffic at the reverse proxy or WAF rather than at the perimeter. The inspection point decides whether you can see headers at all.
Use the Neo23x0 signature-base rules for Behinder and Godzilla, Emerging Threats open rules where available, SigmaHQ web server child-process rules, and public technical analyses of the default behaviours. Defaults are the main weakness here; assume motivated operators change them, and do not rely on header or key matching alone.
Build Detections That Fire
Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.
- Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
- Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
- 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Stay ahead of emerging threats. Get notified when we publish new intelligence reports and advisories.
Subscribe to Alerts