امنیت, برنامه‌نویسی

Session Fixation

احتمالا تا حالا واژه Session به گوشتون خورده. اگر برنامه نویس وب باشید که می دونید چیه ولی کاربرها باهاش درگیر نیستند و پیش هم نمیاد که لازم بشه در موردش بدونند.

بذارید یه مثال بزنم که بدونید سشن به چه کار میاد. تا حالا دیدید می رید توی یه سایت و اون خبر داره که قبلا اونجا بودید؟ جایی لاگین کردید و گزینه “مرا به خاطر بسپار” رو انتخاب کرده باشید؟ یا اصلا فکر کردید چطور می شه که شما توی صفحه login.php وارد می شید ولی دیگه هر صفحه از سایت رو باز کنید، نیازی نیست دوباره نام کاربری و پسورد وارد کنید؟ این کارها با سشن انجام می شه. ینی برنامه اون سایت از شما مشخصات رو می گیره و درصورتیکه درست بود براتون یه شماره شناسه در نظر می گیره و کافیه اون شماره شناسه رو تو صفحه های مختلف به همراه داشته باشید تا دیگه نیازی به وارد کردن مجدد پسورد نباشه. یا مثلا سایت اون شناسه رو فعال نگه داره و دو روز دیگه که وارد سایت شدید، وب اپلیکیشن اون شناسه رو از حافظه مرورگرتون بخونه و شما رو شناسایی کنه.

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

در این پست در مورد Session Fixation در وب اپلیکیشن های مبتنی بر PHP خواهم گفت و یه سری راه رو هم برای جلوگیری از اون معرفی می کنم. تصمیم داشتم در این پست یک نمونه آنلاین از ضعف برنامه نویسی رو براتون بذارم که در واقع نتیجه رو ببینید ولی با توجه به تنظیمات سرور و PHP.ini این امکان وجود نداشت. برای تست می تونید از WebGoat استفاده کنید که یک پروژه است در قالب OWASP که یک نمونه از یک سایت آسیب پذیر رو در کامپیوتر شما ایجاد می کنه و می تونید روش این موارد رو امتحان کنید.

در یک حمله “تعیین سشن”، هکر کاربر یک سایت (ترجیحا ادمین) رو فریب می ده که یک لینک رو کلیک کنه:

و یا با یک کد، کاربر رو به لینک دلخواه هدایت می کنه:

ببینیم چه اتفاقی می افته در عمل:

ارسال لینک در قالب یک پیام درون سایت

ارسال لینک در قالب یک پیام درون سایت

اگر به لینک دقت کنید می بینید که با ارسال متغیر SID به صورت GET در URL، هکر اقدام به تعیین شماره شناسه ای می کنه که خودش ازش خبر داره. در صورتیکه کاربر کلیک کنه:

صفحه ورود سایت

صفحه ورود سایت

کاربر بدون اینکه شک کنه، نام کاربری و پسورد رو وارد می کنه و لاگین می کنه. حالا سایت یه سشن براش ایجاد می کنه ولی به جای اینکه شناسه سشن توسط سایت تعیین بشه، عدد ۱۲۳۴ براش به کار می ره.

کاربر با موفقیت به سایت وارد شده

کاربر با موفقیت به سایت وارد شده

از این زمان به بعد، هکر می تونه با استفاده از SID یا شناسه سشنی برابر با ۱۲۳۴ وارد سایت بشه و سطح دسترسی کاربر هدف رو داشته باشه.

به طور خلاصه، اتفاقی که در بالا افتاد رو می تونید در تصویر زیر ببینید:

security_corner_feb2004_1

یک نمونه از کد دارای ضعف امنیتی می تونه مشابه این باشه:

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

یکی از روش های پیشگیری از این حمله اینه که مطمئن بشیم در شروع یک سشن، حتما شناسه اون بازتولید بشه. نمونه کد زیر می تونه مثالی از این مورد باشه:

واقع در این کد چک می کنیم که اگر متغیر initiated قبلا ست نشده باشه (که به معنی ورود برای بار اوله) شناسه رو بازتولید می کنیم. البته این کد هم یک ضعف داره که با حمله ای پیچیده تر قابل دور زدن است. در این روش هکر در دو مرحله، ابتدا کاربر  رو فریب می ده و initiated ست بشه به مقدار True و سپس حمله عادی رو انجام می ده و SID رو تعیین می کنه.

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

یکی دیگه از موارد برای بالا بردن امنیت اینه که زمان منقضی شدن سشن رو محدود کنیم.

روش دیگه برای جلوگیری از این حمله، خارج از بحث برنامه نویسی و با تعیین تنظیمات PHP سروره. کافیه که متغیر session.use_trans_sid رو برابر با ۰ قرار بدیم. این مورد باعث می شه که PHP نه شناسه رو توی URL قرار بده و نه از اونجا بخوندش.

منبع و منبع

Standard
امنیت

سایت های معروف، شما را تعقیب می کنند

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

track

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

کاربرها برای حفظ حریم خصوصیشون می تونن به سایت ها بگن که من رو تعقیب نکن. با یه تگ در Header ارسالی به سایت و اعلام Do Not Track سایت موظفه مطابق قوانین اقدام کرده و اطلاعات وبگردی شما رو ذخیره نکنه. شاید دیده باشید برخی سایت ها مثل سایت ubuntu به مراجعه کننده می گن که چه کوکی هایی رو توی مرورگر کاربر ذخیره می کنند تا اون حق و حقوق خودش رو بدونه. اما بعضی سایت ها علیرغم خواست کاربر، قوانین رو نقض کرده و شروع به جمع آوری اطلاعات اون می کنن.

کارشناسان امنیتی بریتانیایی در یک بررسی متوجه شدند که ۱۴۵ سایت از مجموع ۱۰ هزار سایت برتر اینترنت از اسکریپت های مخفی برای به دست آوردن اطلاعات دستگاه کاربر از طریق مرورگر استفاده می کنند. یافته های نشون می ده استفاده از این ابزارهای غیرقانونی، گسترده تر از اونیه که پیش از این تصور می شد.

شیوه های استفاده شده برای اثرانگشت برداری از کاربران مجازی شامل جمع آوری اطلاعات دستگاه مورد استفاده می شه. اطلاعاتی مثل سایز مانیتور و رزولوشن، نام دستگاه، نرم افزرها و پلاگین های نصب شده و فونت های نصب شده. تحقیقات موسسه Electronic Frontier Foundation (EFF) در سال ۲۰۱۰ نشون می ده که ترکیب این اطلاعات تقریبا یکه بوده و می تونه به جای کوکی ها برای تعقیب کاربران مورد استفاده قرار بگیره. فلش پلیر و جاوا اسکریپت دو هدف عمده جهت شناسایی دستگاه اند.

تحقیقات نشان داده برخی از این ۱۴۵ سایت گفته شده از شی های فلش پلیری استفاده می کنند که حتی اگر مراجعه کننده از پراکسی استفاده کرده باشه، منجر به شناسایی IP اصلی کاربر می شه. همچنین در این تحقیقات مشخص شد که ۴۰۴ سایت از ۱ میلیون سایت برتر از جاوا اسکریپت برای شناسایی دستگاههایی استفاده می کنند که از فلش پشتیبانی نمی کنند یا فلش را غیرفعال کرده اند. یکی از روش های استفاده شده توسط این اسکریپت ها، یافتن فونت های سیستم با استفاده از ارتفاع و طول رشته های متنی است که به صورت مخفی در صفحات استفاده می شوند.

این تحقیقات منجر به شناسایی ۱۶ ابزار جدید شد که توسط سایت ها به کار گرفته می شود. همچنین مشخص شد که این سایت ها با وجود اعلام کاربر برای تعقیب نشدن با فعال کردنDo Not Track (DNT) HTTP header ، باز هم این کار را انجام می دهند.

محققین Tor Browser و Firegloves رو هم بررسی کردند. با وجود اینکه این دو ابزار برای حفظ حریم خصوصی و جلوگیری از همین ابزارها آماده شده اند اما مشخص شد که برخی نقص ها باعث افشا شدن هویت کاربران این ابزارها خواهد شد.

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

منبع

Standard