سایرشبکه و امنیت

چگونه با استفاده از ZIP Bomb از وب‌سایتمان دفاع کنیم؟

به این post امتیاز دهید

اگر تابه‌حال وظیفه میزبانی وب‌سایت را بر عهده داشته‌اید یا حداقل یک‌بار سرور را مدیریت کرده‌اید، حتماً به‌خوبی می‌دانید که همیشه افراد و کاربرانی وجود دارند که می‌خواهند به وب‌سایت شما نفوذ کنند و خرابکاری به بار بیاورند.

حتی ادمین‌هایی که تابه‌حال وب‌سایت‌های معمولی و کم‌اهمیت را میزبانی کرده‌اند هم با IP و لاگین‌های مهاجم متعددی مواجه شده‌اند.

درواقع اگر شما یک سرور لینوکس با دسترسی SSH دارید، ممکن است از سراسر جهان موردحمله قرار گیرد. البته شما هم می‌توانید فهرست کامل درخواست‌های ورود به سرورتان را روزانه کنترل کنید. برای این منظور باید دستور زیر را وارد کنید:

grep 'authentication failures' /var/log/auth.log

zip bomb code

وردپرس محبوب گاهی عامل اصلی بروز این مشکل است

اسکنرهای آسیب‌پذیری وب‌سایت‌ها پیش از معرفی وردپرس هم وجود داشتند؛ اما همان‌طور که می‌دانید، امروزه وردپرس در سرتاسر دنیا گسترش‌یافته است. به همین خاطر اغلب اسکنرهای نقاط ضعف حالا شامل امکان اسکن‌هایی برای پوشه‌های wp-admin که به‌درستی پیکربندی نشده‌اند یا پلاگین‌های patch نشده هم هستند.

بنابراین اگر یک گروه هکر تازه‌کار و کوچک بخواهد نام و اعتباری ایجاد کند، یکی از همین اسکنرها را دانلود می‌کند و به امید دستیابی به یک وب‌سایت و خدشه‌دار کردن آن، وب‌سایت‌های متعددی را تحت تست قرار می‌دهد.

به همین خاطر ادمین‌های وب‌سایت‌ها و سرورها همیشه با لاگ‌های حجیمی در حد چندین گیگابایت پر از لاگین‌های ناموفق مواجه می‌شوند. حالا این سؤال پیش می‌آید که:

آیا روش کارسازی برای مقابله با این لاگین‌ها وجود دارد؟

پس از امتحان برخی روش‌های مرسوم ازجمله IDS یا Fail2ban، ما به شما راهکار قدیمی ZIP Bomb را پیشنهاد می‌کنیم.

ZIP Bomb چیست؟

فشرده‌سازی در قالب فایل ZIP برای ذخیره داده‌های تکراری بسیار مناسب است. به همین خاطر اگر یک فایل متنی حجیم دارید که شامل داده‌های تکراری مانند صفر است، ZIP می‌تواند آن را به بهترین شکل فشرده کند.

در فایل نمونه ۴۲zip. می‌توانید مشاهده کنید که ZIP قادر است ۴۵ پتابایت معادل ۴۵۰۰۰۰۰ گیگابایت را تا ۴۲ بایت فشرده کند. اگر بخواهید محتوای اصلی چنین فایلی را مشاهده یا آن را از حالت فشرده خارج کنید، احتمالاً با خطای نبود حافظه کافی مواجه می‌شوید.

چگونه می‌توان از ZIP در اسکنرهای ناقص استفاده کرد؟

متأسفانه مرورگرهای وب قادر به درک ZIP نیستند اما می‌تواند GZIP را بفهمد. ابتدا باید فایل ۱۰ گیگابایتی GZIP را که پر از صفر است، بسازیم. البته می‌توانیم فشرده‌سازی را به روش چندلایه هم انجام دهیم اما فعلاً به ساده‌ترین روش آن می‌پردازیم.

dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip

همان‌طور که مشاهده می‌کنید، حجم این فایل حالا ۱۰ مگابایت است. البته این فایل می‌تواند فشرده‌تر هم شود اما همین حجم برای قدم اول کافی است.

پس از ایجاد این فایل، باید یک اسکریپت PHP هم برای تحویل آن به سمت کلاینت بسازیم.

<?php
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header('Content-Encoding: gzip');
header('Content-Length: '.filesize('10G.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile('10G.gzip');

می‌توانیم از این اسکریپت به‌عنوان یک روش دفاعی کاملاً ساده بهره ببریم:

<?php
$agent = lower($_SERVER['HTTP_USER_AGENT']);

//check for nikto, sql map or "bad" subfolders which only exist on wordpress
if (strpos($agent, 'nikto') !== false || strpos($agent, 'sqlmap') !== false || startswith($url,'wp-') || startswith($url,'wordpress') || startswith($url,'wp/'))
{
      sendBomb();
      exit();
}

function sendBomb(){
        //prepare the client to recieve GZIP data. This will not be suspicious
        //since most web servers use GZIP by default
        header("Content-Encoding: gzip");
        header("Content-Length: ".filesize('10G.gzip'));
        //Turn off output buffering
        if (ob_get_level()) ob_end_clean();
        //send the gzipped file to the client
        readfile('10G.gzip');
}

function startsWith($haystack,$needle){
    return (substr($haystack,0,strlen($needle)) === $needle);
}

این اسکریپت قطعاً قادر نیست راه‌حل نهایی دفاعی برای مشکلات شما باشد، اما می‌تواند از شما در مقابل هکرهای تازه‌کاری که پیش‌تر به آن‌ها اشاره کردیم، دفاع کند. آن‌ها اصلاً اطلاعی ندارند که همه این ابزارها دارای پارامترهای مختلفی برای تغییر user agent هستند.

وقتی این اسکریپت PHP فراخوانی می‌شود، چه اتفاقی می‌افتد؟

[table id=6 /]
خرید هاست لینوکس

تیم تحریریه هاست ایران

تیم تحریریه مجله هاست ایران متشکل از کارشناسان و نویسندگان متخصص در حوزه وب و هاستینگ است. این تیم با هدف ارائه محتوای ارزشمند و به‌روز به کاربران، به بررسی و تحلیل خدمات مختلف هاستینگ، آموزش‌های فنی و راهنمایی‌های کاربردی می‌پردازد. اعضای تیم با تجربه و دانش خود، سعی در ارتقاء آگاهی کاربران دارند و به آنها کمک می‌کنند تا بهترین تصمیمات را در زمینه انتخاب خدمات آنلاین بگیرند. تعهد به کیفیت و دقت در ارائه اطلاعات، از ویژگی‌های بارز این تیم است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

7  +  2  =  

دکمه بازگشت به بالا