استفاده از مولفه های با آسیب پذیری های شناخته شده Using Components with Known Vulnerabilities

A9 2017
استفاده از مولفه های با آسیب پذیری های شناخته شده Using Components with Known Vulnerabilities
بردار حمله
App.Specific
قابلیت بهره برداری : 2

در حالی که پیدا کردن اکسپلویت های نوشته شده برای بسیاری از آسیبپذیری های شناخته شده بسیار آسان است اما آسیبپذیری های دیگر بدنبال ایجاد اکسپلویت سفارشی هستند.

ضعف امنیتی
شیوع : 2
قابلیت تشخیص : 2

بسیاری از نرم افزارها این مسائل را دارند، چون گروه های توسعه دهنده ی آنها به بروزبودن مولفه و کتابخانه ها توجه نکرده اند. در برخی موارد، حتی تمام مولفه های مورداستفاده خود را نمیدانند، و هرگز به نسخه های آنها توجه نمی کنند برخی ابزارهانظیر js.retire به شناسایی کمک می کنند ولی تعیین توان اکسپلویت زدن نیازمند تاش بیشتر است.

تاثیرات
فنی : 3
تجاری ؟

در حالی که برخی از آسیبپذیری های شناخته شده تنها به اثرات جزئی منتهی میشوند ، برخی از بزرگترین رخنه ها تا به امروز بر بهرهبرداری ازآسیبپذیری های شناخته شده در قطعات تکیه کرده اند. بسته به داراییهایی که از آن محافظت میشود ، شاید این ریسک باید در بالای لیست باشد.

شناسایی آسیب پذیری

شما احتمالا آسیب پذیر هستید:
• اگر نسخه های تمام مولفه هایی که از آنها استفاده میکنید را ندانید )هر دو طرف کلاینت و سرور( این شامل اجزایی است که مستقیما از وابستگیهای تو در تو )توزیع شده( استفاده میکنند.
• اگر برنامه ، آسیب پذیر یا پشتیبانی نشده بوده یا بروز نباشد این شامل سیستم عامل، وب اپلیکیشن یا سرور، سیستم مدیریت پایگاه داده،برنامه ها، API ها و همه اجزا، محیطهای زمان اجرا و کتابخانه ها میشود.
• اگر به طور منظم آسیب پذیری ها را اسکن نکنید وامنیت بخش هایی که از آنها استفاده می کنید را کنترل نکنید
• اگر پلت فرم ، چارچوبها و وابستگیهای موجود را در یک مد مبتنی بر ریسک تنظیم و یا ارتقا ندهید این امر معمولا در محیطهای زمانی رخ میدهد که وصله کردن یک وظیفه ماهانه یا فصلی است که سازمانها را چندین روز یا ماه ها برای مواجه  غیر ضروری برای رفع آسیبپذیریها مشغول می سازد.
• اگر برنامه نویسان ، سازگاری کتابخانه های بروز شده، ارتقا یافته و یا پچ را تست نکنند.
• اگر پیکربندی مولفه ها را امن نکنید.

راه های جلو گیری

باید یک فرآیند مدیریت وصله وجود داشته باشد:
• حذف وابستگی های استفاده نشده، ویژگی های غیر ضروری، اجزاء، فایل ها و اسناد
• مرتب کردن نسخه های هر دو طرف کالینت و سرور )به عنوان مثال چارچوب ، کتابخانه ها( و وابستگیهای آنها با استفاده از ابزارهایی مانند js.retire ، DependencyCheck ، versions و غیره. به طور مرتب بر منابعی مانند CVE و NVD برای آسیب پذیری های اجزا نظارت شود،از ابزارهای تجزیه و تحلیل برنامه برای بهینه سازی فرآیند استفاده شود، به هشدارهای ایمیل برای آسیبپذیریهای امنیتی مربوط به اجزای مورد استفاده توجه شود.
• مولفه ها فقط از منابع رسمی بر روی لینک های ایمن دریافت شود. بسته های امضا شده برای کاهش یک جزء مخرب اصاح شده ترجیح داده شود.
• نظارت بر کتابخانه ها و اجزایی که پشتیبانی نشده یا وصله های امنیتی برای نسخه های قدیمی تر ندارند. اگر وصله کردن امکان پذیر نیست ، استفاده از یک قطعه مجازی برای نظارت ، تشخیص یا حفاظت در برابر مساله کشف شده هر سازمان باید اطمینان حاصل کند که یک برنامه مداوم برای نظارت و استفاده از به روزرسانی و یا تغییرات پیکربندی برای طول عمر برنامه یا نمونه کارها وجود دارد. 

مثال هایی از سناریوهای حمله

 سناریو شماره 1 :اجزاءیا مولفه ها تقریبا همیشه با دسترسی کامل از برنامه اجرا میشوند، بنابراین  نقص در هر جزء می تواندمنجر به تأثیر جدی شود چنین نقصی می تواند تصادفی (مثا خطای برنامه نویسی) یا عمدی باشد برخی ازموارد آسیب پذیری جزء که مورد سوءاستفاده قرار می گیرند شامل:
• CVE-2017-5638 :یک آسیبپذیری با قابلیت کنترل از راه دور که اجرای کد دلخواه بر روی سرور را امکان پذیر میسازد ، به خاطر رخنه قابلتوجه مورد نقد قرار گرفتهاست.
• در حالی که وصله کردن در اینترنت اشیا ) IoT ) اغلب دشوار یا غیر ممکن است، اهمیت وصله کردن آنها میتواند بسیار قابل توجه باشد ) به عنوان مثال وسایل پزشکی(.
ابزارهای خودکار برای کمک به مهاجمان برای یافتن سیستمهای وصله نشده یا با پیکربندی اشتباه وجود دارد به عنوان مثال موتور جستجوی IoT Shodan میتواند به شما کمک کند تا دستگاه هایی را پیدا کنید که هنوز از آسیب Heartbleed که در آوریل 2014 تعمیر شد، رنج میبرند .

منابع

OWASP


OWASP Application Security Verification Standard: V1 Architecture design
and threat modelling
)OWASP Dependency Check (for Java and NET libraries
)OWASP Testing Guide: Map Application Architecture (OTGINFO-010
OWASP Virtual Patching Best Practices
The Unfortunate Reality of Insecure Libraries
MITRE Common Vulnerabilities and Exposures (CVE) search
)National Vulnerability Database (NVD
Retirejs for detecting known vulnerable JavaScript libraries
Node Libraries Security Advisories
Ruby Libraries Security Advisory Database and Tools

جزییات بازدید : 11

تاریخ انتشار : 23 / مرداد / 1398

آشنایی با حملات به مؤلفه‌های آسیب‌پذیر در برنامه‌های کاربردی وب
در این بخش قصد داریم شما را با حملات به مؤلفه‌های آسیب‌پذیر آشنا نماییم. این نوع از حملات، یکی از ده آسیب‌پذیری رایج در سطح وب‌سایت‌ها است. در مقاله معرفی انواع حملات وب‌سایت‌ها، دسته‌ای با نام، حملات به مؤلفه‌ها با آسیب‌پذیری‌های شناخته‌شده معرفی گردیده است که در این مقاله قصد بررسی این نوع حملات راداریم.

قبل از شروع باید توجه داشته باشید که دو عبارت حملات به مؤلفه‌ها با آسیب‌پذیری‌های شناخته‌شده و حملات به مؤلفه‌های آسیب‌پذیر یک معنا و مفهوم را دارند و تفاوتی بین این دو عبارت وجود ندارد. این دو عبارت استنباطی است که ما از عبارت انگلیسی Using Components with Known Vulnerability داریم.

حملات به مؤلفه‌های آسیب‌پذیر این‌گونه بیان می‌شود که هکر سعی دارد تا کتابخانه‌ها، ماژول‌های برنامه‌های کاربردی وب و یا قالب وب‌سایت‌ها را موردحمله قرار دهد. هکر مؤلفه‌ها را در برنامه‌های کاربردی وب موردبررسی قرار داده و آسیب‌پذیری روز صفرم و یا آسیب‌پذیری‌ها پابلیک شده را برای حمله خود مورداستفاده قرار می‌دهد.

بسته به نوع آسیب‌پذیری شناخته‌شده و یا کشف‌شده در مؤلفه‌ها، هکر قادر است عملیات مخرب خود را طرح‌ریزی نماید و خسارات واردشده به وب‌سایت، بسته به نوع و سطح دسترسی در آسیب‌پذیری خواهد بود.

انواع حملات به مؤلفه‌های آسیب‌پذیر در برنامه‌های کاربردی وب
در دسته‌بندی انواع حملات به مؤلفه‌های آسیب‌پذیر باید توجه شود، مواردی که به آن‌ها اشاره می‌شود فقط تعداد محدودی از آسیب‌پذیری‌های شناخته‌شده هستند و ممکن است در آینده این نوع حملات تعدادشان افزایش یابد. در زیر به تعدادی از شناخته‌شده‌ترین نوع حملات در مؤلفه‌ها اشاره‌شده است.

۱- حملات Buffer Overflow (Local)
شاید بتوان گفت که حملات سرریز بافر به‌عنوان یکی از گسترده‌ترین نوع حملات در سطح وب‌سایت‌ها بوده و وجود این آسیب‌پذیری در برنامه‌های کاربردی وب، باعث ایجاد سطح دسترسی‌های گسترده‌ای برای هکر خواهد نمود. در حملات سرریز بافر، هکر یا تستر نفوذ با استفاده از انجام تکنیک Fuzzing سعی می‌کند تا ورودی‌هایی بیش‌ازحد معمول برای برنامه کاربردی وب ارسال نماید و در صورت مشاهده‌ی آسیب‌پذیری، شروع به انجام حملات سرریز بافر می‌نماید. در حملات سرریز بافر به‌صورت محلی، هکر ابتدا سعی می‌کند تا نسخه و نوع مؤلفه یا ماژول موردنظر آن وب‌سایت را کشف نماید و سپس در یک سیستم محلی (همان سیستم خودش) شروع به ارسال ورودی‌های مختلف نموده تا بتواند سرریز بافر را انجام دهد و سپس یک کد اکسپلویت را برای آن طراحی می‌کند. در مرحله بعدی با استفاده از اکسپلویت نوشته‌شده، شروع به سرریز بافر برای وب‌سایت نموده و بسته به نوع و سطح دسترسی، هکر اقدامات مخرب خود را انجام می‌دهد.

یک نکته مهم در طرح‌ریزی این نوع حملات، این است که هکر ابتدا در وب‌سایت هدف، با استفاده از ورودی‌های مخرب شروع به ارسال داده‌های مخرب می‌نماید و بعد از مشاهده خطاهای خاص در وب‌سایت، ماژولی که روی آن وب‌سایت قرار دارد را پیداکرده و دانلود نموده و در سیستم خودش شروع به حمله‌ی سرریز بافر می‌نماید، بعد از کشف مقدار سرریز بافر، اکسپلویت آن را نوشته و سپس علیه وب‌سایت از آن استفاده می‌نماید.

۲- حملات Buffer Overflow (Remote)
این نوع از حملات سرریز بافر همانند مطلبی که در بالا به آن اشاره شد گونه دیگری از حملات به مؤلفه‌های آسیب‌پذیر است و می‌تواند سطح دسترسی‌های مختلفی به هکر بدهد. تنها تفاوت این نوع حمله، با مورد بالا، در این است که در حملات سرریز بافر از راه دور، هکر به‌صورت مستقیم با وب‌سایت هدف در ارتباط است و ورودی‌های غیرمتعارف برای سرریز بافر را به‌صورت مستقیم بر روی وب‌سایت هدف اجرا می‌نماید و این قابلیت که بتواند ماژول را بروی سیستم محلی خود اجرا نموده و سپس اکسپلویت آن را بنویسد، وجود ندارد. این نوع حملات بسیار سخت بوده و نیاز به دانش بسیار بالایی خواهد داشت؛ و هکر باید کلیه بسته‌های ارسالی و دریافتی را به‌درستی بررسی و آنالیز نماید.

در صورت موفقیت و کشف یک آسیب‌پذیری سرریز بافر از راه دور، هکر می‌تواند سطح دسترسی‌های بسیار بالای را از تارگت و هدف خود به دست آورد.


۳- حملات Drupal SQL Injection (Drupageddon)
همان‌گونه که اطلاع دارید، سیستم مدیریت محتوای دروپال، به‌عنوان یکی از شناخته‌شده‌ترین سیستم‌های مدیریت محتوا می‌باشد. سیستم مدیرت محتوا دروپال با استفاده از زبان برنامه‌نویسی PHP نوشته‌شده است. در مورد آسیب‌پذیری Drupageddon، این‌گونه می‌توان شرح داد؛ که لایه‌های انتزاعی پایگاه داده توسط دروپال، شامل یک تابع به نام expandArguments هستند؛ که برای گسترش آرایه‌هایی که استدلال‌هایی را برای کوئری های SQL مورداستفاده در پشتیبانی از نصب دروپال قرار دارند، مورد بهره‌برداری قرار می‌دهد. تهیه یک آرایه با کلید، به‌عنوان ورودی برای تابع، می‌تواند باعث شود حملات Drupageddon صورت پذیرد.

۴- حملات Heartbleed Vulnerability
همان‌گونه که در مقاله‌ی انواع حملات افشای اطلاعات حساس و حیاتی در برنامه‌های کاربردی وب اشاره شد، این نوع حملات به هکر اجازه‌ی بازیابی کلیدهای خصوصی SSL را می‌دهد. این نوع آسیب‌پذیری به دلیل اشتباه در کد نویسی سرویس OpenSSL رخ‌داده است. برای آشنایی با این آسیب‌پذیری می‌توانید به مقاله‌ی انواع حملات افشای اطلاعات مراجعه نماید.

۵- حملات PHP CGI Remote Code Execution
تکنولوژی CGI بخشی از وب سرور است؛ که قابلیتی را فراهمی می‌کند تا برنامه‌ای در سمت سرور اجراشده و خروجی آن برای کاربر از طریق صفحات وب نمایش داده شود.

زبان برنامه‌نویسی PHP که برای توسعه صفحات وب می‌باشد، در سمت کاربر تمامی محتویات را به‌صورت HTML نمایش می‌دهد. هنگامی‌که زبان برنامه‌نویسی PHP در یک راه‌اندازی مبتنی بر CGI(مانند mod_cgid آپاچی) استفاده می‌شود، PHP-CGI یک پارامتر رشته کوئری را به‌عنوان استدلال خط فرمان دریافت نموده و اجازه می‌دهد که سوئیچ‌های خط فرمان مانند –s، -d و یا –c به فایل دیتابیس PHP-CGI منتقل شوند و این عملکرد باعث افشای اطلاعات کد منبع و دستیابی هکر برای اجرای کد دلخواه، خواهد شد.

هکر با استفاده ازاین‌گونه حملات به مؤلفه‌های آسیب‌پذیر می‌تواند به کدهای منبع موجود در وب سرور دسترسی پیدا نماید؛ بنابراین در صورت عدم نیاز به تکنولوژی CGI در وب سرور، کافی است تا این فناوری را غیرفعال نمایید و یا در صورت نیاز، پیکربندی صحیح از این فناوری داشته باشید و حتماً از آخرین و بروزترین نسخه‌ها در وب سرور استفاده شود.

۶- حملات PHP Eval Function
تابع eval() در زبان برنامه‌نویسی PHP، یک‌رشته را به‌عنوان ورودی دریافت کرده و سپس آن رشته را به‌عنوان یک کد دستوری PHP اجرا می‌نماید. حال اگر هکر بتواند یک ورودی را برای وب‌سایت ارسال نماید؛ و وب‌سایت آن ورودی را با استفاده از تابع eval() بررسی کند، می‌توان یک حمله را با استفاده از این تابع انجام داد. آسیب‌های این نوع حملات می‌تواند بسیار خطرناک باشند؛ بنابراین تا جایی که امکان دارد برنامه نویسان نباید از این تابع استفاده نمایند.


۷- حملات phpMyAdmin BBCode Tag XSS
برنامه phpMyAdmin به‌عنوان یک رابط کاربری و گرافیکی برای ارتباط با پایگاه داده مورداستفاده قرار می‌گیرد. در این آسیب‌پذیری که در نسخه‌های phpMyAdmin وجود دارد، اعتبار سنجی تگ‌های BBCode در ورودی کاربر برای پارامتر error، در فایل error.php انجام نمی‌گردد؛ و این عدم اعتبار سنجی در پارامتر، باعث می‌گردد تا هکر بتواند کدهای HTML و یا اسکریپت‌های مخصوص برای حملات XSS را به وب‌سایت تزریق نماید.

این نوع از حملات به مؤلفه‌های آسیب‌پذیر یک نوع حمله‌ی قدیمی بوده و دیگر در نسخه جدید phpMyAdmin مشاهده نمی‌شود.

۸- حملات Shellshock Vulnerability (CGI)
Shellshock یا همان Bashdoor یک باگ امنیتی است که در سپتامبر ۲۰۱۵ در Bash Shell کشف‌شده و اجازه‌ی اجرای دستورات از طریق توابع ذخیره‌شده، در مقادیر متغیرهای محیطی را می‌دهد.

گاها توسعه‌دهندگان وب از دستورات سیستمی در اسکریپت‌های PHP و CGI استفاده می‌کنند و این اسکریپت‌ها ممکن است از متغیرهای محیط سیستم استفاده نمایند. در این نوع از حملات به مؤلفه‌های آسیب‌پذیر، هکر می‌تواند با تزریق دستورات سیستمی به درخواست‌های HTTP، اطلاعات سیستم را در پاسخ دریافت نماید. این‌گونه از حملات بسیار خطرناک بوده و باعث افشای اطلاعات سیستم خواهد شد.

۹- حملات SQLiteManager Local File Inclusion
در حملات عدم کنترل سطح دسترسی مناسب برای تابع، به این نوع از آسیب‌پذیری پرداخته‌شده است و در صورت نیاز می‌توانید به این مقاله مراجعه نمایید.

۱۰- حملات SQLiteManager PHP Code Injection
در تعدادی از نسخه‌های نرم‌افزار SQLiteManager، آسیب‌پذیری تزریق کد PHP وجود دارد؛ که در آن هکر می‌تواند اسکریپت‌های مخرب PHP خود را تزریق نموده و سپس در خروجی محتویات دریافتی را مشاهده نماید. این نوع از حملات به مؤلفه‌های آسیب‌پذیر بسیار خطرناک بوده و ممکن است کل یک سرور را در معرض خطر قرار دهد.

۱۱- حملات SQLiteManager XSS
در نسخه‌های خاصی از SQLiteManager، حملات به مؤلفه‌های آسیب‌پذیر با استفاده از آسیب‌پذیری XSS وجود دارد؛ که به هکر اجازه می‌دهد تا بتواند حملات XSS خود را انجام دهد.