Network Forensics — PCAP بيحكي اللي حصل
Wireshark و Zeek و Suricata و NetFlow — تركّب الجلسة تاني
- المستوى
- خبير
- المدة
- 90m
- الترتيب
- الدرس 63 من 85
ليه الـ Network Forensics مفيش غنى عنه؟
SolarWinds 2020: APT29 قعدوا 9 شهور جوه. اللي فضحهم في النهاية مش endpoint logs — لأ، beacon traffic كل 12 ساعة لـ avsvmcloud.com. الـ Mandiant لاقوها في NetFlow archives قديمة. الشبكة فضحت اللي الـ EDR ما شافوش.
مصادر البيانات — متى تستخدم ماذا
Wireshark — أساسيات حقيقية
افتح الـ pcap. أول حاجة هتعملها:
- Statistics → Conversations — مين اتكلّم مع مين، وكام بايت؟
- Statistics → Protocol Hierarchy — توزيع البروتوكولات. فيه حاجة شاذة؟
- Statistics → Endpoints — قايمة كل الأجهزة الموجودة.
- File → Export Objects — طلّع الملفات من HTTP/SMB/FTP.
# أهم display filters في Wireshark
ip.addr == 192.168.1.10 # كل ما يخص IP
tcp.port == 445 # SMB
http.request # طلبات HTTP فقط
http contains "password" # نص في HTTP
dns.qry.name contains "evil" # DNS lookups
tls.handshake.extensions_server_name # SNI
frame.time >= "2026-10-28 14:00:00" # نطاق زمني
tcp.analysis.flags # مؤشرات شذوذ TCP
tcp.stream eq 5 # كل packets في session معينة
ip.geoip.country != "US" # خارج الولايات (يحتاج GeoIP plugin)استعادة محادثة TCP — أهم تقنية
كل اتصال TCP ليه stream برقم. في Wireshark: Right-click → Follow → TCP Stream. هتشوف المحادثة كلها كنص.
tshark — Wireshark على سطر الأوامر
Zeek — أداة المحقّقين الجدّية
Zeek بيحوّل الـ traffic لـ logs منظمة. ملفات tab-separated، سهلة جداً مع grep.
# تشغيل Zeek على pcap
zeek -r capture.pcap
# يولّد: conn.log, dns.log, http.log, ssl.log, files.log, weird.log, notice.log
# zeek-cut يفلتر الأعمدة
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p service duration orig_bytes resp_bytes
cat dns.log | zeek-cut id.orig_h query qtype_name answers | sort -u
cat http.log | zeek-cut id.orig_h host uri user_agent
# files.log — كل ملف عبر الشبكة مع hash
cat files.log | zeek-cut tx_hosts rx_hosts mime_type filename md5 sha1
# weird.log — شذوذات بروتوكولية
cat weird.log | zeek-cut id.orig_h nameSuricata — IDS/IPS قوي مفتوح المصدر
Suricata بيطبّق rules على ترافيك حي ويطلّع تنبيهات. صيغة القواعد قريبة جداً من Snort.
# مثال قاعدة — كشف Cobalt Strike default certificate
alert tls any any -> any any (msg:"Cobalt Strike default cert"; \
tls.cert_subject; content:"CN=major"; \
classtype:trojan-activity; sid:2030001; rev:1;)
# قاعدة كشف DNS query لـ TLD مشبوه
alert dns any any -> any any (msg:"DNS query to .top TLD"; \
dns.query; content:".top"; endswith; \
classtype:bad-unknown; sid:2030002; rev:1;)قواعد جاهزة: Emerging Threats Open (مجاني)، ETPro (مدفوع)، SELKS (Suricata + ELK في باكدج واحد).
مؤشّرات شائعة في pcap حادث
JA3 / JA3S — بصمة TLS
JA3 = MD5 لترتيب TLS Client Hello extensions. JA3S = نفس الفكرة بس على الـ Server Hello. كل client/server ليه بصمة، والـ malware عادة بصمته ثابتة.
# tshark استخراج JA3 (يحتاج plugin)
tshark -r capture.pcap -T fields -e tls.handshake.ja3 -e tls.handshake.ja3_full \
-Y 'tls.handshake.type==1' | sort -u
# أو من Zeek مع plugin ja3
cat ssl.log | zeek-cut id.orig_h server_name ja3 ja3s
# ابحث عن JA3 في abuse.ch SSL Blacklist
curl -s "https://sslbl.abuse.ch/api/v1/?ja3_hash=72a589da586844d7f0818ce684948eea"RITA — كشف beaconing تلقائياً
RITA (من Black Hills Infosec، مفتوح المصدر) بياخد Zeek logs ويحلّل الـ frequency والـ jitter ليطلّع الـ beacons.
# استيراد Zeek logs
rita import /opt/zeek/logs/* mydataset
# عرض قائمة beacons
rita show-beacons mydataset
# Output:
# Score Source IP Destination IP Connections Avg Bytes Intvl
# 0.978 10.0.0.5 185.x.x.x 286 612 60s
# 0.945 10.0.0.12 evil.com 179 512 120s
# طويل وفعّال جداً ضد Cobalt Strike, Sliver, custom C2Federal context — اعتبارات قانونية
ممارسات أفضل
- سجّل JA3/JA3S على كل egress.
- Zeek على mirror port من core switch ← Splunk/ELK.
- RITA يومي على آخر 24 ساعة.
- Suricata بـ ETPro rules + قواعد خاصة بالمؤسسة.
- Full PCAP على الـ edge مع rotation 7–14 يوم (على حسب الـ storage عندك).
- NetFlow طويل المدى (90+ يوم) للـ retroactive hunts.
- وقّف TLS inspection لو القانون مش سامح، بس سجّل Metadata + JA3.
علّمه علشان تفضل عارف انت فين على السكة.