Structured Query Language (یا به اختصار SQL) زبانی است که برای مدیریت و دستکاری دیتا درون یک دیتابیس طراحی شده. از زمان ظهورش، SQL توانسته در روندی آهسته اما پیوسته راهش را به اکثر دیتابیسهای متنباز و تجاری باز کند. تزریق SQL (یا SQLi) هم یک جور حمله در دنیای امنیت سایبری است که با کدهای خاص SQL، دیتابیسها را هدف قرار داده و باعث میشود سیستمها کاری غیر منتظره و ناخواسته را انجام دهند.
هکری که با این ترفند به موفقیت برسد، میتواند به اشکال مختلف به هدف خود آسیب برساند. کارهایی نظیر:
- عبور از مرحله احراز هویت
- استخراج یا سرقت داده
- دستکاری یا آلوده کردن داده
- حذف کردن داده
- اجرای کدهای خودسرانه
- دسترسی یافتن به روت سیستم
حمله تزریق SQL چقدر خطرناک است؟
اگر کار به درستی انجام شود، تزریق SQL میتواند خساراتی بسیار شدید به هر شخص حقیقی یا حقوقی وارد کند. به محض اینکه اطلاعات حساس در جریان حمله به خطر بیفتند، حتی ریکاوری کامل آنها هم تبدیل به کاری بسیار چالشبرانگیز خواهد شد.
دیتابیسها معمولا از طریق یک اپلیکیشن (مانند یک وبسایت که درخواست کاربر را دریافت کرده و بعد براساس این خروجی، به جستجو در دیتابیس میپردازد) هدف تزریق قرار میگیرند، اما امکان هدفگیری مستقیم آنها نیز وجود دارد. حمله تزریق SQL معمولا در لیست ۱۰ خطر امنیتی بزرگی که همواره کمپانیها را تهدید میکنند دستهبندی میشود.
بیشتر بخوانید: حمله «سرقت کوکی» یا «سرقت نشست» چگونه انجام میشود؟
انواع حملات تزریق SQL
حمله SQL را میتوان به روشهای مختلف پیادهسازی کرد. مهاجمین شاید پیش از روی آوردن به یک متد یا وکتور حمله، نخست تصمیم به پایش و بررسی رفتار سیستم هدف بگیرند. تزریق SQL در سه دستهبندی مختلف انجام میشود: SQLi در باند (کلاسیک)، SQLi استنباطی (کور) و SQLi خارج از باند. انواع تزریقهای SQL براساس متدهایی که هکرها برای دسترسی به دیتای بکاند به کار میگیرند و همینطور میزان خسارتی که وارد میگردد دستهبندی میشوند.
SQLi در باند
در این متد، مهاجم از کانالی یکسان برای آغاز حمله و جمعآوری نتایج استفاده میکند. سادگی و بهینگی «SQLi در باند» باعث میشود که یکی از رایجترین انواع تزریق SQL باشد. این متد، دو زیر مجموعه نیز دارد:
- تزریق SQL مبتنی بر خطا – مهاجم دست به کارهایی میزند که باعث میشوند دیتابیس پیامهای خطا را به نمایش درآورد. مهاجم میتواند به صورت بالقوه از اطلاعات جمعآوری شده از این پیامها، برای کسب دانش بیشتر راجع به ساختار دیتابیس استفاده کند.
- تزریق SQL مبتنی بر یونین – در این تکنیک میتوان از اپراتور UNION SQL (که کارش ترکیب بخشهای مختلف دیتابیس و ایجاد یک پاسخ واحد HTTP است) سوء استفاده کرد. پاسخ مبتنی بر HTTP ممکن است حاوی اطلاعاتی باشد که به مهاجم اهرمهایی هرچه بیشتر میدهند.
SQLi استنباطی (کور)
مهاجم انبوهی از داده را روانه سرور میکند و به پایش پاسخ و رفتار سرور میپردازد تا از ساختار آن بیشتر سر در بیاورد. این متد از آن جهت تزریق SQL کور نامیده میشود که دادهی دیتابیس وبسایت برای مهاجم فرستاده نمیشود، بنابراین هکر نمیتواند اطلاعات حمله در باند را مشاهده کند.
تزریقهای کور SQL متکی بر الگوهای پاسخ و رفتار سرور هستند و بنابراین پیادهسازیشان بیشتر از سایر متدها زمان میبرد، اما از لحاظ آسیبرسانی، این متد به اندازه دیگر روشها خطرناک است. تزریقهای کور SQL را میتوان به دو شکل دستهبندی کرد:
- مبتنی بر جبر بولی – مهاجم یک کوئری SQL به دیتابیس فرستاده و خواستار پاسخ میشود. نتیجه به دست آمده بستگی به این خواهد داشت که کوئری درست باشد یا اشتباه. براساس نتیجه به دست آمده، اطلاعات درون پاسخ HTTP ممکن است دستکاری شود یا دستنخورده باقی بماند. مهاجم بعد تشخیص میدهد که پاسخ تولید شده صحیح است یا اشتباه.
- مبتنی بر زمان – مهاجم یک کوئری SQL به دیتابیس میفرستد که باعث میشود دیتابیس (برای بازهای در حد چند ثانیه) صبر کرده و بعد واکنش نشان دهد. براساس مدتزمانی که طول میکشد تا دیتابیس پاسخ دهد، هکر میتواند تشخیص دهد که کوئری صحیح است یا اشتباه. براساس نتایج به دست آمده، یک پاسخ HTTP به صورت آنی یا بعد از گذشت مدتزمانی کوتاه تولید میشود. در نتیجه مهاجم میتواند تشخیص دهد که پاسخ دریافتی اشتباه است یا صحیح و دیگر نیازی به اتکا به اطلاعات درون دیتابیس نخواهد بود.
SQLi خارج از باند
مهاجم تنها زمانی قادر به انجام چنین حملاتی است که قابلیتهایی خاص درون سرور دیتابیس فعال شده باشد و توسط وب اپلیکیشن استفاده شوند. این فرم از حمله معمولا به عنوان جایگزینی برای تکنیکهای در باند و استنباطی انجام میشود.
تزریق SQL خارج از باند زمانی انجام میشود که مهاجم نمیتواند از کانالی یکسان برای آغاز حمله و جمعآوری اطلاعات استفاده کند، یا زمانی که سرور بسیار کندتر و بیثباتتر از آن است که قادر به انجام برخی از وظایف خود باشد. این تکتیکها با اتکا بر ظرفیت سرور، درخواستهای DNS و HTTP برای انتقال دیتا به سمت مهاجم ایجاد میکنند.
منبع: دیجیاتو
به صفحه مربوط به آموزش امنیت به زیان ساده بروید تا بقیه مقالات مربوط به این دوره را بخوانید