اعرف اللي قصادك. احمي أرضك.
الفرق الزرقاء — الدفاع

Network Forensics — PCAP بيحكي اللي حصل

Wireshark و Zeek و Suricata و NetFlow — تركّب الجلسة تاني

المستوى
خبير
المدة
90m
الترتيب
الدرس 63 من 85
PCAPWiresharkZeekSuricataNetFlow

ليه الـ Network Forensics مفيش غنى عنه؟

تشبيه يقرّب الفكرة
المهاجم دخل، نضّف logs الـ endpoint، شال ملفاته، قفل الـ EDR. - يبقى خلاص خلاص، ما حدش هيعرف عمل ايه؟؟ يا نجم الجيل.. كنت مستنيك تسأل. الشبكة لو بتسجّل اللي بيمر، مش هيقدر يلغي اللي قاله في السلك. زي الـ ECG في غرفة العمليات — بيسجّل كل دقة قلب لحظة بلحظة. الجراح ممكن ينسى، الممرض ممكن يغلط، الشريط مش بيكدب.The network never lies.

SolarWinds 2020: APT29 قعدوا 9 شهور جوه. اللي فضحهم في النهاية مش endpoint logs — لأ، beacon traffic كل 12 ساعة لـ avsvmcloud.com. الـ Mandiant لاقوها في NetFlow archives قديمة. الشبكة فضحت اللي الـ EDR ما شافوش.

مصادر البيانات — متى تستخدم ماذا

Full Packet Capture (PCAP)
كل byte. أعلى دقة. حجم ضخم (TB/يوم). عادة بيتخزّن 7–30 يوم على المحيط.
Zeek logs (Bro)
Metadata غنية: connection logs, DNS, HTTP, SSL, files. ~1% من حجم PCAP. تحفة في الـ hunting الطويل.
NetFlow / IPFIX / sFlow
Source/Dest IP, Port, Bytes, Packets. مفيش content. أصغر بكتير. الأحسن للـ baselining الطويل.
Suricata / Snort alerts
IDS — تنبيهات على signatures معروفة. بيكمّل PCAP، مش بيحلّ محله.
Firewall logs
Allow/Deny. موجود دايماً، أساسي للـ audit.
DNS / DHCP / Proxy logs
ماتقللش من قيمتها. DNS + DHCP lease بيقولوك مين كان IP X الساعة كذا.

Wireshark — أساسيات حقيقية

افتح الـ pcap. أول حاجة هتعملها:

  1. Statistics → Conversations — مين اتكلّم مع مين، وكام بايت؟
  2. Statistics → Protocol Hierarchy — توزيع البروتوكولات. فيه حاجة شاذة؟
  3. Statistics → Endpoints — قايمة كل الأجهزة الموجودة.
  4. File → Export Objects — طلّع الملفات من HTTP/SMB/FTP.
text
# أهم 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 على سطر الأوامر

$ # قائمة كل HTTP requests
$ tshark -r capture.pcap -Y 'http.request' -T fields -e ip.src -e http.host -e http.request.uri
$ # استخراج كل DNS queries
$ tshark -r capture.pcap -Y 'dns.qry.name' -T fields -e dns.qry.name | sort -u
$ # جميع SNI من TLS
$ tshark -r capture.pcap -Y 'tls.handshake.type==1' -T fields -e tls.handshake.extensions_server_name
$ # top talkers
$ tshark -r capture.pcap -q -z conv,ip | head -20
$ # استخراج files من HTTP
$ tshark -r capture.pcap --export-objects http,/tmp/extract
$ ls /tmp/extract/

Zeek — أداة المحقّقين الجدّية

Zeek بيحوّل الـ traffic لـ logs منظمة. ملفات tab-separated، سهلة جداً مع grep.

bash
# تشغيل 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 name

Suricata — IDS/IPS قوي مفتوح المصدر

Suricata بيطبّق rules على ترافيك حي ويطلّع تنبيهات. صيغة القواعد قريبة جداً من Snort.

text
# مثال قاعدة — كشف 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 عادة بصمته ثابتة.

bash
# 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.

bash
# استيراد 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 C2

Federal context — اعتبارات قانونية

ممارسات أفضل

  1. سجّل JA3/JA3S على كل egress.
  2. Zeek على mirror port من core switch ← Splunk/ELK.
  3. RITA يومي على آخر 24 ساعة.
  4. Suricata بـ ETPro rules + قواعد خاصة بالمؤسسة.
  5. Full PCAP على الـ edge مع rotation 7–14 يوم (على حسب الـ storage عندك).
  6. NetFlow طويل المدى (90+ يوم) للـ retroactive hunts.
  7. وقّف TLS inspection لو القانون مش سامح، بس سجّل Metadata + JA3.
خلّصت الدرس؟

علّمه علشان تفضل عارف انت فين على السكة.