شناسایی نقاط ورودی اپلیکیشن
در این بخش از دوره آموزشی OWASP-OTG به اولین بخش از استاندارد OTG با شناسه OTG-INFO-006 می پردازیم که مربوط به شناسایی نقاط ورودی اپلیکیشن می باشد.
خلاصه
قبل از انجام هر نوع تستی، بررسی اپلیکیشن و راههای حمله به آن امر واجب و مهمی است؛ زیرا ارزیاب میتواند از این طریق به نقاط ضعف آن پی ببرد. این بخش بر روی شناسایی نقاطی از اپلیکیشن که باید بررسی شوند تمرکز دارد.
اهداف تست و ارزیابی هدف از تست OTG-INFO-006 و ارزیابی، درک نحوه تولید درخواستها و پاسخهای آنها از سوی اپلیکیشن است.
چگونه تست کنیم؟
قبل از شروع هر تستی، ارزیاب امنیتی باید درک کاملی از اپلیکیشن و نحوه ارتباط کاربر و مرورگر با آن داشته باشد. حین آنالیز اپلیکیشن، ارزیاب امنیتی باید به درخواستهای HTTP (متدهای POST و GET) و پارامترهای آنها، توجه زیادی بکند. علاوه بر این، باید دقت کنند که چه زمانی از متد GET و چه زمانی از متد POST برای ارسال پارامترها به اپلیکیشن استفاده میشود. به طور معمول از متد GET برای انجام چنین کاری استفاده میشود، اما برای ارسال اطلاعات حساس از متد POST استفاده میشود.
برای مشاهده پارامترهای ارسال شده در متد POST، ارزیاب امنیتی به نرم افزارهایی مانند پراکسیها یا پلاگینهای مرورگرها نیاز دارد. در داخل درخواست POST ارسال شده به سمت اپلیکیشن، فیلدهای مخفی وجود دارند که ارزیاب امنیتی باید توجه زیادی به آنها داشته باشد، چرا که غالباً حاوی اطلاعات حساس مانند موقعیت مکانی و کمیت و قیمت آیتمها هستند که توسعه دهنده اپلیکیشن نمیخواهد برای مشاهده یا تغییر در ملا عام باشند.
از نظر نویسنده این مقاله، استفاده از پراکسی در این مرحله از تست توصیه میشود. پراکسی همه درخواستها و پاسخها را رصد میکند. علاوه بر این، در این نقطه، ارزیابان امنیتی درخواستها و پاسخها را به دام میاندازند تا بتوانند با دقت کامل سرایند و پارامترهای ارسالی را بررسی کنند. این مرحله میتواند بسیار خسته کننده باشد؛ مخصوصاً اگر با یک سایت بزرگ و پیچیده تعاملی رو به رو باشیم.
حین بررسی و آنالیز اپلکیشن، ارزیابان امنیتی باید نکات مهم و جالبی اعم از پارامترهای خاص، سرایندهای سفارشی و ویژه یا متن درخواستها و پاسخها را روی برگهای از کاغذ یادداشت کنند. این نکات باید شامل مواردی مثل صفحه درخواست شده، شماره درخواست پراکسی برای ارجاعات بعدی، پارامترها، نوع درخواست (POST یا GET)، دسترسی احراز شده/احراز نشده، SSL استفاده شده/استفاده نشده و هر نوع اطلاعات مهم دیگری باشد. به محض شناسایی تمام نقاط اپلیکیشن، زمان آن است که تمام این نقاط را تست کرده و یادداشتهایی از آنها داشته باشیم. بخشهای بعدی این راهنما به نحوه تست این نقاط تمرکز دارد، اما این بخش بر روی نحوه شناسایی این نقاط معطوف است و باید قبل از مراحل آن بخشها صورت گیرد.
در زیر لیستی نکاتی برای بررسی درخواستها و پاسخها آورده شده است. در بخش درخواستها، بر روی متدهای POST و GET تمرکز بیشتری داشته باشید، چرا که بیشترین کاربرد را دارند. توجه داشته باشید که سایر متدهای مانند PUT و DELETE نیز میتوانند استفاده شوند. متدهای کم کاربرد، اگر مورد استفاده قرار بگیرند، میتوانند منجر به آسیب پذیری شوند. یک بخش مخصوص در این راهنما برای تست و ارزیابی این متدهای وجود دارد.
درخواستها:
• نقاط POST و GET را شناسایی کنید.
• تمام پارامترهای متد POST را شناسایی کنید.
• در داخل درخواست POST به پارامترهای مخفی توجه بیشتری داشته باشید. هرگاه متد POST ارسال شود، تمام فیلدها اعم از پارامترها، در داخل متن پیام HTTP به اپلیکیشن ارسال میشود. این موارد به طور معمول مشهود نیستند، مگر اینکه از یک پراکسی استفاده شود.
• تمام پارامترهای متد GET، که معمولاً بعد از رشته کوئری بعد از ? هستند، را شناسایی کنید.
• تمام پارامترهای رشته کوئری را شناسایی کنید. این پارامترها، مانند foo=bar، بیشتر به صورت جفت هستند. توجه داشته باشید که این پارامترها میتوانند در یک رشته بزرگتر توسط کاراکترهای خاصی مانند & از یکدگیر جدا شوند.
• نکته قابل توجه در شناسایی پارامترها این است که ارزیاب امنیتی باید همه پارامترها را شناسایی کند، زیرا از هر پارامتری میتوان برای خمله استفاده کرد. علاوه بر این، ارزیاب امنیتی باید پارامترهایی که توسط اپلیکیشن پردازش میشوند را شناسایی کند. بخشهای بعدی این راهنما نحوه تست این پارامترها را شرح خواهند داد، اما در این بخش بر روی نحوه شناسایی این پارامترها تمرکز میکنیم.
• به سرایندهای سفارشی و ویژه مانند debug=False که معمولاً دیده نمیشوند، توجه کنید.
پاسخها:
• جاهایی که کوکیها در آنها تنظیم، تغییر و اضافه میشوند را شناسایی کنید.
• جاهایی که کدهای 3xx، 400 (مخصوصاً 403) و 500 را به عنوان پاسخ برمیگردانند را پیدا کنید.
• به سرایندهای خاص و جالب توجه ویژهای داشته باشید. به عنوان مثال، Server: BIG-IP معرف این است که سایت بار ترافیکی را تعدیل میکند. بنابراین، اگر یک سایت بار ترافیکی را تعدیل کند و یکی از سرورها پیکربندی صحیحی نداشته باشد، ارزیاب امنیتی، بر حسب نوع تکنولوژی استفاده شده برای تعدیل بار ترافیکی، باید چندین درخواست متعدد به سایت ارسال کند تا به سرور آسیبپذیر دسترسی داشته باشد.
تست جعبه سیاه
تست نقاط ورودی اپلیکیشن
در زیر دو مثال برای نحوه چک و بررسی نقاط ورودی اپلیکیشن آورده شده است:
مثال 1)
این مثال یک درخواست GET را نشان میدهد که یک آیتم از یک اپلیکیشن سایت فروشگاهی آنلاین خریداری میکند.
GET https://x.x.x.x/shoppingApp/buyme.asp?CUSTOMERID=100&ITEM=z101a&PRICE=62.50&IP=x.x.x.x
Host: x.x.x.x
Cookie: SESSIONID=Z29vZCBqb2IgcGFkYXdhIG15IHVzZXJuYW1lIGlzIGZvbyBhbmQgcGFzc3dvcmQgaXMgYmFy
توضیح نتیجه:
در این مثال، ارزیاب امنیتی میتواند به وجود پارامترهایی مانند CUSTOMERID، ITEM، PRICE، IP و Cookie پی ببرد.
مثال 2)
این مثال یک درخواست POST را نشان میدهد که منجر به ورود کاربر به حساب کاربری خود روی اپلیکیشن میشود.
POST https://x.x.x.x/KevinNotSoGoodApp/authenticate.asp?service=login
Host: x.x.x.x
Cookie: SESSIONID=dGhpcyBpcyBhIGJhZCBhcHAgdGhhdCBzZXRzIHByZWRpY3RhYmxlIGNvb2tpZXMgYW5kIG1pbmUgaXMgMTIzNA==
CustomCookie=00my00trusted00ip00is00x.x.x.x00
متن پیام POST:
user=admin&pass=pass123&debug=true&fromtrustIP=true
توضیح نتیجه:
در این مثال، ارزیاب امنیتی همانند روش قبلی به وجود پارامترها پی میبرد. البته تفاوت این مثال با مثال قبل در این است که پارامترها به جای اینکه در آدرس URL ارسال شوند، در قالب یک پیام ارسال شدهاند. توجه کنید که از یک کوکی سفارشی و ویژه نیز در این مثال استفاده شده است.
تست جعبه خاکستری
تست جعبه خاکستری نقاط ورودی اپلیکیشن، در کنار موارد فوق، شامل یک مورد اضافی نیز میباشد. در مواقعی که اپلیکیشن از منابع خارجی مانند SNMP، پیامهای syslog، SMTP و پیامهای SOAP از سایر سرورها، داده و اطلاعات میگیرد و آنها را پردازش میکند، مذاکره با توسعه دهندگان اپلیکیشن میتواند در شناسایی نقاط ورودی و نحوه فرمت آنها کمک کند.
ابزارها
پراکسیها:
• OWASP: Zed Attack Proxy (ZAP)
• OWASP: WebScarab
• Burp Suite
• CAT
پلاگین مرورگر:
• TamperIE برای Internet Explorer
• Tamper Data برای Firefox
مطالب این بخش توسط جناب آقای امیر ثروتی تهیه شده است.