help-header

حمله SQL Injection چیست؟

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

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

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

 

مروری بر تاریخچه SQL Injection

شناسایی این حمله اولین بار در سال ۱۹۹۸ توسط پژوهشگر امنیت سایبری و هکر Jeff Forristal ثبت شد که یافته‌هایش را بر روی رسانه آنلاین Phrack منتشر کرد. فاریستال توضیح داد که چگونه افرادی که مهارت‌های اصلی برنامه‌نویسی را دارند می‌توانند دستورات غیرمجاز SQL را روی صفحات وب تزریق و به پایگاه داده دسترسی پیدا کنند. زمانی که فاریستال این باگ امنیتی محصول SQL Server را به مایکروسافت گزارش داد، واکنش آن‌ها چیزی نبود که او انتظار داشت و آن‌طور که باید به این موضوع اهمیت داده نشد. این موضوع شروعی برای بزرگترین حملات سایبری بود. صنایع زیادی مثل خرده‌فروشی‌ها، مراکزآموزشی، مراکز درمانی و سیستم بانکداری از این سرویس مدیریت دیتابیس استفاده می‌کردند.

اولین حمله سایبری به پایگاه داده SQL در سال ۲۰۰۷ رخ داد. در این اقدام بزرگ‌ترین فروشگاه زنجیره‌ای ایالات متحده به نام 7-Eleven قربانی حمله تزریق کد به پایگاه داده شد. به گفته مجله Wired هکرهای روس با نفوذ به وب‌سایت این فروشگاه زنجیره‌ای و دسترسی به اطلاعات کارت‌های اعتباری مشتریان مبلغی در حدود ۲ میلیون دلار به سرقت بردند.

این حمله همیشه مقاصد مالی ندارد. هکرها در سال ۲۰۰۷ به دو وب‌سایت مرتبط با ارتش آمریکا برای به دست گرفتن کنترل آن‌ها و تبلیغات ضد آمریکایی حمله کردند. سال ۲۰۱۷ نیز یکی دیگر از بزرگترین حملات سایبری به یکی از کمپانی‌های سهامی  به نام Equifax انجام شد. این مرکز اعتبار‌سنجی وظیفه بررسی سابقه بانکی، اعتباری و گزارش‌دهی به مشتریان را بر عهده دارد. در این حمله سایبری هکرها توانستند به حجم گسترده‌ای از اطلاعات شخصی افراد دسترسی پیدا کنند. هم‌چنین در میان حمله‌های قابل توجه می‌توان به حمله‌‌ای که در سال ۲۰۰۸ با سرقت ۳۶۰ میلیون حساب ایمیل، اطلاعات کاربری و رمز عبور انجام شد و در سال ۲۰۱۵ حمله‌ای دیگر به شرکت سازنده اسباب‌بازی V-Tech اتفاق افتاد، اشاره کرد.

به گزارش وب‌سایت پروژه WASP که هر سه سال مهم‌ترین حفره‌های امنیتی را رتبه‌بندی می‌کند، در سال ۲۰۱۷ آسیب‌پذیری SQL از میان ۱۰ عنوان، رتبه‌ی اول را به خود اختصاص داده است.

 

شروع حمله SQL Injection چگونه است؟

پس از آنکه هکر وب‌سایت آسیب‌پذیر را شناسایی کرد نوبت به آن می‌رسد که با آزمون و خطا از تعداد ستون‌های موجود در دیتابیس SQL و کاراکترهای ورودی مورد پذیرش مطلع شود. اضافه کردن عبارت Order by به انتهای URL و قراردادن اعداد به‌شکل URL order by 1 و افزایش تدریجی عدد تا رسیدن به خطا، تعداد ستون‌های پایگاه داده مشخص خواهد شد. تعداد ستون‌های پایگاه داده بزرگترین عدد قبل از Error خواهد بود.

سپس با استفاده از عبارت Union Select و خروجی درخواستی که به سمت دیتابیس ارسال شده است، تعداد ستون‌هایی که امکان دریافت ورودی را دارند نشان خواهد داد که در نتیجه هکر می‌تواند از طریق هر کدام از این ستون‌ها تزریق کدهای مخرب SQL را انجام دهد.

 

انواع حمله‌های SQL Injection

حمله‌های SQLi، به‌شکل‌های مختلف و با هدف‌های متفاوتی انجام می‌شوند. موارد زیر، نمونه‌هایی از انواع این حملات هستند.

  • بازیابی داده‌های پنهان (Retrieving Hidden Data)
  • برعکس کردن منطق نرم‌افزار (Subverting Application Logic)
  • حمله Union
  • بررسی پایگاه داده (Examining The Database)
  • تزریق کورکورانه SQL (Blind SQLi)

 

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

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

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

هم‌چنین، بررسی دوره‌ای دسترسی کاربران به دیتابیس می‌تواند راهکاری دیگر برای جلوگیری از حمله SQL Injection باشد. اگر کاربر هک شده باشد، در بررسی‌های دوره‌ای و شناسایی حمله، دسترسی هکر را می‌تواند مسدود کرد. در انتها، یکی از بدیهی‌ترین روش‌های جلوگیری از حملات SQL Injection، استفاده از رمزهای طولانی و چندکاراکتری برای پایگاه داده SQL است.