DHCP چیست؟
DHCP یا Dynamic Host Configuration Protocol برای اختصاص دادن IP در اینترنت استفاده میشود. هر دستگاه برای آنکه بتواند به شبکهی اینترنت متصل شود، به شناسهی IP نیاز دارد و آدرس IP هر دستگاه باید منحصر به فرد باشد. اگر این شناسههای IP را افرادی که با دستگاه کار میکنند انتخاب و تنظیم کنند، یا یک مدیر شبکه بهشکل دستی آنها را تعیین کند، همواره احتمال بروز این خطا وجود دارد که IPهای مشابه به دستگاههای مختلف اختصاص داده شود.
از DHCP بیشتر در یک شبکهی محلی استفاده میشود. در هر یک از این شبکهها، یک روتر یا یک gateway (که میتواند یک فایروال هم باشد)، سرویس DHCP را ارایه میدهد و DHCP server نام دارد. هر DHCP server، تمام اطلاعات مربوط به یک شبکه را در اختیار دارد که برخی از این اطلاعات را پس از درخواست کاربر، برای او ارسال میکند. همچنین DHCP server، محدودهی IP مورد استفادهی شبکه را از قبل دریافت میکند (محدودهی IP مورد استفاده را معمولن مدیر یک شبکه تعیین میکند) و براساس آن، تصمیم میگیرد که به هر دستگاه جدید که به شبکه وصل میشود، باید چه شناسهای را اختصاص دهد.
عملکرد DHCP
فرض کنید که یک دستگاه جدید به شبکه اضافه شده است و میخواهد به شبکهی داخلی یا شبکهی اینترنت وصل شود. همانطور که گفته شد، این دستگاه نیاز به یک شناسهی IP یکتا دارد. از آنجایی که این دستگاه هنوز شناسهی IP ندارد و همچنین آدرس IP مربوط به DHCP server برایش نامعلوم است، درخواست خود را از طریق آدرس 255.255.255.255 برای همهی دستگاههای موجود در ساختار شبکهای که به آن متصل است، ارسال میکند (این آدرس IP در بیشتر شبکهها، آدرس broadcast نام دارد و پیامی که به مقصد این IP ارسال میشود، برای همهی دستگاهها ارسال میشود). DHCP server پس از دریافت این پیام، جوابی برای کاربر ارسال میکند که شامل اطلاعاتی مانند آدرسIP پیشنهادی برای آن کاربر و آدرس DHCP server پاسخدهنده به این پیام است (البته، هم در این مرحله و هم در مرحلههای بعد، سرور بنا به درخواست کاربر میتواند اطلاعات بیشتری مانند subnet mask، مدت زمان اعتبار آدرس IP اختصاص داده شده، آدرس DNS server، آدرس Time server و … را برای کاربر ارسال کند). پس از اینکه کاربر پیام را دریافت کرد، میتواند آدرس IP پیشنهادی سرور را برای خود انتخاب کند. به این ترتیب، یک پیام درخواست برای سرور ارسال میکند و از این طریق اعلام میکند که آدرس IP ارسال شده را پذیرفته است. سرور در جواب درخواست، یک پیام تایید برای کاربر میفرستد و به همراه آن، اطلاعات بیشتری مانند، اطلاعاتی که کاربر درخواست داده را ارسال میکند.
سناریوی بالا، بیشتر برای شبکههای کوچکتری که تنها یک DHCP server در آنها وجود دارد استفاده میشود. در شبکههایی با چند DHCP server، هر server ممکن است درخواستهایی از زیرشبکههای مختلف دریافت کند و در نتیجه باید روندی وجود داشته باشد که مشخص کند هر درخواست مربوط به چه شبکهای است. همچنین، هر کاربر پس از broadcast کردن درخواست خود، ممکن است از چند سرور مختلف پاسخ دریافت کند ولی در نهایت باید به یکی از آنها پاسخ بدهد و یک IP را برای خود انتخاب کند. در این شبکهها، یک DHCP relay agent، به عنوان نمایندهی یک DHCP server وجود دارد. درخواست هر کاربر نخست برای agent ارسال میشود و سپس agent، آن را برای سرور اصلی ارسال میکند و پس از دریافت پاسخ از سرور، آن را برای کاربر میفرستد. سرور با توجه به agentای که درخواست را از آن دریافت کرده است، تشخیص میدهد که کاربر درخواستکننده در کدام زیرشبکه قرار دارد و با توجه به مشخصات همان زیرشبکه، آدرس IP را برای کاربر انتخاب میکند.
امنیت DHCP
مانند بسیاری از سرویسهای دیگر اینترنت، در طراحی اولیهی این سرویس هم امنیت در نظر گرفته نشده است و برخلاف سرویسهای دیگر که ضعفهای امنیتی آنها تا حدودی برطرف شدهاند، این سرویس هنوز هم امنیت زیادی ندارد. سرویس DHCP از هیچ روشی برای شناسایی کاربر و سرور استفاده نمیکند. به همین دلیل، یک سرور مخرب میتواند به سادگی ترافیک تعداد زیادی از کاربرها را آلوده کند، و هم کاربرهای حملهکننده میتوانند به راحتی در شبکه اختلال ایجاد کنند.
برای نمونه، فرض کنید کاربر پس از ارسال درخواست برای IP، از چندین سرور پاسخ دریافت میکند که یکی از آنها مخرب است. اگر پاسخ این سرور را بپذیرد، سرور میتواند اطلاعات اشتباهی دربارهی شبکه در اختیار کاربر قرار دهد (برای نمونه آدرس DNS serverای را ارسال کند که برای حمله طراحی شده است و از این طریق تمام ترافیک کاربر را به سمت این سرور هدایت کند). همچنین، چون سرور راهی برای تشخیص درستی اطلاعات کاربر ندارد، یک کاربر میتواند هربار با اطلاعات جدیدی برای سرور، درخواست ارسال کند و تمام آدرس IP هایی که سرور در اختیار دارد را به خود اختصاص بدهد. در نتیجه، هیچ کاربر دیگری نمیتواند حداقل برای مدتی IP دریافت کند و منجر به منع سرویس (denial of service) میشود. از سوی دیگر، هر کاربری میتواند بدون شناسایی شدن، به اطلاعات داخلی یک شبکه، مانند DNS server، دسترسی داشته باشد.
اگرچه در طراحی پیشرفتهتری از DHCP سعی شده است تا با استفاده از token تا حدی شناسایی کاربرها انجام شود ولی از آنجایی که نگهداری اطلاعات مربوط به این tokenها در سمت سرور، نیاز به حافظهی به نسبت زیادی دارد، در عمل چندان مورد استفاده قرار نمیگیرد.