تقریبــا هــر منبــع داده ای مــی توانــد یــک عامــل تزریــق باشــد.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\nپارامترهـا، متغیرهـا، سـرویس هـای وب داخلـی و خارجـی، و همـه انــواع کاربــران نیــز میتواننــد عامــل تزریــق باشــند. نقــض تزریــق زمانــی رخ میدهــد کــه یــک نــرم افــزار داده هــای غیرقابــل اعتمــاد را بــه مفســر ارســال کنــد.
قـض تزریـق بسـیار شـایع اسـت بـه ویـژه در کدهایـی کـه در آن ارثبــری وجــود دارد. ایــن نقــص اغلــب در query هــای XPath ،XML پارسـرهای، OS دسـتورات ؛NoSQL یا، LDAP ،SQL هدرهـای SMTP ،زبانهـای expression و غیـره وجـود دارد. تشــخیص نقــص تزریــق هنــگام بازبینــی کــد راحــت اســت، امــا هنـگام تسـت کـد بسـیار دشـوار اسـت .اسـکنرها و فازرهـا، مهاجمان را بـرای پیـدا کـردن نقصهـای تزریـق، یـاری میکننـد.
تزریــق میتوانــد باعــث تخریــب یــا از دســتدادن اطالعــات، عــدم پاسـخگویی یـا رد دسترسـی شـود. تزریـق میتوانـد گاهـی موجـب تصاحــب کامــل میزبــان نیــز شــود . تاثیر تجاری بستگی به نیازهای برنامه و داده دارد.
برنامه در شرایط زیر به حمله آسیب پذیر است:
* ورودی های کاربر اعتبارسنجی یا فیلتر نشوند.
* داده های مخرب به طور مستقیم با استفاده از پرس و جو های پویا مورد استفاده قرار می گیرد.
* داده های مخرب در پارامترهای جستجوی 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
جزییات بازدید : 3480
تاریخ انتشار : 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 ممکن است بانامها و موقعیتهای مختلفی انجام شود؛ بنابراین دستهبندی کردن این حملات کار سادهای نیست ولی بهصورت کلی میتوان آنها را به دودسته زیر تقسیمبندی نمود.
حملات تزریق SQL برنامهریزیشده یا SQL Injection Attack
این نوع از حملات که اساس حملات در نرمافزارها یا سیستمها است، هنگامی رخ میدهد که برای به دست آوردن دسترسی نامحدود و غیرمجاز، کد را بهصورت مستقیم و یا غیرمستقیم به کد کاربر اضافه نماییم.
در این نوع از حمله، مهاجم میتواند جعل هویت (Spoof Identify) کرده و یا دادههای موجود در پایگاه داده را که در دسترس نیستند را در معرض خطر (Expose) یا نابودی قرار دهد و حتی ممکن است خود را بهعنوان مدیر یا Administrator پایگاه داده سرور قرار دهد و بخش مدیریتی DBMS را بر عهده بگیرد.
این نوع از حملات تزریق SQL خود به سه گونه مختلف دستهبندی میگردند که در زیر به آنها اشارهشده است.
حملات تزریق SQL برنامهریزیشده اولیه
در این نوع حمله، هکر یک لینک یا فایل مخرب را بهعنوان ضمیمه برای قربانی ارسال مینماید و پاسخ مستقیم برنامهای که با آن در تعامل و ارتباط است را بلافاصله دریافت مینماید. هنگامیکه قربانی بروی لینک یا فایل مخرب کلیک مینماید، یک فایل به اجرا درمیآید و این فایل اجرایی، حملات برنامهریزیشده اولیه که هکر قصد آن را داشته است، پردازش مینماید. تشخیص، پیشگیری و کشف این نوع حملات با بررسی و پیدا کردن نقطه تزریق، بسیار آسان است.
حملات تزریق SQL برنامهریزیشده ثانویه
در این نوع حمله، هکر کدها و برنامههای مخرب خود را در برنامههای کاربردی مبتنی بر وب تزریق مینماید ولی این کدهای مخرب برنامهریزیشده بلافاصله فعال نمیشوند و در برنامههای کاربردی مبتنی بر وب ذخیرهشده تا بعداً قابل بازگردانی گردند. در این نوع حمله، هکر منتظر میماند تا کاربر ورودی خود را در برنامه کاربردی وب وارد نماید.
حملات تزریق SQL برنامهریزیشده جانبی
در این نوع از حمله، هکر روش SQL/PL که زبان جستوجوی ساختاربندی شده است را مورد بهرهبرداری و سوءاستفاده قرار میدهد. در جهت پیشگیری از این نوع حملات، باید از حسابهای مختلف پایگاه دادهها برای رسیدن به سطوح مختلف امنیتی استفاده نمود.
حملات تزریق SQL نابینا یا Blind SQL Injection Attack
اینگونه از حملات به هکر یا مهاجم اجازه میدهد که با پرسیدن یکسری عبارات درست و غلط SQL از پایگاه داده و خطای برگشت دادهشده صفحه که توسط پایگاه داده سرور ایجاد میگیرد، بتواند کنترل کلی پایگاه داده و یا حتی اجرای دستورات بر روی سیستمعامل سرور را در دست بگیرد. در غالب ویدیوها و مقالات آموزشی که در سراسر اینترنت موجود است بیشتر ازاینگونه حملات استفاده میگردد.
برای پیشگیری از این نوع حملات باید با استفاده از اصول برنامهنویسی امن در وبسایتها که در پروژههای OWASP به آن اشارهشده است، تبعیت نمود. از اقدامات اصلی پیشگیری این حملات میتوان به پنهان نمودن صفحات پیغام خطا، فیلتر کردن عبارت SQL و کنترل ورودیهای کاربر در برنامههای کاربردی تحت وب اشاره نمود.
۲- حملات XML/XPATH Injection
در ابتدا نیاز است با دو واژه HTML و XML که زبانهای Markup Language هستند آشنا شویم. HTML مخفف عبارت HyperText Markup Language و XML مخفف عبارت Extensible Markup Language است. Markup Language زبانی است که شیوه نمایش اطلاعات در صفحات وب و برنامههای کاربردی وب را نشان میدهد. این دو زبان بهعنوان معروفترین زبانهای Markup Language شناخته میشوند. امروزه صفحات وب و یا برنامههای کاربردی وب با استفاده از یک پایگاه داده مانند SQL دادههای خود را ذخیره مینمایند.
در HTML با استفاده از برچسبها و Tag ها صرفاً به صفحات وب نحوه چگونگی نمایش را دستور میدهید؛ اما در XML شما دادهها را میتوانید نگهداری کنید و قالببندی چندان مدنظر نیست. زمانی که نام ذخیره داده در پایگاه داده به میان میآید به این فکر میکنیم که میتوانیم از این دادهها پرسوجو و کوئری بگیریم و بنابراین میتوانیم به آنها حملهای از نوع تزریق یا Injection انجام دهیم.
XPATH که یکی از تکنولوژیهای مهم در XML است، بهعنوان زبانی برای آدرسدهی به بخشهای مختلف یک سند XML استفاده میشود. یکی از شناختهشدهترین نوع حملات به دادههای ذخیرهشده در قالب XML به نام تزریق XPATH یا Injection XPATH است. در این نوع حملات هنگامیکه دادههای ذخیرهشده در قالب XML را بهدرستی در مقابل ورودی اطلاعات کاربران فیلتر نکرده باشیم، این حملات صورت میگیرد.
حملات تزریق XPATH به دو روش زیر انجام میگردد.
حملات تزریق XAPTH یا XPATH Injection Attack
در این نوع حملات، هکرها از وبسایتهایی که اجازه میدهند تا بتواند دادههای خود را در برنامههای کاربردی وب بهمنظور اجرای کوئری های XPATH تزریق نمایند، استفاده نموده و سپس از وبسایت سوءاستفاده مینماید. در این نوع حمله، مهاجم ممکن است بتواند قادر به دور زدن احراز هویت (Authentication) و یا دسترسی به اطلاعات، بدون نیاز به مجوزهای مناسب (Authorization) باشد.
حملات تزریق XAPTH نابینا یا Blind XPATH Injection Attack
در این نوع حملات، به هکری که ساختار XML یک سند را نمیداند، اجازه داده میشود که تلاش نماید با استفاده از متدها و روشهای مختلف ساختار سند را مشخص نماید.
۳- حملات سرریز بافر یا Buffer Overflow Attack
این نوع حملات باعث تغییر در جریان یک برنامه کاربردی، بهوسیلهی جای نویسی (Overwrite) بخشهایی از حافظه است. در حملهی سرریز بافر با دادههای حجیم و بیشازحد، به هکر اجازه میدهد تا بتواند یک شل (پوسته فرمان) را از راه دور بر روی کامپیوتر هدف اجرا نماید و سطح دسترسی اعطاشده به نرمافزار موردحمله همان سیستم را به دست آورد.
یک هکر یا مهاجم میتواند با استفاده از حملات سرریز بافر پشته یا Stack اجرایی یک برنامه کاربردی تحت وب را فاسد، مسموم و یا Corrupt نماید. هکر با دقت، ورودی صحیح و دقیقی را برای یک برنامه کاربردی وب ارسال مینماید تا برنامه کاربردی وب را مجبور کند که کد دلخواه مهاجم را اجرا نماید؛ و این باعث میشود به هکر اجازه دهد کنترل سیستم را به دست گیرد.
وب سرورها و برنامههای کاربردی وب که مدیریت جنبههای استاتیکی و دینامیکی یک سایت هستند و یا برای استفاده از کتابخانههای گرافیکی که برای تولید تصاویر استفاده میشوند، در مقابل حملات سرریز بافر آسیبپذیر میباشند.
حملات سرریز بافر باعث سقوط یا Crash سیستم میشوند و یا باعث قرارگیری سیستم در یک حلقه بینهایت میگردند و یا حتی بدتر از آن ممکن است سیستم را مجبور نمایند تا با اجرای یک کد بر روی سیستم، سرویسها و سیستمهای امنیتی را دور بزنند.
۴- حملات تزریق رشته فرمت یا Format String Attack
حملات رشته فرمت یا Format String زمانی رخ میدهد که اطلاعات ارسالشده از یک رشته ورودی بهعنوان یک دستور توسط نرمافزار یا برنامه کاربردی وب مورد، بررسی قرار گیرد. در این روش هکر یا مهاجم میتواند کد را اجرا، پشته یا Stack را خوانده و یا سبب یک خطای تقسیمبندی یا Segmentation Fault در نرمافزار در حال اجرا شود و باعث رفتار جدیدی گردد.
برای درک این نوع حمله نیاز است که با سه جزء زیر آشنایی داشته باشیم.
۱-تابع فرمت یا Format Function در تابع ANSI زبان برنامهنویسی C همانند printf و fprint
۲-رشته فرمت یا Format String که ورودی یا آرگومان تابع فرمت بوده و یک رشته ASCII Z است که شامل پارامترهای متن و فرمت میباشد.
۳-پارامترهای رشته فرمت یا Format String Parameter، همانند %x و%s که نوع تبدیل تابع فرمت را تعریف میکنند.
این نوع حمله زمانی میتواند اجرا شود که نرمافزار یا برنامه کاربردی وب بهدرستی اعتبار ورودی را ارائه نکرده باشد. در این مورد، اگر یک پارامتر رشته فرمت، همانند %x در دادههای ارسالشده قرار گیرد، رشته بهوسیلهی تابع فرمت تجزیهوتحلیل میگردد و تبدیل مشخصشده در پارامترها اجرا میشود. بااینحال باید از تابع فرمت، انتظار استدلال بیشتری برای آرگومانهای ورودی داشته باشیم و اگر این آرگومانها بهدرستی عرضه نگردند، تابع میتواند از پشته بخواند و در آن بنویسد.
در این نوع حمله ممکن است هکر یا مهاجم بتواند با تعریف یک ورودی خوب، رفتار تابع فرمت را تغییر دهد و در این حالت هکر میتواند سبب حملات تکذیب سرویس یا DOS یا اجرای دستورات دلخواه خود گردد.
درصورتیکه یک نرمافزار یا برنامه کاربردی وب از توابع فرمت در سورس کد یا Source Code خود استفاده نماید، هکر یا مهاجم قادر است بهوسیلهی قرار دادن کاراکترهای فرمت دهی در یک فرم داخل وبسایت، آسیبپذیری را کشف نماید. برای مثال، اگر تابع printf برای چاپ کردن نام کاربری یا Username در قسمتها یا فیلدهایی از صفحات وب گرفته شود، ممکن است وبسایت به این نوع از حملات آسیبپذیر باشد.
۵- حملات تزریق LDAP یا LDAP Injection Attack
LDAP روش یا پروتکل استانداردی، برای دسترسی و بهروزرسانی دایرکتوریهای توزیعشده ارائه میدهد. LDAP مخفف عبارت lightweight Directory Access Protocol است. LDAP مجموعهای از روشها و پروتکلها است که برای دسترسی به اطلاعات شاخههای توزیعشده استفاده میگردد. روشها و متدهای LDAP این امکان را میدهد تا اطلاعاتی که در DIT یا درخت اطلاعات شاخهها (Directory Information Tree) قرار دارد را استفاده نماییم. برای مثال، در یک شبکه، این درخت یا DIT شامل اطلاعاتی از اشیاء موجود در شبکه مانند کاربران و چاپگرها و برنامهها و … است.
در این نوع از حمله، برنامههای کاربردی وب که بر اساس ورودیهای کاربر، دستورات و عبارات LDAP را میسازند، موردحمله قرار میگیرند. زمانی که برنامه کاربردی وب نمیتواند بهدرستی ورودیهای کاربر را اعتبارسنجی نماید، هکر با استفاده از پروکسیهای محلی، عبارات LDAP را تغییر میدهد. درصورتیکه حملات LDAP با موفقیت انجام شود، ممکن است سطح دسترسی هکر در جهت اجرای کوئری های بدون اعتبار سنجی افزایش یابد و یا حتی محتوای درخت LDAP را تغییر دهد.
۶- حملات تزریق دستورات سیستمعامل یا OS Command Injection Attack
در این نوع از حملات هدف اجرای دستورات و فرامین دلخواه بر روی سیستمعامل هدف یا میزبان است که یک برنامه کاربردی آسیبپذیر بر روی آن نصبشده است. تزریق دستور یا Command Injection زمانی رخ میدهد که برنامه کاربردی، ورودی کاربر را بدون هیچ اعتبارسنجی بهسوی خط فرمان سیستمعامل (همانند Shell در لینوکس و یا CMD در ویندوز) ارسال میکند. این دادههای ورودی شامل هدرهای HTTP، فرمها، کوکیها و … میباشد. هنگامیکه هکر بتواند تزریق دستور را انجام دهد غالباً با سطح دسترسی برنامه آسیبپذیر میتواند فعالیت مخرب خود را انجام دهد. این نوع از حملات به علت عدم اعتبارسنجی صحیح ورودیها، بهصورت گستردهای در سطح اینترنت مشاهده میگردد.
۷- حملات تزریق شاملیت سمت سرور یا Server Side Include(SSI) Injection Attack
در ابتدا برای درک بهتر این نوع حملات نیاز است تا با دو موضوع SSI و CGI آشنا شویم.
Common Gateway Interface یا بهاختصار CGI روشی از برنامهنویسی بر روی سرورها است که جهت پیادهسازی برخی خصیصهها و ویژگیها و برقراری ارتباط دوطرفه بین کاربر و سرور بر روی وب از آن استفاده میشود. در اصل CGI بهعنوان یک رابط شناخته میشود. برای مثال فرض کنید که شما یک پایگاه داده بر روی سرور خود دارید و میخواهید که کاربران وب از آن استفاده نمایند، ولی در این حالت وب سرور نمیداند که این پایگاه داده داخلی است یا نه؛ بنابراین باید بهوسیلهی یک برنامه CGI، سرور وب و پایگاه داده را به هم پیوند دهیم.
Server-Side Includes یا بهاختصار SSI مجموعهای از تگها که Divertive نامیده میشوند را تعریف میکند. این تگها میتوانند در داخل سورس های یک سند HTML جاسازی گردند و سپس توسط وب سرور قبل از ارسال به کاربر، پردازش شوند. SSI در حقیقت برنامههایی با اهداف خاص هستند که در سمت سرور بهمنظور تولید کردن یک صفحه وب یا بخشی از آن، قبل از اینکه به مرورگر کاربر ارسال شوند، اجرا میگردند. در اصل SSI یکی از سرویسهایی است که برنامه کاربردی تحت وب برای تولید محتوای پویا و دینامیک برای صفحات وب HTML استفاده میکنند.
بنابراین SSI تا حدودی شبیه CGI است؛ ولی با این تفاوت که در SSI میتوان قبل از بالا آمدن صفحه وبسایت یا درزمانی که عکسهای گرافیکی در حال لود شدن هستند، کارها یا فعالیتهایی را انجام داد؛ بنابراین وب سرورها قبل از ارائه و نمایش صفحه وبسایت به کاربر، SSI را تجزیهوتحلیل مینمایند.
در حملات SSI هکر میتواند با استفاده از اکسپلویت خاص خود، اسکریپتهایی را در صفحهی HTML تزریق کرده و یا کدهای مخرب را از راه دور اجرا نماید. این روش با استفاده از دستکاری SSI در هنگام اجرا یا در برنامه و یا با استفاده از فیلدهای ورودی که به کاربر داده میشود، انجام پذیرد.
درصورتیکه وب سرور، صفحات SSI را بدون اعتبار سنجی مناسب اجرا نماید، این عمل باعث میگردد که حملات SSI صورت پذیرد و نتیجهی آن دسترسی و دستکاری فایلهای سیستمی، فرایندها و پردازشها است. بهوسیله این نوع حملات هکر میتواند به اطلاعات حساس همانند فایلهای حاوی پسوردها دست یابد و حتی ممکن است بتواند دستورات و فرامینی را بر روی سیستم اجرا نماید. حملات SSI بهوسیلهی فیلدهای ورودی و دادههایی که توسط آن به وب سرور ارسال میکنیم، تزریق میشود.
انواع حملات تزریق
حملات تزریق PHP
۸- حملات تزریق PHP یا PHP Injection Attack
زبانهای برنامهنویسی به تحت وب به دودسته زبانهای سمت سرور و سمت کلاینت تقسیمبندی میشوند. از زبانهای سمت کلاینت میتوان HTML و از زبان برنامهنویسی سمت سرور PHP را میتوان نام برد.
در این نوع حملات اگر دادههای کاربر بهدرستی اعتبارسنجی نشده باشند، مهاجم میتواند از ورودی ساختهشده برای اصلاح کد اجراشده استفاده کند و کد دلخواه را که توسط سرور اجرا میشود تزریق کند.
آسیبپذیریهای تزریق کد در سمت سرور بهصورت کلی بسیار جدی هستند و منجر به درخطر افتادن کامل دادهها، قابلیتهای برنامه و همچنین سرور میزبانی که برنامه کاربردی وب را پشتیبانی مینماید میگردد. همچنین ممکن است از سرور بهعنوان یک پلتفرم برای حملات بیشتر علیه سایر سیستمها استفاده شود.
حملات تزریق کد PHP یک آسیبپذیری است که به مهاجم اجازه میدهد کدهای سفارشی را به موتور اسکریپت سمت سرور تزریق کند. این آسیبپذیری زمانی اتفاق میافتد که مهاجم بتواند تمام یا بخشی از یک رشته ورودی را که به یک تابع Eval() تغذیهشده است، کنترل کند. Eval تابعی است که آرگومانها و ورودیهای کاربر را بهعنوان کد اجرا میکند؛ و همچنین این حملات بیشتر زمانی رخ میدهند که ورودی فراهمشده کاربر قبل از گذراندن از تابع Unserialize() در PHP، از روی اصول و قاعده، بهصورت درست انجامنشده است.
حملات تزریق PHP یک آسیبپذیری در سطح برنامه کاربردی است که به هکر اجازه میدهد تا انواع مختلف حملات مخرب از قبیل، تزریق کد، تزریق SQL، حملات پایش و حملات تکذیب سرویس (DOS) را بسته به بستر آسیبپذیری انجام دهد.
۹- حملات تزریق HTML یا HTML Injection Attack
حملات تزریق HTML گونه از حملات تزریق است که بسیار شبیه حملات XSS است. درحالیکه در آسیبپذیری XSS مهاجم میتواند کد جاوا اسکریپت را تزریق و اجرا کند، تزریق HTML فقط اجازه تزریق برخی تگهای HTML را میدهد. هنگامیکه یک برنامه کاربردی وب بهدرستی دادههای واردشده توسط کاربر را مدیریت نمیکند، مهاجم میتواند کد HTML معتبر معمولاً از طریق یک مقدار پارامتر ارائه داده و محتوای خود را به صفحه تزریق کند. این حمله بهطورمعمول در ارتباط با گونهای از مهندسی اجتماعی مورداستفاده قرار میگیرد، زیرا این نوع حملات از آسیبپذیری مبتنی بر کد و اعتماد کاربر، بهرهبرداری مینمایند.
حملات تزریق HTML، زمانی رخ میدهد که کاربر بتواند یک نقطه ورودی را کنترل کرده و کد HTML دلخواه خود را به صفحه وب آسیبپذیر تزریق نماید. این نوع از حملات میتواند عواقب زیادی داشته باشد. هکر با استفاده از این نوع حملات میتواند با افشای کوکیهای جلسه نشست کاربر به جعل هویت قربانی بپردازد و یا حتی بهصورت کلی، هکر میتواند محتویات صفحه مورد مشاهده قربانی را تغییر دهد.
۱۰- حملات Mail Header Injection(SMTP)
ازآنجاییکه در تمام وبسایتها و برنامههای کاربردی وب، فرمهایی جهت تماس قرارگرفته است، کاربران میتوانند به گیرنده ایمیل یا مدیریت وبسایت، پیام خود را ارسال نمایند. فرمهای تماس یا همان Contact Form ها، میتوانند با تنظیم هدرهای SMTP، مانند “From” و “Reply-To”، برای ارتباطات با هر ایمیل دیگری را انجام دهند.
متأسفانه، اگر ورودی کاربر قبل از وارد شدن به هدرهای SMTP معتبر شناخته شود، فرم تماس ممکن است برای تزریق Header ایمیل آسیبپذیر باشد. در این حالت، هکر میتواند هدرهای اضافی به پیام تزریق کرده و سپس، سرور SMTP دستورالعملهای مختلفی که برای آن در نظر گرفته نشده است را انجام خواهد داد.
برای تشخیص خودکار تزریق هدر ایمیل، باید از یک سرویس واسطه استفاده کنیم. استفاده از سرویسهای واسطه باعث تشخیص خودکار این نوع حملات میگردد.
مقابله با تزریق هدرهای ایمیل شامل، تائید ورودی کاربر برای اجازه ندادن به کاراکترهای خطی (NewLine) در ورودی است؛ که باعث میگردد یک هدر SMTP دیگر به فرم تماس اضافه شود. بهصورت کلی، هنگام تائید ورودی کاربر، سادهترین و قویترین راه برای دستیابی به اعتبار ورودی صحیح، بهوسیلهی یک لیست سفید از کاراکترهای مجاز، برای استفاده در هدر SMTP خواهد بود.
۱۱- حملات تزریق iFrame Injection
در زبان برنامهنویسی HTML، گاهی طراحان سایت، از تگهای iFrame که مخفف عبارت Inline Frame است، استفاده میکنند. تگهای IFrame محتویات یک وبسایت دیگر را در صفحه وبسایت، بهعنوان بخشی از صفحه اصلی یا بدنه اصلی سایت اجرا مینمایند. استفاده از تگهای IFrame برای ساختن برنامههای کاربردی وب کاربرپسند (User-Friendly) و همچنین اسکریپت نویسی Cross-Site مفید خواهد بود و گاهی طراحان از این تگها استفاده مینمایند؛ اما در کنار این فواید، هکرها از این ویژگی برای قرار دادن محتویات از وبسایتهای مخرب خود استفاده میکنند و وبسایتی که در حال اجرای تگ Iframe است را در معرض خطر قرار میدهند.
در این نوع حملات، هکر از تگ IFrame برای نفوذ به وبسایتها و سیستم کاربران و همچنین خرابکاری در وبسایت استفاده مینمایند. در این نوع حمله، هکر یک کد مخرب را در صفحه وبسایت شما جاسازی مینماید و هنگامیکه هرکسی از این صفحه وبسایت بازدید کند، کد مخفیشده IFrame بهصورت پنهانی دانلود شده و یک تروجان و یا یک نرمافزار مخرب نظیر کیلاگر را بر روی رایانه قربانی نصب و راهاندازی مینماید.
درصورتیکه کامپیوتر قربانی بهاندازه کافی از مکانیسمهای امنیتی استفاده نکرده باشد، دستگاهش دچار حملات بسیار خطرناکی خواهد شد؛ بنابراین در این روش حمله، ممکن است در یک بازه کوتاهمدت، تعداد بازدیدکنندگان فراوانی به این وبسایت مراجعه نمایند و دچار حملات IFrame گردند و این امر باعث حملات بسیار گسترده و پیچیدهای خواهند شد که شمار قربانیان آن میتواند بسیار زیاد باشد.
درنتیجه، این وبسایت منبعی برای پخش ویروسها و تروجان ها خواهد بود و همچنین در ادامه وبسایت شما بهعنوان یک منبع ویروس شناختهشده و ازنظر جوامع امنیتی مانند گوگل به لیست سیاه افزوده خواهید شد.
گاهی هکرها از حملات IFrame برای مقاصد دیگری همچون ساخت آگاهی تبلیغاتی، ایجاد ترافیک برای وبسایتهای خود و همچنین بهبود رتبه SEO سایتشان استفاده مینمایند.