Prevent session hijacking : Introduction :

Download Report

Transcript Prevent session hijacking : Introduction :

‫انتقال اطالعات بین صفحات مختلف‪:‬‬
‫‪PREVENT SESSION HIJACKING :‬‬
‫‪INTRODUCTION :‬‬
‫به عنوان مثال بحث ‪ login‬کردن کاربران در سایت‬
‫وقتی کاربر در سایت وارد میشود بهتر است که یکبار اطالعاتش را وارد کند و دیگر‬
‫برای انجام هر‬
‫کاری نیاز به ‪ Login‬کردن نباشد‪.‬‬
‫روش های مختلف برای ارسال اطالعات بین صفحات‪:‬‬
‫‪ -1‬استفاده از فرم ها => امنیت پایین ‪ /‬میتوان سورس صفحات را خواند!!‬
‫‪ -2‬استفاده از کوکی ها‬
‫‪ -3‬استفاده از سشن ها‬
‫توضیح ‪:2‬‬
‫میخوام در صفحه‪ cookie1.php‬یک متغیری را ذخیره کنم و در‬
‫صفحه‪ cookie2.php‬برم بخونم‬
‫یکی از راه ها گفتیم استفاده از کوکی هاست ‪( ...‬نمایش در ‪)zendstudio‬‬
‫??‪What is Cookie‬‬
‫به فایل متنی ساده که با ساختار داخلی‬
‫‪Variabel1=value1‬‬
‫‪Variable2=value2‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫اطالعات درونش ذخیره میشود‪.‬‬
‫و ‪ Client‬ذخیره میشود و حاال هر زمان که خواستیم (عمر کوکی تمام نشده)‬
‫این فایل روی کامپیوتر‬
‫میتوان هربار که کاربر به سایتمون مراجعه کرد تا زمانی که کوکی از بین نرفته‬
‫اطالعات درونش را خواند‪.‬‬
‫‪How Definition a Cookie :‬‬
‫;)’‪Setcookie(‘VariableName’,’Value‬‬
‫در این روش اگر مرورگر را ببندم و دوباره برم در صفحه کوکی ‪ 2‬پیغام خطا میده‬
‫و میگه‬
‫همچنین متغیری وجود نداره !!! (نشان دادن در محیط‪(zendstudio‬‬
‫برای کوکی طول عمر تعریف نکردم بخاطر همین با بسته شدن مرورگر‬
‫اطالعات ازبین میرود‪.‬‬
‫ایجاد طول عمر برای کوکی ‪:‬‬
‫;)‪Setcookie(‘VariableName’,’Value’,time() + 30‬‬
‫)(‪ Time‬از زمان االن سیستم و خود مرورگر مدیریت میکند‪.‬‬
‫‪ 30‬مثالی برحسب ثانیه است‪.‬‬
‫ایجاد طول عمر برای کوکی به روشی دیگر ‪:‬‬
‫‪Setcookie(‘Variable’,’Value’, mktime(int hour, int minute , int second ,int month,int day,int‬‬
‫;))‪year‬‬
‫محل ذخیره سازی ‪:Cookie‬‬
‫‪PageInfo => Security => View Cookie‬‬
‫نکته‪ :‬استفاده از کوکی نباید تنها نقطه اتکا سایتمان باشد چرا که ممکن است کاربربیاد کوکی ها رو پاک کند یا در قسمت‬
‫‪Tools => Option => Privacy => Firefax(use custom) => Accept cookies from site‬‬
‫دریافت کوکی از سرور و ذخیره آن روی کالینت غیرفعال باشد در اینصورت در انتقال اطالعات بین‬
‫صفحات دچار مشکل میشویم ‪.‬‬
‫یا مثآل ‪ :‬تیک ‪ Remember‬یا متغیر خاصی را روی کامپیوتر کالینت ذخیره میکنم تا دفعات بعد‬
‫این مورد را چک کنیم اگر وجود داشت یوزر و پسورد در کوکی از آنجا میخوانم و عمل الگین اش را‬
‫انجام‬
‫میدهم و گرنه فرم الگین دوباره پر شود ‪.‬‬
‫)‪(Forexample the Login_Cookie.php File‬‬
‫‪Create Login Form :‬‬
‫>”‪<form action = “ ” method = “post‬‬
‫با قانون کوکی‬
‫مثال‪ :‬میخواهیم ‪ welcome‬نمایش داده شود و یک لینک هم برای خروج‬
‫کاربر که الگین کرد‬
‫نقاط قوت کوکی ‪:‬‬
‫طول عمر دادن – چون روی کامیوتر سرور کوکی ها ذخیره نمیشود ‪ ،‬فضا اشغال نمیکند‪-‬‬
‫چون هر کوکی کاربر روی کامپیوتر کالینت ذخیره میشود از لحاظ امنیتی خوبه ولی پسورد بهتر است جزء فایل‬
‫کوکی نباشد بخاطراینکه با تزریق کدهای اسکریپت میتوان کوکی های کاربر را به سرقت برد‪.‬‬
‫نکته‪ :‬اینکه کوکی روی کامپیوتر کالینت ذخیره میشود دارای مزیت ها و معایبی میباشد ‪...‬‬
‫نقاط ضعف کوکی ‪:‬‬
‫کاربر ممکن است استفاده از کوکی را در مرورگرش غیرفعال کند=> اگر تکیه‬
‫سایت روی‬
‫کوکی باشد دچار مشکل میشویم ‪.‬‬
‫مثال عملی ‪ :‬در متن برنامه (الگین_کوکی) گفتیم اگر کوکی بنام الگین وجود‬
‫داشت پیغام‬
‫{))]'‪if (isset($_COOKIE['login‬‬
‫‪ Welcome‬نمایش داده شود ‪.‬‬
‫;‪echo 'Welcome<br/>' .PHP_EOL‬‬
‫;‪echo '<a href="?action=logout">Logout</a><br/>' . PHP_EOL‬‬
‫}‬
‫ضمنآ کوکی ترافیک سایت را مصرف میکند‪.‬‬
‫‪Introduction Of Session:‬‬
‫از نسخه ‪ 4‬به بعد ‪ php‬پشتیبانی از سشن بدان اضافه شد‬
‫? ‪Whats a meaning of Session‬‬
‫سشن یعنی جلسه و نشست‬
‫سشن امکان ذخیره اطالعات را تا زمانی که کاربر مرورگرش را نبسته فراهم‬
‫میکند ‪ ،‬یعنی برخالف کوکی‬
‫سشن دیگر طول عمر ندارد!!!‬
‫طول عمر سشن وابسته به باز بودن مرورگر میباشد !!‬
‫امتیازات سشن نسبت به کوکی ‪:‬‬
‫‪ -1‬روی سرور ذخیره میشود ‪ ،‬بنابراین قابل غیرفعال شدن نیست!‬
‫‪ -2‬امنیت باال – قابل سرقت رفتن نیست – مثال کوکی چون در مرورگر کالینت‬
‫ذخیره میشه براحتی هکر میتواند اطالعات کوکی افراد را کپی و در مرورگرش‬
‫ست کند و خودش را جای کاربر جا بزند‪.‬‬
‫‪ -3‬سشن را میتوان در بانک اطالعاتی ذخیره کرد‪.‬‬
‫‪ -4‬سشن سمت سرور ذخیره میشود در نتیجه ترافیک سایت را هدر نمیدهد!‬
‫برخالف کوکی که با هر درخواست کالینت اطالعات کوکی از سرور برای مرورگر‬
‫کالینت ارسال میشد و ترافیک سایت را هدر میداد ‪...‬‬
‫نکته ‪ :‬سشن برای کارش از کوکی استفاده میکند ‪ ،‬ولی این بدان معنا نیست که اگر کوکی‬
‫غیرفعال‬
‫شده باشد سشن کار نکند بلکه بستگی به تنظیمات ‪ PHP.ini‬دارد ‪.‬‬
‫محل ذخیره سازی فایل های سشن‪:‬‬
‫‪Xamp => tmp‬‬
‫فایل های سشن از کجا میفهمد که هر فایل برای چه کسی است؟‬
‫جواب‪:‬سشن میاد به هر کاربر یک ‪ ID‬یا شناسه بنام‬
‫لحاظ میکند و این مورد را اگر کوکی فعال باشد در مرورگر کالینت ذخیره‬
‫‪SessionID‬میکند‬
‫‪SessionID‬‬
‫کد ‪ 32‬رقمی‬
‫]’‪$_COOKIE[‘PHPSESSID‬‬
‫به این نام‬
‫در کوکی‬
‫ذخیره‬
‫میشود ‪...‬‬
‫‪ SessionID‬را میاد در کوکی ذخیره میکند(در واقع نام هر سشن مربوطه در کوکی ذخیره میشه)‬
‫و با هر درخواستی که کالینت میدهد سرور میاد میبینه که این سشن آیدی مثآل‬
‫‪sess_ut454ae2c7kdpae7au0i516h86‬‬
‫و همان فایل را در قسمت ‪ Tmp‬میخواند و اطالعات متغیرهای درونش را میخواند =>‬
‫در این حالت اطالعات از درون سرور فراخوانی میشود و بر خالف کوکی نیاز نیست که‬
‫سرور اطالعات مربوطه ارسال نماید و‪...‬‬
‫نکته‪ :‬حال اگر کوکی سمت کالینت غیر فعال باشد در نهایت عملکرد سشن بستگی به تنظیمات فایل‬
‫‪ PHP.ini‬دارد ‪.‬‬
‫نحوه کار با سشن ‪:‬‬
‫‪<? Php‬‬
‫;)(‪Session_start‬‬
‫>?‬
‫‪ -1‬اگر تا بحال سشن ای برای کاربر تعریف نشده باشد با اجرای اولین بار این‬
‫دستور‪،‬سرور میرود یک فایل سشن میسازد برای کاربر(سشن آیدی) و در‬
‫مرورگر کاربر یا کالینت نیز‬
‫‪ PHPSESSID‬قرار خواهد گرفت ‪.‬‬
‫‪ -2‬اما اگر کاربر سشن داشته باشد (در یکی از صفحات سایت عمل الگین‬
‫صورت گرفته باشد و برایش سشن تعریف شده باشد) و کاربر هنوز مرورگرش‬
‫را نبسته باشد‪ ،‬ابتدا صفحه ای که از ناحیه کاربر به سرور درخواست داده‬
‫موردنظردارد و کالینت میشود دوباره از ناحیه سرور برای پاسخگویی به‬
‫درخواست کاربر نیاز به ‪PHPSESSID‬آیدی مورد نیاز به صفحه را برای‬
‫سرور ارسال میکند و سرور از داخل پوشه ‪TMP‬‬
‫‪ SessID‬مذکور را انتخاب و متغیرهای درونش را میخواند و میریزد در آرایه‬
‫; '‪$_SESSION['name'] = 'Welcome ali‬‬
Session Hijacking Or
Session Fixation Attacks :
Question) Whats a meaning of Session Hijacking??
First step: HACK Forum Admin ‘s User
Second step: Solve this Problem
‫درباگ هایی مثل‪ XSS‬اگرهکرکدهای جاوا اسکریپت را سمت سروربفرسته ‪:‬‬
‫هر موقع که کد اجرا شود کوکی های کاربر به سمت آدرس خاصی که هکر‬
‫میخواهد ارسال میشود‬
‫و با ست کردن‬
‫‪PHPSESSID=I24332fsdjdsnfsfnskdmakdnsfs‬‬
‫‪Session_hash=fshdjshdfjsgfdskjdhasdajdad‬‬
‫‪Session_Password=13ehwefh23828eusdfhs‬‬
‫موارد فوق توسط هکر میتوان وارد سایت با حساب کاربری مثآل ادمین شد‬
‫و‪...‬‬
‫‪First step: Session Hijack‬‬
‫برای جلوگیری از این نوع حمالت دو راه حل وجود دارد ‪:‬‬
‫‪1- Escape the Information‬‬
‫;)‪2- Session_regenerate_id(True Or False‬‬
‫; ‪If True‬‬
‫مقادیر متغیرهای سشن قبلی از بین میروند ‪...‬‬
‫‪--------------------------------------------------------------------------------------‬‬‫‪-------‬‬‫; ‪If False‬‬
‫مقادیر سشن باقی می مانند ولی سشن آیدی را هر بار تغییر میدهد ‪...‬‬
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] =
time(); }
else if (time() - $_SESSION['CREATED'] > 1800) { //
session started more than 30 minutes ago
session_regenerate_id(true); // change session ID for the
current session and invalidate old session ID
$_SESSION['CREATED'] = time(); // update creation time }