حمله SQL injection یکی از روشهای نفوذ رایج در بین هکرهاست. با توجه به رشد روزافزون تکنولوژی در دنیای مدرن، تکنیکهای هک نیز در حال محبوبترشدن هستند. از بین تکنیکهای مختلف هک کردن، آنهایی که باعث ازبین رفتن یک یا چند برنامهی خاص میشوند، طرفداران بیشتری دارند.
هدف حمله SQL injection ازبین بردن برنامههای مبتنی بر داده است. در این مقاله، میخواهیم دربارهی این تکنیک محبوب هکرها صحبت کنیم و توضیح دهیم که چگونه در این تکنیک، از کدهای مخرب SQL برای دسترسی به اطلاعات و درنهایت ازبین بردن دیتابیس یا همان پایگاه داده استفاده میشود.
حمله SQL injection چیست؟
در این قسمت، به طور خلاصه شرح میدهیم که SQL injection چیست و چطور انجام میشود.
حملهی SQL نوعی از حملات سایبری مبتنی بر کد است که در آن، مهاجم به اطلاعات حساس کاربران در پایگاه داده دسترسی پیدا کرده و میتواند اقدامات امنیتی برنامهها را دور بزند. درنهایت، مهاجم از کوئریهای SQL برای اصلاح، اضافه کردن، حذف یا بروزرسانی رکوردها در پایگاه داده استفاده میکند.
در صورتی که حملهی SQL موفقیت آمیز باشد، تمامی وبسایتها یا برنامههای کاربردی وب که با استفاده از دیتابیسهای رابطهای مانند MySQL، Oracle یا SQL Server مدیریت میشوند، همگی تحت تاثیر قرار میگیرند. در سالهای اخیر، باتوجه به موارد استفادهی روزافزون این نوع حملات در بین هکرها، شاهد نقصهای امنیتی زیادی بودهایم. از طرف دیگر، با پیشرفت روشهای هک و نفوذ، روشهای پیشگیرانه و حفاظتی مانند فایروالها (یا دیوارهی آتش) نیز به خوبی بروزرسانی شدهاند و توانستهاند تا حد زیادی از وقوع این حملات جلوگیری کنند.
حال نوبت آن است که با انواع حملات SQl آشنا شویم.
انواع حمله SQL injection
هر چه یک سازمان درک و آشنایی بیشتری با انواع مختلف تهدیدات امنیتی سایبری داشته باشد، بهتر میتواند خود را برای حملات آماده کرده و نقاط آسیبپذیر خود را شناسایی و برطرف کند. حملات SQl به 3 دسته تقسیم میشوند:
In-band SQL Injection
In-band SQL Injection رایجترین نوع حمله SQL injection است. در حمله In-band SQL Injection، هکر از یک کانال ارتباطی یکسان برای حمله و جمعآوری اطلاعات استفاده میکند. رایجترین تکنیکهای حملات In-band SQL Injection عبارتنداز:
- Error-based SQL injection: در این تکنیک، هکر با استفاده از از دستور SQL برای ایجاد پیام خطا از سرور دیتابیس، اطلاعاتی دربارهی ساختار دیتابیس بدست میآورد. با اینکه پیامهای خطا در زمان توسعهی برنامههای وب یا صفحات وب مفید هستند، اما از آنجایی که اطلاعات مربوط به پایگاه داده را در معرض دید همه قرار میدهند، میتوانند آسیب زننده باشند. برای جلوگیری از هک دیتابیس از این طریق، میتوانید پس از فعال شدن وبسایت یا برنامه، پیامهای خطا را غیرفعال کنید.
- Union-based SQL injection: در این تکنیک، هکر با استفاده از اپراتور UNION SQL برای ترکیب چند دستور انتخاب و برگرداندن یک پاسخ HTTP، اقدام به استخراج اطلاعات از دیتابیس میکند. این تکنیک یکی از رایجترین حملات SQL injection است و نسبت به error-based SQL injection به اقدامات امنیتی بیشتری نیاز دارد.
Inferential SQL Injection
در تکنیک Inferential SQL injection که با نام blind SQL نیز شناخته میشود، برخلاف In-band SQL Injection، دادهها مستقیما به هکر منتقل نمیشوند. به جای آن، هکر میتواند با ارسال پکیجهای داده و مشاهدهی پاسخ، با ساختار سرور آشنا شود. حملات Inferential SQL injection نسبت به حملات in-band SQL injection زمان بشتری نیاز دارند و به همین دلیل، کمتر مورداستفاده قرار میگیرند. به طور کلی، دو نوع حملهی inferential SQL injection داریم:
- Boolean injection: در این تکنیک، هکر یک SQL query را به دیتابیس ارسال کرده و نتیجهی آن را مشاهده میکند. بر اساس اینکه آیا اطلاعات موجود در پاسخ HTTP اصلاح شده است یا خیر، هکر میتواند درست یا نادرست بودن نتایج را شناسایی کند.
- Time-based injection: در این تکنیک، هکر یک SQL query را به دیتابیس ارسال کرده و پایگاه داده را قبل از پاسخ دادن، برای چند دقیقه منتظر نگه میدارد. بر اساس تعداد ثانیههایی که تا زمان ارسال پاسخ میگذرد، هکر میتواند درست یا نادرست بودن نتیجه را مشخص کند. به عنوان مثال، در صورتی که حرف اول نام دیتابیس “A” باشد، دستور تاخیر میدهد. اگر پاسخ به تاخیر بیفتد، به این معنی است که query درست است.
Out-of-Band SQL Injection
Out-of-Band SQL Injection کمترین آمار حمله را در بین حملات SQl دارد. در این تکنیک، هکر از کانال ارتباطی متفاوتی برای جمعآوری نتایج استفاده میکند. فقط در زمانی که سرور برای حملات inferential SQL injection یا in-band SQL injection کند یا ناپایدار باشد، از این تکنیک برای هک دیتابیس استفاده میشود.
حمله SQL injection چگونه انجام میشود؟
از SQL queryها برای انجام برخی اقدامات در دیتابیس و همچنین برای اجرای دستورات سیستمعامل استفاده میشود. هر query شامل مجموعهای از پارامترهاست که اطمینان حاصل میکنند که زمانی که کاربر query را اجرا میکند، فقط رکوردهای موردنظر بازگردانده شوند. در طول یک حمله SQL injection، هکر با تزریق کد مخرب به فرمهای ورودی query، به دیتابیس دسترسی پیدا میکند.
در اولین مرحله حملات SQl، مهاجمین بر روی نحوهی عملکرد پایگاه داد تحقیق میکنند. برای انجام این کار نیز انواع مقادیر تصادفی را در queryها ارسال میکنند تا نحوهی پاسخ سرور را مشاهده کنند.
در مرحلهی بعد، مهاجمین از نتایج بررسیهایشان استفاده کرده تا یک query ایجاد کننده که سرور مجازی آن را تفسیر کرده و به عنوان یک دستور SQL اجرا کند. به عنوان مثال، فرض کنید در یک پایگاه داده، اطلاعات مشتریانی که خرید را با شمارهی شناسهی مشتری تکمیل کردهاند، ذخیره شده است. مهاجم به جای جستجوی یک شناسهی خاص، عبارت “CustomerID = 1000 یا 1=1 ” را در قسمت ورودی وارد میکند. از آنجایی که عبارت 1=1 همیشه درست است، SQL query همهی شناسههای مشتری و دادههای مربوط به آنها که در پایگاه داده ذخیره شده است را برمی گرداند. این کار، هکر را قادر میسازد تا فرآیند احراز هویت را دور زده و به دیتابیس در سطح ادمین دسترسی داشته باشد.
هکرها در حمله SQL injection علاوه بر دسترسی غیرمجاز به اطلاعات، میتوانند کل پایگاه داده، اعتبارنامهها و سوابق را حذف کنند و یا دادههای نامعتبر را وارد پایگاه داده کنند.
مثالهایی از SQL injection
در حملات SQl ممکن است استراتژیها، حملات، تنظیمات و آسیبپذیریهای مختلفی بکار گرفته شوند. در این قسمت، برای درک بهتر شما از این حملات، میخواهیم چند مثال رایج را توضیح دهیم:
- تغییر SQL query: هکر برای بازیابی دادههای پنهان، یک SQL query را تغییر میدهد تا اطلاعات بیشتری بدست آورد.
- دور زدن ورود کاربران: هکر برای دورزدن مرحلهی احراز هویت و دسترسی به وبسایت یا برنامه، یک دستور SQL را به فرم ورود تزریق میکند.
- تضعیف منطق اپلیکیشن: هکر query را تغییر میدهد تا در منطق برنامه مشکل ایجاد کند.
- حملات جامع: در این نوع حملات، امکان بازیابی دادهها از بسیاری از جداول پایگاه داده فراهم میشود.
- تجزیه و تحلیل دیتابیس: هکر با تجزیه و تحلیل دیتابیس، اطلاعاتی دربارهی نسخه و ساختار آن بدست میآورد.
- Blind SQL injection: در طول Blind SQL injection، هیچ پیغام خطایی از پایگاه داده دریافت نمیشود.
- حملات DDoS: در طول حملهی DDoS، هکر یک دستور SQL را برای این حمله تزریق میکند تا سیستم را تحت تاثیر قرار دهد.
در قسمت زیر، چند نمونه از تاثیرات واقعی حمله SQL injection را با یکدیگر میخوانیم:
- آسیبپذیری تسلا: در سال 2014، هکرها توانستند از طریق SQL injection به تسلا نفوذ کرده و دادههای کاربران را به سرقت ببرند.
- آسیبپذیری Fortnite: بازی Fortnite یک بازی آنلاین محبوب است که بیش از 350 میلیون بازیکن فعال دارد. در سال 2019 این بازی مورد حمله SQL injection قرار گرفت و حسابهای کاربری بازیکنان به سرقت رفت.
- آسیبپذیری Cisco: در سال 2018 شرکت Cisco مورد هجوم هکرها قرار گرفت و مهاجمان توانستند به رایانههایی که مدیریت مجوز در آنها نصب شده بود، دسترسی پوسته (shell access) داشته باشند.
پیامدهای یک حمله SQL موفق
در صورتی که حمله SQL injection موفقیت آمیز باشد، میتواند خطرات زیادی برای یک کسبوکار داشته باشد. مهمترین پیامدهای یک حملهی SQL موفق عبارتنداز:
- افشای دادههای حساس: هکرها میتوانند دادههای حساس ذخیره شده در سرور SQL را بازیابی کنند.
- به خطر انداختن یکپارچگی دادهها: در صورتی که هکر به دادهها دسترسی داشته باشد، میتواند آنها را تغییر داده یا حذف کند.
- به خطر افتادن حریم خصوصی کاربران وبسایت/اپلیکیشن: بسته به اینکه چه دادههایی در سرور مجازی SQL ذخیره شده باشند، این احتمال که مواردی نظیر آدرس، شماره تلفن، اطلاعات کارتهای اعتباری و دادههایی که مربوط به حریم خصوصی کاربران هستند برای انجام عملیات مجرمانه به سرقت برود، وجود دارد.
- اجازه به هکر برای دسترسی به سیستم: در صورتی که کاربری دارای دسترسی ادمین باشد، مهاجم میتواند پس از دسترسی به اطلاعات او و با استفاده کدهای مخرب، به کل سیستم دسترسی داشته باشد.
- دسترسی عمومی هکر به سیستم: در صورتی که از دستورات SQL ضعیف برای بررسی نام کاربری و رمز عبور استفاده میکنید، این احتمال که یک هکر بتواند بدون اطلاع از اعتبار کاربر به سیستم شما دسترسی پیدا کند، وجود دارد. بدین صورت، هکر میتواند با دسترسی و دستکاری اطلاعات حساس، شما را به دردسر بیاندازد.
- هزینههای غیرمالی حمله SQL injection: در صورتی که اطلاعات شخصی کاربران شما فاش شود، اعتماد مشتریان و در پی آن اعتبار کسب و کارتان نیز از بین میرود.
چگونه از حملات SQL injection جلوگیری کنیم؟
اگر نگران کسبوکارتان هستید و میخواهید از وقوع حمله SQL injection جلوگیری کنید و یا صدمات چنین حملاتی را کمتر کنید، بهتراست اصول کلیدی برای محافظت از وبسایت و اپلیکیشنهای کاربردی را رعایت کنید.
این اصول عبارتنداز:
آموزش کارکنان
تیم مسئول برنامههای وب و سایر کارکنان باید از با انواع حملات SQl و راههای جلوگیری از آنها آشنا باشند و بهخوبی آموزش ببینند.
کنترل ورودی کاربران
هر ورودی کاربر که در SQL query معرفی میشود میتواند یک خطر باشد. با استفاده از احراز هویت دو مرحلهای ورودی کاربران به همان روش عمومی، میتوانید تا حدی این مشکل را حل کنید. همچنین، بهتر است به کاربرانی که به پایگاه داده متصل میشوند، حداقل امتیازات را بدهید. برای تایید و فیلترکردن کاربران نیز به جای لیستها سیاه، از لیستهای سفید استفاده کنید.
از آخرین و جدیدترین نسخهها استفاده کنید
برای جلوگیری از ایجاد هرگونه مشکلی و دریافت بروزترین و جدیدترین روشهای امنیتی، بهتر است آخرین نرم افزارها و پچهای امنیتی استفاده کنید و همیشه سیستم خود را بروزرسانی کنید.
اسکن مداوم برنامههای وب
با استفاده از ابزارهای جامع اپلیکیشن و برنامههای کاربردی وب را به طور منظم اسکن کرده و آسیبپذیریهای احتمالی را قبل از اینکه به طور جدی اختلال ایجاد کنند، شناسایی کرده و در اولین فرصت آنها را برطرف کنید.
از یک فایروال مناسب استفاده کنید.
از دیوارهی آتش برنامهی وب (Waf) معمولا برای مسدود کردن SQLi و سایر تهدیدات امنیتی استفاده میشود. در صورتی که WAF دارای لیست بزرگ و جامعی باشد و دائما بروزرسانی شود، میتواند درخواستهای SQL مخرب را به خوبی مسدود کند.
جمعبندی
حملات SQL Injection به طور خاص پایگاه دادهها را هدف میگیرند و با کنترل سرور پایگاه داده، اقدام به سرقت اطلاعات حساس کاربران و ایجاد تغییراتی در آن میکنند. سه نوع اصلی این حملات عبارتند از In-band SQL Injection، Inferential SQL Injection و Out-of-Band SQL Injection. هر کدام از این حملات به روشهای مختلف و با اهداف خاصی صورت میگیرند.
از آنجایی که در این نوع حملات علاوه بر فاش شدن و ازدست رفتن اطلاعات حساس، ممکن است اعتماد کاربران و اعتبار کسبوکارتان از بین برود، بهترین کار این است که با انجام یک سری اقدامات، از وقوعشان پیشگیری کنید.
در این مقاله، سعی کردیم به طور کامل دربارهی انواع حمله SQL injection، تاثیرات و راههای پیشگیری از وقوع چنین حملاتی صحبت کنیم.