SSL Offloading یکی از مفاهیم مهم در آموزش هک و امنیت شبکه است که پردازش رمزنگاری SSL/TLS را از سرورهای اصلی به یک دستگاه واسط مانند Load Balancer
منتقل میکند. این کار باعث کاهش بار پردازشی سرورها و افزایش سرعت
پاسخدهی میشود. دستگاه واسط، دادههای رمزنگاریشده را دریافت، رمزگشایی و
پردازش کرده، سپس آنها را به سرور اصلی ارسال میکند. این روش در دیتاسنترها و سرویسهای ابری برای بهینهسازی عملکرد و امنیت استفاده میشود.راهکار SSL Offloading چیست و چگونه کار میکند؟ در اصل این راهکار یکی از روش های کاهش بار بر روی وب سرور میباشد که فرآیند و بار رمزگذاری و رمزگشایی داده های وب سرور هارا کاهش از روی وب سرور ها حذف میکند.
پروتکل SSL (البته این پروتکل منسوخ شده است و نسخه جایگزین آن TLS میباشد اما نام راهکار SSL Offloading تغییری نکرده است برای همان از عنوان SSL استفاده میکنیم) پروتکلی است که به جهت رمزگذاری و رمزگشایی داده ها و ضمانت ارسال داده ها به صورت کامل و کاملا امن را بر روی بستر HTTP میباشد.
انجام محاسبات و الگوریتم SSL به جهت اینکه داده هم رمزنگاری و هم رمزگشایی شود بسیار سخت و سنگین میباشد پس از همین بابت برای کاهش بار موجود بر روی وب سرور و جداسازی ترافیک دریافتی وب و بارمحاسباتی رمزگذاری و رمزگشایی ما از راهکار SSL Offloading استفاده میکنیم.
با این راهکار و مفهوم SSL تا حدودی آشنا شدیم اما به صورت کلی SSL پروتکلی است که داده هارا برای ما رمزنگاری میکند و در جلوگیری از حملات متنوعی از جمله Reply Attack و MITM کاربرد دارد و کمک زیادی میکند.
پروتکل SSL باتوجه به خوبی که دارد میزان بار محاسباتی زیادی هم در پی دارد بدین شکل که این فرآیند بر روی سرور(ها) و پردازش CPU آنها بسیار تاثیر گذار میباشد
درکنار اینکه این سرور(ها) میزان ترافیک دریافتی و پردازش درخواست های دریافتی وب راهم باید بررسی کند و پاسخ آن را ارسال کند پس از همین جهت باید راهکاری داشته باشیم که وب سرور ما توانایی این را داشته باشد که به پاسخ های دیگری پاسخ دهد و بار اضافی بر روی آن نباشد.بیشتر ببینید: دوره SANS Security 573 | خودکارسازی امنیت اطلاعات با Python
پس ما یک راهکار را به این جهت استفاده میکنیم که بار محاسباتی SSL که شامل رمزنگاری داده ها و رمزگشایی آنها میشود را از روی وب سرور حذف کنیم و بر روی یک سرور دیگر که به اصطلاح به آن SSL Load Balancer یا SSL Offloading Server گفته میشود قرار دهیم.
توجه داشته باشید این فرآیند و هدف از این راهکار این است که ما پردازش SSL را مستقیما بر روی سرور وب خودمان به انجام نرسانیم و وقتی که ما این پردازش را جداسازی میکنیم و روی یک تجهیز دیگه قرار میدیم بدین شکل میشه که وقتی داده ای از سمت کاربر به سمت وب سرور ارسال میشه در ابتدا داده بر روی پروتکل HTTPS ( به صورت رمزنگاری شده ) در سروری که SSL Offloading را انجام میدهد دریافت میشود و بعد از آن بعد از رمزگشایی کردن داده ها، داده به صورت متن ساده ( Clear Text ) به سمت وب سرور ارسال میشود.بیشتر بخوانید: UBA یا همان User Behavior Analytics چیست؟ به زبان ساده
توجه داشته باشید که این فرآیند صرفا بر روی یک تجهیز خارجی و تهجیز بالا دستی از سرور قابل انجام نیست بلکه این موضوع میتواند بر روی خوده سرور وب انجام شود اما پردازش با یک پردازشگر و سختافزاری دیگری به انجام برسد.
توجه داشته باشید که SSL Offloading دو حالت را شامل میشود که به شرح زیر میباشند:
این روش همان روشی است که در بالا توضیح دادیم و نحوه کار آن هم بدین شکل است که داده رمزنگاری شده در سرور SSL Offloading دریافت میشود و داده پس از رمزگشایی به سمت وب سرور ارسال و پاسخ آن نیز در سرور SSL Offloading رمزنگاری میشود و به سمت کلاینت و درخواست کننده مورد نظر ارسال میشود.
این حالت با حالت SSL Termination متفاوت میباشد زیرا که داده ها به صورت رمزنگاری شده در سرور SSL Offloading دریافت میشوند و به همان صورت هم به سمت وب سرور ارسال میشوند و فرآیند رمزگشایی آنها به عهده وب سرور میباشد.
دراصل این فرآیند به جهت بررسی های اضافی و داشتن بازرسی بر روی ترافیک های رمزنگاری شده وب میباشد که از لحاظ داشتن محتوا و کد های مخرب بررسی شوند و درصورت داشتن مشکل Drop شوند در غیر این صورت به همان شکل ( کاملا رمز شده ) به سمت وب سرور ارسال شوند به جهت رمزگشایی در وب سرور و پردازش درخواست
موفق باشید
پس از گرفتن دسترسی غیرمجاز از سمت یک کامپیوتر نیاز است که داده های مربوط به سیستم را از آن استخراج کنیم که این امر را به عنوان Data exfiltration میشناسیم. به واسطه فرآیند Data exfiltration ما توانایی استخراج داده های موجود در یک سیستم را داریم که این امر میتواند استخراج داده ها از سمت یک سیستم با دسترسی فیزیکی ما باشد و حتی میتواند یک سیستم و یا یک شبکه بزرگ آلوده شده به بد افزار باشد.
حمله DNS Exfiltration یک روش در آموزش هک برای استخراج داده از شبکه داخلی از طریق پروتکل DNS است. در این حمله، دادههای حساس بهصورت قطعهقطعه در درخواستهای DNS قرار گرفته و به یک سرور تحت کنترل مهاجم ارسال میشوند. مهاجم معمولاً از subdomain encoding برای ارسال دادهها استفاده میکند. در سمت سرور، درخواستها دریافت شده و دادهها دوباره سرهمبندی میشوند. برای پیادهسازی، مهاجم به یک دامنه تحت کنترل و یک سرور DNS سفارشی نیاز دارد.
پس از گرفتن دسترسی غیرمجاز از سمت یک کامپیوتر نیاز است که داده های مربوط به سیستم را از آن استخراج کنیم که این امر را به عنوان Data exfiltration میشناسیم. به واسطه فرآیند Data exfiltration ما توانایی استخراج داده های موجود در یک سیستم را داریم که این امر میتواند استخراج داده ها از سمت یک سیستم با دسترسی فیزیکی ما باشد و حتی میتواند یک سیستم و یا یک شبکه بزرگ آلوده شده به بد افزار باشد.
طبق گزارش های که سالیانه ارائه میشود پروتکل DNS و Port 53 پرچمدار در حملات Data Exfiltration میباشند و به واسطه این پروتکل این حمله و این فرآیند استخراج داده ها از سازمان بسیار مورد توجه هکرها و بدافزارها قرار میگیرد زیرا که تجهیزات مدرن مانند NGFW ها ( فایروال های نسل بعدی )، IDS/IPS ها ( سیستم های تشخیص و جلوگیری از نفوذ ) تمرکز عمیقی بر روی این پروتکل ندارند و این پروتکل دراغلب موارد به صورت پیش فرض مجاز میباشد و ارتباطش کاملا باز است اما از این جهت تیم های امنیتی امروزی باید نگاه خود را بیشتر بر روی این پروتکل و اطلاعات آن قرار دهند. ما در این مقاله قصد داریم که بررسی کنیم مفهوم DNS Exfiltration چیست و چگونه پیاده سازی میشود.
تا به جای اینجا ما متوجه شدیم که فرآیند Data Exfiltration چیست اما این فرآیند بیشتر یک Tactic میباشد و DNS Exfiltration یک Technique جهت پیاده سازی کردن حمله و فرآیند Data Exfiltration جهت استخراج کردن داده ها از سمت سازمان یا کامپیوتر آسیب دیده
پیاده سازی این فرآیند بسیار ساده اما در عین حال خطرناک میباشد برای مثال یک بار واسطه حمله Dependency Confusion شرکت های بزرگ از حمله Apple و Microsoft و Adobe تحت تاثیر حملات سایبری قرار گرفته بودند و فرد هکر جهت اینکه بتواند اطلاعات و داده های حساس را استخراج کند از حمله DNS Exfiltration استفاده کرده بوده است.
یکی از ابزارهای پرکاربرد در بحث DNS Exfiltration ابزار DNSteal میباشد که به نوعی میشود گفت یکی از ساده ترین روش ها جهت پیاده سازی DNS Exfiltration است که تمامی مراحل اتوماتیک انجام میشود.
برای استفاده از این ابزار ابتدا آن را از Github این ابزار دانلود میکنیم
git clone https://github.com/m57/dnsteal
پس از دانلود این ابزار آن را اجرا سازی میکنیم
به منظور کارکردن با این ابزار باید از دستور زیر جهت ساخت قرار دادن آدرس خودمان درحالت Listen استفاده کنیم و همچنین از سوییچ -z به منظور اینکه فایل ها از حالت Zip خارج شوند زیرا که به صورت پیش فرض در حالت Zip میباشند.
در بالا میبینیم که دستوراتی برای ما تولید شده است و ما به شکل زیر میتوانیم این دستورات را در سیستم هدف اجرا سازی کنیم و فایل را بر روی سیستم خودمان دریافت کنیم. برای مثال فایلی که قرار است دریافت کنیم TOSINSO.txt میباشد و حاوی رمز عبور 12345 است.
ابتدا در سیستم هدف دستور را اجرا سازی میکنیم:
و حالا بر روی سیستم امنیتی خودمان بررسی میکنیم که آیا فایل TOSINSO.txt دریافت شده است یا خیر درصورت دریافت شدن از کنترل C به منظور ذخیره شدن آن استفاده میکنم و فایل را بازمیکنیم مانند تصویر زیر و مقدار 12345 را به راحتی دریافت میکنیم
در این روش تمامی فرآیندها و مراحل به صورت کاملا دستی انجام میشود و شما در اینجا نیاز به دو چیز دارید:
در ابتدا ما به سراغ ایجاد و ثبت یک نام دامنه رایگان در وب سایت Freenom.com میرویم و مراحل را به شکل زیر دنبال میکنیم:
در تصویر بالا ( تصویر آخر ) میبینید که اینجا ما یک نام دامنه با عنوان exfi.tk را ایجاد کردیم و به صورت فعال میباشد. حالا باید برویم سراغ متصل کردن آدرس IP یا به نوعی Route کردن تمامی درخواست های DNS مربوط به این دامنه به سمت آدرس IP خودمان که اینکار را به واسطه CloudFlare انجام میدهیم و با ساخت یک اکانت رایگان در CloudFlare میتوانیم این موضوع را طی کنیم. دلیل استفاده ما از CloudFlare این میباشد که بقیه سرویس دهنده های رایگان DNS اغلب امکان استفاده و ایجاد NS Record در آنها وجود ندارد.
به همین دلیل ما به سراغ CloudFlare میرویم که با یک حساب رایگان میتوانیم فرآیندمان را به راحتی انجام دهیم و دامنه خودمان را پس ساخت اکانت CloudFlare مانند تصویر زیر ثبت کنیم
حال قسمت رایگان CloudFlare را انتخاب میکنیم و روی گزینه Continue کلیک میکنیم
توجه کنید که تمامی پارامترهای قرمز رنگ تکمیل شده باشند.
پس از این فرآیند وارد قسمت Management Tools میشویم
در بخش NameServer و NameServer های CloudFlare را از صفحه باز شده کپی و در قسمت NameServer پیست میکنیم و بر روی گزینه Change NameServer میزنیم
تکمیل شدن این فرآیند چند دقیقه تا 24 ساعت زمان میبرد.
حالا برای تایید این موضوع که NameServer ها تغییر کرده اند میتوانیم از ابزار dig استفاده کنیم و اگر خروجی به شکل زیر بود متوجه میشویم که ماجرا به انجام رسیده است
$ dig @8.8.8.8 +short NS exfi.tk
dawn.ns.cloudflare.com.
jack.ns.cloudflare.com.
برای این موضوع ابتدا بررسی میکنیم که Port 53 متعلق به DNS Server آزاد میباشد یا خیر که اینکار را به واسطه دستور lsof به شکل زیر انجام میدهیم
$ sudo sof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 722 systemd-resolve 12u IPv4 15755 0t0 UDP localhost:domain
systemd-r 722 systemd-resolve 13u IPv4 15756 0t0 TCP localhost:domain (LISTEN)
بعد از این ماجرا وارد مسیر زیر میشویم و به دنبال بخش Resolve میگردیم
$ sudo nano /etc/systemd/resolved.conf
پس از پیدا کردن بخش Resolve مقدار DNSStubListener برابر با no میگذاریم (مانند تصویر و زیر)
DNSStubListener=no
بعد از این ماجرا وارد Resolve.conf میشویم و NameServer متعلق به CloudFlare را اضافه میکنیم (8.8.8.8).
$ sudo nano /etc/resolv.conf
nameserver 8.8.8.8
حالا فقط کافیست یک DNS Exfiltration Listener ساده به زبان پایتون برای پیاده سازی حمله خودمان ایجاد کنیم به شکل زیر:
این کد نویسی را در قالب فایل .py قرار میدهیم و بر روی سیستم اجرا سازی میکنیم و بر روی سیستم مقابل میرویم و داده های که قصد داریم انتقال دهیم را بر روی دامنه ای که ثبت کردیم انتقال میدهیم و در سمت مقابل دریافت میکنیم
بیشتر بخوانید: CSIRT چیست؟ تیم پاسخگویی به حوادث امنیتی
در حوزه حملات مبتنی بر الگوریتم های رمزنگاری ، حمله ای با عنوان روز تولد یا Birthday Attack وجود دارد . اگر بخواهیم در خصوص این حمله که بیشتر به عنوان یک تئوری تا یک حمله واقعی مطرح می شود صحبت کنیم ، باید بگوییم که بیشتر از اینکه یک حمله باشد ، یک دیدگاه معماری نرم افزار و طراحی بانک اطلاعاتی سطح کلان است. اول بیایید بصورت کاملا خلاصه و بدون درگیر شدن به مسائل ریاضی ، تئوری روز تولد را با هم بررسی کنیم و سپس به بررسی مشکلاتی که ممکن است از داخل این تئوری برای ما پیش بیاید بپردازیم.
ایده اولیه تئوری روز تولد یا Birthday Theory به این شکل است که اگر فرض کنیم که 367 نفر درون یک کلاس حضور داشته باشند واین یعنی 2 نفر بیشتر از تعداد روزهای سال ، به احتمال قطع به یقین ما حداقل 2 نفر را در این اتاق داریم که تاریخ تولد ( روز و ماه ، نه سال ) یکسانی داشته باشند. درست است؟
این درست است اما پارادوکس قضیه اینجاست که ما باید احتمالات را چک کنیم ، احتمال با یقین متفاوت است . بگذارید با مثال دیگری بحث را بازتر کنیم. حتی اگر 23 نفر درون یک کلاس درس باشند ، احتمال اینکه 2 نفر از این 50 نفر تاریخ تولد یکسانی داشته باشند نزدیک به 50 درصد است !!! اینکه چگونه چطور به این نتیجه میرسیم یک عملیات ریاضی و محاسبه است که در لینک زیر می توانید بصورت کامل نحوه محاسبه این میزان احتمال را مشاهده کنید :
حمله روز تولد در واقع یک تئوری حمله و معرفی یک آسیب پذیری یا بهتر بگوییم ضعف در طراحی پروتکل رمزنگاری ( Hashing ) ای به نام MD5 است. الگوریتم هشینگ MD5 به دلیل ضعف در طراحی و تبدیل کردن مقادیر ( فایل ها و رشته های و ... ) به Hash این احتمال را دارد که در حجم عظیمی از داده ها ، تداخل Hash داشته باشد.
به زبان ساده تر این امکان در الگوریتم هشینگ MD5 وجود دارد که دو فایل با دو سورس کد مختلف با دو شکل مختلف ، دو رشته مختلف ، مقدار Hash مشابهی را در خروجی داشته باشند. با توجه به همین نقطه ضعف الگوریتم MD5 عملا منسوخ شده به حساب می آید و البته که هنوز مورد استفاده و محبوب می باشد. با آموزش هک می توان با بیشترین مفاهیم در این رابطه آشنا شوید.
در تئوری ممکن است شما بتوانید یک فایل مخرب و آلوده را با Hash یکسان با یک فایل قابل اعتماد جایگزین کنید و از این طریق حمله خود را انجام دهید اما اینکار چندان هم ساده نیست. حمله روز تولد عملا یک نوع حمله Brute Force برای الگوریتم رمزنگاری MD5 است که احتمال به وقوع پیوستن آن بسیار بسیار کم است اما تئوری احتمال وجود آن در داده های کلان وجود دارد. در میزان داده های کم این تداخل یا Hash Collision احتمال وقوع بسیار پایینی دارد اما در سطح کلان ممکن است این تداخل به وجود بیاید. به همین دلیل اساسا الگوریتم های سری SHA به کلی جایگزین MD5 شدند.