Injection آسیب پذیری تزریق

A1 2017
Injection آسیب پذیری تزریق
بردار حمله
App.Specific
قابلیت بهره برداری : 3

تقریبــا هــر منبــع داده ای مــی توانــد یــک عامــل تزریــق باشــد.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\nپارامترهـا، متغیرهـا، سـرویس هـای وب داخلـی و خارجـی، و همـه انــواع کاربــران نیــز میتواننــد عامــل تزریــق باشــند. نقــض تزریــق زمانــی رخ میدهــد کــه یــک نــرم افــزار داده هــای غیرقابــل اعتمــاد را بــه مفســر ارســال کنــد.

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

قـض تزریـق بسـیار شـایع اسـت بـه ویـژه در کدهایـی کـه در آن ارثبــری وجــود دارد. ایــن نقــص اغلــب در query هــای XPath ،XML پارسـرهای، OS دسـتورات ؛NoSQL یا، LDAP ،SQL هدرهـای SMTP ،زبانهـای expression و غیـره وجـود دارد. تشــخیص نقــص تزریــق هنــگام بازبینــی کــد راحــت اســت، امــا هنـگام تسـت کـد بسـیار دشـوار اسـت .اسـکنرها و فازرهـا، مهاجمان را بـرای پیـدا کـردن نقصهـای تزریـق، یـاری میکننـد.

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

تزریــق میتوانــد باعــث تخریــب یــا از دســتدادن اطالعــات، عــدم پاسـخگویی یـا رد دسترسـی شـود. تزریـق میتوانـد گاهـی موجـب تصاحــب کامــل میزبــان نیــز شــود . تاثیر تجاری بستگی به نیازهای برنامه و داده دارد.

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

برنامه در شرایط زیر به حمله آسیب پذیر است:
* ورودی های کاربر اعتبارسنجی یا فیلتر نشوند.
* داده های مخرب به طور مستقیم با استفاده از پرس و جو های پویا مورد استفاده قرار می گیرد.
* داده های مخرب در پارامترهای جستجوی ORM برای دسترسی به اطالعات حساس یا تمام رکوردها به کار می رود.
* داده های مخرب یا به طور مستقیم یا ترکیب با دستورات SQL ،استفاده شوند.
بعضی از تزریقات رایج عبارتند از SQL ،دستور LDAP، ORM، OS و EL Language Expression و یا تزریق OGNL . سازمانها می توانند ابزار SAST و DAST را برای این منظور در اختیار بگیرند. بررسی دستی و اتوماتیک کد منبع بهترین روش تشخیص این آسیب پذیریا ست .

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

جلوگیری از تزریق نیازمند ذخیره اطالعات غیرقابل اطمینان، جدا از دستورات و query ها است.
1 .گزینه اول این است که از یک API مطمئن استفاده کنید تا از استفاده کامل از مترجم جلوگیری کند یا رابط کاربری پارامتری را فراهم کند. در استفاده از API هایی مانند روشهای ذخیره شده، که پارامتری شده است ولی به صورت مخفی معرفی شده، مراقب باشید.
2 .اگر یک API پارامتریک در دسترس نباشد، شما باید با استفاده از نحو مخصوص گریز از کاراکترهای خاص، در رابطه با آن مفسر اجتناب کنید .Encoder Java s’OWASP و کتابخانه های مشابه، این روال گریز را فراهم میکنند.
3 .توصیه میشود از تصدیق ورودی مثبت یا »list white »استفاده شود، اما محافظت کامل ایجاد نمیکند زیرا شرایط بسیاری نیاز به مجوز خاص دارند. اگر کاراکترهای خاص موردنیاز باشد، تنها رویکرد 1 و 2 باعث استفاده امن از آنها میشود. ESAPI s’OWASP دارای کتابخانهای گسترده از روشهای تصدیق ورودی »list white »است. 

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

سـناریو شـماره 1 :یـک نـرم افـزار از داده هـای نامطمئـن در سـاختار دسـتور فراخوانـی SQL آسـیبپذیر زیــر اســتفاده میکند:


String query = "SELECT * FROM accounts WHERE custID='" + request.  + )"getParameter("id ;"'"


ســناریو شــماره 2 :بــه طــور مشــابه، اعتمــاد کورکورانــه نــرم افــزار بــه چارچــوب هــا، ممکــن اســت منجـر بـه نمایـش داده هایـی کـه هنـوز آسـیب پذیرنـد، شـود بـه عنـوان مثـال،

Query Hibernate
 :Language HQL
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request. ;)"'" + )"getParameter("id

در هـر دو مـورد، مهاجـم مقـدار پارامتـر id را در مرورگـر خـود بـه › یـا 1›=›1 ›تغییـر میدهـد و ارسـال میکنـد. بـرای مثـال:


 ‹ 1http://example.com/app/accountView?id=› or›=›1


ایـن مفهـوم هـر دو پرسـش را تغییـر میدهـد تـا تمـام پرونـده هـا را از جـدول accounts ،بازیابـی کنـد .حملـه

هـای خطرنـاک، داده هـا را تغییـر داده یـا حتـی روال ذخیـره شـده را فراخوانـی میکنـد.
 

منابع

OWASP Risk Rating Methodology

Article on Threat/Risk Modeling


External

ISO 31000: Risk Management Std
ISO 27001: ISMS
NIST Cyber Framework

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

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

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

گروه‌های امنیتی و هکرها به این‌گونه از حملات نگاه ویژه‌ای دارند و از آن به‌عنوان یک نوع حمله‌ی گسترده استفاده می‌نمایند. ضعف‌ها و شکاف های امنیتی که باعث حملات تزریق می‌گردد در ماهیت خود دچار مشکل هستند.

به عبارت ساده‌تر، ضعف در برنامه‌نویسی و استفاده نادرست از متغیرهای کنترل نشده باعث بروز حملات تزریق می‌گردد. به‌عنوان‌مثال، زمانی که برنامه‌نویس از یک متغیر استفاده نماید و متغیر، بازه‌ی غیرقابل‌کنترلی از مقادیر و ورودی‌ها را بپذیرد، هکر می‌تواند با استفاده از مقداردهی به آن متغیر، تزریق کد را انجام دهد.

به‌صورت کلی استفاده از دستورات نامطمئن و غیراصولی در کد نویسی برنامه‌ها، هنگام تفسیر توسط مفسر یا کامپایلر، شکاف امنیتی محسوب می‌شود و این امر باعث بروز حملات تزریق می‌گردد. زمانی که داده‌های نامعتبر به‌عنوان فرامین، دستورات و پرس‌وجوها برای یک مفسر یا کامپایلر ارسال شوند، داده‌های نامعتبر می‌توانند باعث شوند که مفسر یا کامپایلر را برای اجرای دستورات غیرقانونی و تصادفی هدایت نمایند.

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

دسته بندی حملات Injection
انواع حملات تزریق

سه رویکرد جلوگیری از حملات تزریق
رویکرد اول

رشته‌های کاراکتری مانند نامه‌های پستی هستند که می‌توان به‌راحتی تاریخ، مبدأ و مقصد را در آن‌ها تغییر داد؛ بنابراین غالباً داده‌های نامطمئن به شکل رشته‌های کاراکتری بدون محدودیت در ویژگی، سایز، فرمت و قالب هستند.

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

رویکرد دوم

در این رویکرد که به‌مراتب از رویکرد بالا بهتر است، برنامه‌نویس باید از یک الگوی خاص برای اعتبار سنجی و تجزیه کدهای برنامه استفاده نماید تا بتواند خروجی حاصله مورد انتظار را دریافت نماید. در این رویکرد وظیفه اصلی، اعتبار سنجی کلیه‌ی ورودی‌های نامطمئن است. استفاده از کاراکترهایی مانند نقل‌قول، ویرگول و غیره، فرایند اعتبارسنجی در این رویکرد را دچار اختلال می‌نماید؛ بنابراین برای جلوگیری از حملات تزریق به یک رویکرد دیگر نیازمند هستیم.

رویکرد سوم

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

برای جداسازی داده از کد تکنیک‌های Encoding و Escaping استفاده می‌شود. این تکنیک‌ها از تأثیرات داده‌های نامطمئن بر روی دستورات و پرس‌وجوها جلوگیری می‌کنند. برای درک بهتر این موضوع می‌توانید به کتابخانه‌های آنلاین OWASP ESAPI مراجعه نموده تا بتوانید از کاراکترهایی که نیاز به استفاده از تکنیک‌های Encode و Escape رادارند آشنا شوید.

استاندارد دسته بندی حملات تزریق
حملات تزریق و دسته بندی آن ها

انواع حملات تزریق کد یا Type of Injection Attack
۱- حملات تزریق SQL یا SQL Injection Attack
حملات SQL Injection یا به عبارتی، درج (Insert) یا تزریق (Injection) پرس‌وجوهای SQL(SQL Query) در قالب داده‌های ورودی که کاربر وارد برنامه کاربردی می‌نماید را حملات تزریق گویند. حملات تزریق درصورتی‌که با موفقیت انجام شود می‌تواند به داده‌های حساس در پایگاه داده دسترسی پیداکرده و آن‌ها را بخواند و یا تغییراتی در داده‌ها ایجاد نماید و یا عملیات مدیریتی بر روی پایگاه داده اجرا و یا حتی محتویات فایل‌های موجود در سیستم فایل DBMS را بازگردانی (Recovery) نماید و یا دستورات خاص را در سیستم‌عامل اجرا کند.

ازآنجایی‌که حملات SQL Injection ممکن است بانام‌ها و موقعیت‌های مختلفی انجام شود؛ بنابراین دسته‌بندی کردن این حملات کار ساده‌ای نیست