ب) کلاهبرداری از طریق کد شناسایی سامانه نام دامنه ( DNS ID Spoofing )
بر اساس آنچه در مطلب پیشین گفته شد، کامپیوترA برای ارتباط با یک سایت، باید آیپی سایت مربوطه را داشته باشد. اما از آنجا که در اغلب موارد کامپیوتر A فقط نام دامنه سایت مورد نظر را میداند لذا برای بدست آوردن آپپی آن ،ابتدا به یک DNS Server متصل می گردد. چنانچه این DNS Server ( در ادامه با نام سرور شماره یک از آن یاد خواهیم کرد ) اطلاعات مربوط به آیپی سایت مورد نظر را نداشته باشد باید از یک DNS Server دیگر ( در ادامه با نام سرور شماره دو از آن یاد خواهیم کرد ) که دارای اطلاعات سایت مورد نظر است ، آیپی سایت را تقاضا کند.
در این حالت کامپیوترA باید یک تقاضا به سرور شماره یک ارسال کند اما پیش از آن (همانند یک نامه اداری) یک کد شناسایی منحصربفرد (کد رهگیری) به در خواست خود اختصاص داده سپس آن را برای سرور شماره یک ارسال میکند. سرور شماره یک نیز در پاسخ آیپی سایت مورد نظر را به همراه کد شناسایی درخواست ، به کامپیوترA باز میگرداند. کامپیوترA با دریافت پاسخ و بررسی کد شناسایی متوجه میشود پاسخ کدامیک از تقاضاها را دریافت کرده است.
آیا این روش ایمن است؟ نه کاملا! بدین معنا که هکرها میتوانند تقاضای ارسال شده را در بین راه شنود کرده ودر نتیجه یک پاسخ نادرست همراه با شماره درخواست اصلی برای کامپیوترA ارسال کنند.
توجه به این نکته ضروری است که تقاضای کامپیوترA به هر حال به سرور شماره یک می رسد و هکرها باید مانع رسیدن پاسخ سرور یک به کامپیوترA شوند درغیر اینصورت این مسئله برای مسئولان شبکه به عنوان سیگنالی مبنی بر حمله به شبکه تلقی خواهد شد. چرا که هکر برای شنود پکیجهای داده و همچنین پینگ سریع کامپیوترA باید بر روی یک شبکه مشترک با سرور یک و کامپیوترA قرارداشته باشد.

همانطور که در تصویر فوق نمایش داده شده است هکرها در این روش DNS SERVER را آلوده نمی کنند بلکه فقط به یک استفاده کننده حمله میکنند.
ج ) حملاتی دقیقتر بر اساس پارادوکس تاریخ تولد
همانطور که در روش (ب) توضیح داده شد هکرها برای پیدا کردن کد شناسایی یک تقاضا مجبور به شنود اطلاعات هستند و برای این کار نیز باید بر روی یک شبکه مشترک بین استفاده کننده و DNS SERVER قرار داشته باشند. برای حل این مشکل آنها با ترکیب روش الف و ب ، روش جدیدی برای نفوذ خود ایجاد میکنند یعنی آلوده کردن کش DNS SERVER به کمک ID درخواست داده شده بدون شنود شبکه و با استفاده از االگوریتم پارادوکس تاریخ تولد.
اجازه بدید در ابتدا نگاهی به مفهموم عبارت ” پارادوکس تاریخ تولد ” بیاندازیم.
فرض کنید در یک میهمانی شرکت کردهاید. شما از شخص دیگری که در همان میهمانی حضور دارد تاریخ تولدش را میپرسید احتمال آنکه تاریخ تولد شما با تاریخ تولد این فرد همزمان نباشد ۳۶۴/۳۶۵ و یا به عبارت دیگر ۰/۹۹۷ است بنابراین احتمال آنکه تاریخ تولد هر دوی شما یکی باشد ۰/۹۹۷-۱ میباشد یعنی ۰/۰۰۳
حال اگر شما از شخص دیگری در همان میهمانی تاریخ تولدش را بپرسید احتمال آنکه هر سه شما تاریخ تولد یکسانی نداشته باشید ۰/۹۹۲=(۳۶۴/۳۶۵)*(۳۶۳/۳۶۵) خواهد بود و احتمال یکسان بودن تاریخ تولد برای دو نفر از شما ۰/۰۰۸=۰/۹۹۲-۱ میباشد.
چنانچه شما روش فوق را ادامه دهید تا جائیکه تعداد شرکت کنندگان در میهمانی به ۲۳ نفر برسد آنگاه احتمال آنکه تاریخ تولد شما با فرد دیگری درهمان میهمانی یکسان باشد ۵۰ درصد خواهد بود.
شما میتوانید با اجرای کد زیر احتمال یکسان بودن تاریخ تولد دو نفر را بر اساس تعداد شرکت کنندگان محاسبه کنید
#define POSSIBILITIES 365.0
void main (void)
{
float chances;
int i, j;
for (i = 1; i < 100; i++)
{
for (j = 1, chances = 1; j < i; j++)
chances *= (float)((POSSIBILITIES - j) / POSSIBILITIES);
;printf("For %d people, chances are %f\n", i, 1-chances)
}
}
در جدول زیر خروجی کد فوق را میتوانید مشاهده کنید.
| People | 2 | 9 | 16 | 23 | 30 | 37 | 44 | 65 | 79 |
| Chances | 0.0027 | 0.0946 | 0.2836 | 0.5073 | 0.7063 | 0.8487 | 0.9329 | 0.9977 | 0.9999 |
حال بر میگردیم به موضوع اصلی، همانطور که در روش (ب) توضیح داده شد هکرها برای پیدا کردن کد شناسایی یک تقاضا مجبور به شنود اطلاعات هستند حال این پرسش مطرح میگردد که آیا راه دیگری برای بدست آوردن این کد شناسایی وجود دارد؟ آیا میتوان این کد شناسایی را حدس زد ؟
پاسخ : بله
مراحل کار:
هکر(ها) تقاضاهای بیشماری برای دریافت آپپی سایت www.cnn.com بهDNS SERVER شماره یک ( سرور قربانی ) ارسال میکنند. DNS SERVER شماره یک اطلاعات مربوط به آی پی سایت www.cnn.com را ندارد به ازای هر تقاضای رسیده یک تقاضای جدید ( با یک کد شناسایی مشخص برای هر یک ) بهDNS Server شماره دو که اطلاعات مربوطه را دارد میفرستد هکرها بلافاصله شروع به ارسال پاسخهای آلوده به سرور شماره یک میکنند.


هکرها نمیدانند DNS SERVER شماره یک از چه کد شناسایی برای یک درخواست استفاده می کند بنابراین تعداد زیادی درخواست به آن ارسال کرده تا با بالا رفتن تعداد درخواستها احتمال یکسال بودن کد شناسایی یکی از پاسخهای آلوده با کد شناسایی یکی از درخواستهای سرور شماره یک به سرور شماره دو افزایش یابد.
با توجه به آنکه کد شناسایی در دو بایت ذخیره می گردد برای حدس زدن کد شناسایی هکرها باید ۶۵۵۳۵ حالت ممکن را در نظر بگیرند بنابراین آنها ۶۵۵۳۵ پاسخ تقلبی به سمت سرور متقاضی ارسال میکنند تا بالاخره یکی از کدهای شناسایی پاسخهای آلوده با یکی از کدهای شناسایی تقاضاهای ارسال شده توسط سرور شماره یک یکسان شده و سرور یک آن را به عنوان پاسخ بپذیرد.
اما برای ارسال ۶۵۵۳۵ پاسخ به سمت سرور متقاضی پهنای باند بالایی نیاز است.
نکتهای که باید به آن توجه شود این است که هکرها نیازی به ارسال ۶۵۵۳۵ پاسخ آلوده به سمت سرور متقاضی ندارند بلکه بر اساس الگوریتم ” پارادوکس تاریخ تولد ” با ارسال ۶۵۰ تا ۷۵۰ درخواست ، احتمال آنکه آنها بتوانند موفق شوند در حدود ۰/۹۶۰۴۱۱یعنی ۱۰۰% خواهد بود !
به کد زیر و جدول نتایج آن توجه کنید.
#define POSSIBILITIES 65535.0
void main (void)
{
float chances;
int i, j;
for (i = 0; i < 800; i+=50)
{
for (j = 1, chances = 1; j < i; j++)
chances *= (float)((POSSIBILITIES - j) / POSSIBILITIES);
printf("For %d fake replies, chances are %f\n", i, 1-chances);
}
}
| Queries | 50 | 100 | 150 | 200 | 250 | 300 | 350 | 400 | 500 | 550 | 650 | 750 |
| Chances | 0.0185 | 0.0728 | 0.1569 | 0.2621 | 0.3785 | 0.4961 | 0.6069 | 0.7048 | 0.8517 | 0.9008 | 0.9604 | 0.9865 |

سرور شماره یک پس از دریافت پاسخ آلوده، این پاسخ را جهت پاسخگویی سریعتر به درخواستهای بعدی تا مدتی در کش خود نگهداری میکند و بدین ترتیب کش DNS SERVER آلوده میگردد. دراین روش هکرها بر خلاف روش (ب) نه یک استفاده کننده نهایی بلکه یک Server DNS را هدف حملات خود قرار دادهاند.
منابع :
http://www.technicalinfo.net/papers/Pharming2.html
http://www.securesphere.net/download/papers/dnsspoof.htm

















