اخبار داخلی آرمان داده پویان

مقالات

بررسی پروتکل HTTP از دیدگاه امنیتی (قسمت سوم)

بررسی پروتکل HTTP از دیدگاه امنیتی

قسمت سوم

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


احراز هویت

در ارتباط با احراز هویت در HTTP سه مکانیزم زیر را می‌توان در نظر گرفت:

  • Basic
  • Digest
  • Form-Based

Basic

یکی از مکانیزم‌های احراز هویت که در پروتکل HTTP به صورت پیش‌فرض وجود دارد، مکانیزم Basic است. در این روش زمانی که کاربر به سمت سرور درخواستی را ارسال می‌نماید که نیاز به احراز هویت دارد، سرور در پاسخ HTTP response 401 را ارسال می‌نماید. در این پاسخ، سرآیندی با نام WWW-Authenticate بدین صورت مقداردهی شده است:

WWW-Authenticate: Basic

در مرحله بعد و در سمت کاربر بعد از پردازش این پاسخ، گذر واژه و نام کاربری را که با یک Colon (:) از هم جدا شده‌اند را به سمت سرور ارسال می‌کند. اشکال عمده این روش امنیت بسیار پایین آن‌ می‌باشد. زیرا بر روی گذرواژه تنها یک base64 encoding انجام شده است که حاصل آن برگشت پذیر است. در نتیجه برای انتقال اطلاعات حساسی همچون اطلاعات احراز هویت پیشنهاد نمی‌گردد. در شکل زیر می‌توانید مراحل مختلف این روش احراز هویت را مشاهده نمایید:

Digest

در این روش زمانی که کاربر به سمت سرور درخواستی را ارسال می‌نماید که نیاز به احراز هویت دارد، سرور در پاسخ HTTP response 401 را بازمی‌گرداند. در این پاسخ، سرآیندی با نام WWW-Authenticate  با مقادیر Digest، nonce(number only used once)  و realm مقداردهی شده است. زمانی که کاربر این پاسخ را دریافت می‌نماید، اطلاعات احراز هویت را با nonce و realm الحاق کرده و یک MD5 hash تولید می‌نماید. سپس hash دوم با الحاق HTTP method و URI می‌سازد. سرآیند Authorize نیز مقداردهی می‌شود. مقدار این سرآیند شامل realm، nonce، URI و پاسخ می‌باشد، پاسخ هم یک MD5 است که از ترکیب دو hashای که توضیح دادیم به دست آمده است.

همانطور که پیداست، Digest روش امن‌تری به نسبت Basic می‌باشد، اما باز هم پیشنهاد می‌نماییم برای انتقال اطلاعات حساسی مانند اطلاعات احراز هویت از روش Digest استفاده نکنید. اطلاعات مهم و حساسی مانند گذرواژه‌ها بایستی بر روی ارتباطات HTTPS ارسال شوند.

Form-Based

در این روش ما با مفهومی با نام توکن سر و کار داریم. قبل از توضیح در ارتباط با این روش کمی در ارتباط با stateless بودن پروتکل HTTP بایستی توضیح دهیم. هر درخواست HTTP که در مرورگر ساخته می‌شود از درخواست‌های دیگر کاملا مستقل است، از نگاه سرور نیز همینطور می‌باشد. یعنی هرگاه وب سرور درخواستی را دریافت می‌نماید آن را مستقل از هر درخواست دیگری پردازش می‌کند. حال برگردیم به بحث احراز هویت. مثالی را در نظر بگیرید در ارتباط با چک کردن G-mail. زمانی که می‌خواهید به صندوق ورودی خود دست یابید و درخواست خود را ارسال می‌نمایید در پاسخ وب سرور اطلاعات احراز هویت را می‌خواهد تا بعد از دریافت آن‌ها اجازه login را به کاربر بدهد. HTTP request بعدی کاربر شامل نام کاربری و گذرواژه است، سرور نیز بعد از دریافت اطلاعات و بررسی آن‌ها در صورت صحیح بودن در پاسخ login success را ارسال می‌نماید. درخواست-پاسخ و اتمام این چرخه. در درخواست بعدی کاربر می‌خواهد به صندوق وروردی رایانامه‌اش دست یابد، اما همانطور که گفتیم HTTP یک پروتکل stateless است و درخواست‌ها ارتباطی با هم ندارند، حال سرور چطور بدون احراز هویت مجدد، درخواست کاربر را پاسخ دهد؟ برای حل این مشکل، سرور یک رشته تصادفی با نام session token (توکن نشست) را به سمت کاربر ارسال می‌نماید، در سمت کاربر نیز در هر درخواست این session token بایستی گنجانده شود تا نیاز به احراز هویت مجدد نباشد.

سرآیندهای HTTP

سرآیندهای HTTP، در واقع خطوط اطلاعاتی هستند که حاوی اطلاعات در ارتباط با بدنه پیام می‌باشند. پروتکل HTTP یک سری سرآیند اجباری و اختیاری دارد. ساختار سرآیند HTTP به صورت زیر می‌باشد:

  • “Header-Name: value”

به طور مثال یکی از سرآیندهای اجباری Host: value می‌باشد. سرآیندهایی که در پایین آورده‌ایم، سرآیندهایی است که عموما در درخواست‌های HTTP وجود دارند:

  • https://www.armandata.ir/http-request-smuggling/.
  • Accept-Language: en-US,en;q=0.8,fa;q=0.6,es;q=0.4
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36
  • Accept: text/html,application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8

علاوه بر سرآیندهای HTTP استانداردی که وجود دارد، در پروتکل HTTP می‌توان از یک سری سرآیند سفارشی نیز استفاده کرد. معمولا این سرآیندها با X شروع می‌شوند. به طور مثال X-content-type-Options. اما برخی از این سرآیندهای سفارشی امروزه به صورت سرآیند استاندارد درآمده‌اند، به طور مثال سرآیند X-Content-Security-Policy که امروزه به صورت Content-Security-Policy درآمده است.  در جدول زیر نمونه‌ای از سرآیندهای HTTP رایج را  آورده‌ایم.

href=”https://www.acunetix.com/blog/articles/automated-detection-of-host-header-attacks/”>host header attacks.

سرآیند مثال نوع
Cache-Control Cache-Control: max-age=86400 Request/Response
Connection Connection: close Request/Response
Content-Type Content-Type: text/html; charset=utf-8 Request/Response
Content-Encoding Content-Encoding: gzip Request/Response
Content-Length Content-Length: 512 Request/Response
Cookie Cookie: session=E8DF34AE331AE94F5549B10B7C7A4FA; color=blue Request
Host Host: example.com Request
Referer Referer: https://www.example.com/page_1 Request
Authorization Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= Request
User-Agent User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36 Request
Accept Accept: text/html Request
Accept-Encoding Accept-Encoding: compress, gzip Request
Set-Cookie Set-Cookie: session=E8DF34AE331AE94F5549B10B7C7A4FA; color=blue Response
Server Server: nginx/1.13.9 Response

نتیجه گیری

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

تعداد بازدید: 114


تازه ترین ها