روشهای مختلف زیادی برای انجام تست نفوذ وجود دارند که وضعیت امنیتی یک سازمان را بهبود میبخشند، اما در این مقاله روی یک مورد تمرکز خواهد شد و آن برنامههای کاربردی وب می باشد. تست نفوذ برنامه کاربردی وب از چهار قدم اصلی تشکیل شده است که عبارتاند از جمعآوری اطلاعات، تحقیق و Exploit، گزارشگیری و پیشنهادات و اصلاح با پشتیبانی مداوم. این تستها عموماً برای حفظ توسعهی کد نرمافزار ایمن در چرخهی عمر آن انجام میشوند. اشتباهات و کدنویسی، الزامات بهخصوص یا نداشتن دانش کافی در مسیرهای حملات سایبری دلایل اصلی انجام این نوع از تست نفوذ هستند. در این مقاله در مورد قدمهای لازم برای انجام تست نفوذ روی یک برنامه کاربردی وب و ابزار محبوب مورداستفاده در طول یک تست نفوذ برنامه کاربردی وب همراه با مثالهای واقعی صحبت خواهد شد.
تست نفوذ برنامه کاربردی وب چیست؟
تست نفوذ برنامه کاربردی وب شامل مجموعه اقداماتی روشمند است که هدف آنها جمعآوری اطلاعات در مورد سیستم هدف، پیدا کردن آسیبپذیریها یا خطاها در آنها، تحقیق در مورد Exploitهایی که در مقابل آن خطاها یا آسیبپذیریها موفق خواهند شد و نقض امنیتی برنامه کاربردی میباشد.
Open Web Application Security Project یا OWASP جامعهای است که روی کشف و گزارشگیری آسیبپذیریهای امنیت برنامه کاربردی وب تمرکز مینماید. فهرست معتبر آنها از ده نقص امنیتی برتر، هر سال بروزرسانی میگردد تا روندهای جهانی را در امنیت برنامههای کاربردی وب نشان دهند. OWASP همچنین مقالات و ابزار امنیتی را منتشر میکند که خیلی مورد استفاده قرار میگیرند.
چرا باید تستهای نفوذ برنامه کاربردی وب را اجرا نمود
به دلیل توسعهی گستردهی برنامههای کاربردی وب، منابع اینترنتی زیادی صرف توسعهی نرمافزار و همچنین پیکربندی برنامههای کاربردی میشوند تا به درستی در این چشمانداز جدید کار کنند. اما این حوزهی جدید موجب باز شدن یک مسیر حملهی جدید نیز شده است که هکرهای مخرب میتوانند برای سود شخصی از آن بهره ببرند.
با توجه به اینکه برخی از برنامههای کاربردی وب دارای اطلاعات حساسی هستند، مهم است که همیشه ایمن باشند، مخصوصاً ازآنجاییکه بسیاری از آنها بهصورت عمومی در معرض اینترنت قرار دارند. انجام تست نفوذ برنامهی کاربردی وب بهعنوان بخشی از فرایند چرخهی عمر توسعهی نرمافزار یا SDLC، بهترین و مقرونبهصرفهترین استراتژی در مبارزه با آسیبپذیریهای برنامهی کاربردی وب میباشد.
ویدیوهای بیشتر درباره تست نفوذ
چرخهی عمر توسعهی نرمافزار یا SDLC
چرخهی عمر توسعهی نرمافزار یا SDLC مجموعهای عمومی از راهکارها است که هدف از آنها افزایش موفقیت نرمافزاری است که برای استفاده در آینده توسعه داده میشود. SDLC مجموعهای از اقدامات را تعریف میکند که باید اتخاذ شوند تا محصول بهتری تولید گردد که برای کاربر نهایی کارآمدتر بوده و همچنین مقرونبهصرفهترین شیوه را پیش بگیرد. تست نرمافزاری بخش بزرگی از فرایند SDLC است و شامل چندین رخداد یا پارامتر کلیدی میباشد. در طول مراحل مختلفی از فرایند توسعه، از ایدهپردازی گرفته تا کدنویسی، فرصتی فراهم میگردد تا مهندسان و مدیران پروژه با تولید بهترین برنامه کاربردی با کمترین میزان خطا، کارآمدترین راه برای پاسخ به نیازهای کاربر خود را پیدا کنند.
اشتباهات برنامهنویسی
نقصها، حذفیاتی هستند که معمولاً برنامهنویسان انجام میدهند. خطاها با نقصها متفاوت هستند، زیرا حضور آنها میتواند به یک مهاجم مخرب اجازه دهد برنامه کاربردی را Exploit کرده و شرایط یا سناریوی خطرناکی را ایجاد کنند که در آن اطلاعات شخصی دچار نقض امنیتی شده یا دسترسی به سیستم برای کاربران غیرمجاز فراهم گردد.
برای مشاوره رایگان جهت (باز)طراحی امنیت شبکه و یا انجام تست نفوذ مطابق با الزامات افتا با کارشناسان شرکت APK تماس بگیرید. |
الزامات
ممکن است قرض فنی، یعنی زمانی که توسعهدهندگان صرف برگشتن به کد توسعهدادهشده میکنند تا خطاها را رفع کرده یا بروزرسانیهایی را اعمال کنند، ایجاد گردد؛ مخصوصاً اگر توجه کافی به امنیت صورت نگرفته باشد. این اتفاق درصورتی رخ میدهد که پیش از اینکه کد بهطور کامل تست شود، با عجله وارد چرخهی تولید گردد. درنتیجه، تست برای پیدا کردن نقصها در مراحل اولیه SDLC معمولاً کمهزینهتر از اواخر فرایند SDLC است. اگر خطاها یا آسیبپذیریهایی در پیکربندی برنامه کاربردی وب پیدا شوند، Patch کردن نرمافزار در طول فرایند SDLC رخ میدهد.
چه اقدامات و روشهایی برای انجام یک تست نفوذ برنامهی کاربردی وب مورد استفاده قرار میگیرند؟
برای تأکید روی تفاوت بین یک برنامه کاربردی و یک برنامه کاربردی وب، تست نفوذ برنامه کاربردی وب روی محیط و تنظیمات برنامه کاربردی وب تمرکز میکند. بهعبارتدیگر، تست کردن برنامه کاربردی وب روی جمعآوری اطلاعات عمومی در مورد برنامه کاربردی وب و سپس Map کردن شبکهی درگیر Host کردن برنامه کاربردی وب تمرکز دارد. کاوش برای حملات دستکاری تزریق و یادگیری و رسیدگی به برنامه کاربردی بعداً اتفاق میافتد.
بیشتر بخوانید: انواع سطوح تست نفوذ برای سازمان ها و مقایسه آنها با یکدیگر
قدم 1: جمعآوری اطلاعات
مرحلهی جمعآوری اطلاعات یا شناسایی مهمترین قدم در هر فرایند تست نفوذ است، زیرا برای کاربران اطلاعات زیادی را فراهم میکند تا بتوانند بهسادگی آسیبپذیریها را شناسایی کرده و در آینده آنها را Exploit کنند. میتوان این مرحله را مثل پایهی هرمی در نظر گرفت که سعی در ساختن آن را داریم. بسته به نوع تعاملی که بخواهیم در سیستم هدف داشته باشیم، دو نوع شناسایی وجود دارد:
- شناسایی فعال
- شناسایی منفعل
شناسایی منفعل
جمعآوری اطلاعاتی که روی اینترنت در دسترس است بدون تعامل با سیستم هدف، شناسایی منفعل نام دارد. اکثر تحقیقات در این مرحله بهصورت آنلاین و با استفاده از وبسایتهای مختلف انجام میشود که اولین وبسایت Google است. اولین قدم معمولاً شامل استفاده از Google Syntax، شمارش Subdomainهای وبسایت، لینکها و موارد بیشتر است. برای مثال اگر Subdomainهای یک وبسایت بهخصوص جالب باشند، میتوان با استفاده از Syntax زیر نتایج جستجوی Google را محدود کرد: “site:*.domain.com”.
میتوان از Wayback Machine استفاده کرد تا مشخص شود که یک وبسایت بهخصوص چند وقت قبل چه شکلی داشته است، این وبسایت میتواند به افراد کمک کند که با هدف برنامه کاربردی وب تعامل کند، بدون اینکه مستقیماً در تماس با آن قرار بگیرد. میتوان نسخهی قدیمی وبسایت را کاوش کرد و هر ویژگی که ممکن است در ادامهی مرحلهی تحقیق و Exploit مفید باشد را یادداشت نمود.
شناسایی فعال
شناسایی فعال برخلاف شناسایی منفعل مستقیماً سیستم هدف را بررسی میکند و یک خروجی از آن میگیرد. مثالهایی از شناسایی فعال عبارتاند از Fingerprinting برنامه کاربردی وب، استفاده از اسکنر شبکه Shodan، انجام یک DNS Forward و Reverse Lookup، یک DNZ Zone Transfer و غیره.
بیشتر بخوانید: زمان های مناسب برای انجام تست نفوذ شبکه و الویت آن برای سازمان ها
Fingerprinting برنامه کاربردی وب با استفاده از Nmap
Fingerprinting یک برنامه کاربردی وب شامل جمعآوری اطلاعات در مورد برنامه کاربردی وب است؛ اطلاعاتی مثل زبان Scripting مورد استفاده، نرمافزار و نسخهی سرور همراه با سیستمعامل سرور. بسیاری از این موارد را میتوان با استفاده از Scanner شبکه Nmap انجام داد. باید Nmap را در مقابل IP مقصد یا گسترهی IP مقصد اجرا کرده و تمام پورتها و سرویسهای باز را همراه با اطلاعات بالا در مورد نسخهی سیستمعامل یادداشت کرد.
اسکنر شبکه Shodan
با استفاده از اسکنر شبکه Shodan، میتوان اطلاعاتی اضافی را در مورد برنامهی کاربردی وب Hostشده شناسایی کرد؛ درصورتیکه این اطلاعات در اینترنت قابلدسترسی باشند. Shodan اطلاعات گستردهای را در مورد هر IP که اسکن کند و بهصورت عمومی قابلدسترسی باشد، فراهم میکند. گسترهی اطلاعات، از مکان جغرافیایی گرفته تا شمارهی پورتهای باز شده، نرمافزار سرور مورد استفاده و چند جزئیات مفید دیگر را شامل میشود.
DNS Forward و Reverse Lookup
برای مرتبط ساختن Subdomainهایی که بهتازگی کشفشدهاند با آدرسهای IP مرتبط آنها، میتوان از Forward DNS Lookup ،Ping و حتی ابزار پیشرفتهتر مثل Burp Suite استفاده کرد.
DNS Zone Transfer
برای انجام DNS Zone Transfer باید از دستور nslookup استفاده کرد تا سرورهای DNS شناسایی گردد. گزینههای دیگر، وبسایتهایی هستند که بهطور خاص برای شناسایی سرور DNS ساخته شدهاند. پس از شناسایی تمام سرورهای DNS، باید از دستور Dig استفاده کرد و برای DNS Zone Transfer اقدام نمود.
شناسایی سایتهای خارجی مرتبط
این قدم مهمی در مرحلهی جمعآوری اطلاعات است، زیرا معمولاً بین سایتهای خارجی و سایت هدف ترافیک جریان دارد. راحتترین روش برای این کار Burp Suite است.
بررسی درخواستهای HEAD و OPTIONS HTTP
پاسخها از درخواستهای HEAD و OPTION قطعاً نرمافزار و نسخهی سرور وب را نشان میدهند. گاهی اوقات پاسخها حاوی دادههای ارزشمندتر هستند. درحالیکه ویژگی intercept on از Burp Suite فعال است، بهسادگی میتوان با سر زدن به وبسایت هدف این اطلاعات را رهگیری نمود.
جمعآوری اطلاعات در مورد برنامهی کاربردی وب از طریق صفحات خطا
صفحات خطا میتوانند بازخوردهای مفید زیادی را در مورد نسخه و نوع سروری که وبسایت روی آن اجرا میشود فراهم کنند. با توجه به این اطلاعات، میتوان شروع کرد به تصویرسازی محیط برنامه کاربردی وب. صرفاً کافی است URL وبسایت دلخواه را اصلاح کرده و سعی کنیم که موجب خطای 404 Not Found شویم. در مورد زیر، یک صفحهی Not Found در انجمن وبسایت، سرور و نسخهی آن را نشان میدهد (ngnix/1.12.2).
بررسی کد منبع
کد منبع همچنین میتواند اطلاعات مفید زیادی را فراهم کند که در آینده بتوان با استفاده از آنها یک آسیبپذیری را پیدا کرد. با بررسی دقیق کد صفحهی وب، میتوان محیط برنامه کاربردی و طرز کار کلی برنامه کاربردی را تعیین نمود. در Screenshot زیر، میتوان دید که وبسایت روی سرور Apache، نسخهی 2.2.14 اجرا میگردد.
مستندسازی در طول مرحلهی شناسایی
مستند کردن همهچیز به شکل سازماندهیشده در طول مرحلهی جمعآوری و بررسی ضروری است. این کار باعث ایجاد یک مبنا میشود که از طریق آن میتوان بیشازپیش هدف را مطالعه کرد و آسیبپذیریهایی را در سیستم پیدا کرد که در آینده Exploit میشوند. در ادامه برخی از ابزار محبوب معرفی میگردد که برای تست نفوذ برنامه کاربردی مورد استفاده قرار میگیرند و برخی از تکنیکها درمورد اسکن امنیتی، SQL Injection، پیدا کردن رمز عبور با Brute Force و دیگر تکنیکهای مهم تست نفوذ که میتوانند مورد استفاده قرار بگیرند، نمایش داده میشود.
قدم 2: تحقیق و Exploit
برای انجام تست نفوذ برنامهی کاربردی وب، دریایی از ابزار امنیتی وجود دارد و اکثر آنها متنباز هستند. اما محدود کردن انتخاب خود به فقط چند ابزار میتواند چالشبرانگیز باشد. به همین دلیل است که مرحلهی شناسایی نقش بسیار مهمی دارد. نهتنها در این مرحله تمام اطلاعات ضروری برای پیدا کردن آسیبپذیریها و Exploitها در آینده پیدا میشود، بلکه مسیرهای حمله نیز محدود میگردد و بدین صورت میتوان ابزار مورد نیاز برای رسیدن به هدف خود را پیدا کرد.