امروزه حمله تزریق SQL که SQLi نامیده میشود یکی از تهدیدکنندهترین مسائل برای محرمانگی دادههاست که به مهاجمان اجازه میدهد تا به کلیه دادههای حساس پایگاه داده دسترسی داشته باشند. در این مقاله به انواع SQLi و نحوه عملکرد این حملات و مثالهایی از آن میپردازیم.
*SQL یک زبان برنامهنویسی استاندارد است که برای مدیریت دادههای ذخیره شده در پایگاههای داده طراحی شده است.
تزریق SQL چیست؟
تزریق SQL یک تکنیک مخرب است که از آسیبپذیریهای برنامههای مبتنی بر SQL سوء استفاده میکند. با SQLi، هکرها کد دلخواه را به کوئریهای SQL تزریق میکنند که به آنها اجازه میدهد مستقیماً رکوردهای ذخیره شده در پایگاه داده را اضافه، اصلاح و حذف کنند. حملات SQLi می تواند در هر برنامه مبتنی بر وب یا وب سایت درگیر با پایگاه داده SQL مانند MySQL ،SQL Server ،Oracle و غیره تأثیر بگذارد.
هکرها ممکن است از حملات SQLi برای دسترسی غیرمجاز به دادههای حساس مانند اطلاعات شخصی، دادههای تجاری، دادههای مشتری یا اسرار تجاری استفاده کنند. مهاجمان میتوانند مجوز و احراز هویت یک برنامه وب را برای بازیابی دادهها از کل پایگاه داده به دست آورند.
حمله تزریق SQL چگونه کار میکند؟
حمله SQLi شامل تزریق یا درج یک کوئری SQL از طریق دادههای ورودی است. دستورات SQL مخرب به پایگاه داده تزریق می شود واجرای دستورات SQL از پیش تعریف شده را مختل میکند.
برای انجام یک حمله SQLi، مهاجمان یک ورودی آسیب پذیر را در یک وب سایت یا وب اپلیکیشن هدف قرار میدهند. سپس، آنها از این آسیب پذیری با استفاده از ورود دستورات SQL سوءاستفاده میکنند. مهاجم یک فرمان SQL ساخته شده خاص را به عنوان یک نفوذ سایبری اجرا میکند. این فرمان به مهاجم ایده روشنی از وضعیت پایگاه داده ارائه میدهد و امکان دسترسی کامل به پایگاه داده را فراهم میکند.
برخی از انواع رایج SQLi ممکن است شامل موارد زیر باشد:
- SQLi مبتنی بر ورودی کاربر (مانند فرمهای وبسایت)
- SQLi مبتنی بر کوکی
- SQLi مبتنی بر HTTP
نمونههایی از حملات تزریق SQL
حمله SQLi یکی از رایجترین تکنیکهای حمله است، بنابراین نمونههای زیادی در دسترس است. برخی از معروفترین حملات SQLi در ادامه ذکر میشود:
- در سال 2002، جرمی جکز متوجه شد که Guess.com برای حمله SQLi باز است، و به مهاجم اجازه میدهد تا با وارد کردن یک URL در مرورگر خود، نام، شمارهکارت اعتباری و تاریخ انقضای بیش از 200 هزار مشتری در پایگاه داده را به دست آورد.
- در سال 2007، وب سایت مایکروسافت انگلستان توسط یک مجرم رایانه ای با استفاده از SQLi مورد حمله قرار گرفت.
- در سال 2010، در جریان انتخابات سوئد، یک مهاجم از طریق دستورات SQL به فرایند رایگیری حمله کرد.
- در سال 2015، یک حمله SQLi تلاش کرد تا اطلاعات مشتریان را از سرورهای شرکت مخابراتی بریتانیا TalkTalk بدزدد.
- در سال 2021، یک مهاجم 70 گیگابایت داده را از وب سایت Gab با استفاده از یک حمله SQLi سرقت کرد!
انواع تزریق SQL
SQLi را میتوان بر اساس روشهای مورد استفاده برای دسترسی به دادهها و پتانسیل آسیب آنها طبقه بندی کرد. تزریقهای SQL معمولاً در سه دسته عمده طبقهبندی میشوند:
- SQLi درون باند (کلاسیک)
- SQLi استنتاجی (کور)
- SQLi خارج از باند
SQLi درون باند (کلاسیک)
SQLi درون باند (کلاسیک) یکی از رایج ترین انواع حملات SQLi است. مهاجم از همان کانال ارتباطی راهاندازی حملات برای جمعآوری نتایج آنها استفاده میکند. SQLi درون باند دارای دو زیرشاخه فرعی است:
- SQLi مبتنی بر خطا: این تکنیک به پیام های خطای اعلام شده توسط سرور پایگاه داده برای جمع آوری اطلاعات در مورد ساختار پایگاه داده متکی است.
- SQLi مبتنی بر دستور UNION: این تکنیک از عملگر UNION SQL برای ترکیب نتایج دستورات SELECT برای دریافت یک پاسخ HTTP استفاده میکند. سپس دادههای پاسخ میتواند توسط مهاجم مورد استفاده قرار گیرد.
SQLi استنتاجی (کور)
SQLi استنتاجی (کور) به پاسخ و الگوهای رفتاری سرور متکی است، بنابراین اجرا معمولاً کندتر است – اما ممکن است دسترسی عمیقتر باشد. یک مهاجم میتواند پکیجهایی را به سرور ارسال کند و پاسخها و رفتار سرورها را برای بازسازی ساختار پایگاه داده مشاهده کند. SQLi استنباطی دارای دو متغیر فرعی است:
- SQLi مبتنی بر Boolean: یک مهاجم یک کوئری SQL را به پایگاه داده ارسال می کند که برنامه را مجبور میکند یک نتیجه را برگرداند. و بررسی میکند که بسته به نتیجه، اطلاعات درون پاسخ HTTP تغییر میکند یا خیر؟
- SQLi مبتنی بر زمان: این تکنیک بر ارسال یک کوئری SQL متکی است که پایگاه داده را مجبور می کند برای مدت زمان مشخصی (بر حسب ثانیه) قبل از پاسخ منتظر بماند. زمان پاسخ نشان می دهد که آیا کوئری مخرب ارسال شده تأثیرگذار است یا نه؟
SQLi خارج از باند
این کمترین حملات SQLi است. تکنیک SQLi خارج از باند به سرور پایگاه داده برای درخواست DNS یا HTTP متکی است و دادهها را به مهاجم تحویل می دهد. این حمله زمانی رخ می دهد که مهاجم نتواند از همان کانال برای راه اندازی حمله و جمع آوری نتایج استفاده کند. SQLi خارج از باند جایگزینی برای تکنیکهای مبتنی بر زمان استنباطی ارائه میکند، به خصوص زمانی که پاسخهای یک سرور پایدار نیستند.
هر سازمانی باید روی محافظت از اطلاعات ارزشمند خود در برابر حملات SQLi تمرکز کند. ابزارهای تشخیص خودکار بسیاری برای آزمایش این آسیبپذیریها وجود دارد. یک رویکرد لایهای که شامل استراتژیهای دادهمحور است میتواند دفاع بهینه برای حملات SQLi باشد، جایی که دادهها بر محافظت از خود و همچنین برنامهها و شبکه تمرکز میکنند.