در این بخش از دوره آموزشی SEC542 از موسسه SANS به آشنایی با Logic Attacks یا حملات منطقی می پردازیم.
Logic Attacks
فناوریهایی مانند WEB 2.0 و AJAX موارد خوبی برای مهاجمان منطقی(Logical Attackers) هستند!
دلیل این مورد، استفاده از منطق کسب و کار(Business Logic) ارسال شده و اجرا در سمت کلاینت است. یک تست نفوذگر میتواند از این طریق یک تراکنش موفق را انجام دهد. تست نفوذگر برای این نوع از حملات باید گام به گام فرآیندهای برنامه را بررسی نموده و با ابزارهای پروکسی، هر بخش را متوقف نموده و به بررسی آن بپردازد.
در ادامه با توجه به اطلاعات به دست آمده، در صورتی که امکان تغییر در پارامترهای ارسالی وجود داشته باشد، وجود آسیبپذیری تایید میگردد. لازم به ذکر است که این نوع حملات اغلب به صورت دستی انجام میشود و ابزارهای اسکن آسیبپذیری قادر به شناسایی آن ها نیستند.
Logic Attack Example
فرآیند منطقی در هر برنامه وب شامل مراحلی است که ممکن این مراحل در برنامههای دیگر متفاوت باشد و تست نفوذگر باید ابتدا این مراحل را با ابزارهای مختلفی مانند Burp Suite شناسایی نماید. به عنوان مثال در یک فروشگاه اینترنتی مراحل خرید به صورت زیر میباشد:
- انتخاب محصول مورد نظر و اضافه کردن به سبد خرید
- تعیین مجموع قیمتی
- احراز اطلاعات هویتی و اتصال به درگاه بانکی
- پرداخت مبلغ محصول و بازگشت به سایت اصلی
با توجه به فرآیند مذکور، تست نفوذگر بایست کلیه مراحل را ابتدا شناسایی نموده و سپس در هر مرحله پارامترهای موجود را بررسی نماید. از آن جا که وضعیت هر مرحله ذخیره میشود، تست نفوذگر میتواند قبل از اینکه به درگاه بانکی متصل شده و اقدام به پرداخت مبلغ محصول انتخابی نماید، قیمت محصول که به عنوان یک پارامتر در نظر گرفته میشود را تغییر داده و قیمت مد نظر خود را اعمال کند.
همانطور که به آن اشاره گردید، اغلب شناسایی چنین آسیبپذیریهایی به صورت دستی انجام میشود و فرآیند شناسایی و تست آن نیز مشکل خواهد بود. با توجه به اینکه آسیبپذیریهای منطقی اغلب، کسب و کار را تحت تاثیر قرار میدهد، معمولا راه کارهای فنی تا حد زیادی قابل پیاده سازی نبوده و در صورت پیاده سازی ممکن است فرآیند کسب و کار را دچار مشکل نمایند.
برای رفع چنین آسیبپذیریهایی راه کارهای غیر فنی مانند تایید محصول خریداری شده قبل از ارسال سفارش و یا تایید مبلغ پرداخت شده در درگاه بانکی و سپس امکان استفاده از محصول خریداری شده، نیز مناسب است.
در ادامه به دو نمونه که برگرفته از استاندارد OWASP و بخش منطق کسب و کار آن می باشد، می پردازیم.
Test Business Logic Data Validation (OTG-BUSLOGIC-001)
وب اپلیکشن باید اطمینان حاصل کند که تنها دادههای معتبر و منطقی میتوانند در Front End وارد شوند. همچنین میبایست سمت سرور نیز بر روی آنها کنترلهای لازم انجام گیرد. در صورتی که تایید صحت دادهها تنها در سمت کلاینت کنترل شود، ممکن است برنامههای کاربردی را در برابر تزریق سمت سرور آسیبپذیر نموده و نفوذگر بتواند با استفاده از ابزارهای پراکسی از محدودیتهای سمت کلاینت عبور نماید.
مثال)
فرض کنید شما یک وبسایت تجارت الکترونیکی چند لایه را مدیریت میکنید که به کاربران امکان سفارش فرش را میدهد. کاربر، فرش مورد نظر خود و اندازه آن را انتخاب نموده و پرداخت را انجام میدهند. در این زمان بخش Front End وبسایت تایید میکند که اطلاعات وارد شده برای تماس، اندازه، رنگ و مواردی از این دست صحیح وارد شده است. منطق کسب و کار در این روش به دو صورت عمل مینماید: اگر فرش در انبار موجود باشد، به طور مستقیم این فرش از انبار حمل شده و اگر فرش مورد نظر در انبار وجود نداشته باشد، با شریک تجاری تماس حاصل شده و در صورت وجود فرش در انبار آن، سفارش را انجام میدهد.
چه اتفاقی خواهد افتاد اگر مهاجم بتواند یک تراکنش معتبر را ادامه دهد و یک درخواست را به صورت غیرقانونی به شرکت تجاری شما ارسال کند؟
چه اتفاقی میافتد اگر مهاجم بتواند در بین درخواست شما قرار گرفته و پیامهایی را به انبار شریک تجاری شما ارسال کند و بدون پرداخت هزینه فرش را سفارش دهد؟
روشهای عمومیتست
مستندات پروژه را مرور کرده و به دنبال نقاط ورودی اطلاعات و نقاط موجود بین سیستم و نرمافزار باشید. پس از یافتن این موارد، سعی کنید دادههای نامعتبر را به برنامه یا سیستم وارد نمایید.
روشهای خصوصی تست
انجام تست عملکردی GUI برنامه تا اطمینان حاصل شود که تنها مقادیر معتبر پذیرفته میشود.
با استفاده از یک پراکسی، درخواستهای POST و GET را بررسی کنید و به دنبال مکانهایی باشید که متغیرهایی مانند هزینه، کیفیت و یا موارد مشابه قرار دارند. به طور خاص، به دنبال دستکاری بین برنامه و سیستم باشید تا بتوانید آسیبپذیری را کشف نمایید. پس از یافتن متغیرها، شروع به ورود دادههای نامعتبر نمایید. این تست مشخص میکند که سرور به درستی کار میکند و دادههای منطقی غیرمعتبر را نمیپذیرد.
Test Ability to Forge Requests (OTG-BUSLOGIC-002)
جعل درخواستها روشی است که مهاجمان برای دور زدن Front End GUI از آن استفاده میکنند تا مستقیما اطلاعات را برای پردازش در Back End ارسال نمایند. هدف مهاجم در این تست، ارسال درخواست GET و POST از طریق یک پراکسی با مقادیری است که بوسیله منطق کسب و کار برنامههای کاربردی پشتیبانی نمیشود یا انتظار آن نمیرود.
برخی از نمونههای درخواستهای جعلی عبارتند از سوء استفاده از پارامترهای قابل حدس یا قابل پیش بینی یا افشای ویژگیهای پنهان مانند فعال نمودن اشکالزدایی یا ارائه صفحات یا پنجرههای خاص که در طول توسعه بسیار مفید هستند اما ممکن است اطلاعاتی را افشا کنند و موجب دور زدن منطق کسب و کار شوند.
برنامه باید از ورود و اجرای درخواستهای جعلی که ممکن است به مهاجم امکان سوء استفاده از منطق کسب و کار را بدهد جلوگیری نماید.
مثال)
فرض کنید که وبسایتی که در حوزه خرید اینترنتی بلیط تئاتر فعالیت میکند به کاربران امکان میدهد که بلیط خود را انتخاب کنند و از تخفیف 10 درصدی در کل فروش استفاده کنند. در برخی از موارد، بررسی این موضوع که آیا تخفیف اختصاص داده شده است یا خیر با یک فیلد پنهان که دارای مقدار یک و صفر است بررسی میشود و مهاجم میتواند با استفاده از ابزارهای پراکسی این فیلد را مشاهده نماید و با صفر نمودن مقدار این فیلد، وانمود کند که هیچ تخفیفی تا به حال دریافت نکرده است و بدین صورت چندین بار از تخفیف استفاده نماید.
روش تست عمومی
مستندات پروژه را مرور کرده و به دنبال قابلیتهای قابل حدس، یا فیلدهای پنهان باشید. پس از یافتن اطلاعات، سعی کنید دادههای معتبر منطقی را به برنامه وارد نموده و عملکرد و تاثیر آن بر جریان کاری منطق کسب و کار را بررسی نمایید.
روش تست خاص 1
با استفاده از پراکسی، درخواستهای GET و POST را جستجو نموده و به دنبال نشانههای افزایش مقادیر در یک بازه منظم باشید که به راحتی قابل حدس میباشد. بررسی نمایید که با تغییر در آن، آیا ساختار منطق کسب و کار دچار تغییر میشود یا خیر.
روش تست خاص 2
با استفاده از پراکسی، درخواستهای GET و POST را جستجو نموده و به دنبال برخی از نشانههای پنهان مانند قابلیت اشکالزدایی باشید که قابلیت فعال یا غیرفعال شدن داشته باشد. در صورت یافتن این موضوع سعی کنید که این مقادیر را حدس زده و تغییر دهید و واکنش یا رفتار متفاوت برنامه را بدست آورید.