منبع اصلی نوشتار زیر در این لینک قرار دارد

پروتکل ARP

در حالتی که sniff به صورت passive انجام می گیرد ، راهی برای شناسایی آن وجود ندارد . اما حالت ARP Poisoning که روی سوئیچ انجام می شود را می توان شناسایی کرد. هر اثر و فعالیتی که نفوذگر انجام دهد (منظور از اثر می تواند ارسال بسته باشد ) می تواند منجر به شناسایی شود . یکی از مسائلی که در حوزه امنیت بر روی آن کار می شود طراحی و پیاده سازی IDS(Intrusion Detection System) برای تشخیص الگوهای حملات است. مورد بالا هم می تواند یک الگوی حمله داشته باشد . برای مثال در " دفاع در عمق" بیاییم و IDS ، IPS قرار دهیم . اما وقتی داریم سوئیچ را آلوده می کنیم ممکن است اصلا بسته به کاربر (user) نرسد ( حتی ممکن است در آن موقع user در شبکه نباشد ) و جدول سوئیچ آلوده شود و حال زمانی که کاربر اتصال خود را به سوئیچ برقرار میکند ، اگر درست پیکربندی نشده باشد می تواند ضربه بخورد ( چون user به سوئیچ دسترسی ندارد که بخواهد آن را بررسی کند ) . اما برخی از اثرات دیگر ARP Poisoning، مثل Duplicate ARP را، کاربر می تواند تشخیص دهد.

پروتکل ARP چگونه کار می کند ؟

هر کامپیوتر جهت تبادل اطلاعات از طریق شبکه ، نیازمند دانستن آدرس سخت افزاری کامپیوتر مقابل است . هر کامپیوتر اطلاعات مربوط به آدرس های سخت افزاری متناظر با آدرس های IP سایر کامپیوترها را در جدولی به نام ARP table ذخیره می کند . این جدول در هر کامپیوتر به مرور و با ارسال بسته ARP Request به صورت Broadcast و یا دریافت بسته ARP Reply از جانب سایر کامپیوترها تکمیل می شود . بعد از ثبت آدرس MAC سایر کامپیوترها (سایر سیستم­ها) در یک کامپیوتر ، این کامپیوتر برای برقراری ارتباطهای بعدی دیگر نیازی به ارسال ARP Request ندارد و از اطلاعات ذخیره شده در جدول ARP خود استفاده می کند .

سوال : سیستم من می خواهد گوگل را Ping کند آیا این مساله هیچ ارتباطی به پروتکل ARP دارد ؟ از آنجایی که این بسته باید از شبکه خارج شود باید gateway را پیدا کند و با استفاده از mac مربوط به gateway  آن بسته را به gateway ارسال کند. دقت کنید ارسال پیام همگانی درصورتی انجام می شود که با محاسبات انجام شده توسط سیستم، مشخص گردد که کامپیوتر مقصد در subnet یکسانی با سیستم ما قرار دارد .

سوال : می خواهیم به یک سیستم در شبکه محلی SSH کنیم .مراحل این کار از پروتکل SSH که در لایه Application پورت 22 است تا ارسال بسته به چه نحوی است ؟ نکته ای که در پاسخ به این سوال وجود دارد این است که پروتکل های دیگر هم برای آن که بسته هایشان ارسال شود نیاز است تا آدرس Mac را بدانند ( البته اتفاقات دیگری نیز در لایه Application  تا لایه های پایین تر انجام می گیرد مثل تبدیل نام Google.com به IP آن و ...) پس هر پروتکلی در نهایت خواسته یا خواسته ، مستقیم یا غیرمستقیم به ARP نیاز دارد .

توجه : وقتی شما از سیستم خود telnet ، nc ، Login و به گونه ای یک ارتباط کامل برقرار می کنید ( دست تکانی سه مرحله ای انجام می دهید ) دراین حالت ها ارتباط شما بر روی سرور ثبت (log) می شود. یعنی ثبت می شود که یک نفر با IP و mac فلان به پورت x وصل شد . آیا این مساله مورد پسند یک نفوذگر است ؟ خیر . راهکار چیست ؟ 1 –IP Spoofing  / Mac Spoofing 2 – واسط قرار دادن یک کامپیوتر دیگر ( استفاده کردن از Zombie است . یعنی از یک پایگاه حمله، برای حمله استفاده کرد ) جدای استفاده از این روش ها که نیاز به ابزار دارد می توان از ساختار پروتکل TCP/IP استفاده کرد .کاری که باید انجام دهیم این است که مثلا مرحله ی سوم 3- way handshaking را انجام ندهیم . در این صورت چون ارتباط کامل نشده پس اطلاعات نفوذگر  log نمی شود . و در عین حال هدف ( که همان فرضا بررسی پاسخ گو بودن یک پورت است ) نیز انجام می شود . یعنی در مرحله اول نفوذگر می گوید من با پورت 22 سیستم سرور می خواهم ارتباط برقرار کنم و sequence number خود را نیز اعلام می کند . سرور نیز در پاسخ Sequence number خود را برمی گرداند Sequence number  نفوذگر را نیز تایید می کند وقتی سیستم سرور این جواب را برمی گرداند یعنی در سمت سرور یک Application آماده پاسخ گویی است و این یعنی آن پورت باز است . در مرحله آخر نفوذگر، دیگر بسته Ack ( که به منزله ی شروع ارتباط است ) را ارسال نمی کند و یا بحث دیگر که برمی گردد به مباحث OS fingerprinting: ممکن است در یک OS اگر شما SYN را بفرستید و بعد ازآن RST را بفرستید ، بتوانید به نحوی از پاسخ ها متوجه شوید که پورت باز است یا خیر و در OS دیگر به گونه ی دیگری عکس العمل به شما برگردانده شود .

توجه : نکته ای که باید در نظر گرفت پیاده سازی ARP درسیستم عامل های مختلف است. برخی از سیستم های عامل بدون اینکه ARP Request فرستاده باشند اگر reply دریافت کنند آن را معتبر می دانند؛ اما بعضی دیگر از سیستم های عامل مثل سولاریس این گونه پیام ها را معتبر نمی دانند . از طرفی برخی دیگر از OS ها (سیستم عامل  = Operating system) نگاه می کنند به request های دیگران اگر reply برای آن request ها بود، آن را می پذیرند .