
C2 서버 핑거프린터 — Cobalt Strike, Sliver, Mythic, Havoc, Brute Ratel
비콘 뒤에 숨은 C2 서버를 핑거프린팅합니다. 네트워크 텔레메트리를 입력하면 신뢰도 점수와 일치한 정확한 지표와 함께 명령제어 프레임워크 — Cobalt Strike, Sliver, Mythic, Havoc, Brute Ratel 외 11개 이상 — 의 이름을 식별합니다.
블루팀 / 방어용: 텔레메트리에서 알려진 C2 인프라를 탐지합니다. 기본적으로 수동적이며, 능동 프로브는 선택 사항이고 권한 부여가 필요합니다.
pip install cognis-c2detect
c2detect scan . # → prioritized C2 findings in seconds, offline
실제로 재현 가능한 출력 — 캡처된 관찰 결과를 지정하면 프레임워크를 핑거프린팅합니다:
$ c2detect scan demos/01-cobalt-strike-network/observations.json
host: 203.0.113.10
jarm=07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 port=443
CONF SEV FAMILY INDICATORS
-----------------------------------------
48 critical Cobalt Strike jarm, port
TOP: Cobalt Strike (48% / critical)
- jarm [+42] matched '07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1'
- port [+6] matched '443'
c2detect: 3 C2 indicator(s) across 3 observation(s)
JA4/JARM/인증서/URI/포트 지표를 번들된 시그니처 DB와 대조하여 융합하며, 동일한 시그니처에서 바로 배포 가능한 Sigma 및 Suricata 규칙을 생성(c2detect rules)할 수 있어 탐지 결과가 곧바로 SIEM/IDS로 들어갑니다.
| 위협 인텔 IP 목록 | JARM 단독 | c2detect | |
|---|---|---|---|
| C2 프레임워크를 특정 (단순 "악성 IP"가 아님) | ✗ | 부분적 | ✅ |
| JA4 + JARM + 인증서 + URI + 포트 융합 | ✗ | ✗ | ✅ |
| 신뢰도 점수 + 매칭된 지표 | ✗ | ✗ | ✅ |
| Sigma / Suricata 규칙 생성 | ✗ | ✗ | ✅ |
| 캠페인 상관관계 (공유 인프라) | ✗ | ✗ | ✅ |
| 오프라인 실행, 런타임 의존성 제로 | 경우에 따라 다름 | ✓ | ✅ |
$ c2detect-emit --help
usage: c2detect [-h] [--version]
{scan,match,db,rules,feeds,correlate,probe,self-check,mcp} ...
Fingerprint-match TLS/network observations against a bundled database of known
C2 frameworks (JA4/JARM/cert/URI/port indicators). Defensive triage only.
positional arguments:
{scan,match,db,rules,feeds,correlate,probe,self-check,mcp}
scan Scan JSON observation files / telemetry text / dirs /
stdin.
match Match explicit indicators (--ja4/--jarm/--port/...).
db List the bundled C2 signature database.
rules Generate Sigma / Suricata detection rules from the
signature DB.
feeds List/update/get the live abuse.ch Feodo-C2 + SSLBL
threat-intel feeds c2detect consumes (keyless; cached;
offline re-serve).
correlate Cluster many observations into shared-infrastructure
campaigns (same JARM/JA4S/cert across hosts = one
operator's estate).
probe AUTHORIZED ACTIVE: TLS-fingerprint a consented
host:port in scope (default OFF; needs --authorized +
--target-allowlist + rate limit).
self-check Scan bundled demo scenarios and report C2 detection
coverage.
mcp Run the MCP server (stdio JSON-RPC).
options:
-h, --help show this help message and exit
--version show program's version number and exit
$ c2detect-emit self-check
c2detect self-check — bundled scenario coverage
================================================
[DETECT ] 01-basic Cobalt Strike
[DETECT ] 01-cobalt-strike-network Cobalt Strike
[DETECT ] 02-deep Cobalt Strike
[DETECT ] 02-mixed-frameworks Brute Ratel C4, Mythic, Sliver
[DETECT ] 03-behavioral Cobalt Strike
[CLEAN ] 03-benign-baseline (quiet)
[DETECT ] 04-sliver-mtls Cobalt Strike, Sliver
[DETECT ] 05-havoc-demon Havoc
[DETECT ] 06-mythic-agent Mythic
[DETECT ] 07-brute-ratel Brute Ratel C4
[DETECT ] 08-adaptixc2-teamserver AdaptixC2
[DETECT ] 09-metasploit-meterpreter Metasploit / Meterpreter
[DETECT ] 10-empire-windows PowerShell Empire
[DETECT ] 11-multi-framework-incident AdaptixC2, Cobalt Strike, Havoc, Sliver
[DETECT ] 12-threat-hunt-jarm-sweep Cobalt Strike, Sliver
[feeds/corr] 13-threat-intel-feeds (non-signature demo)
[DETECT ] 14-campaign-correlation Cobalt Strike, Metasploit / Meterpreter
------------------------------------------------
malicious detected : 14/14
benign clean : 1/1
frameworks exercised: 8/21 in DB
status : HEALTHY
$ c2detect-emit db
FAMILY SEV INDICATORS
------------------------------------------------------
Brute Ratel C4 critical ja3:1, jarm:1, uri:3, cert_quirk:2, port:2
Cobalt Strike critical ja4s:1, ja3:1, ja3s:1, jarm:1, uri:5, uri_regex:1, http_banner:2, user_agent:1, cert_quirk:3, beacon:1, port:3
Metasploit / Meterpreter critical ja3:1, jarm:1, uri:3, cert_quirk:2, port:3
AdaptixC2 high uri:3, http_banner:4, cert_quirk:1, port:4
Covenant high jarm:1, uri:3, http_banner:1, cert_quirk:1, port:3
Godzilla WebShell high uri:3, uri_regex:1, cert_quirk:1, port:3
Havoc high jarm:1, uri:3, http_banner:1, port:3
Mythic high jarm:1, uri:2, http_banner:1, port:3
PoshC2 high uri:4, cert_quirk:2, port:2
PowerShell Empire high ja3:1, uri:3, http_banner:1, port:3
Pupy RAT high ja3:1, uri:2, cert_quirk:2, port:3
SILENTTRINITY high uri:3, http_banner:1, beacon:1, port:3
Sliver high ja4:1, ja4x:1, jarm:1, uri:5, cert_quirk:2, beacon:1, port:3
Caldera (MITRE) medium uri:4, http_banner:1, beacon:1, port:5
Deimos C2 medium uri:3, http_banner:1, port:2
Koadic medium uri:3, user_agent:1, port:3
Merlin medium uri:2, http_banner:1, cert_quirk:1, port:1
NimPlant medium uri:3, http_banner:1, user_agent:1, beacon:1, port:2
Villain medium uri:3, http_banner:2, user_agent:1, port:3
Generic Beaconing Heuristic low beacon:1, port:6
Generic Self-Signed C2 Heuristic low cert_quirk:4, port:5
21 families in bundled signature DB.
위 블록들은 실제
c2detect출력입니다 — 클론에서 재현해 보세요.
c2detect는 방어적 C2 인프라 트리아지 도구입니다: 텔레메트리/관측 기록을 번들된 시그니처 DB와 대조하여 스캔하고, 비커닝, 의심스러운 TLS 지문, 스테이징 URI를 플래그합니다. 기본적으로 수동적입니다 — scan/match/correlate/db/rules는 제공한 입력을 읽기만 하며 네트워크 호출을 하지 않습니다 (선택적 --feeds는 공개 abuse.ch 인텔 피드만 가져오며, 캐시에서 완전히 오프라인으로 실행할 수 있습니다). 별도의 옵트인 및 권한 부여가 필요한 능동 프로브(c2detect probe)는 평가 권한이 있는 동의된 호스트의 TLS 지문을 채취할 수 있습니다 — 수동 vs. 능동을 참조하세요.