
در این بخش از دوره آموزشی تست نفوذ سطح متوسط که برگرفته از دوره SEC642 می باشد به آشنایی با Methodology و Context می پردازیم.
Web Penetration Testing
با گذشت زمان، برنامههای وب پیچیدهتر میشوند. این موضوع اغلب به دلیل افزایش قابلیتهای کسب و کار ارائه شده در برنامههای تحت وب میباشد. همانطور که به سمت عملکرد و فرآیندهای کسب و کار بیشتر حرکت میکنیم، تست برنامه نیز دشوارتر خواهد شد. برای تحقق این امر، ما شاهد رویکردهای جدیدی برای توسعه برنامههای وب هستیم. این بدان معنی است که ما به عنوان یک تست نفوذگر باید این پیچیدگی و فناوریهای پیرامون آن را درک کنیم.
علاوه بر موارد مذکور، ما شاهد امنیت بیشتری در برنامههای تحت وب هستیم که از دو بخش دیده میشوند. اولین بخش چارچوبهای مورد استفاده در فرآیند توسعه میباشد که آنها از نظر امنیتی در جایگاه خوبی قرار دارند. مورد دیگر این است که بسیاری از توسعه دهندگان، اکنون از مشکلات امنیتی برنامههای کاربردی وب آگاهی دارند و یا از کنترلهای امنیتی تعبیه شده در چارچوبها یا سیستمهای مدیریت محتوا استفاده نموده یا خود، آنها را پیاده سازی میکنند.
لازم به ذکر است که شناسایی چارچوبهای مورد استفاده توسعه دهندگان میتواند در فرآیند تست به ما کمک نماید.
Understanding Attacks
بزرگترین بحثی که من شنیدهام این است که: چرا باید به افراد نحوه حملات را بیاموزیم؟
انجام فرآیند اکسپلویت، کاری است که هکرهای کلاه سیاه یا Script Kidsها آن را انجام میدهند.
مشکل این رویکرد این است در آن فرض میشود که بدون درک چگونگی عملکرد اکسپلویت، شما میتوانید از حملات جلوگیری نموده و نقایص موجود در برنامهها را بیابید.
یکی از پایههای اصلی تست نفوذ، درک چگونگی عملکرد اکسپلویت و پرداختن به این نکته است که نفوذگران چطور نواقص موجود در برنامهها را شناسایی میکنند. برای درک واقعی خطرات و تهدیدهایی که برنامههای ما را تهدید میکنند باید از منظر مهاجم به تست بپردازیم.
در این حالت باید مثالهایی را ارائه دهیم یا خسارتی که حمله میتواند به سازمان یا شرکت وارد نماید، نمایش دهیم. البته در همه حالات باید به یاد داشته باشیم که با یک برنامه واقعی روبرو هستیم که معمولا دارای دادههای واقعی، درون آن است. پس همواره باید مراقب تستهایی که انجام میدهید، باشید.
دوره آموزشی تست نفوذ وب – SEC542
انجام تست نفوذ، در امتداد انجام مدلسازی تهدید است. اگر کسی بخواهد سازمان شما را هدف قرار دهد، چه داراییهایی در اختیار آنها قرار خواهد گرفت و احتمالا کدام آسیبپذیریها منجر به دسترسی موفقیت آمیز خواهد شد؟
با در نظر داشتن این موضوع، میتوان بر اولویت بندی لازم را برای ارزیابی اهداف تمرکز نمود و روند مدیریت ریسک را تا حد زیادی بهبود بخشید.
Testing Methodology
در تست نفوذ برنامههای وب، ما یک روش ساده را آموزش میدهیم که شامل یک فرآیند چهار مرحلهای میباشد. ما از این فرآیند برای اطمینان از جامع بودن تست خود استفاده میکنیم که این رویکرد تنها شامل چند ابزار تست نمیباشد و دارای جزئیات و بخشهای مختلفی میباشد.
این چهار مرحله شامل Reconnaissance، Mapping، Discovery و Exploitation میباشد.

در مرحله Recon ما اطلاعات مربوط به هدف خود را از طریق منابع Open Source و اینترنت کسب مینماییم. در این بخش بررسی میکنیم که چه دادههایی بدون نیاز به برقراری ارتباط با هدف در دسترسی ما هستند؟
در مرحله بعد فرآیند Mapping آغاز میشود که در آن سعی میشود تا درک بهتری از هدف داشته باشیم (هدف چه کاری را دقیقا انجام میدهد). آیا کاتالوگ یا ابزار مدیریت ارتباط با مشتری وجود دارد؟
پس از اینکه برنامه را از دیدگاه کاربر به خوبی درک نمودیم، سپس باید سعی کنیم که محل شکست را در آن مشخص کنیم. این مرحله همان Discovery میباشد که کاملا بر یافتن نقاط ضعف بالقوه متمرکز است.
در مرحله بعدی پس از شناسایی نقاط ضعف، مرحله اکسپلویت یا بهره برداری میباشد که در آن ما سعی میکنیم تا دو عملکرد مختلف را انجام دهیم.
ابتدا ما قصد داریم تا ببینیم که آیا نقاط ضعف شناسایی شده واقعا وجود دارند یا خیر، سپس مشخص کنیم که در صورت وجود نقاط ضعف، سازمان هدف چه تاثیری در صورت بهره برداری از آن توسط نفوذگران خواهد دید.
توجه داشته باشید که هریک از این مراحل بر روی مراحل دیگر تاثیرگذار بوده و به یکدیگر وابسته هستند.
Complete Each Step
یکی از نکات ما که به طور معمول در هیجان یافتن نقاط ضعف، فراموش میشود، این است که قبل از رفتن به مرحله بعدی باید هر مرحله را به پایان برسانیم. هر یک از این مراحل پایه و اساس مرحله بعدی میباشند. در برخی موارد عدم وجود نظم در انجام این مراحل میتواند منجر به اتلاف وقت و انرژی ما شود.
یکی از تفاوتهای ما با نفوذگران این است که ما در یک دوره زمانی مشخص، تست را انجام میدهیم. در صورتی که نظم لازم را در انجام فرآیند تست، مد نظر قرار ندهیم، ممکن است برخی از موارد را از دست داده و زمان ما برای انجام تست به پایان برسد.
به این نکته هم توجه داشته باشید که شناسایی برخی از آسیبپذیریهایی که مربوط به منطق کسب و کار میباشند، توسط ابزارهای امنیتی و فایروالها امکان پذیر نمیباشد و همچنین برای اثبات و تایید این چنین آسیبپذیریهایی نیاز به زمان زیادی میباشد.
ممکن است که در هنگام تست، به صفحهای برخورد نمایید که آسیبپذیر به نظر میرسد (مشاهده خطای SQL). در این حالت ما قصد داریم تا از انتها به موضوع نگاه کنیم زیرا آسیبپذیری SQL Injection یک آسیبپذیری جذاب به نظر میرسد. ولی ما باید جزئیات بیشتری را برای شناسایی SQL Injection به دست آوریم. بدین منظور باید بدانیم که ورودی شما در کوئری SQL کجا قرار گرفته است.
توجه داشته باشید که ما تنها به دنبال آسیبپذیری SQL Injection نبوده و میبایست بخشهای مختلف برنامه را به منظور شناسایی آسیبپذیریهای دیگر بررسی نماییم.
A Bit of Reality
در برخی اوقات، پریدن به جلو (از یک مرحله به مرحله دیگر) در متدولوژی شما به جهت یک هدف خاص لازم است. برای این که از دامنه متدولوژی خارج نشوید از قانون پنج تلاش یا پنج دقیقه استفاده کنید. این کار به منظور پیشگیری از عدم تمرکز نیز مفید است. اگر یک آسیبپذیری را کشف کردید مانند SQL Injection، ببینید چه کاری میتوانید انجام دهید. بیش از پنج دقیقه زمان برای تنظیم مواردی مانند sqlmap وقت صرف نکنید.

در صورتی که در همین مدت زمان به هدف خود دست پیدا کرده و دسترسی اولیه را به سیستم ایجاد نمودید که بسیار عالی است ولی اگر پنج دقیقه تمام شد یا پنج حمله مختلف را امتحان کردید، دست از ادامه کار در این مورد بردارید و به ادامه فرآیند در متدولوژی خود بروید. البته که باید این نقطه ضعف شناسایی شده را یادداشت نمایید که در سر جای خود از آن استفاده نمایید.
توجه داشته باشید که دو موردی که منجر به کاهش استرس و موفقیت بیشتر ما میشود، یادداشت برداری خوب و کار تیمیخوب است. هیچ کس به تنهایی نمیتواند یک برنامه تحت وب مدرن و پیچیده را بدرستی ارزیابی کند.
Cyclical Process
جنبه دیگری که در متدولوژی حائز اهمیت است، چرخه طی مراحل است. همانطور که ما از مرحله Recon به مرحله Mapping پیش میرویم ما در حال ایجاد کردن پایه و اساس مرحله بعدی هستیم و البته هنگامی که ما یک آسیبپذیری را اکسپلویت میکنیم و به اطلاعات لازم دسترسی پیدا میکنیم، ما باید به چرخه اصلی بازگردیم تا آسیبپذیری بعدی را شناسایی نماییم.
توجه داشته باشید که تمرکز ما باید بر روی یافتن نقاط ضعف باشد و نه هکر کردن برنامه. بنابراین باید اطمینان حاصل کنیم که در حین فرآیند تست، از زمان در دسترس خود به خوبی استفاده میکنیم.
Understanding Context
درک زمینه یا Context، مهارت مهمی برای یک تست نفوذگر است. ما باید اطمینان حاصل کنیم که هر کاری را انجام میدهیم، زمینه حفظ شود. این بدان دلیل است که بسیاری از کارهایی که انجام میدهیم به زمان یا مکان وقوع آن وابسته است.
ما باید نحوه انجام کارها را پییگیری نماییم؛ نحوه پاسخگویی برنامه و آنچه ما ارسال میکنیم.
همانطور که به زمینه نگاه میکنیم، باید بر روی دو دسته مختلف تمرکز داشته باشید اول برنامه جاری و دوم مکان آسیبپذیری و اکسپلویت ما میباشد.
مورد اول مبتنی بر درک این است که ما در کجای برنامه قرار داریم. این کار بر روی نحوه کارکرد برنامه و هدف آن متمرکز است. مورد دوم بر اساس مکانی که آسیبپذیری وجود دارد و نحوه اکسپلویت ما در آن است. در ادامه به بررسی هر یک از این موارد میپردازیم.
Application Context
زمینه برنامه یا Application Context یکی از مواردی است که بسیار از افراد آن را از دست میدهند. آنها بر روی تست آسیبپذیری متمرکز هستند و فراموش میکنند که این برنامه است که مهم میباشد. به یاد داشته باشید که هیچ برنامهای در فضای خالی اجرا نمیشود (عملکرد برنامه و هدف آن) حتی اگر تنها از ما خواسته شده باشد که آن را فقط تست نماییم.
یکی از اهداف اصلی تست نفوذ، درک میزان خطر یا همان ریسک است. برای رسیدن به این هدف باید باید یک سری سوالات را از خود بپرسیم:
• این برنامه چه کاری انجام میدهد؟ درک عملکرد برنامه برای سازمان بسیار حائز اهمیت است.
• در کجای شبکه قرار دارد؟ ما باید جریان اطلاعات به داخل برنامه و همچنین کنترلهای امنیتی موجود در اطراف برنامه را درک نماییم.
• چه کسی به آن دسترسی دارد؟ پرسنل یا مشتریان عمومی ممکن است به بخشهای مختلف برنامه دسترسی داشته باشند. شرایط احراز هویت و مجوز دهی باید شناسایی شوند.
• تیم تست نفوذ باید هنگام تحلیل ریسک، زیرساختهای اساسی را که برنامه و معماری امنیتی پیرامون آن پشتیبانی میکنند را در نظر بگیرد.
با پاسخ دادن به این سوالات، به درک بهتری خواهید رسید که تست و نقاط ضعف شناسایی نشده شما را به کجا خواهد برد.
Burp Collaborator ابزار جدید است که به شما کمک میکند که درک بهتری از زمینههای برنامه برای انجام تست خود داشته باشید. این ابزار بر روی وب سرور اجرا شده و میتواند تعاملات دیگری که برنامههای Interception Proxyهای سنتی آن را از دست میدهند، کنترل نماید.
Vulnerability Context
دسته دوم زمینه آسیبپذیری است. ما، به عنوان تست نفوذگر، باید درک کنیم که این زمینه چیست زیرا آنچه را که ما با آن انجام میدهیم کنترل میکند. دو بخش در این زمینه وجود دارد.
اول، ما باید مجموعهای از سوالات مربوط به آسیبپذیری را درک کنیم. ما باید درک کنیم که آیا این آسیبپذیری بر روی بخش سرور برنامه تمرکز دارد یا مشتری آن را اجرا میکند. مرتبط با این، درک این موضوع است که در کجا اجرا میشود. برای مثال، اگر تزریق SQL باشد، درون پایگاهداده اجرا میشود، اما اگر تزریق دستور باشد، روی سرور برنامه کاربردی وب اجرا میشود. این امر بر چگونگی بهرهبرداری ما از آسیبپذیری تاثیر میگذارد، که براساس محل اجرا است.
در نهایت، ما باید ابزارها و تکنیکهای مناسب برای کشف آسیبپذیری بالقوه و سپس بهرهبرداری از آن را انتخاب کنیم.
Exploit Context
خود اکسپلویت بخشی از زمینهای است که ما هنگام ارزیابی آسیبپذیری آن را بررسی میکنیم. جایی که آسیبپذیری اجرا میشود بر چگونگی بهرهبرداری ما از آن و پیلود مورد استفاده در آن تاثیر میگذارد.
اول، ما باید در مورد نقصهای سمت سرور فکر کنیم. به یاد داشته باشید که کد اکسپلویت، در پروسس برنامه کاربردی اجرا خواهد شد. این بدان معنی است که باقیماندههایی از کد و منطق وجود خواهند داشت که باید در نظر گرفته شوند. به عنوان مثال، اگر ما تزریق SQL را اجرا کنیم، باید اطمینان حاصل کنیم که تزریق ما در زمینه کوئری موجود اجرا میشود. انجام این کار سختتر است چون ما به طور معمول نمیتوانیم پردازش روی سرور را بررسی کنیم.
برای نقصهای طرف مشتری، این موضوع کمیآسانتر به نظر میرسد زیرا ما میتوانیم ببینیم که اکسپلویت ما کجا قرار میگیرد. البته ما هنوز باید بررسیهای لازم را انجام دهیم. به عنوان مثال، اگر حمله ما به یک آسیبپذیری XSS باشد، پیلود ما در کد سمت مشتری در کدام قسمت ظاهر میشود؟ اگر در یک تگ دیگر باشد، اکسپلویت ما باید آن تگ ابتدایی را بسته و سپس پیلود، اجرا گردد.