
در این بخش از دوره SEC504 از موسسه SANS به آشنایی به حملات تحت وب شامل شناسایی حساب های کاربری و Command Injection خواهیم پرداخت.
حملات تحت وب
بارها سوال میشود که کدام روش برای اطلاع از حملات و راههای مقابله با آن در سطح وب مفید میباشد. در جواب باید گفت، بهترین منبع برای این اطلاعات، پروژه متن باز امنیت برنامههای تحت وب یا همان OWASP میباشد. عبارت OWASP مخفف Open Web Application Security Project است.
این پروژه یک راهنما برای ساخت برنامههای تحت وب ایمن میباشد و در جزئیات این برنامهها همانند طراحی، معماری، پیاده سازی، ثبت وقایع و موارد دیگر، راهکار ارائه داده است. امروزه با توجه به رواج استفاده از برنامههای تحت وب، مطالعه این پروژه برای توسعه دهندگان وب لازم میباشد. شما میتوانید اطلاعات مربوط به این پروژه را در وب سایت www.owasp.org مشاهده نمایید.
Account harvesting
قبل از ورود به مباحث مربوط به حملات برنامههای تحت وب، جمع آوری اطلاعات در مورد این برنامهها بسیار حائز اهمیت است. البته در بخش مربوط به جمع آوری اطلاعات، توضیحات لازم و همچنین ابزارهای مختلف ارائه شده است.
در این بخش به مبحث Account harvesting جمع آوری و استخراج حسابهای کاربری میپردازیم. یکی از راههای استخراج اطلاعات حسابهای کاربری، شناسایی بر اساس نحوه پاسخگویی برنامه تحت وب به درخواستهای نفوذگر است.
دوره آموزشی SEC542 – تست نفوذ وب
در این روش نفوذگر بر اساس تجزیه و تحلیل آنچه رخ میدهد، اقدام به شناسایی کاربران سامانه تحت وب می نماید. در این روش شما باید به گونهای رفتار کنید و داده ها را به سمت برنامه تحت وب هدایت کنید که پیامهای هشدار یا خطا به شما نمایش داده شود. در این حالت اگر Error Handling به درستی پیاده سازی نشده باشد، میتوان درستی یا نادرستی نام کاربری سامانه تحت وب را شناسایی نمود. مصداق بارز این حمله در صفحات مربوط به سیستم مدیریت محتوای وردپرس قابل مشاهده است. به تصویر زیر دقت نمایید:

اگر شما نام کاربری و کلمه عبور را اشتباه وارد نمایید، صفحهای مانند صفحه بالا به شما نمایش داده میشود ولی اگر نام کاربری را به درستی وارد نموده باشید و کلمه عبور را اشتباه وارد کرده باشید، صفحهای مانند شکل زیر به شما نمایش داده میشود:

همانطور که در تصویر بالا مشاهده میشود، پیام هشدار به ما میگوید که کلمه عبور وارد شده برای نام کاربری admin درست نمیباشد. پس در نتیجه نام کاربری admin وجود دارد ولی کلمه عبور نادرست است.
برای پیشگیری از چنین مشکلاتی پیشنهاد میگردد که یک عبارت یکسان در هر دو مورد به کاربر نمایش داده شود.
Command Injection
یکی از آسیبپذیریها در حوزه برنامههای تحت وب، آسیبپذیری تزریق دستور با Command Injection میباشد. با استفاده از این آسیبپذیری میتوان دستورات سطح سیستمعامل را اجرا نمود. برنامههای کاربردی زیادی از این نوع آسیبپذیری رنج میبرند که نمونهای از این دست، برنامههای ERP و یا اتوماسیون های اداری میباشند.
در برخی از برنامههای تحت وب، ورودی از کاربر گرفته و پردازش میشود. این ورودی سپس به عنوان یک پارامتر برای برنامهای در سیستمعامل ارسال میگردد و پس از اجرا، خروجی آن به سمت کاربر بازگشت داده میشود. در این حالت اگر برنامه دارای آسیبپذیری بوده و ورودیها را به درستی کنترل ننماید، یک نفوذگر میتواند با استفاده از این فرآیند، دستورات مخرب خود را به برنامه تحت وب وارد نموده و خروجی آن را مشاهده نماید.
البته دستوارت در محیط ویندوز و لینوکس با یکدیگر تفاوت دارند که این تفاوت هم باید در نظر گرفته شود.
ورودیها برای تزریق کد، میتواند در قسمت URL، فرمها، کوکی و هر ورودی که توسط کاربر دریافت میشود باشد.

دستورات برای شناسایی تزریق
یک نفوذگر میتواند برای شناسایی آسیبپذیری Command Injection از چندین دستور استفاده نموده و به دنبال خروجی اجرای آنها باشد. این خروجی در برخی موارد قابل مشاهده بوده و در برخی موارد با توجه به اینکه داخل سورس سایت و یا در پاسخ درخواست HTTP نمایش داده میشود، با ابزار امکان مشاهده آن وجود دارد.
برخی از دستورات مفید برای این مرحله، Ping و Nslookup هستند. اگر نفوذگر از دستور ping به آدرس خودش استفاده کند میتواند با آنالیز بستههای ICMP ورودی و خروجی در سیستم، تشخیص دهد که آیا درخواست وی ارسال شده است و آسیبپذیری وجود دارد یا خیر. همین کار با استفاده از دستور Nslookup هم امکان پذیر میباشد. بدین صورت که نفوذگر یک درخواست را با استفاده از Nslookup به آدرس دامینی که در اختیار دارد ارسال میکند و با آنالیز بستههای DNS میتواند تشخیص دهد که آیا سایت آسیبپذیر هست یا خیر.
دستورات Ping و Nslookup برای تست وجود آسیبپذیری Command Injection بسیار ایده ال و مفید هستند، چراکه این دو دستور با هر سطح دسترسی قابل اجرا هستند.
پس از اینکه نفوذگر از وجود آسیبپذیری تزریق کد، اطمینان حاصل نمود، میتواند از دستورات دیگری که اطلاعات بیشتری را به وی میدهد، استفاده نماید.
در موارد خاص برخی از نفوذگران یک دستوری را تزریق مینمایند که موجب میشود، ماشین قربانی، یک فایل Share را با یک سیستمیکه در کنترل نفوذگر میباشد، mount نماید.
به این ترتیب مهاجم میتواند موجب شود تا هدف، کدهای مخرب وی را بدون حتی نصب برنامهای خاص، اجرا نماید.
راههای مقابله و پیشگیری از حملات تزریق دستور
آموزش توسعه دهندگان و برنامه نویسان برای اعتبار سنجی ورودیها، یکی از موارد مهم برای پیشگیری از آسیبپذیریهای تزریق دستور است. همچنین انجام مرتب ارزیابی آسیبپذیری و تست نفوذ نیز میتواند در کشف این آسیبپذیری و آسیبپذیریهای دیگر به شما کمک نماید.
برای شناسایی این حملات هم میتوان به دنبال ترافیکهای خروجی (outbound) از وب سرور بود. آیا از سرور ترافیک ICMP به بیرون ارسال شده است یا آیا به پروتکل SMB یا NFS از طرف وب سرور بستهای ارسال شده یا ارتباطی برقرار شده است.
برای مهار این آسیبپذیری هم باید مشکلات برنامهها مرتفع شده و از فایروالهای تحت وب استفاده نمود. البته حذف برنامهای که توسط نفوذگر نصب شده و اکانتهایی که ساخته شده است هم باید صورت پذیرد.
در ادامه باید بررسی شود که آیا روتکیت بر روی سرور نصب شده است یا خیر و در صورت اطمینان از وجود نصب روتکیت، سیستمعامل مجدد نصب گردد.