1. Начальные IOC и расширение поверхности
После инцидента на руках: 3 хеша загрузчика (SHA256), 2 IP C2, 1 домен. Запустили автоматизированное обогащение через PassiveTotal API + Censys + VirusTotal v3:
# IOC Enrichment Pipeline
import requests, json
from passive_total import PassiveTotal
pt = PassiveTotal(api_key=os.getenv('PT_KEY'))
# 1. Passive DNS для IP
for ip in initial_ips:
pdns = pt.dns.passive(ip)
for record in pdns['results']:
iocs.add(record['hostname'])
# 2. SSL Cert enrichment
for ip in initial_ips:
certs = pt.ssl.certificate_history(ip)
for c in certs:
# Extract CN, SAN, Issuer, Serial
iocs.update(extract_cert_iocs(c))
# 3. WHOIS + Registrar clustering
for domain in domains:
whois = pt.whois.domain(domain)
cluster_by_registrar(whois)
cluster_by_nameservers(whois)
# 4. VT Behavioral
for hash in hashes:
beh = vt.behaviour(hash)
iocs.update(extract_network_iocs(beh))Результат: 200+ IOC (IP, домены, хеши, URL, email регистраторов, SSL серийные номера).
2. Кластеризация инфраструктуры (Maltego Graph)
Построили граф связей: IP ↔ Домены ↔ SSL Сертификаты ↔ WHOIS Регистраторы ↔ Name Servers. Ключевые кластеры:
Cluster A: Historical Lazarus
IP перекрываются с инфраструктурой Lazarus Group (APT38) 2021-2023 гг. (SWIFT attacks, crypto exchange hacks). Те же ASN (CHOPA, Hostpalace), те же регистраторы (NameCheap, PDR), схожие naming patterns (cdn-*, api-*, static-*).
Cluster B: SSL Certificate Reuse
47 сертификатов — 12 уникальных серийных номеров. Один и тот же приватный ключ использован на 14 C2 серверах за 2 года. Self-signed, 10-летний validity, CN=*.example.com — типичный Lazarus pattern.