مفهوم SQL Injection

مفهوم SQL Injection

واژه ی SQL Injection برگرفته شده است از سر واژه های Structured query language که یک مفهوم بسیار مهم می باشد.

مفهوم SQL Injection یک روش حمله ی متداول برای دستکاری و عملیات مخرب در پایگاه های داده است؛ این دستکاری و عملیات های مخرب روی داده های حساس شرکت، لیست و اطلاعات کاربران یک سرویس یا سایت، صورتحساب و اطلاعات بانکی و پرداخت مشتریان، تصاویر و فایل های افراد و … است.

تاثیری که یک حمله ی SQL Injection می تواند روی یک کسب و کار بگذارد بسیار وسیع تر از حد ممکن است که در این نوشته به آن اشاره می شود.

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

این نوع حملات به پایگاه داده های وبسایت ها بیشتر انجام می پذیرد.

 

مفهوم SQL Injection

کوئری Query چیست ؟

کوئری یک زبان استاندارد برای دستکاری پایگاه های داده می باشد که با کمک آن می توان عملیات های CURD را در بانک اطلاعاتی انجام داد؛ عملیات CRUD شامل:

  • create
  • read
  • update
  • delete

می باشد.

یک دستور sql ساده به شکل زیر می باشد:

اگر یک کوئری توسط یک برنامه ساخته شود به شکل زیر است:

یک درخواست که توسط کاربر می آید می تواند با کوئری زیر شناخته شود:

http://www.estore.com/items/items.asp?itemid=999

بعد از این کوئری توضیحات و شماره به کاربر بر می گردد.

 

انواع SQL Injection

  • In-band SQLi یا Classic
  • Inferential SQLi یا Blind
  •  Out-of-band SQLi

 

In-band SQLi

مهاجم در حملات In-band SQLi از همان کانال ارتباطی کلی برای شروع حملات خود شروع می کند و به سادگی مشکل را ایجاد می کند که یکی از متداول ترین حملات SQL injection است؛ دو روش فرعی وجود دارد:

  • SQLi مبتنی بر خطا : فردی که به عنوان مهاجم در این نوع حملات اقدامی را انجام می دهد باعث می شود در پایگاه داده پیام خطا تولید شود که به صورت بالقوه از داده های ارائه شده توسط این نوع خطاها برای دسترسی و جمع آوری اطلاعات پایگاه داده استفاده می کنند.
  • Union-based SQLi : این تکنیک از عملگر UNION SQL بهره می برد که چندین عبارت انتخابی تولید شده توسط پایگاه داده را برای دریافت یک پاسخ HTTP واحد درهم می کند این پاسخ HTTP ممکن است حاوی داده هایی باشد که توسط یک مهاجم قابل استفاده می باشد.

 

Inferential SQLi

در این روش مهاجم به جای حالت عادی سعی می کند بار زیادی را روی سرور بفرستند و پاسخ و رفتار سرور را در هر حالت بیشتر بیاموزد؛ این روش Blind SQL injection یا SQL Injection کور نامیده می شود زیرا داده ها از پایگاه داده وب سایت به مهاجم منتقل نمی شوند و بنابراین در این نوع ملات اطلاعات مورد نیاز نیستند.

Blind SQL injection به پاسخ و الگوهای رفتاری سرور متکی است بنابراین اجرای آن معمولاً کندتر از حالت های دیگر است اما ممکن است به همان اندازه مضر باشد. تزریق Blind SQL injection را می توان به شرح زیر طبقه بندی کرد:

  • Boolean : این مهاجم با جستجوی SQL به پایگاه داده ، برنامه را وادار به بازگرداندن نتیجه می کند. بسته به درست یا نادرست بودن جستجو ، نتیجه متفاوت خواهد بود. بر اساس نتیجه ، اطلاعات موجود در پاسخ HTTP اصلاح می شوند یا بدون تغییر می مانند. در صورت ایجاد پیام درست یا نادرست ، مهاجم می تواند کار خودش را کند.
  • Time-based یا مبتنی بر زمان : مهاجم یک کوئری SQL را به پایگاه داده ارسال می کند ، که باعث می شود پایگاه داده صبر کند (برای مدت زمانی در ثانیه) قبل از اینکه واکنش نشان دهد. مهاجم می تواند از زمان پاسخ دادن به پایگاه داده ، درست یا غلط بودن یک کوئری را ببیند. بر اساس نتیجه، بلافاصله یا پس از یک دوره انتظار برای پاسخ درخواست HTTP ایجاد می شود. بنابراین مهاجم بدون اتکا به داده های درون پایگاه داده ، می تواند درست یا غلط پیامی را که استفاده کرده اند بازگرداند.

 

Out-of-band SQLi

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

Out-of-band SQLi زمانی انجام می شود که مهاجم نتواند از همان کانال برای شروع حمله و جمع آوری اطلاعات استفاده کند، یا هنگامی که سرور برای انجام این اقدامات بسیار کند یا ناپایدار است. این تکنیک ها به ظرفیت سرور برای ایجاد درخواست های DNS یا HTTP برای انتقال داده ها به یک مهاجم بستگی دارد.

 

جلوگیری از حملات SQL injection

چندین روش موثر برای جلوگیری از وقوع حملات SQLI و همچنین محافظت در برابر آنها در صورت وقوع وجود دارد.

اولین گام اعتبار سنجی ورودی است که روش نوشتن کدی است که می تواند ورودی های نامشروع کاربر را شناسایی کند.

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

به همین دلیل ، یک فایروال برنامه وب (WAF) معمولاً برای فیلتر کردن SQLI و همچنین سایر تهدیدهای آنلاین استفاده می شود. برای این کار ، WAF معمولاً به لیست بزرگ و مداوم به روز شده ای از امضاهای کاملاً دقیق ساخته می شود که به آن اجازه می دهد تا از طریق پاک کردن کدها درخواستهای مخرب SQL را از بین ببرد. معمولاً ، چنین لیستی امضاهایی را برای آدرس دادن بردارهای خاص حمله در اختیار دارد و به طور منظم برای معرفی قوانین مسدود کردن آسیب پذیری های تازه کشف شده مرتباً وصل می شود.

فایروال های مدرن برنامه های کاربردی وب نیز غالباً با سایر راه حل های امنیتی ادغام می شوند. از این طریق ، یک WAF می تواند اطلاعات بیشتری را دریافت کند که قابلیت های امنیتی آن را بیشتر می کند.

به عنوان مثال ، یک فایروال برنامه وب که با ورودی مشکوک ، اما نه کاملاً مخرب مواجه است ، ممکن است قبل از تصمیم گیری برای مسدود کردن درخواست ، آن را با داده های IP تأیید کند. این تنها در صورتی ورودی را مسدود می کند که IP خود دارای سابقه اعتبار نامناسبی باشد.

 

پیشنهاد نویسنده : بهترین سرویس های تولید کننده رمزعبور

 

منبع:

https://www.imperva.com/learn/application-security/sql-injection-sqli/

دیدگاهتان را بنویسید