مجموعه ها


پربازدیدترین مطالب

گوشی گم شده خود را صدا بزنید، جواب می دهد بررسی حملات تزریق SQL یا SQL INJECTION و مقابله با آن در PHP و ASP.NET گوشی گمشده خود را با Android Device Manager پیدا کنید از تصویر گوشی اندرویدی خود خسته شده اید؟ بررسی حملات سرقت نشست Session Hijacking و راههای مقابله با آن بررسی حملات تزریق کد XSS یاCSS و مقابله با آن در PHP و ASP.NET حملات محرومیت از سرویس DOS و DDOS - بخش اول اجرای کدهای مخرب در سمت سرور یا Remote Code Execution حملات محرومیت از سرویس DOS و DDOS - بخش دوم از همه جای دنیا به کامپیوتر خود وصل شوید.

آخرین مطالب

5 نکته و ترفند در جستجو با گوگل که باید بدانید از همه جای دنیا به کامپیوتر خود وصل شوید. از گوشی خود پرینت بگیرید اجرای کدهای مخرب در سمت سرور یا Remote Code Execution امنیت فایل های موقت یا Security For Temporary Files بررسی حملات سرقت نشست Session Hijacking و راههای مقابله با آن بررسی حملات تزریق SQL یا SQL INJECTION و مقابله با آن در PHP و ASP.NET بررسی حملات تزریق کد XSS یاCSS و مقابله با آن در PHP و ASP.NET حملات محرومیت از سرویس DOS و DDOS - بخش دوم حملات محرومیت از سرویس DOS و DDOS - بخش اول

بررسی حملات سرقت نشست Session Hijacking و راههای مقابله با آن

بررسی حملات سرقت نشست Session Hijacking و راههای مقابله با آن

بسیاری از وب سایت ها بگونه ای طراحی شده اند که پس از برقراری اولین ارتباط کاربر، او را ردیابی و هویتش را شناسایی می کنند. برای این منظور، کاربران باید هویت خود را به آن سایت ثابت کنند و معمولا این کار را با فراهم کردن نام کاربری [1] و رمز عبور[2] انجام می دهند. اما برای اینکه کاربر مجبور نباشد در هر تعامل یا درخواست، کلمه و نام عبور خود را به وب سرور ارائه دهد، در همان اولین ارتباط و پس از اینکه کاربر نام کاربری و رمزعبور درست را وارد کرد، نشستی[3]برای آن کاربر ایجاد می کنند. نشست ها روشی برای ذخیره حالت[4] و متغیرهای خاص کاربر در درخواست های بعدی هستند. برای تشخیص این نشست در میان نشست­های کاربران دیگر، یک شناسه یکتا و غیرقابل پیش­بینی به نام “SID” توسط وب سایت تولید می­شود و به مرورگر هر کاربر فرستاده می ­شود.(از طریق URL یاCookie ).

هرگاه مرورگر کاربر بخواهد درخواست جدیدی به وب سرور ارائه دهد این SID را نیز باید به همراه آن ارائه دهد. توانایی نگهداری و محدود کردن عملیات و متغیرهای کاربر در نشست­های یکتا برای امنیت وب بسیار حیاتی است. این در حالی است که مکانیزم های مدیریت نشست که بصورتتوکار[5] در زبان­های مختلف برنامه نویسی وب مثل php وجود دارند در این زمینه بسیار ضعیف عمل می­کنند و این وظیفه برنامه نویسان است تا با اضافه کردن اقداماتی سطح امنیت کافی را برای نشست ها فراهم کنند.

قبل از پرداختن به موضوع نشست باید اطلاعاتی در مورد کوکی[6] داشته باشید.

کوکی: یک کوکی عبارت است از یک بسته اطلاعات فرستاده شده توسط سرور برای ذخیره در مرورگر تا بتواند بعدا از طریق آن مرورگر دوباره خوانده شود. کوکی می تواند شامل هرگونه اطلاعات دلخواه سرور باشد و از آن برای نگهداری State استفاده ­شود. State به توانایی یک برنامه برای کار با کاربر بصورت محاوره ای اشاره دارد. بسته به پارامترهایی که برای پیکربندی کوکی در هنگام ایجاد آن بکار رفته است، کوکی می­تواند برای مدت زمان نامحدودی بر روی دیسک وجود داشته باشد. کوکی نشست نوع خاصی از کوکی است که فیلدی به نام تاریخ انقضا ندارد و هنگامی که پنجره مرورگر بسته می شود، از بین می­رود. اما نوع دیگر کوکی ها، کوکی های دائم هستند که تا زمانیکه تاریخ انقضای آنها فرا نرسیده است، بر روی دیسک وجود دارند. مرورگرها قوانینی دارند که حق دسترسی به کوکی را فقط به سایت هایی که در دامنه مشخص شده ­اند، (هنگامی که کوکی تنظیم می­شود) محدود می­ کنند.

Set-cookie: LAST=12; Domain=.webapp.net; Expires=Fri , 18-Feb-2005 21:27:20 GMT;

در Http Response بالا، یک کوکی دائم برای دامنه webapp.net و زیر دامن ه­های آن Set شده است تنها webapp.net و زیر دامنه های آن حق دسترسی و تغییر این کوکی را دارند.

مدیریت نشست

مدیریت نشست شامل تکنیک هایی می شود که برنامه هاي کاربردي تحت وب با استفاده از آنها به کاربران اجازه می دهند تا بدون نیازبه Login هاي تکراري به صفحات مختلف سایت دسترسی یابند. بنابراین مسئولیت مدیریت نشست به خود برنامه کاربردي واگذار می شود. چون پروتکل HTTP یک پروتکل Stateless است. مدیریت نشست برنامه کاربردي را ملزم می سازد تا پس از احراز هویت کاربر، یک توکن به سمت مشتري (معمولاً مرورگر کاربر) بفرستد. در بیشتر موارد، این توکن از طریق دستور Set-Cookie (که یک Http header است) در مشتری ذخیره می شود. پس از آن مرورگر کاربر بایستی این توکن را به همراه هر درخواست بعدي به سرور بفرستد تا از طریق آن سرور بتواند مرورگر را شناسایی کند و در صورت احراز هویت به درخواست او پاسخ دهد.
به طور کلی ، مکانیزم هاي مدیریت نشست به دو دسته تقسیم می شوند.

1 - مکانیزم هاي Client-Side

در این فرم از مدیریت نشست ، توکن شامل داده ضروري براي اعطاي اختیار به کاربر است. چون این توکن و در نتیجه قسمت عمده اطلاعات اعطاي اختیار در مشتري ذخیره می شود، به این تکنیک مکانیزم Client-Side و به توکن ذخیره شده کوکی گفته می شود. دستکاري درست این کوکی می تواند منجر به حمله session hijacking شود.

2- مکانیزم هاي Server-Side

تفاوت اساسی بین این مکانیزم با مکانیزم قبلی در این است که درفرم server-side، قسمت عمده اطلاعات اعطاي اختیار درداخل دیتابیسی در طرف سرور ذخیره می شوند و توکن پاس داده شده بین مشتري و برنامه کاربردي صرفاً به عنوان شاخصی به دیتابیس عمل می کند. به این توکن اغلب SID گفته می شود.

حمله بر علیه مکانیزم هاي مدیریت نشست

بسیاري از برنامه هاي کاربردي تحت وب که مجبور به استفاده ازSID هستند، در مورد ایجاد یک نشست و نظارت بر آن به شدت ضعف دارند. یک نفوذگر ممکن است با یک برنامه کاربردي نشست برقرار کرده و یک SID معتبر دریافت کند؛ سپس آن را عوض کرده و خودش را در قالب یک کاربر دیگر جا بزند و از آن به بعد روند عملیات او را ادامه دهد. برنامه هاي کاربردي تحت وب که SID را به صورت بسیار ضعیف تولید می کنند، بسیار ناامن خواهند بود. زیرا اگر اخلالگر SID یک کاربر دیگر را به طور عمدي حدس زده و از آن به جاي SID خود استفاده کند، برنامه کاربردي تحت وب گمان می کندکه اخلالگر همان کاربر مجاز است و از آن به بعد با اخلالگر محاوره می کند. یعنی با تعویض، SID نفوذگر به یک کاربر مجاز دیگر تبدیل خواهد شد و بجاي او سرویس خواهد گرفت.
انواع حملات به طور کلی، حملات بر علیه نشست به دو دسته کلی تقسیم می شوند.

1- Session Hijacking
2- Session Fixation

Session Hijacking -1

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

- session prediction

یک متد ربودن نشست و جعل هویت کاربر وب سایت است. در واقع حمله session hijacking، وقتی کاربر بتواند SID را حدس بزند یا استنتاج کند، اتفاق می افتد. در مرحله اول، اخلالگر نیاز دارد تعدادي SID معتبر(که براي شناسایی کاربران احراز هویت شده به کار می روند) را جمع آوري کند. سپس باید ساختار SID اطلاعاتی که براي ایجاد آن به کار رفته است و الگوریتم hash یا رمزگذاري به کار برده شده توسط برنامه کاربردي براي محافظت از SID ها را بفهمد.

 


تصویر 11: استفاده از اطلاعات قابل پیش بینی براي تعیین مشخصه نشست


- Session Sniffing 


ربودن SID در حین عبور ازشبکه از طریق قرار گرفتن اخلالگر در بین راه و قطع ارتباط مشتري و سرور مثلاً با استفاده از متد.“man-in-the-middle”
 متد man-in-the-middle: حمله ارتباط بین دو سیستم را قطع می کند. به عنوان مثال، در یک تراکنش Http، مقصد اتصال TCPبین سرور و مشتري است. با بکاربردن تکنیک هاي مختلف، اخلالگر اتصال TCP اولیه را به دو اتصال جدید تقسیم می کند. یکی بین کلاینت و اخلالگر و دیگري بین سرور و اخلالگر.

تصویر 2: حمله Man-In-The-Middle

- Brute Force Attack 

این حملات از متدهاي کامل سعی و خطا استفاده می کنند تا مقادیر معتبر احراز هویت را بیابند. این حمله در واقع روشی براي بدست آوردن این اطلاعات حساس و مهم است. احراز هویت فرآیندي است که تعیین می کند که آیا کاربر همان کسی است که ادعا می کند یا خیر. این کار معمولاً با استفاده از کلمه و نام عبور انجام می شود. با استفاده از Brute Force اخلالگر ترکیباتی از مجمومه کاراکترهاي پذیرفته شده را براي یافتن یک ترکیب خاص امتحان می کند تا آن (که به آنها اجازه دسترسی به یک ناحیه در سایت را می دهد ) را بیابند. اما شناسایی هویت کاربر فقط با کلمه و نام عبور صورت نمی گیرد. با بکاربردن یک ابزار Brute Force، پیدا کردن یک SID مجاز که در URL ظاهر می شود ساده است که از آن براي ارتباط دادن صفحات وب خاص به یک کاربر خاص استفاده می شود. با بکاربردن برنامه هاي Brute Force اخلالگر باید هزاران SIDرا در این URL امتحان کنند تا به SID معتبر برسند.

- Session Exposure

این آسیب پذیري در ارتباط با سرورهای اشتراکی می باشد. مکانیزم مدیریت نشست، به طور پیش فرض دایرکتوري یکسانی را براي ذخیره داده نشست ها به کار می برد .(در سیستم عامل Unix از /tmp و در سیستم عامل ویندوز از c:\Windows\temp براي ذخیره داده session استفاده می کند. متغیرهاي نشست در فایل هایی ذخیره می شوند که نام این فایل ها بر اساس SID مشخص می شود و هر فایل شامل متغیر هایی براي آن نشست به صورت متن واضح است و این ممکن است باعث افشاي داده نشست شود .چون هر کاربر می تواند سیستم فایل خود را مرور کرده و این داده ها ( که ممکن است متعلق به کاربر دیگر باشد را بخواند. تغییر مسیر دایرکتوري، اگرچه کار را براي اخلالگر سخت تر می کند، اما کافی نیست و اگر کسی این مسیر را پیدا کند، می تواند داده ها را بخواند و به اطلاعات نشست کاربران دیگر دسترسی داشته باشد. حتی وقتی که داده ها در دیتابیس هم ذخیره می شوند، اگر حقوق دسترسی به درستی کنترل نشوند، امکان فاش شدن داده ها وجود دارد.

- Cross Site Scripting ) 'XSS' or CSS) 

یکی از روش هایی است که می تواند منجر به سرقت کوکی حاوي یک SID شود. روشی است که یک سایت را وادار می¬کند کد مخربی را که در مرورگر قربانی اجرا می شود نشان دهد. باید در نظر داشت که کد مخرب نوشته شده به زبان HTML/JavaScript برروي سرور اجرا نمی شود. سرور برروي یک میزبان قرار دارد در حالیکه حمله بر روي مرورگر صورت می گیرد. نفوذگر تنها از یک سایت مطمئن به عنوان کانال براي حمله استفاده می کند. در حقیقت کاربران قربانی اصلی هستند نه سرور. به عبارت دیگر، این حمله از آسیب پذیري یک سایت استفاده می کند که در آن سایت ، محتواي داده فراهم شده توسط کاربر را بدون تغییر نمایش می دهد. به عنوان مثال اخلالگر ممکن است یک لینک به همراه یک اسکریپت بدخواهانه (که در آن جاسازي شده است) در یک فروم online قراردهد. هدف از این اسکریپت جاسازي شده، حمله به کاربرانی است که این لینک را انتخاب می کنند. مثلاً این اسکریپت ممکن است کوکی هاي این کاربران را کپی کند و به نفوذگر ارسال کند. این حملات با این که کم خطر ترین حملات خوانده می شوند، بسیار خطرناك هستند و براي نشست جاري یا کوکی هاي مشتري ها استفاده می شوند و چون اخلالگر از یک سرور آسیب پذیر براي اجراي کدهاي مخرب برروي سیستم قربانی بهره می گیرد، پیداکردن اخلالگر بسیار مشکل می شود.

Session Fixation -2

شکل دیگر حمله بر علیه مکانیزم هاي مدیریت نشست، حمله Session Fixation است که با حملات Session Hijacking متفاوت است. این حمله کاربر را مجبور می کند تا SID را که خود اخلالگر فراهم کرده است بپذیرد و قبل از اینکه کاربر به وب سایت وارد شود شروع می شود.

تصویر 3: یک حمله Session Fixation ساده


همان طور که در شکل بالا مشخص است، نفوذگرمی تواند یک نشست توافقی با برنامه کاربردي برقرار کند یا بسته به مکانیزم مدیریت نشست، یک لینک به وب سایت فراهم کند و یک SID از قبل تعیین شده را در این URL قرار دهد. کاربر Login می کند و برروي لینک کلیک می کند و وارد برنامه کاربردي می شود. چون نشستی که بین کاربر و برنامه کاربردي برقرار شده معتبر است، کاربر متوجه هیچ تفاوتی نمی شود. اما مساُله اساسی اینجاست که چون نفوذگر SID کاربر مجاز را می داند، می تواند خود را به جاي آن کاربر جا بزند. محتمل ترین هدف این حملات، سیستم هاي Webmail-type هستند. چون خواندن و فرستادن e-mail هاي یک کاربر دیگر می تواند یک حمله قلمداد شود.

روش هاي مقابله علیه مکانیزم هاي مدیریت نشست

مدیریت نشست ها یک ضرورت براي برنامه هاي کاربردي تحت وب می باشد و اگر به درستی انجام شود، می تواند به عنوان یک مکانیزم حفاظتی موثر بر علیه حملات مذکور تلقی شود. به همین دلیل است که استفاده از نشست ها به جاي دیگر مکانیزم هاي امنیتی براي برنامه نویسان وب امري عادي است. حفاظت از یک نشست به معنی حفاظت از مشخصه نشست است چون این مشخصه یکتا تنها چیزي است که کاربران را از یکدیگر تمیز می دهد و اگر آشکار شود، اخلالگر می تواند هویت کاربران سیستم را جعل کند.

• اولین نکته که باید به آن توجه شود این است که ترتیب SID هاي صادر شده توسط سیستم مدیریت نشست قابل پیش¬¬بینی نباشد. تعداد زیاد SIDهاي ممکن کار را براي اخلالگر سخت می کند.

• برنامه نویسان همچنین باید به کیفیت تصادفی بودن اعداد توجه کنند (اعداد غیر ترتیبی و غیر قابل پیش بینی باشند). در این صورت نفوذگر نمی تواند الگوریتم به کار رفته براي تولید SID ها را بدست آورد.
توجه به تولید SID هاي خوب نقطه شروعی براي امنیت نشست هاست. بعد از تولید SID مناسب، بایستی از آن محافظت کنیم و به این کار، مدیریت نشست می گوییم. یک مدیریت خوب شامل موارد ذیل می باشد.

- استفاده از کوکی براي نگهداري مقادیر نشست

به طور کلی ، تغییر کوکی ها نسبت به پارامترهاي URL و فیلدهاي "hidden" دشوارتر است. براي محافظت از کوکی ها می توان از مکانیزم هایی مثل تنظیم Secure Flag با مقدار یک استفاده کرد. به علاوه شما می توانید کوکی ها را به یک سایت خاص و حتی بخشی از آن محدود کنید و یا کوکی ها را به طور اتوماتیک از بین ببرید.

- عدم استفاده از SID هاي انتخابی کاربران

بعضی از سیستم هاي مدیریت نشست به کاربران اجازه می دهند تا در صورتی که SIDمعتبري دارند که از بین رفته است، نشست قبلی خود را با سایت دوباره فعال کنند. دلیلی براي دوباره فعال سازي نشست قبلی وجود ندارد چون می توان یک نشست جدید با یک SIDمتفاوت ایجاد کرد درحالیکه Stateذخیره شده یکسان است. اگر نفوذگر SIDهایی را که دوباره به کار برده می شوند، کشف کند می تواند SID هاي معتبر را جمع آوري و از آنها در حمله Session Fixation استفاده کند.

- تولید یک SID جدید توسط سیستم پس از ورود کاربر به سیستم

کاربران در هربازدید از یک سایت، یک SID جدید دریافت می کنند. این کار باعث می شود تا ID هاي انتخابی اخلالگران براي نشست بی فایده و بی ربط باشد. براي بررسی می توان صفحه ارجاع دهنده را باURL سایت مقایسه کرد. در صورت تفاوت، یک SID جدید تولید کرد.

- تعیین طول عمر یا یک Timeout براي نشست ها

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

- فراهم نمودن امکان Logout و از بین بردن نشست ها

عمل Logout باعث باطل شدن مشخصه نشست هم برروي مشتري و هم برروي سرور می شود. با این کار، نه تنها نشست هاي فعلی کاربر پاك می شوند، بلکه تمامی نشست هاي دیگر نیز که کاربر به دلیل فراموشی و یا نقص سرور موفق به Logoutکردن آنها نشده است پاك می شوند.

- استفاده از فیلد HTTP referrer براي تشخیص چند مشتري که در حال مرورکردن با یک SID یکسان هستند.

اگر برنامه کاربردي تحت وب بتواند کاربران را از طریق سایت و یا مسیرهاي واضح که کاربران دنبال می کنند ردیابی کند، در اینصورت امکان کشف موقعیت هایی که دو یا چند کاربر در حال استفاده از یک مشخصه نشست هستند وجود دارد. ایده اصلی دانستن ترتیب درست صفحات سایت است. اگر درخواست براي صفحه اي که نباید در دسترس باشد دریافت شود، یا حمله پرش از URL رخ داده و یا کاربر دیگري در حال استفاده از مشخصه نشست یکسان می باشد. در هر دو حالت این مشخصه باید باطل شود.

- فعال سازي فیلد Secure مربوط به کوکی ها

باید مطمئن شد که با فعال کردن فیلد Secure، کوکی هاي نشست تنها از طریق کانال هاي امن ارسال می شوند تا از Capture شدن آنها در حین عبور جلوگیري شود.
چون مشخصه هاي نشست مرجع غیرمستقیمی به اطلاعات کاربرهستند، باید از آنها محافظت شود. چون کوکی ها به همراه هر درخواست فرستاده می شوند، این امکان وجود دارد که به طور غیرعمدي برروي یک کانال رمز نشده ارسال شوند .جایی که یک اخلالگر در حال گوش دادن است. بنابراین بهتر است Secure Flagهمه کوکی هاي نشست را Setکنید تا مطمئن شوید که آنها فقط برروي HTTPS ارسال می شوند.
ناگفته نماند که هرکدام از موارد فوق به تنهایی نمی تواند براي امنیت یک برنامه کاربردي به کار رود و طراح بایستی از لایه هاي چندگانه امنیت براي محافظت در مقابل حملات استفاده کند.

[1] Username

[2] Password

[3] Session

[4] State

[5] built-in

[6] Cookie

 

 


, , , , , , , ,

نظرات:

گندمی دوشنبه، 26 خرداد 1393 جالب بود. لذت بردم

به این نظر پاسخ دهید

نظر بدهید: