جمع آوری اطلاعات از فریم ورک وب اپلیکیشن
در این بخش از دوره آموزشی OWASP-OTG به اولین بخش از استاندارد OTG با شناسه OTG-INFO-008 می پردازیم که مربوط به جمع آوری اطلاعات از فریم ورک وب اپلیکیشن می باشد.
خلاصه
یکی از مهمترین مراحل جمع آوری اطلاعات، شناسایی فریم ورک وب است. دانستن نوع فریم ورک به طور خودکار مزیت و برتری به حساب میآید.
اهمیت این گام صرفاً به خاطر آسیب پذیریها در نسخههای قدیمی نیست؛ بلکه پیکربندی نادرست فریم ورک و ساختار فایلی معلوم نیز بر اهمیت این موضوع اشاره دارند.
چندین نوع و نسخه فریم ورک در سطح جهان مورد استفاده هستند. داشتن اطلاعاتی از فریم ورک میتواند در فرایند تست و ارزیابی کمک کرده و حتی مسیر تست را نیز تغییر دهد. این اطلاعات را میتوان از طریق آنالیز دقیق مکانهای خاص به دست آورد. بسیاری از فریم ورکها در آن موقعیتها علائم خاص خود را دارند.
در واقع این کاری است که ابزارهای خودکار انجام میدهند. این ابزارها مسیرهای تعریف شده را برای یافتن آن علائم بررسی میکنند و علائم یافت شده را با دیتابیس علائم مقایسه میکنند. برای دقت بهتر از چند علائم استفاده میشود.
توجه داشته باشید که این مقاله تفاوتی بین Web Application Framework و Content Management System قائل نمیشود. علت این امر این است تا نحوه جمع آوری اطلاعات هر دو در یک بخش توضیح داده شود. در این بخش از هر دو مورد ذکر شده، تحت عنوان فریم ورک وب یاد میشود.
اهداف تست و ارزیابی
هدف از این تست و ارزیابی، تشخیص نوع فریم ورک برای داشتن درک بهتری از متدولوژی تست امنیتی است.
چگونه تست کنیم؟
تست جعبه سیاه
موقعیتها و مکانهای زیادی هستند که میتوان برای یافتن فریم ورک، آنها را بررسی و آنالیز کرد:
• سرایندهای HTTP
• کوکیها
• سورس کد HTML
• فایلها و فولدرهای مشخص
• پسوند فایلها
• پیام خطا
سرایند HTTP
ابتداییترین راه تشخیص فریم ورک وب، بررسی فیلد X-Powered-By در سرایند پاسخ HTTP است. از ابزارهای زیادی میتوان برای این کار استفاده است. یکی از این ابزارها nectcat است. درخواست و پاسخ HTTP زیر را در نظر بگیرید:
از روی فیلد X-Powered-By میتوان تشخیص داد که فریم ورک وب اپلیکیشن Mono است. با این حال، علی رغم اینکه این رویکرد یک روش آسان و سریع محسوب میشود، اما همیشه جواب نمیدهد. این قابلیت وجود دارد که با تنظیمات درست، فیلد X-Powered-By را غیرفعال کرد. همچنین، روشهایی وجود دارند که به وب سایت اجازه میدهند تا سرایندهای HTTP را مخفی و حتی دستکاری کنند. به عنوان مثال، در مثال قبلی، احتمال اینکه ارزیاب امنیتی فیلد X-Powered-By را نبیند یا با جواب دستکاری شده مانند زیر روبرو شود، وجود دارد:
گاهی اوقات، فیلدهای زیادی وجود دارند که به نوع فریم ورک اشاره میکنند. در مثال زیر، با توجه به اطلاعات جمع آوری شده از پاسخ HTTP، میتوان مشاهده کرد که سرایند X-Powered-By شامل نسخهای از PHP است. با این حال، سرایند X-Generator به نسخه دقیقتر فریم ورک یعنی Swiftlet اشاره میکند. این کار باعث گسترش و افزایش بردارهای حمله ارزیابب امنیتی میشود. هنگام جمع آوری اطلاعات، تمامی سرایندهای HTTP را به منظور نشت احتمالی اطلاعات با دقت بررسی کنید.
کوکیها
یکی دیگر از راههای مشابه و مطمئن در تشخیص فریم ورک، بررسی کوکیهای مختص فریم ورک است. مثال زیر را در نظر بگیرید:
کوکی CAKEPHP به طور خودکار ارسال شده است و به همین علت نوع فریم ورک مشخص میشود. لیستی از کوکیهای معروف در ادامه آورده شده است. محدودیتهای این روش نیز مانند روش قبل است و میتوان نام کوکی را تغییر داد. به عنوان مثال، برای فریم ورک CAKEPHP میتوان مانند پیکربندی زیر عمل کرد:
با این حال، این نوع دستکاری نسبت به دستکاری X-Powered-By کمتر به چشم میخورد. به همین علت، این روش قابل مطمئنتر است.
سورس کد HTML
این روش مبتنی بر یافتن الگوهای خاص و مشخص در سورس کد HTML است. ارزیاب امنیتی میتواند از طریق بررسی سورس کد HTML به اطلاعات زیادی دست پیدا کرده و نوع فریم ورک را مشخص کند. کامنتهای HTML یکی از علائم این روش هستند. علاوه بر این، مسیرهای منحصر به فرد فریم ورکها را نیز میتوان یافت. به عنوان مثال، مسیرهای css و js منحصر به فرد فریم ورک میتوانند در شناسایی فریم ورک کمک کنند. در نهایت، متغیرهای اسکریپتی خاص میتوانند به نوع مشخصی از فریم ورک اشاره داشته باشند.
با توجه به اسکرین شات زیر، ارزیاب امنیتی میتواند به سادگی به نوع و نسخه فریم ورک پی ببرد. کامنتها، مسیرهای مشخص و خاص و متغیرهای اسکریپتی، همگی به ارزیاب در تشخیص فریم ورک ZK کمک میکنند.
معمولاً این اطلاعات در بین تگهای head، تگهای meta یا حتی در آخر صفحه وب ذکر میشوند. با این اوصاف، توصیه میشود که کل صفحه بررسی شود، چرا که میتوان به اطلاعات مهم دیگری اعم از کامنتها و فیلدهای مخفی پی برد. گاهی اوقات، توسعه دهندگان اطلاعات فریم ورک استفاده شده را مخفی نمیکنند و اهمیتی به این موضوع نمیدهند. از این رو، احتمال مواجه شدن با تصویر زیر در انتهای صفحه وجود دارد:
پسوند فایلها
URL میتواند شامل پسوند فایل باشد. پسوند فایل میتواند نوع پلتفرم و تکنولوژی وب را مشخص کند. به عنوان مثال، OWASP از PHP استفاده میکند.
پسوندهای زیر به تکنولوژیهای خاص خود اشاره میکنند:
• .php –> PHP
• .aspx –> Microsoft ASP.NET
• .jsp –> Java Server pages
فایلها و فولدرهای مشخص
فایلها و فولدرهای خاص هر فریم ورک منحصر به فرد است. توصیه میشود حین تست نفوذ، فریم ورک مربوطه را نصب کرده تا درک بهتری از زیرساخت و ساختار فایلهای آن داشته باشید. با این حال، لیستهای فایلی مختلفی در اینترنت وجود دارند و یکی از بهترین مثالها، FuzzDB که لیستی از فولدرها و فایلهای قابل پیشبینی است، میباشد.
علائم فریم ورکهای معروف
ابزارها
لیستی از ابزارهای جامع و معروف در زیر آورده شده است. ابزارهای کاربردی دیگر و ابزارهای مختص نوع خاصی از فریم ورک نیز وجود دارند.
WhatWeb
وب سایت: www.morningstarsecurity.com/research/whatweb
یکی از بهترین ابزارهای جمع آوری اطلاعات در بازار است. به طور پیش فرض در کالی نصب شده است. به زبان Ruby نوشته شده است. به علائم زیر حساس است:
• رشتههای متنی
• الگوهای با قاعده
• کوئریهای دیتابیس Google Hack
• هشهای MD5
• شناسایی و تشخیص URL
• الگوهای تگ HTML
• کد اختصاصی به زبان Ruby برای فعالیتهای passive
خروجی این ابزار به شکل زیر است:
BlindElephant
وب سایت: community.qualys.com/community/blindelephant
ابزار جمع آوری اطلاعات با دقت بسیار بالا که بر اساس مقایسه نسخههای چِکسام فایلهای ایستا کار میکند و به زبان پایتون نوشته شده است. خروجی این برنامه به شکل زیر خواهد بود:
Wappalyzer
وب سایت: wappalyzer.com
پلاگین مرورگرهای فایرفاکس و کروم است. این پلاگین بر اساس مقایسه الگوهای با قاعده کار میکند و به چیز دیگری جز بارگذاری کامل صفحه وب در مرورگر ندارد. خروجی این پلاگین به شکل آیکون است. احتمال دارد این پلاگین در مواقعی حدسهای اشتباهی بزند، اما در کل یک پلاگین بسیار کاربردی در یافتن تکنولوژیهای یک سایت، تنها با یک بار بارگذاری، محسوب میشود. خروجی این پلاگین به شکل زیر خواهد بود:
مطالب این بخش توسط جناب آقای امیر ثروتی تهیه شده است.