پورت ناکینگ

در شبکه‌های رایانه‌ای، **پورت ناکینگ** (به انگلیسی: Port knocking) روشی برای باز کردن پورت‌ها بر روی یک دیواره آتش (فایروال) از خارج شبکه، از طریق ایجاد «تلاش برای اتصال» (Connection attempt) بر روی مجموعه‌ای از پورت‌های بسته و از پیش تعیین‌شده است. هنگامی که یک دنباله صحیح از این تلاش‌ها دریافت شود، قوانین دیواره آتش به‌صورت پویا تغییر می‌کنند تا به میزبانی (Host) که این تلاش‌ها را ارسال کرده، اجازه اتصال از طریق پورت یا پورت‌های خاصی را بدهند. گونه‌ای دیگر از این روش به نام **احراز هویت تک‌بسته** (SPA) نیز وجود دارد که در آن تنها به یک «ضربه» شامل یک بسته رمزگذاری‌شده نیاز است.

هدف اصلی port knocking جلوگیری از اسکن سیستم توسط مهاجم برای یافتن سرویس‌های بالقوه قابل سوءاستفاده با انجام اسکن پورت است، زیرا تا زمانی که مهاجم دنباله knock صحیح را ارسال کند،پورت‌های محافظت‌شده به صورت «بسته» دیده می‌شوند.

## نمای کلی
پورت ناکینگ معمولاً با پیکربندی یک دیمن (Daemon) پیاده‌سازی می‌شود که فایل ثبت رخداد (Log file) دیواره آتش را برای یافتن تلاش‌های اتصال به نقاطی خاص پایش می‌کند و سپس پیکربندی دیواره آتش را متناسب با آن تغییر می‌دهد. این عمل همچنین می‌تواند در «سطح هسته» (با استفاده از فیلترهای بسته در سطح کرنل مانند iptables) یا توسط یک پردازش در فضای کاربری (Userspace) که بسته‌ها را در سطح بالاتری بررسی می‌کند (با استفاده از رابط‌های شنود بسته مانند pcap) انجام شود؛ روش دوم اجازه می‌دهد که از پورت‌های TCP که از قبل «باز» هستند نیز در داخل دنباله ضربه استفاده شود.

خودِ عمل «ضربه زدن» به پورت، شبیه به یک دست‌تکانی سِری (Secret handshake) است و می‌تواند شامل هر تعدادی از بسته‌های TCP، UDP و یا حتی گاهی ICMP و سایر پروتکل‌ها به پورت‌های شماره‌گذاری شده در ماشین مقصد باشد. پیچیدگی این ضربه می‌تواند از یک فهرست مرتب ساده (مثلاً پورت ۱۰۰۰ تی‌سی‌پی، پورت ۲۰۰۰ تی‌سی‌پی، پورت ۳۰۰۰ یو‌دی‌پی) تا یک هش رمزنگاری‌شده پیچیده که وابسته به زمان، آی‌پی مبدأ و سایر فاکتورهاست، متغیر باشد.

یک دیمن پورت‌ناکینگ بر روی دستگاه دیواره آتش، به بسته‌های ورودی روی پورت‌های مشخصی گوش می‌دهد (یا از طریق لاگ دیواره آتش و یا از طریق شنود بسته‌ها). کاربر کلاینت (Client user) باید یک ابزار اضافی را همراه داشته باشد—که می‌تواند به سادگی ابزار netcat یا یک برنامه ping اصلاح‌شده، و یا به پیچیدگی یک تولیدکننده کامل هش باشد—و قبل از اینکه تلاش کند به روش معمول به ماشین متصل شود، از آن استفاده نماید.

بیشتر سیستم‌های پورت‌ناکینگ «حالت‌دار» (Stateful) هستند؛ بدین معنا که اگر بخش اول «ضربه» با موفقیت دریافت شود، ارسال یک بخش دومِ نادرست نه تنها به کاربر راه دور اجازه ادامه نمی‌دهد، بلکه هیچ سرنخی هم به او نمی‌دهد که تا کجای دنباله را اشتباه رفته است. معمولاً تنها نشانه‌ی شکست این است که در پایانِ دنباله ضربه، پورتی که انتظار می‌رفت باز شود، باز نمی‌شود. هیچ بسته‌ای در هیچ زمانی برای کاربر راه دور ارسال نمیشود.

اگرچه این تکنیک برای ایمن‌سازی دسترسی به دیمن‌های شبکه راه دور به‌طور گسترده توسط جامعه امنیتی پذیرفته نشده است، اما حتی پیش از سال ۲۰۰۰ در بسیاری از روت‌کیت‌ها (Rootkits) به‌صورت فعال مورد استفاده قرار می‌گرفته است.&#x5B; *[[ویکی‌پدیا:نیازمند منبع|نیازمند منبع]]* &#x5D;

## مزایا
شکستن محافظت پورت‌ناکینگ نیازمند حملات بروت‌فورس (Brute force) در مقیاس بزرگ است تا بتوان حتی دنباله‌های ساده را کشف کرد. یک حمله بروت‌فورس ناشناس علیه یک دنباله سه-ضربه‌ای TCP (مثلاً پورت ۱۰۰۰، ۲۰۰۰، ۳۰۰۰) نیازمند این است که مهاجم هر ترکیب سه‌تایی از پورت‌ها را در بازه ۱ تا ۶۵۵۳۵ آزمایش کند و پس از هر حمله، پورت‌ها را اسکن کند تا تغییر در دسترسی پورت‌های سیستم هدف را بررسی نماید. از آنجا که پورت‌ناکینگ طبق تعریف حالت‌دار است، پورت درخواست‌ شده تا زمانی که دنباله صحیحِ اعدادِ سه پورت به ترتیب درست و بدون دریافت هیچ بسته مداخله‌گر دیگری از مبدأ دریافت نشود، باز نخواهد شد. سناریوی میانگین نیازمند ارسال حدود ۱۴۱ تریلیون (۶۵۵۳۵ به توان ۳ تقسیم بر ۲) بسته است تا یک شماره پورت سه-تایی صحیح تعیین شود. این تکنیک، در ترکیب با محدود کردن تعداد تلاش‌های ضربه، استفاده از دنباله‌های طولانی‌تر یا پیچیده‌تر و هش‌های رمزنگاری، تلاش‌های موفقیت‌آمیز برای دسترسی به پورت را بسیار دشوار می‌سازد.

هنگامی که دنباله ضربه صحیح برای باز کردن یک پورت ارائه شود، قوانین دیواره آتش معمولاً پورت را فقط برای آدرس آی‌پی (IP address) که ضربه صحیح را زده باز می‌کنند که این امر عملکردی پویا به رفتار دیواره آتش می‌افزاید. به‌جای استفاده از یک لیست سفیدِ آی‌پیِ ایستای از پیش پیکربندی شده در دیواره آتش، یک کاربر مجاز که در هر نقطه‌ای از جهان قرار دارد، می‌تواند بدون نیاز به کمک مدیر سرور، هر پورت لازمی را باز کند. سیستم همچنین می‌تواند به گونه‌ای پیکربندی شود که به کاربر احراز هویت شده اجازه دهد پس از پایان نشست (Session) پورت را به‌صورت دستی ببندد یا با استفاده از مکانیزم تایم‌اوت (Timeout) آن را به‌صورت خودکار ببندد. برای ایجاد یک نشست جدید، کاربر راه دور ملزم به احراز هویت مجدد با استفاده از دنباله صحیح خواهد بود.

رفتار حالت‌دار پورت‌ناکینگ اجازه می‌دهد چندین کاربر از آدرس‌های آی‌پی مبدأ مختلف، به‌صورت همزمان در سطوح مختلفی از احراز هویت پورت‌ناکینگ باشند؛ این ویژگی به یک کاربر مجاز با دنباله ضربه صحیح اجازه می‌دهد تا از دیواره آتش عبور کند، در حالی که خودِ دیواره آتش در حال مقابله با حمله پورت از چندین آدرس آی‌پی دیگر است (با فرض اینکه پهنای باند دیواره آتش کاملاً مصرف نشده باشد). از دید هر آدرس آی‌پی مهاجم دیگر، پورت‌های روی دیواره آتش همچنان بسته به نظر می‌رسند.

استفاده از هش‌های رمزنگاری در داخل دنباله پورت‌ناکینگ، از شنود بسته (Packet sniffing) بین ماشین‌های مبدأ و مقصد دفاع می‌کند و از کشف دنباله ضربه یا استفاده از اطلاعات برای ایجاد «حملات بازپخش» (Replay attacks) جهت تکرار دنباله‌های قبلی جلوگیری می‌نماید.

پورت‌ناکینگ به عنوان بخشی از استراتژی «دفاع در عمق» (Defense in depth) استفاده می‌شود. حتی اگر مهاجم موفق به کسب دسترسی به پورت شود، سایر مکانیزم‌های امنیتی پورت به همراه مکانیزم‌های احراز هویتِ سرویسِ اختصاص‌یافته روی پورت‌های باز، همچنان پابرجا هستند.

پیاده‌سازی این تکنیک ساده است و با استفاده از حداقل امکانات، نظیر یک اسکریپت شل (Shell script) روی سرور و یک فایل بچ (Batch file) ویندوز یا ابزار خط فرمان روی کلاینت قابل انجام است. سربار (Overhead) بر روی سرور و کلاینت از نظر ترافیک، مصرف پردازنده (CPU) و حافظه ناچیز است. دیمن‌های پورت‌ناکینگ پیچیدگی کدنویسی ندارند و بار بازرسی (Audit burden) پایینی دارند.

یک سیستم پورت‌ناکینگ که بر روی سرویس‌های دارای احراز هویت با کلمه عبور، مانند SSH، پیاده‌سازی شده باشد، مسئله حملات بروت‌فورس روی لاگین‌ها را دور می‌زند. در مورد SSH، دیمن SSH بدون دریافت پورت‌ناکینگ صحیح فعال نمی‌شود و حمله توسط پشته TCP/IP فیلتر می‌شود نه با استفاده از منابع احراز هویت SSH. برای مهاجم، دیمن تا زمانی که ضربه صحیح ارائه نشود، غیرقابل دسترسی است

## ملاحظات امنیتی
پورت‌ناکینگ یک افزونه‌ی سیستمی منعطف و قابل سفارشی‌سازی است. اگر مدیر سیستم تصمیم بگیرد که یک «دنباله ضربه» را به فعالیتی مانند اجرای یک شل اسکریپت (Shell script) متصل کند، تغییرات دیگر مانند پیاده‌سازی قوانین اضافی فایروال برای باز کردن پورت‌ها برای آدرس‌های آی‌پی خاص، به آسانی می‌تواند در اسکریپت گنجانده شود. نشست‌های همزمان (Simultaneous sessions) نیز به راحتی قابل تطبیق هستند

با استفاده از استراتژی‌هایی مانند «طول پویا» و «استخری از طول‌ها»، احتمال هک شدن دنباله‌های ضربه می‌تواند به نزدیک صفر کاهش یابد.

پورت‌ناکینگ علاوه بر کاهش حملات بروت‌فورس روی رمز عبور و جلوگیری از رشد اجتناب‌ناپذیر لاگ‌های مرتبط با دیمن پردازش، در برابر اکسپلویت‌های آسیب‌پذیری پروتکل نیز محافظت ایجاد می‌کند. اگر اکسپلویتی کشف شود که بتواند یک دیمن را در پیکربندی پیش‌فرضش به خطر بیندازد، استفاده از پورت‌ناکینگ بر روی پورت شنود (Listening port)، احتمال نفوذ را تا زمان به‌روزرسانی نرم‌افزار یا پردازش کاهش می‌دهد. کاربران مجاز پس از ارائه دنباله ضربه صحیح همچنان سرویس دریافت می‌کنند، در حالی که تلاش‌های دسترسی تصادفی نادیده گرفته می‌شوند.

پورت‌ناکینگ تنها باید به عنوان بخشی از یک استراتژی کلیِ دفاعِ شبکه نگریسته شود که در برابر حملات تصادفی و هدفمند محافظت می‌کند، نه به عنوان یک راه حل مستقل و کامل.

متخصصان امنیت شبکه در گذشته تا حد زیادی پورت‌ناکینگ را به عنوان یک راه حل نادیده گرفته‌اند، زیرا پیاده‌سازی‌های اولیه صرفاً بر ارائه ترکیبات صحیح پورت برای کسب دسترسی متکی بودند. سیستم‌های مدرن پورت‌ناکینگ ویژگی‌هایی نظیر هش‌های رمزنگاری امن، لیست‌های سیاه، لیست‌های سفید و پاسخ‌های پویا به حمله را ادغام کرده‌اند تا قابلیت سیستم را هرچه بیشتر افزایش دهند. پورت‌ناکینگ ابزاری مؤثر برای بهینه‌سازی منابع سرور در شبکه‌های متصل به اینترنت است.&#x5B; *[[ویکی‌پدیا:نیازمند منبع|نیازمند منبع]]* &#x5D;

پورت‌ناکینگ اگر به درستی پیاده‌سازی شود، امنیت کلی سیستم را کاهش نمی‌دهد. این یک اقدام مؤثر است که لایه امنیتی اضافی را با کمترین سربار منابع سرور فراهم می‌کند. در بدترین حالت، سیستم‌هایی مانند پورت‌ناکینگ ممکن است از طریق پیاده‌سازی ضعیف، مسائل امنیتی جدیدی ایجاد کنند یا نگرش‌های مدیریتی دوگانه را از طریق موقعیت‌هایی مانند «جبران ریسک» (Risk compensation) آشکار سازند.&#x5B; *[[ویکی‌پدیا:نیازمند منبع|نیازمند منبع]]* &#x5D;

## معایب
پورت‌ناکینگ کاملاً به پایداریِ (Robustness) دیمنِ پورت‌ناکینگ وابسته است. خرابی دیمن باعث عدم دسترسی تمام کاربران به پورت می‌شود و از دیدگاه کاربردپذیری و امنیت، این یک «نقطه شکست واحد» (Single point of failure) نامطلوب است. پیاده‌سازی‌های مدرن پورت‌ناکینگ با ارائه یک دیمنِ نظارت‌بر-پردازش که دیمنِ پورت‌ناکینگِ متوقف یا خراب شده را مجدداً راه‌اندازی می‌کند، این مشکل را کاهش می‌دهند.

سیستم‌هایی که از هش‌های رمزنگاری استفاده نمی‌کنند، در برابر حملات جعل آدرس آی‌پی (IP address spoofing) آسیب‌پذیر هستند. این حملات که نوعی از «محروم‌سازی از سرویس» (DoS) هستند، از عملکرد پورت‌ناکینگ استفاده می‌کنند تا آدرس‌های آی‌پی شناخته شده (مانند ایستگاه‌های مدیریتِ ادمین) را با ارسال بسته‌هایی با آی‌پی جعلی به پورت‌های تصادفی، قفل کنند. سرورهایی که از آدرس‌دهی ایستا (Static) استفاده می‌کنند، به ویژه در برابر این نوع حملات محروم‌سازی از سرویس آسیب‌پذیرند زیرا آدرس‌های آن‌ها شناخته شده است.

پورت‌ناکینگ می‌تواند در شبکه‌هایی که دارای تأخیر (Latency) بالا هستند، مشکل‌ساز باشد. پورت‌ناکینگ برای دسترسی به عملکرد طراحی شده‌اش، به رسیدن بسته‌ها در ترتیب صحیح وابسته است. از طرف دیگر، TCP/IP به گونه‌ای طراحی شده که با جمع‌آوری بسته‌های نامرتب و تبدیل آن‌ها به یک پیام منسجم کار کند. در این شرایط، تنها راه حل این است که کلاینت ارسال مجدد دنباله صحیح بسته‌ها را به صورت دوره‌ای تا زمانی که دنباله توسط سرور تایید شود، ادامه دهد.

پورت‌ناکینگ نمی‌تواند به عنوان تنها مکانیزم احراز هویت برای یک سرور استفاده شود. از دیدگاه امنیتی، پورت‌ناکینگ ساده بر «امنیت از طریق ابهام» (Security by obscurity) متکی است؛ انتشار ناخواسته دنباله ضربه، به معنای به خطر افتادن تمام دستگاه‌هایی است که از آن دنباله پشتیبانی می‌کنند. علاوه بر این، پورت‌ناکینگ رمزگذاری نشده در برابر «شنود بسته» (Sniffing) آسیب‌پذیر است. یک ردگیری شبکه (Network trace) با طول مناسب می‌تواند دنباله ضربه صحیح را از یک آی‌پی واحد تشخیص دهد و بدین ترتیب مکانیزمی برای دسترسی غیرمجاز به سرور و به تبع آن، شبکه متصل به آن فراهم کند. پس از نفوذ، فایل‌های لاگ روی دستگاه منبعی برای سایر دنباله‌های ضربه معتبر هستند که نقطه شکست دیگری را آشکار می‌کنند. راه حل‌هایی مانند رفتار با هر دنباله ضربه به عنوان یک رمز عبور یک‌بارمصرف، هدفِ ساده‌سازی مدیریت را خنثی می‌کنند. در عمل، برای اینکه کل سیستم مؤثر باشد، پورت‌ناکینگ باید با سایر اشکال احراز هویت که در برابر حملات «بازپخش» (Replay) یا «مرد میانی» (Man-in-the-middle) آسیب‌پذیر نیستند، ترکیب شود.

## منابع


## پیوندهای خارجی

* SilentKnock: احراز هویت کاربردی و به طور قابل اثباتی غیرقابل کشف
* پایان‌نامه کارشناسی ارشد «تحلیلی بر Port Knocking و احراز هویت تک‌بسته‌ای» نوشته سباستین ژانکیه
* «پیاده‌سازی سیستم Port Knocking به زبان C» پایان‌نامه‌ی افتخاری مت دویل.
* فهرست منابع در مورد PK و SPA (مقالات، پیاده‌سازی‌ها، ارائه‌ها...)
* PortKnocking - سیستمی برای احراز هویت مخفیانه در پورت‌های بسته. (بایگانی شده)
* مجله لینوکس: پورت ناکینگ (۲۰۰۳)
* نقدی بر فیلم «پورت ناکینگ» (۲۰۰۴)
* fwknop: پیاده‌سازی که ترکیبی از port knocking و اثر انگشت غیرفعال سیستم عامل است
* WebKnock: یک کلاینت آنلاین Port Knocking و Single Packet Authorization (SPA) مبتنی بر fwknop
* وب‌ناکینگ: استفاده از صفحات وب به جای پورت‌ها.
* پورت‌ناک برای پنهان کردن یک در پشتی پورت‌ناک برای پنهان کردن کانال ارتباطی بدافزار، مثالی از دنیای واقعی
* تکنیک‌هایی برای پنهان‌سازی و احراز هویت سبک در شبکه‌های IP (۲۰۰۲)
رده:امنیت اینترنت