بررسی Session Hijacking
در این بخش از دوره آموزشی OWASP-WSTG به ششمین بخش از استاندارد WSTG با شناسه WSTG-SESS-09 می پردازیم که مربوط به بررسی Session Hijacking می باشد.
خلاصه
مهاجمی که به کوکیهای جلسه کاربر دسترسی پیدا میکند میتواند با ارائه آنها، فرآیند جعل را پیاده سازی کند. این حمله به عنوان ربودن جلسه یا Session Hijacking شناخته میشود. هنگام در نظر گرفتن حمله کنندگان تحت شبکه، به عنوان مثال، مهاجمانی که شبکه مورد استفاده توسط قربانی را تحت کنترل دارند، کوکیهای جلسه میتوانند از طریق HTTP در معرض مهاجم قرار گیرند. برای جلوگیری از این امر، کوکیهای نشست باید با ویژگی Secure علامتگذاری شوند به طوری که ارتباط آنها تنها بر روی کانال HTTPS برقرار شود.
توجه داشته باشید که ویژگی Secure نیز باید زمانی استفاده شود که برنامه کاربردی وب به طور کامل بر روی HTTPS مستقر شده باشد، در غیر این صورت حمله سرقت کوکی زیر ممکن خواهد بود.
فرض کنید که example.com به طور کامل بر روی HTTPS مستقر شدهاست، اما کوکیهای نشست آن، با ویژگی Secure تعریف نشده اند.
در این صورت مراحل حمله زیر ممکن خواهد بود:
۱. قربانی درخواستی را به “http://another-site.com” ارسال می کند
۲. مهاجم پاسخ مربوطه را تخریب میکند به طوری که یک درخواست را برای http://example.com راه اندازی کند.
۳. مرورگر اکنون تلاش میکند تا به http://example.com دسترسی پیدا کند.
۴. اگرچه درخواست با شکست مواجه میشود، اما کوکیهای نشست به طور واضح بر روی HTTP نشت میکنند.
از طرف دیگر، با ممنوع کردن استفاده از HTTP با استفاده از HSTS میتوان از Session Hijacking جلوگیری کرد. توجه داشته باشید که در اینجا یک نکته ظریف در مورد Scope کوکی وجود دارد. به طور خاص، اتخاذ کامل HSTS زمانی مورد نیاز است که Session Cookie ها با مجموعه ویژگی Domain صادر شود.
پذیرش کامل HSTS در مقالهای به نام Testing for Integrity Flaws in Web Sessions توسط Stefano Calzavara, Alvise Rabitti, Alessio Ragazzo و Michele Bugliesi توصیف شدهاست. پذیرش کامل HSTS زمانی رخ میدهد که میزبان،HSTS را برای خود و تمام sub-domain هایش فعال کند. پذیرش نسبی HSTS زمانی است که یک میزبان،HSTS را فقط برای خودش فعال میکند.
با ویژگی Domain، کوکیهای نشست را میتوان در میان sub-domain ها به اشتراک گذاشت. استفاده از HTTP با sub-domain ها باید اجتناب شود تا از افشای کوکیهای رمزنگاری نشده ارسالشده به HTTP جلوگیری شود.
برای نشان دادن این نقص امنیتی، فرض کنید که وب سایت example.com، قابلیت HSTS را بدون includeSubDomains فعال میکند. وب سایت، Session Cookie ها را با ویژگی Domain که بر روی example.com تنظیم شدهاست، منتشر میکند.
در این صورت حمله زیر ممکن خواهد بود:
۱. قربانی درخواستی را به “http://another-site.com” ارسال می کند
۲. مهاجم پاسخ مربوطه را تخریب میکند به طوری که یک درخواست را برای http://fake.example.com راه اندازی کند.
۳. مرورگر اکنون تلاش میکند تا به http://fake.example.com که توسط پیکربندی HSTS مجاز است، دسترسی پیدا کند.
۴. از آنجا که درخواست به یک زیر دامنه از example.com با ویژگی Domain ارسال میشود، Session Cookie ها را در بر میگیرد که بر روی HTTP به بیرون درز میکنند.
HSTS باید در راس دامنه به صورت کامل فعالیت کند تا از این حمله جلوگیری کند.
اهداف تست
- شناسایی Session Cookie های آسیبپذیر.
- Hijack نمودنه کوکیهای آسیبپذیر و ارزیابی سطح ریسک.
چگونه تست را انجام دهیم
استراتژی تست مهاجمان شبکه را هدف قرار داده است، از این رو فقط باید در سایت هایی بدون پذیرش کامل HSTS اعمال شود. (سایتهای با پذیرش کامل HSTS ایمن هستند، زیرا کوکیهای آنها از طریق HTTP منتقل نمیشوند).
ما فرض میکنیم که دو حساب تست در وب سایت تحت آزمایش داریم، یکی به عنوان قربانی و دیگری به عنوان مهاجم عمل میکند. ما سناریویی را شبیهسازی میکنیم که در آن مهاجم تمام کوکیهایی را که در برابر افشای HTTP محافظت نشدهاند، به سرقت میبرد و آنها را به وب سایت برای دسترسی به حساب قربانی ارائه میدهد. اگر این کوکیها برای اقدام از طرف قربانی کافی باشند، ربودن جلسه ممکن است.
در ادامه به مراحل اجرای این آزمون اشاره میکنیم:
1. ورود به وب سایت به عنوان قربانی و رسیدن به هر صفحهای که یک عملکرد ایمن را ارائه میدهد و نیاز به احراز هویت دارد.
2. همه کوکیها را که هر یک از شرایط زیر را برآورده میکنند، از ظرف کوکی حذف کنید.
• در صورت عدم پذیرش HSTS: ویژگی Secure تنظیم شده است.
• در صورتی که پذیرش بخشی از HSTS وجود داشته باشد: ویژگی Secure تنظیم شدهاست یا ویژگی Domain تنظیم نشده است.
3. یک snapshot از کوکی ها را ذخیره کنید.
4. راهاندازی تابع امنیتی شناساییشده در مرحله ۱.
5. مشاهده کنید که آیا عملیات در مرحله ۴ با موفقیت انجام شدهاست. اگر چنین بود، حمله موفقیتآمیز بود.
6. پاک کردن ظرف کوکی، ورود به عنوان مهاجم و رسیدن به صفحه در مرحله ۱.
7. در ظرف کوکیها، یکی پس از دیگری کوکیهای ذخیرهشده در مرحله ۳ را بنویسید.
8. راهاندازی مجدد تابع امنیتی شناساییشده در مرحله ۱.
9. پاک کردن ظرف کوکی و ورود مجدد به عنوان قربانی.
10. مشاهده کنید که آیا عملیات در مرحله ۸ با موفقیت در حساب قربانی انجام شدهاست یا خیر. اگر چنین بود، حمله موفقیتآمیز بود؛ در غیر این صورت، این سایت در برابر سرقت جلسه ایمن میباشد.
ما استفاده از دو ماشین یا مرورگر مختلف را برای قربانی و مهاجم توصیه میکنیم.
اگر برنامه وب برای تأیید دسترسی فعال از یک کوکی خاص، fingerprinting را اجرا می کند، این به شما امکان میدهد تا تعداد موارد مثبت کاذب را کاهش دهید. یک نوع کوتاهتر اما با دقت کمتر از استراتژی تست تنها به یک حساب تست نیاز دارد. همان الگو را دنبال میکند، اما در مرحله ۵ متوقف میشود (توجه داشته باشید که این کار مرحله ۳ را بیفایده میکند).