Network Forensics — PCAP بيحكي اللي حصل
Wireshark و Zeek و Suricata و NetFlow — تركّب الجلسة تاني
ليه الـ Network Forensics مفيش غنى عنه؟
SolarWinds 2020: APT29 قعدوا 9 شهور جوه. اللي فضحهم في النهاية مش endpoint logs — لأ، beacon traffic كل 12 ساعة لـ avsvmcloud.com. الـ Mandiant لاقوها في NetFlow archives قديمة. الشبكة فضحت اللي الـ EDR ما شافوش.
- بيدوّر على malicious IPs في threat intel feeds — معظم الـ C2 الحديث على Cloudflare وAWS وAzure. الـ IP نظيف، الـ behavior فاضح.
- بيتجاهل DNS — DNS هو أرخص telemetry وأقوى hunt surface. أي malware لازم يعمل lookup.
- بيفتح Wireshark على pcap حجمه 50GB ويستنّى — استخدم Zeek الأول، Wireshark بعدين على stream محدد.
- بينسى JA3/JA3S — TLS handshake fingerprint بتفضح Cobalt Strike وSliver حتى لو الـ cert مزوّر.
مصادر البيانات — متى تستخدم ماذا
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-04-30 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. هتشوف المحادثة كلها كنص.
- HTTP غير مشفّر — باسوردات، session cookies، مرفقات.
- FTP — USER/PASS صريحين. حدّد الملفات اللي اتنقلت.
- SMTP — رسايل ومرفقات base64، تقدر تطلّعهم.
- Telnet — كل keystroke. لو لقيته، ادور في كل pcap على أوامر مكتوبة.
- SMB — الملفات المنقولة (Wireshark بيطلّعهالك).
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 حادث
- Beaconing منتظم — connection كل 60s لنفس الـ domain. ده C2 كلاسيك.
- User-Agent غريب — curl/8.4 من workstation، أو python-requests.
- JA3/JA3S hashes — بصمة TLS handshake. أغلب malware ليها JA3 ثابت يفضحها.
- HTTPS Direct-to-IP — اتصال TLS من غير ما يحصل DNS lookup قبله = مشبوه.
- SMB من workstation لـ workstation — lateral movement.
- TXT records طويلة — DNS tunneling.
- Burst exfil — 5GB upload في 10 دقايق من host ما عملش كده قبل كده.
- RDP بره ساعات الشغل — أو من IP خارجي على طول.
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 — اعتبارات قانونية
- Banner / acceptable-use policy ضروري — بيقول للمستخدم إن الشبكة مراقبة. ده "consent" قانوني.
- أي capture بره الـ consent ده محتاج court order / Pen Register / Trap-and-Trace أو wiretap warrant كامل.
- Metadata (NetFlow, headers) قواعدها مختلفة عن content (PCAP body).
- وقت الشك — اسأل OGC أو الـ Legal team قبل الـ capture. ومتناقشش قرارات قانونية في chat أبداً.
ممارسات أفضل
- سجّل 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.