معرفی
در این مقاله قصد داریم Session Fixation در حمله برنامه های تحت وب ASP.NET با استفاده از Session Management را بررسی کنیم. برنامههای مبتنی بر وب معمولاً از جلسات استفاده میکنند تا هر زمان که کاربران از آن برنامه بازدید میکنند، تجربهای روان را فراهم کنند. جلسات به ذخیره تنظیمات برگزیده، تم های سفارشی کاربر، یا گاهی اوقات جایی که کاربر کار را متوقف کرده است، کمک می کند. مدیریت جلسه در برنامه های کاربردی وب استفاده می شود زیرا HTTP یک پروتکل بدون حالت است، به این معنی که نمی تواند یک راه یکپارچه برای وب سرور برای حفظ حالت ها در طول درخواست های بعدی کاربران ارائه دهد.
در مدیریت جلسات وب، سرور در هنگام تعامل با کاربر یک شناسه جلسه (ID) تولید می کند و این شناسه جلسه را به مرورگر کاربر ارسال می کند و مطمئن می شود که هر بار که کاربر درخواستی از سرور می دهد از همین شناسه استفاده می شود. شناسههای جلسه در نتیجه به نشانههای شناسایی برای کاربران تبدیل میشوند و سرورها میتوانند از آنها برای حفظ دادههای جلسه (مثلاً متغیرها) استفاده کنند و تجربهای شبیه به جلسه برای کاربران ایجاد کنند.
سه روش برای نگهداری جلسات در وب عبارتند از:
- آرگومان های URL
- فیلدهای فرم پنهان
- بیسکویت ها
از بین این سه روش، کوکیها ناامنترین و راحتترین روشها هستند. برای اطمینان از امنیت برنامه وب، نمایش شناسه جلسه در URL کار خوبی نیست، بنابراین کوکی ها را بهترین انتخاب می کند.
Session Fixation چیست؟
Session Fixation برعکس بدست آوردن Session ID کاربر است، بلکه شامل این است که مهاجم قبل از اینکه کاربر وارد سیستم شود، Session ID کاربر را تعمیر کند، که به هیچ وجه نیاز به دریافت Session ID کاربر را از بین میبرد.
مدیریت جلسات ASP.NET
هنگامی که کاربر در سایتی که کوکیها را میپذیرد وارد میشود، ASP.NET یک Session ID تولید میکند و آن را در داخل یک کوکی قرار میدهد که بعداً به عنوان تأیید اعتبار کاربر استفاده میشود.
Set-Cookie: ASP.NET_SessionId=ascfinmhgtvcfredsghjklpoo; مسیر=/; HttpOnly
هنگامی که یک کاربر برای بار دوم وارد سیستم می شود، ASP.NET فقط به اعتبار Session ID یعنی یک رشته 24 کاراکتری متشکل از کاراکترهای az و 0-5 نگاه می کند. اگر مشتری یک شناسه جلسه ارائه نکند یا یک شناسه جلسه نامعتبر ارائه کند، ASP.NET یک شناسه جدید صادر می کند. اگر مشتری یک شناسه جلسه معتبر ارائه کند و هیچ جلسه ای با آن شناسه در سرور وجود نداشته باشد، ASP.NET شناسه را می پذیرد و یک شی جلسه جدید برای آن ایجاد می کند. در نتیجه، تا زمانی که مرورگر آن را حذف نکند، همان شناسه جلسه را نیز حفظ خواهید کرد.
ASP.NET با استفاده از Forms Authentication و Windows Identity Foundation (WIF) هویت کاربر را حفظ می کند. هر دوی این روش ها از کوکی ها برای ذخیره اطلاعات هویتی کاربر استفاده می کنند. این کوکی ها به عنوان کوکی های احراز هویت شناخته می شوند. کوکی های احراز هویت رمزگذاری شده و ضد دستکاری هستند.
از سوی دیگر، ASP.NET SessionStateModule وضعیت نشست را کنترل می کند و این کار را بدون توجه به هویت کاربر فعلی انجام می دهد. در پایان روز، هیچ ارتباطی بین هویت کاربر و جلسه ASP.NET وجود ندارد. شناسههای جلسه توسط SessionIDManager داخلی مدیریت میشوند و یکی از بزرگترین وظایف آن ایجاد و اعتبارسنجی شناسههای جلسه است.