۱.۲) انگشت نگاری وب سرور

خلاصه

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

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

اهداف آزمایش

  • نسخه و نوع یک وب سرور در حال اجرا را تعیین کنید تا امکان کشف بیشتر هر گونه آسیب پذیری شناخته شده وجود داشته باشد.

چگونه آزمایش کنیم

تکنیک های مورد استفاده برای انگشت نگاری وب سرور عبارتند از گرفتن بنر (banner grabbing)، ایجاد پاسخ به درخواست های نادرست، و استفاده از ابزارهای خودکار برای انجام اسکن های قوی تر که از ترکیبی از تاکتیک ها استفاده می کنند. فرض اساسی که همه این تکنیک ها بر اساس آن عمل می کنند یکسان است. همه آنها تلاش می کنند تا برخی از پاسخ ها را از وب سرور استخراج کنند که سپس می تواند با پایگاه داده ای از پاسخ ها و رفتارهای شناخته شده مقایسه شود و بنابراین با یک نوع سرور شناخته شده مطابقت داده شود.

گرفتن بنر (Banner Grabbing)

گرفتن بنر با ارسال یک درخواست HTTP به وب سرور و بررسی هدر پاسخ (response header) آن انجام می شود. این را می توان با استفاده از ابزارهای مختلف، از جمله telnet برای درخواست های HTTP، یا openssl برای درخواست های TLS/SSL انجام داد.

به عنوان مثال، در اینجا پاسخ به یک درخواست ارسال شده به یک سرور آپاچی (Apache) است.

HTTP/1.1 200 OK
Date: Thu, 05 Sep 2019 17:42:39 GMT
Server: Apache/2.4.41 (Unix)
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
ETag: "75-591d1d21b6167"
Accept-Ranges: bytes
Content-Length: 117
Connection: close
Content-Type: text/html
...

در اینجا پاسخ دیگری است، این بار از nginx ارسال شده است.

HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 05 Sep 2019 17:50:24 GMT
Content-Type: text/html
Content-Length: 117
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Connection: close
ETag: "5d71489a-75"
Accept-Ranges: bytes
...

در اینجا پاسخ ارسال شده توسط lighttpd اینگونه به نظر می رسد.

HTTP/1.0 200 OK
Content-Type: text/html
Accept-Ranges: bytes
ETag: "4192788355"
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Content-Length: 117
Connection: close
Date: Thu, 05 Sep 2019 17:57:57 GMT
Server: lighttpd/1.4.54

در این مثال ها، نوع و نسخه سرور به وضوح مشخص شده است. با این حال، برنامه های آگاه از امنیت ممکن است با تغییر هدر، اطلاعات سرور خود را مبهم کنند. به عنوان مثال، در اینجا گزیده ای از پاسخ به درخواست یک سایت با هدر اصلاح شده است:

HTTP/1.1 200 OK
Server: Website.com
Date: Thu, 05 Sep 2019 17:57:06 GMT
Content-Type: text/html; charset=utf-8
Status: 200 OK
...

در مواردی که اطلاعات سرور مبهم است، آزمایش کنندگان ممکن است بر اساس ترتیب فیلدهای سرصفحه، نوع سرور را حدس بزنند. توجه داشته باشید که در مثال آپاچی بالا، فیلدها از این ترتیب پیروی می کنند:

  • تاریخ (Date)
  • سرور (Server)
  • آخرین تغییر (Last-Modified)
  • ای تگ (ETag)
  • محدوده های پذیرش (Accept-Ranges)
  • طول محتوا (Content-Length)
  • ارتباط (Connection)
  • نوع محتوا (Content-Type)

با این حال، در هر دو مثال nginx و سرور مبهم، فیلدهای مشترک از این ترتیب پیروی می کنند:

  • سرور (Server)
  • تاریخ (Date)
  • نوع محتوا (Content-Type)

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

ارسال درخواست های نادرست (Sending Malformed Requests)

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

به عنوان مثال، در اینجا پاسخ به درخواست متد غیر موجود SANTA CLAUS از یک سرور آپاچی است.

GET / SANTA CLAUS/1.1


HTTP/1.1 400 Bad Request
Date: Fri, 06 Sep 2019 19:21:01 GMT
Server: Apache/2.4.41 (Unix)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

در اینجا پاسخ به همان درخواست از nginx است.

GET / SANTA CLAUS/1.1


<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.3</center>
</body>
</html>

در اینجا پاسخ به همان درخواست از lighttpd است.

GET / SANTA CLAUS/1.1


HTTP/1.0 400 Bad Request
Content-Type: text/html
Content-Length: 345
Connection: close
Date: Sun, 08 Sep 2019 21:56:17 GMT
Server: lighttpd/1.4.54

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>400 Bad Request</title>
 </head>
 <body>
  <h1>400 Bad Request</h1>
 </body>
</html>

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

استفاده از ابزارهای اسکن خودکار (Using Automated Scanning Tools)

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

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

  • نت کرفت (Netcraft)، یک ابزار آنلاین که سایت ها را برای اطلاعات، از جمله جزئیات وب سرور اسکن می کند.
  • نیکتو (Nikto)، یک ابزار اسکن خط فرمان (command-line) منبع باز است.
  • اِن مپ (Nmap)، یک ابزار خط فرمان (command-line) منبع باز است که دارای رابط کاربری گرافیکی، Zenmap است.

اصلاح

در حالی که اطلاعات افشا شده سرور لزوماً به خودی خود یک آسیب پذیری نیست، اما اطلاعاتی است که می تواند به مهاجمان در سوء استفاده از آسیب پذیری های دیگر که ممکن است وجود داشته باشد کمک کند. اطلاعات سرور افشا شده همچنین می تواند مهاجمان را به یافتن آسیب پذیری های سرور خاص نسخه ای که می تواند برای بهره برداری از سرورهای وصله نشده استفاده شود، سوق دهد. به همین دلیل توصیه می شود اقدامات احتیاطی انجام شود. این اقدامات عبارتند از:

  • پنهان کردن اطلاعات وب سرور در هدرها، مانند ماژول mod_headers آپاچی.
  • استفاده از یک سرور پراکسی معکوس (reverse proxy server) سخت شده برای ایجاد یک لایه امنیتی اضافی بین وب سرور و اینترنت.
  • اطمینان از به روز بودن وب سرورها با آخرین نرم افزارها و وصله های امنیتی.

You'll only receive email when they publish something new.

More from انسانیت
All posts