احسان امجدی
کارشناس امنیت اطلاعات و ارتباطات

Application Level Session Hijacking چگونه کار می کند؟

در ادامه مباحث مربوط به انواع حملاتی که ممکن است شبکه شما را دچار اختلال کند و دسته‌بندی خاص آن‎ها، امروز نوع حملات مرتبط با موضوع session hijacking و بصورت ریزتر Application-level Session Hijacking و حملات زیر شاخه آن را مورد بررسی قرار میدهیم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

Application-level Session Hijacking

در session hijacking attack، یک توکن معتبر از طریق پیش بینی و یا سرقت آن مورد تهدید قرار می‌گیرد که این کار به منظور بدست آوردن حق دسترسی غیر مجاز به وب سرور است. همانطور که میدانید، حمله Session Hijacking به دو طریق صورت میپذیرد؛ network-level و Application-level. با استفاده از Network-level hijacking اطلاعات مفیدی بدست می‌آید که از آن میتوان برای انجام یک حمله Application-level hijacking استفاده لازم را برد.

بنابراین Network-level و Application-level hijacking در اکثر حالات با یکدیگر اتفاق می‌افتند. Application-level hijacking شامل در اختیار گرفتن کنترل یک session موجود یا ایجاد یک session جدید بر اساس اطلاعات سرقت شده توسط Network-level hijacking است. Application-level hijacking در خلال یک HTTP session رخ میدهد. HTTP session ها براحتی با لو رفتن session ID های مربوطه ( شناسه های منحصربفردشان) قابل سرقت هستند. Application-level session hijacking از راه های مختلفی میتواند یک session token را بخطر اندازد که در زیر به مهترین آن ها اشاره میکنیم:

  • پیش بینی session token
  • حملات Man-in-the-middle
  • حملات Client-side (کدهای آلوده جاوا اسکریپت، XSS، تروجان و ... )
  • حملات Man-in-the-browser
  • شنود Session

Session Sniffing

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

وب سایت توسینسو

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

پیش بینی session token

پیش بینی session token یا همان session ID شیوه ای از ربودن یا جعل هویت یک کاربر وب سایت است. این روش به session hijacking نیز معروف است. پایه و اساس این روش بر حدس زدن و یا ایجاد یک ارزش منحصربفرد مثل session ID ای که در احراز هویت یک کاربر یا یک session خاص کاربرد دارد، بنیان نهاده شده است. با استفاده از تکنیک session hijacking، یک مهاجم میتواند با دردست داشتن حق دسترسی یک کاربر بخطر افتاده درخواست های ping برای وب سایت مورد نظر ارسال کند.هنگامی که کاربر درخواست برقراری ارتباط را برای وب سایت ارسال کرد، وب سایت در ابتدا سعی میکند احراز هویت را انجام دهد و هویت کاربر را بررسی کند.

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

چگونه یک session token را پیش بینی میشود؟

اکثر وب سرورها از الگوریتم های معمول یا از پیش تغریف شده برای ایجاد session ID هایشان استفاده میکنند. این الگوریتم ها ممکن است session ID ها را براساس افزایش غیرخودکار اعداد و یا استفاده از روشهایی پیچیده تر مثل دخیل نمودن فاکتورهای زمان و دیگر متغیرها، ایجاد نمایند. هنگامی که session ID محاسبه شد، در URL، در یک فرم مخفی یا در یک کوکی ذخیره خواهد شد. در چنین مواردی، چنانچه مهاجم بتواند الگوریتم مورد استفاده را بدست آورد، براحتی مدیریت session ID را بر عهده خواهد گرفت. راه های ممکن که مهاجم بتواند حمله را ترتیب دهد ازطرق زیر امکان پذیر است:

  • ایجاد ارتباط با نرم افزار وب و بدست آوردن session ID
  • Brute forcing و یا محاسبه session ID بعدی
  • تغیر مقدار فعلی session ID ذخیره شده در URL فرم مخفی کوکی با فرض هویت کاربر بعدی

مهاجم session ID های متعدد را رصد کرده و سپس آن ها را به قصد پیدا کردن یک الگو، آنالیز میکند:

وب سایت توسینسو

در 25 سپتامبر 2010 و در ساعت 16:25:55، مهاجم موفق به پیش بینی session ID میشود:

وب سایت توسینسو

حملات Man-in-the-middle

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

وب سایت توسینسو

پس از قطع موفقیت آمیز ارتباط TCP، مهاجم قادر به خواندن، ویرایش و تزریق اطلاعات غلط به ارتباط قطع شده است. بخاطر ذات پروتکل HTTP و همچنین مکانیزم تبادل دیتا که همگی بر اساس ASCII هستند، حمله Man-in-the-middle بسیار موثر و کاراست. در این روش امکان مشاهده اطلاعات ترانسفر شده از طریق پروتکل HTTP وجود دارد.

حملات Man-in-the-Browser

این حمله شبیه حمله Man-in-the-middle است. تفاوت بین این دو تکنیک آن است که حمله Man-in-the-Browser از تروجان برای مداخله و دستکاری صحبت های رد و بدل شده بین مرورگر و مکانیزم امنیتی یا دیتابیس آن است. این حمله از تروجانی که بر روی سیستم نصب شده است برای مداخله در مرورگر و مکانیزم امنیتی آن استفاده میکند. این تکنیک قابلیت ویرایش و شنود تراکنش ها را دارد. مهمترین هدف این حمله سرقت مالی توسط دستکاری تراکنش های در بانکداری اینترنتی است. در این روش مهاجمان میتوانند اطلاعات حساس یا پول را بدون بجا گذاشتن کوچکترین اثر و یا آلارمی سرقت کنند. و تمام این ها در حالتی اتفاق میافتد که تمام تراکنش ها در بستر SSL صورت میپذیرد. تمام مکانیزم های امنیتی ظاهرا نرمال هستند. بنابراین برای پیشگیری از قربانی شدن در این حمله باید هنگام استفاده از تراکنش های اینترنتی بانک خود حساس و باهوش عمل کرد.

مراحل اجرای یک حمله Man-in-the-Browser

  1. تروجان در ابتدا نرم‌افزار کامپیوتر( سیستم عامل یا اپلیکیشن) را تحت تاثیر خود قرار میدهد.
  2. بعد از آن که کاربر مرورگر را ریست کرد، کد آلوده در قالب فایل هایی بارگذاری میشود.
  3. هنگامی که وب‌پیج لود شد، فایل حاوی کد آلوده (extension)، از URL استفاده کرده و آن را با لیست سایت های تعریف شده برای حمله که از پیش برایش تعریف شده است، چک میکند.
  4. Extension هنگامی که پیج خاص لود شده با بررسی چک لیست برای حمله تائید شد، یک دکمه کنترل کننده را رجیستر میکند.
  5. تروجان کد آلوده ( فایل های extension) را نصب کرده و آن را در ساختار مرورگر ذخیره میکند.
  6. فایل های extension یک کنترل کننده را برای هر بازدید از وب پیج رجیستر میکنند.
  7. کاربر بصورت امن به وب سایت Logon میکند.
  8. مرورگر فرم و مقادیر ویرایش شده را به سرور ارسال میکند.
  9. هنگامی که کاربر بر روی دکمه کنترل کننده کلیک میکند، extension با کمک DOM interface تمام اطلاعات را از بخش های مختلف فرم بازیابی کرده و آن ها را ویرایش میکند.
  10. بعد از آن که سرور تراکنش را انجام داد، یک رسید دیجیتالی صادر میشود.
  11. مرورگر رسید دیجیتالی را با جزئیات اصلی اش نشان میدهد.
  12. سرور مقادیر تغیر داده شده را دریافت میکند اما نمیتواند بین مقادیر اصلی و ویرایش شده، تمایز قائل شود.
  13. در این صورت مرورگر رسید دیجیتالی مربوط به مقادیر اصلاح شده را دریافت میکند.
  14. کاربر فکر میکند که تراکنش انجام شده با سرور بدون هیچگونه خللی انجام شده است.

حملات Client-side

در این نوع حمله مهاجم سعی میکند تا از آسیب پذیری های موجود در اپلیکیشن کلاینت نهایت استفاده را برده و از طریق اجبار آن به برقراری ارتباط با سرور آلوده یا اجبار به پردازش اطلاعات آلوده به هدف خود برسد.در حالت اول یعنی هنگامی که کاربر با سرور تعامل و ارتباط برقرار میکند، شانس زیادی در اجرای این حمله وجود دارد. اگر کلاینت با سرور ارتباطی نداشته باشد، آنگاه اطلاعات آلوده نیز نمیتوانند از طرف سرور به کلاینت فرستاده شوند. بنابراین اپلیکیشن از حمله و آلودگی در امان میماند. نمونه نرم افزاری که در برابر حمله Client-side آسیب پذیر است، نرم افزارهای مربوط به ارسال پیام (چت) هستند. هنگامی که این اپلیکیشن ها ران میشوند کلاینت ها معمولا بر اساس ساختاربندی ای که شده به یک سرورِ ریموت وصل میشوند. حملات client-side از سه راه اجرایی میشوند:

  • XSS: حملات Cross-Site scripting شیوه ای از حملات تزریقی(injection) هستند که در آن ها اسکریپت های آلوده به وب سایت‌ها تزریق میشوند.
  • کدهای آلوده جاوا اسکریپت: مهاجم ممکن است جاوا اسکریپت های آلوده را در یک وب پیچ جا سازی نماید . شما را به بازدید از آن صفحه فریب دهد. هنگامی که شما آن صفحه را در مرورگر خود باز میکنید، اسکریپت های آلوده بصورت مخفیانه و بدون هیچگونه پیغام هشداری اجرا میشوند.
  • تروجان‌ها: تروجان یک اپلیکیشن ناخواسته است که به ظاهر خود را موجه نشان میدهد اما هدف اصلی آن ایجاد دسترسی های بی مجوز برای مهاجمان است.

حملات Cross-site Script

این حملات نوعی آسیب پذیری در سیستم امنیتی کامپیوتر است. این آسیب پذیری معمولا در نرم افزارهای تحت وب یافت میشوند و از آن ها برای دور زدن کنترل دسترسی ها استفاده میشود. مهاجم Client-side Script را به صفحات وب تزریق کرده و آن ها برای حملات cross-side script به سوی قربانیان هدف ارسال میکند.در واقع این نوع حمله همان حمله Client-inside است که در آن مهاجم با ایجاد کد یا برنامه های آلوده، Session ID را بخطر میاندازد.

نویسنده: احسان امجدی

منبع: انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.


احسان امجدی
احسان امجدی

کارشناس امنیت اطلاعات و ارتباطات

احسان امجدی ، مشاور امنیت اطلاعات و ارتباطات و تست نفوذ سنجی ، هکر کلاه سفید ، مدرس دوره های تخصصی امنیت اطلاعات و شبکه ، تخصص در حوزه های سرویس های مایکروسافت ، Routing و Switching ، مجازی سازی ، امنیت اطلاعات و تست نفوذ ، کشف جرائم رایانه ای و سیستم عامل لینوکس ، متخصص در حوزه SOC و ...

نظرات