VulnCity

Threat Hunting با Zeek

نویسنده: یاسین عابدینی · دسته: Blue-Team · تاریخ انتشار: ۱۴۰۵/۳/۲۶

Zeek Forensic و Threat Hunting


مقدمه

در تحلیل ترافیک شبکه، شواهد دیجیتال به سه دسته اصلی تقسیم می‌شوند:

دسته توضیح مثال
Full Packet Capture (FPC) کامل‌ترین نوع شواهد — تمام ترافیک raw ذخیره می‌شود فایل‌های .pcap
Service Log لاگ‌های native سرویس‌ها access.log Apache، bind.log
Zeek Log لاگ structured و پروتکل‌محور از ترافیک شبکه http.log، dns.log، conn.log

چرا Zeek؟
FPC حجم ذخیره‌سازی بسیار بالایی نیاز دارد. Service Log فقط یک سرویس را پوشش می‌دهد. Zeek یک نمای structured و قابل جستجو از تمام پروتکل‌های عبوری از شبکه ارائه می‌دهد.


بخش اول: Forensic پروتکل‌ها


۱. DNS Forensic

فیلدهای کلیدی dns.log

فیلد توضیح
query نام دامنه درخواست شده
qtype_name نوع رکورد (A، AAAA، TXT، CNAME و ...)
query_len طول query — در DNS Tunneling حیاتی است
answers پاسخ دریافتی از سرور
TTL مدت اعتبار پاسخ
rcode_name وضعیت پاسخ (NOERROR، NXDOMAIN و ...)
id.orig_h IP کلاینت
id.resp_h IP سرور DNS

نمونه لاگ

FPC (Wireshark)

Domain Name System (response)
    Transaction ID: 0x1a2b
    Flags: 0x8180 Standard query response, No error
    Queries: www.example.com: type A, class IN
    Answers: www.example.com: type A, addr 93.184.216.34

dns.log

ts               uid                  id.orig_h      id.resp_h  query        qtype_name  rcode_name  answers          TTLs
1691097612.536   CcKqLb3VyCJ62HbzI9  192.168.1.10   8.8.8.8    example.com  A           NOERROR     93.184.216.34    3600.0

سناریو: DNS Tunneling

موقعیت: شبکه یک سازمان تحت نظر است. یک سیستم داخلی به طور مداوم DNS query ارسال می‌کند اما ترافیک مستقیم به اینترنت ندارد. تیم SOC می‌خواهد بداند آیا داده از طریق DNS به خارج می‌رود؟

مکانیسم حمله:

[سیستم آلوده]
    |
    | query: aGVsbG8gd29ybGQ=.c2server.com   ← داده رمزشده در subdomain
    ↓
[DNS Resolver سازمان]
    |
    | recursive query به سمت اینترنت
    ↓
[سرور c2server.com]  ← مهاجم داده را decode می‌کند
    |
    | پاسخ از طریق TXT record ← دستور بازگشتی
    ↓
[سیستم آلوده]

شاخص‌های مشکوک:

  • طول query بیش از ۴۰ کاراکتر
  • تعداد بالای query به یک دامنه در بازه کوتاه
  • محتوای شبیه base64 یا hex در subdomain
  • رکوردهای TXT با محتوای binary
  • TTL بسیار پایین

شناسایی با Splunk:

index=zeek sourcetype="zeek:dns"
| eval query_len = length(query)
| where query_len > 40
| stats count by query, query_len, qtype_name, id.orig_h, id.resp_h
| sort - query_len

DoH و DoT

DNS over HTTPS (DoH):
درخواست‌های DNS از طریق HTTPS رمزنگاری می‌شوند. مهاجمان از آن برای دور زدن DNS filtering سازمان استفاده می‌کنند.

index=zeek (uri="/dns-query" OR server_name IN ("dns.google", "cloudflare-dns.com", "doh.opendns.com"))
| stats count by id.orig_h, server_name, uri
| sort - count

DNS over TLS (DoT):
مشابه DoH اما روی پورت اختصاصی 853. شناسایی ساده‌تری دارد.

index=zeek id.resp_p=853
| stats count by id.orig_h, id.resp_h

۲. HTTP Forensic

فیلدهای کلیدی http.log

فیلد توضیح
method HTTP method (GET، POST، PUT و ...)
host هاست مقصد
uri مسیر درخواست
user_agent مشخصات نرم‌افزار کلاینت
status_code کد پاسخ HTTP
request_body_len حجم داده ارسالی
response_body_len حجم داده دریافتی
resp_mime_types نوع MIME فایل پاسخ
cookie اطلاعات session و احراز هویت

نمونه لاگ

http.log

ts               uid                id.orig_h      id.resp_h       method  host               uri          status_code  req_body_len  resp_body_len  user_agent                    resp_mime_types
1722750400.112   Cxk2Ls3pRq1AbT8z  192.168.1.50   185.220.101.5   POST    evil.c2server.com  /upload.php  200          524288        128            python-requests/2.28.0        application/json

سناریو: Data Exfiltration

موقعیت: تیم امنیت متوجه شده یکی از سیستم‌های داخلی ترافیک خروجی غیرمعمولی دارد. باید مشخص شود آیا داده به بیرون ارسال می‌شود؟

گام ۱: بررسی حجم کلی ترافیک خروجی

index=zeek sourcetype=zeek:http method=POST request_body_len>0
| stats sum(request_body_len) as total_sent by id.orig_h, id.resp_h
| eval total_sent_mb = round(total_sent/1024/1024, 2)
| sort - total_sent_mb
| table id.orig_h, id.resp_h, total_sent_mb

گام ۲: تحلیل HTTP Method

index=zeek sourcetype=zeek:http
| stats sum(request_body_len) as total_sent by method
| eval total_sent_mb = round(total_sent/1024/1024, 2)
| sort - total_sent_mb

متد PUT در سناریوهای exfiltration و WebDAV-based attacks قابل توجه است.

گام ۳: شناسایی User-Agent های مشکوک

User-Agent های مخرب معمولاً یا جعلی هستند، یا وجود ندارند، یا تعداد بسیار کمی در شبکه دیده می‌شوند.

index=zeek sourcetype=zeek:http
| stats count by user_agent
| where count < 5
| sort count
index=zeek sourcetype=zeek:http
| stats sum(request_body_len) as total_sent by user_agent, method
| eval total_sent_mb = round(total_sent/1024/1024, 2)
| sort - total_sent_mb

گام ۴: شناسایی MIME Type های مشکوک

index=zeek sourcetype=zeek:http
| search resp_mime_types{}="application/x-dosexec"
    OR resp_mime_types{}="application/x-msdownload"
    OR resp_mime_types{}="application/octet-stream"
    OR resp_mime_types{}="application/x-php"
| table _time, id.orig_h, id.resp_h, method, uri, resp_mime_types, response_body_len

۳. SMB Forensic

مقدمه

پروتکل SMB در اکثر محیط‌های Windows به صورت پیش‌فرض فعال است و در حملات داخلی، به‌ویژه در Lateral Movement، نقش محوری دارد.

فایل‌های لاگ SMB در Zeek

فایل محتوا
smb_cmd.log دستورات SMB مانند CREATE، READ، WRITE
smb_files.log اطلاعات دسترسی به فایل‌ها
smb_mapping.log اتصال به shared folder ها (DISK یا PIPE)
dce_rpc.log فراخوانی‌های DCE-RPC مانند SAMR، LSARPC

نکته مهم

اگر در smb_files.log مقدار فیلد data_len_req یا size برابر صفر باشد، به این معناست که فایل از طریق شبکه مستقیماً اجرا شده و روی دیسک نوشته نشده است. این الگو در حملات fileless malware بسیار رایج است.


نمونه لاگ‌ها

smb_cmd.log

ts                   uid                id.orig_h      id.resp_h      command           status
1722750303.643       CpZD5A2XLb12m0pvl  192.168.1.10   192.168.1.20   SMB2_CREATE       NT_STATUS_OK
1722750303.644       CpZD5A2XLb12m0pvl  192.168.1.10   192.168.1.20   SMB2_WRITE        NT_STATUS_OK
1722750305.014       Fa9cpR2DFkd3lBpNj  192.168.1.11   192.168.1.20   SMB2_TREE_CONNECT NT_STATUS_OK

smb_files.log

{"ts":1754284142.799,"uid":"CrmzTt","id.orig_h":"172.16.245.129","id.resp_h":"172.16.245.147","id.resp_p":445,
 "action":"SMB::FILE_OPEN","path":"\\\\172.16.245.147\\downloads","name":"payload.exe","size":0}

size: 0 — فایل از طریق شبکه اجرا شده، روی دیسک نوشته نشده است.

smb_mapping.log

{"ts":1754284124.514,"uid":"C8I2Rz","id.orig_h":"172.16.245.129","id.resp_h":"172.16.245.147","id.resp_p":445,
 "path":"\\\\172.16.245.147\\IPC$","share_type":"PIPE"}

{"ts":1754284142.798,"uid":"CrmzTt","id.orig_h":"172.16.245.129","id.resp_h":"172.16.245.147","id.resp_p":445,
 "path":"\\\\172.16.245.147\\downloads","share_type":"DISK"}

اتصال به IPC$ با share_type: PIPE برای اجرای RPC call استفاده می‌شود. این الگو در ابزارهایی مانند PsExec و Impacket بسیار رایج است.

dce_rpc.log

{"ts":1754284124.520,"uid":"C8I2Rz","id.orig_h":"172.16.245.129","id.resp_h":"172.16.245.147",
 "named_pipe":"\\PIPE\\srvsvc","endpoint":"srvsvc","operation":"NetrShareEnum"}

سناریو: Lateral Movement — جابه‌جایی مهاجم در شبکه

موقعیت: سازمانی به یکی از پرسنل خود به نام علی مشکوک شده بود که اطلاعات را به بیرون ارسال می‌کند. تصمیم گرفته شد به مدت ۸ ساعت پورت سیستم او SPAN گرفته شود و کل ترافیک capture شود. دوربین‌های مداربسته هم ضبط شده‌اند که مدل لپ‌تاپ Dell است.

گام ۱: بررسی تمام اتصالات SMB از سیستم علی

index=zeek sourcetype="zeek:smb_mapping" id.orig_h="172.16.245.129"
| table _time, id.orig_h, id.resp_h, path, share_type
| sort _time

گام ۲: بررسی عملیات RPC برای Discovery

NetrShareEnum لیست share های سیستم هدف را بازمی‌گرداند — اولین قدم در reconnaissance داخلی.

index=zeek sourcetype="zeek:dce_rpc" id.orig_h="172.16.245.129"
| table _time, id.orig_h, id.resp_h, named_pipe, endpoint, operation
| sort _time

گام ۳: ردیابی فایل‌های دسترسی‌ یافته

index=zeek sourcetype="zeek:smb_files" id.orig_h="172.16.245.129"
| table _time, id.orig_h, id.resp_h, action, path, name, size
| sort _time

گام ۴: شناسایی اجرای فایل از راه دور (fileless)

index=zeek sourcetype="zeek:smb_files" id.orig_h="172.16.245.129" action="SMB::FILE_OPEN" size=0
| table _time, id.orig_h, id.resp_h, path, name

گام ۵: ترکیب لاگ‌ها برای timeline کامل

index=zeek (sourcetype="zeek:smb_files" OR sourcetype="zeek:dce_rpc" OR sourcetype="zeek:smb_mapping")
    id.orig_h="172.16.245.129"
| eval event_type=sourcetype
| table _time, event_type, id.orig_h, id.resp_h, action, operation, path, name, size
| sort _time

نگاشت عملیات DCE-RPC به MITRE ATT&CK

عملیات RPC Endpoint تاکتیک MITRE توضیح
NetrShareEnum srvsvc Discovery لیست share های سیستم هدف
NetrWkstaGetInfo wkssvc Discovery اطلاعات workstation
OpenSCManager svcctl Execution باز کردن Service Manager
CreateService svcctl Persistence / Execution ایجاد سرویس جدید
StartService svcctl Execution اجرای سرویس
SchRpcRun ITaskSchedulerService Persistence / Execution اجرا از طریق Task Scheduler
SamrEnumUsersInDomain samr Discovery لیست کاربران دامین
LsarEnumTrustedDomains lsarpc Discovery شناسایی trust های دامین
DRSGetNCChanges drsuapi Credential Access DCSync — سرقت hash از Domain Controller

۴. Phishing Forensic

فایل‌های لاگ مرتبط

فایل محتوا
smtp.log اطلاعات ایمیل (فرستنده، گیرنده، موضوع)
smtpurl_links.log لینک‌های استخراج‌شده از متن ایمیل (نیاز به پلاگین)
files.log فایل‌های منتقل‌شده روی شبکه با hash و MIME type
http.log درخواست‌های HTTP برای تأیید کلیک کاربر
conn.log اطلاعات پایه اتصال برای ردیابی با UID

نمونه لاگ‌ها

smtp.log

{"uid":"CPOKWC4c50Oq3eHR2c","id.orig_h":"192.168.1.170","id.resp_h":"188.40.30.30","id.resp_p":25,
 "mailfrom":"user1@nooranet.com","rcptto":["user2@nooranet.com"],"subject":"Fwd: visa promotion",
 "fuids":["FASzhBqT8OVafVyLa"]}

smtpurl_links.log

{"uid":"CPOKWC4c50Oq3eHR2c","host":"apply.uk.gov.student.applily.io",
 "url":"http://apply.uk.gov.student.applily.io/nitol.exe"}

files.log

{"fuid":"FhXgKZHzBLS6VmK95","uid":"CsSvT24rVVHfYR0hHa","mime_type":"application/x-dosexec",
 "filename":"nitol.exe","seen_bytes":1196032,
 "md5":"62c20b2be38c375d179ea9689c2dd98c","sha1":"3d5a2781bfbba48b19a49f11f3254229a684bba0"}

http.log (تأیید کلیک کاربر)

{"uid":"CY3av9Q9kTJqhDGJj","id.orig_h":"192.168.1.170","method":"GET",
 "host":"apply.uk.gov.student.applily.io","uri":"/nitol.exe",
 "status_code":200,"response_body_len":1196032,"resp_mime_types":["application/x-dosexec"]}

سناریو ۱: لینک مخرب در ایمیل

موقعیت: گزارش شده یک کاربر ایمیل مشکوکی دریافت کرده است. باید مشخص شود آیا روی لینک کلیک کرده؟

گام ۱: شناسایی ارتباطات SMTP در conn.log

index=zeek sourcetype="zeek:conn" id.resp_p=25
| table _time, uid, id.orig_h, id.resp_h, orig_bytes, resp_bytes
| sort - _time

گام ۲: ردیابی UID در smtp.log

index=zeek sourcetype="zeek:smtp" uid="CPOKWC4c50Oq3eHR2c"
| table _time, mailfrom, rcptto, subject, fuids

گام ۳: استخراج لینک از smtpurl_links.log

index=zeek sourcetype="zeek:smtpurl_links" uid="CPOKWC4c50Oq3eHR2c"
| table _time, host, url

دامنه apply.uk.gov.student.applily.io با subdomain سازی تلاش می‌کند یک سایت دولتی بریتانیا به نظر برسد اما domain اصلی applily.io است. این تکنیک را Subdomain Spoofing می‌نامند.

گام ۴: تأیید کلیک کاربر در http.log

index=zeek sourcetype="zeek:http" host="apply.uk.gov.student.applily.io"
| table _time, id.orig_h, method, uri, status_code, response_body_len, resp_mime_types

وجود رکورد GET با resp_mime_types: application/x-dosexec تأیید می‌کند که کاربر فایل اجرایی را دانلود کرده است.


سناریو ۲: ضمیمه مخرب در ایمیل

موقعیت: کاربری ایمیلی با پیوست دریافت کرده. باید هویت فایل و آلودگی احتمالی بررسی شود.

گام ۱: شناسایی SMTP با حجم بالا

index=zeek sourcetype="zeek:conn" id.resp_p=25
| where orig_bytes > 100000
| table _time, uid, id.orig_h, id.resp_h, orig_bytes
| sort - orig_bytes

حجم بالای orig_bytes (بیش از ۱ مگابایت) نشانه وجود attachment است.

گام ۲: ردیابی UID در smtp.log

index=zeek sourcetype="zeek:smtp" uid="CsSvT24rVVHfYR0hHa"
| table mailfrom, rcptto, subject, fuids

گام ۳: استخراج اطلاعات فایل از files.log

index=zeek sourcetype="zeek:files" uid="CsSvT24rVVHfYR0hHa"
| table fuid, filename, mime_type, seen_bytes, md5, sha1

گام ۴: بررسی Hash با CTI

MD5 و SHA1 استخراج‌شده را در پلتفرم‌های زیر جستجو کنید:

  • VirusTotal: بررسی آنتی‌ویروس‌های متعدد
  • MalwareBazaar: پایگاه داده نمونه‌های بدافزار
  • OTX AlienVault: بررسی IOC در threat intelligence

۵. C2 در ترافیک رمزنگاری‌شده (TLS)

مقدمه

زمانی که ارتباط C2 از طریق TLS رمزنگاری می‌شود، محتوای ترافیک قابل خواندن نیست. اما در TLS Handshake، بسته‌های Client Hello و Server Hello رمزنگاری نمی‌شوند و حاوی اطلاعات ارزشمندی هستند.

فیلدهای TLS Handshake قابل استخراج

Client Hello:
├── TLS Version
├── Cipher Suites (لیست الگوریتم‌های رمزنگاری پیشنهادی)
├── Extensions (SNI، Elliptic Curves، Compression Methods و ...)
└── → JA3 Hash (fingerprint کلاینت)

Server Hello:
├── TLS Version انتخابی
├── Cipher Suite انتخابی
├── Extensions
└── → JA3S Hash (fingerprint سرور)

JA3 Fingerprinting

JA3 یک fingerprint منحصربه‌فرد از فیلدهای Client Hello است. این hash برای هر نرم‌افزار یا کتابخانه‌ای که TLS را پیاده‌سازی می‌کند متفاوت است.

چرا JA3 در شناسایی C2 مفید است؟

بدافزارهایی که از TLS برای ارتباط C2 استفاده می‌کنند، JA3 hash ثابتی دارند. اگر یک JA3 hash در شبکه بسیار بیشتر از سایرین دیده شود، یا در پایگاه داده JA3 های مخرب شناخته‌شده باشد، نشانه‌ی فعالیت C2 است.

نکته: JA4 نسخه جدیدتر JA3 است که مقاوم‌تر و دقیق‌تر است اما مفهوم پایه مشابه است.


نمونه لاگ

ssl.log

ts               uid                id.orig_h      id.resp_h       server_name  version  cipher                  ja3                               ja3s
1722750500.001   CxTls1Rq5Ab9z2Lk  192.168.1.50   185.220.101.5   -            TLSv12   TLS_AES_256_GCM_SHA384  51c64c77e60f3980eea90869b68c58a8  ec74a5c51106f0419184d0dd08fb05bc
1722750501.002   CyTls2Mw6Bc0a3Np  192.168.1.51   185.220.101.5   -            TLSv12   TLS_AES_256_GCM_SHA384  51c64c77e60f3980eea90869b68c58a8  ec74a5c51106f0419184d0dd08fb05bc
1722750502.003   CzTls3Nv7Cd1b4Oq  192.168.1.52   185.220.101.5   -            TLSv12   TLS_AES_256_GCM_SHA384  51c64c77e60f3980eea90869b68c58a8  ec74a5c51106f0419184d0dd08fb05bc

یک JA3 hash یکسان از سه IP داخلی مختلف به یک سرور خارجی — الگوی کلاسیک C2 beaconing.


سناریو: شناسایی C2 در ترافیک TLS

موقعیت: ترافیک رمزنگاری‌شده غیرمعمولی از چند سیستم داخلی به یک IP خارجی مشاهده شده. محتوای ترافیک قابل خواندن نیست. باید با fingerprinting TLS فعالیت C2 شناسایی شود.

گام ۱: شناسایی JA3 های پرتکرار (Splunk)

index=zeek sourcetype="zeek:ssl"
| stats count by ja3, id.orig_h, id.resp_h, server_name
| sort - count
| where count > 10

گام ۲: شناسایی ارتباطات بدون SNI

ابزارهای C2 معمولاً SNI ندارند (فیلد server_name خالی است).

index=zeek sourcetype="zeek:ssl" server_name="-" OR server_name=""
| stats count by ja3, id.orig_h, id.resp_h
| sort - count

گام ۳: بررسی JA3 در پایگاه داده‌های Threat Intelligence

index=zeek sourcetype="zeek:ssl"
| stats dc(id.orig_h) as unique_clients, count by ja3, id.resp_h
| where unique_clients > 3
| sort - unique_clients

گام ۴: شناسایی با ELK (Kibana)

GET zeek-*/_search
{
  "aggs": {
    "ja3_hashes": {
      "terms": { "field": "ja3.keyword", "size": 20 },
      "aggs": {
        "clients": { "cardinality": { "field": "id_orig_h.keyword" } }
      }
    }
  }
}

بخش دوم: پلاگین‌های Zeek


BZAR (Bro/Zeek ATT&CK-based Analytics and Reporting)

چیست؟

BZAR یک پلاگین Zeek است که فعالیت‌های مرتبط با SMB و DCE-RPC را به صورت خودکار تحلیل می‌کند و آن‌ها را به تاکتیک‌ها و تکنیک‌های MITRE ATT&CK نگاشت می‌دهد. خروجی آن در notice.log ثبت می‌شود.

چه کاری انجام می‌دهد؟

  • نظارت بر dce_rpc.log در real-time
  • شناسایی عملیات‌های حساس مانند CreateService، DRSGetNCChanges، SchRpcRun
  • تولید alert در notice.log با برچسب MITRE ATT&CK
  • شناسایی الگوهایی مانند pass-the-hash، DCSync، remote execution

نصب

# نصب از طریق Zeek Package Manager
zkg install bzar

# تأیید نصب
zkg list | grep bzar

# فعال‌سازی در Zeek
zeekctl deploy

نمونه خروجی در notice.log

ts               uid                note                                  msg
1722750303.643   CpZD5A2XLb12m0pvl  BZAR::Lateral_Movement_and_Execution  ATT&CK T1021.002 Remote Services: SMB - CreateService detected from 172.16.245.129 to 172.16.245.147
1722750305.014   Fa9cpR2DFkd3lBpNj  BZAR::Credential_Access_DCSync        ATT&CK T1003.006 DCSync: DRSGetNCChanges from 172.16.245.130 to DC 172.16.245.1

smtp-url-analysis

چیست؟

پلاگینی برای استخراج و تحلیل لینک‌های موجود در ایمیل‌های SMTP و ثبت آن‌ها در smtpurl_links.log.

نصب

zkg install smtp-url-analysis
zeekctl deploy

Zeek Intelligence Framework

چیست؟

یک framework داخلی Zeek برای تطبیق خودکار ترافیک شبکه با IOC های Threat Intelligence و ثبت موارد مطابقت در intel.log.

نصب و راه‌اندازی

# نصب فیدهای آماده
zkg install zeek-intelligence-feeds
# در فایل local.zeek
@load policy/frameworks/intel/seen
@load policy/frameworks/intel/do_notice

redef Intel::read_files += {
    "/opt/zeek/share/zeek/site/intel/indicators.txt"
};

فرمت فایل IOC

#fields    indicator    indicator_type    meta.source    meta.desc
185.220.101.5    Intel::ADDR    ThreatFox    Known C2 Server
evil.c2server.com    Intel::DOMAIN    MISP    Malware distribution
62c20b2be38c375d179ea9689c2dd98c    Intel::FILE_HASH    VirusTotal    Nitol botnet

نمونه intel.log

{"ts":1722750500.001,"uid":"CxTls1Rq5Ab9z2Lk","id.orig_h":"192.168.1.50","id.resp_h":"185.220.101.5",
 "seen.indicator":"185.220.101.5","seen.indicator_type":"Intel::ADDR",
 "matched":["Intel::ADDR"],"sources":["ThreatFox"]}

جستجو در Splunk

index=zeek sourcetype="zeek:intel"
| table _time, id.orig_h, id.resp_h, seen.indicator, seen.indicator_type, sources
| sort - _time

جمع‌بندی: زنجیره تحلیل با Zeek

ترافیک شبکه (SPAN / TAP)
        |
        ↓
      [Zeek]
        |
   ┌────┴─────────────────────────────────┐
   │           فایل‌های لاگ               │
   ├─────────────────────────────────────┤
   │ conn.log   dns.log   http.log        │
   │ ssl.log    smtp.log  files.log       │
   │ smb_*.log  dce_rpc.log  intel.log   │
   └────────────────────────────────────┘
        |
   ┌────┴──────────────────┐
   │      پلاگین‌ها         │
   ├──────────────────────┤
   │ BZAR (SMB/RPC → ATT&CK) │
   │ smtp-url-analysis    │
   │ Intel Framework      │
   └──────────────────────┘
        |
        ↓
   [SIEM: Splunk / ELK]
        |
        ↓
   Threat Hunting / Forensic