بررسی Bypassing Authentication Schema
در این بخش از دوره آموزشی OWASP-WSTG به چهارمین بخش از استاندارد WSTG با شناسه WSTG-ATHN-04 می پردازیم که مربوط به بررسی Bypassing Authentication Schema می باشد.
خلاصه
در امنیت کامپیوتر، احراز هویت فرآیند تلاش برای تایید هویت دیجیتال فرستنده ارتباطات است. یک مثال معمول از موضوع، فرآیند ورود به سیستم است. تست Authentication Schema به معنی درک چگونگی کار فرآیند احراز هویت و استفاده از آن اطلاعات برای دور زدن مکانیزم احراز هویت است.
در حالی که بیشتر برنامهها نیاز به احراز هویت برای دسترسی به اطلاعات خصوصی یا اجرای وظایف دارند، هر روش احراز هویت قادر به ارائه امنیت کافی نیست. سهلانگاری، غفلت، یا ساده انگاری تهدیدات امنیتی اغلب منجر به طرحهای احراز هویتی میشود که میتواند به سادگی با نادیده گرفتن ورود به صفحه و فراخوانی مستقیم یک صفحه داخلی که قرار است تنها پس از اجرای احراز هویت در دسترس قرار گیرد، نادیده گرفته شود.
علاوه بر این، اغلب امکان دور زدن معیارهای احراز هویت از طریق دستکاری در درخواستها و فریب برنامه در این تفکر که کاربر از قبل احراز هویت شدهاست، وجود دارد. این کار را میتوان با اصلاح پارامتر URL دادهشده، دستکاری فرم و یا با جلسات جعل شده انجام داد.
مشکلات مربوط به Authentication Schema را میتوان در مراحل مختلف چرخه حیات توسعه نرمافزار یا SDLC، مانند مراحل طراحی، توسعه و استقرار، یافت:
• در مرحله طراحی، خطاها میتوانند شامل یک تعریف اشتباه از بخشهای کاربردی باشد که باید محافظت شوند، انتخاب عدم استفاده از پروتکلهای رمزگذاری قوی برای تامین امنیت انتقال اعتبارات و بسیاری موارد دیگر.
• در مرحله توسعه، خطاها میتوانند شامل اجرای نادرست کارکرد اعتبارسنجی ورودی یا عدم پیروی از بهترین شیوههای امنیتی برای زبان خاص باشند.
• در مرحله استقرار برنامه، ممکن است مشکلاتی در طول راهاندازی برنامه (فعالیتهای نصب و پیکربندی) به دلیل فقدان مهارتهای فنی مورد نیاز یا به دلیل فقدان مستندات خوب وجود داشته باشد.
اهداف تست
اطمینان حاصل کنید که احراز هویت در تمام سرویسهایی که به آن نیاز دارند، اعمال شدهاست.
چگونه تست را انجام دهیم.
آزمایش جعبه سیاه
چندین روش برای عبور از Authentication Schema وجود دارد که توسط یک برنامه کاربردی وب استفاده میشود:
• درخواست صفحه به صورت مستقیم یا forced browsing
• اصلاح پارامتر
• پیشبینی شناسه نشست
• تزریق SQL
درخواست مستقیم صفحه
اگر یک برنامه کاربردی وب کنترل دسترسی را تنها بر روی صفحه login پیادهسازی کند، امکان Bypass نمودن طرح احراز هویت وجود دارد. برای مثال، اگر یک کاربر به طور مستقیم یک صفحه متفاوت را از طریق forced browsing درخواست کند، آن صفحه ممکن است قبل از اعطای دسترسی، اعتبار کاربر را بررسی نکند. در این بخش سعی کنید به طور مستقیم از طریق نوار آدرس در مرورگر خود به یک صفحه محافظت شده دسترسی پیدا کنید.
تغییر پارامتر
مشکل دیگر مربوط به طراحی احراز هویت زمانی است که برنامه یک ورود موفق را براساس پارامترهای مقدار ثابت تایید میکند. کاربر میتواند این پارامترها را تغییر دهد تا دسترسی به مناطق حفاظتشده را بدون فراهم کردن اعتبارسنجی معتبر به دست آورد. در مثال زیر، پارامتر “authenticated” به مقدار “yes” تغییر مییابد، که به کاربر اجازه دسترسی میدهد. در این مثال، پارامتر در URL است، اما یک پروکسی نیز میتواند برای اصلاح پارامتر استفاده شود، به خصوص زمانی که پارامترها به عنوان عناصر فرم در درخواست POST فرستاده میشوند یا زمانی که پارامترها در کوکی ذخیره میشوند.
پیشبینی شناسه نشست
بسیاری از برنامههای کاربردی وب احراز هویت را با استفاده از شناسههای نشست (session IDs)مدیریت میکنند. بنابراین، اگر تولید شناسه نشست قابلپیشبینی باشد، یک کاربر مخرب میتواند یک شناسه نشست معتبر را پیدا نموده و دسترسی غیر مجاز به برنامه پیدا کند، و یک کاربر قبلا تایید شده را جعل کند.
در شکل زیر، مقادیر داخل کوکیها به صورت خطی افزایش مییابد، بنابراین برای یک مهاجم حدس زدن شناسه نشست معتبر آسان است.
در شکل زیر، مقادیر داخل کوکیها فقط تا حدی تغییر میکنند، بنابراین میتوان حمله Brute Force را به قسمتهای تعریف شده در زیر محدود کرد.
تزریق SQL ( HTML Form Authentication)
تزریق SQL یک تکنیک حمله شناختهشده است. در این بخش به طور مفصل به توضیح این تکنیک نخواهیم پرداخت، زیرا بخشهای متعددی در راهنمای OWASP وجود دارند که تکنیکهای تزریق را فراتر از محدوده این بخش توضیح میدهند.
شکل زیر نشان میدهد که با یک حمله تزریق SQL ساده، گاهی اوقات امکان دور زدن فرم احراز هویت وجود دارد.
آزمایش جعبه خاکستری
اگر یک مهاجم قادر به بازیابی کد منبع برنامه با بهرهبرداری از یک آسیبپذیری کشفشده قبلی (به عنوان مثال پیمایش دایرکتوری) یا از یک مخزن وب (برنامههای متن باز) باشد، میتواند حملات اصلاحشده در برابر اجرای فرآیند احراز هویت را انجام دهد.
در مثال زیر (PHPBB 2.0.13 – Authentication Bypass Vulnerability) در خط ۵، تابع unserialize()، یک کوکی که توسط کاربر تامین میشود را تجزیه میکند و مقادیر داخل آرایه $row را تنظیم میکند. در خط 10، هش گذرواژه MD5 کاربر ذخیره شده در پایگاه داده با آنچه ارائه شده مقایسه میشود.
درPHP، مقایسه بین یک مقدار رشته و یک مقدار بولی (1 and TRUE) همیشه درست است، بنابراین با تامین رشته زیر (بخش b:1 مهم است) برای تابعunserialize()، میتوان کنترل احراز هویت را دور زد:
ابزارها
WebGoat
OWASP Zed Attack Proxy (ZAP)