تزریق SQL نوعی حمله سایبری است که از دهه 1990 وجود داشته است. بنابراین آنها چه هستند و چگونه کار می کنند؟
اگر یک چیز وجود داشته باشد که مجرمان سایبری دوست دارند، آن داده است. دادههای دزدیده شده در بازارهای غیرقانونی بسیار ارزشمند هستند و دسترسی به پایگاههای داده خصوصی میتواند راهی عالی برای عوامل مخرب برای کسب سود از سرمایهگذاریهای خود باشد. یکی از راه های دسترسی به داده های خصوصی از طریق تزریق SQL است. اما تزریق SQL دقیقا چیست، چگونه کار می کند و آیا می توان از چنین حمله ای جلوگیری کرد؟
تزریق SQL چیست؟
برنامه های نرم افزاری برای عملکرد به کد متکی هستند. کد همچنین زبانی است که ماشینها برای انجام عملیات از آن استفاده میکنند و میتواند به اشکال مختلف (پایتون، جاوا اسکریپت، C++ و غیره) باشد. اغلب از طریق کد است که مجرمان سایبری می توانند به قربانیان حمله کنند و تزریق SQL (یا SQLis) تفاوتی ندارد. اینها به عوامل مخرب اجازه می دهد تا کد مضر را به یک عبارت SQL “تزریق” کنند.
بیایید ابتدا به معنای SQL بپردازیم.
SQL مخفف Structured Query Language است. این نوع دیگری از زبان برنامه نویسی است که به طور خاص در هنگام کار با پایگاه های داده استفاده می شود. SQL که در دهه 1970 توسط IBM توسعه یافت، می تواند اطلاعات پایگاه داده را دستکاری، ذخیره و بازیابی کند. بسیاری از سیستم های ارتباطی پایگاه داده در سراسر جهان از SQL استفاده می کنند، بنابراین جای تعجب نیست که عوامل تهدید راه هایی را برای سوء استفاده از آن به منظور هدف قرار دادن پایگاه های داده ابداع کرده اند.
دستورات SQL بخش کلیدی ارتباطات پایگاه داده را تشکیل می دهند. دستور SQL دستوری است که به اشکال مختلف ارائه می شود. برخی داده ها را تغییر می دهند، برخی آن ها را بازیابی یا حذف می کنند و برخی می توانند ساختار خود پایگاه داده را تغییر دهند. هنگامی که یک تزریق SQL رخ می دهد، کد مخرب به یک دستور SQL تزریق می شود.
البته، یک وب سایت یا برنامه باید از زبان برنامه نویسی SQL استفاده کند تا امکان تزریق SQL فراهم شود. اما این بردار حمله چگونه کار می کند؟
فرض کنید یک خط کد معمولی دارید که توسط یک برنامه استفاده می شود. هنگامی که یک مجرم سایبری یک تزریق مخرب SQL را وارد می کند، یک خط کد اضافه می شود که می تواند در جستارهایی که خود برنامه به پایگاه داده خود ارسال می کند تداخل داشته باشد. با انجام این کار، پایگاه داده می تواند به گونه ای مورد سوء استفاده قرار گیرد که به عامل تهدید اجازه می دهد داده هایی را مشاهده کند که در غیر این صورت به آنها دسترسی نداشتند.
از اینجا، مجرم سایبری میتواند دادهها را برای بهرهبرداری مستقیم از آن بدزدد یا آنها را در وب تاریک یا جاهای دیگر بفروشد. آنها همچنین می توانند داده ها را از پایگاه داده مورد نظر تغییر، اضافه یا حذف کنند. بسته به درجه حمله تزریق SQL، آسیب های زیادی می تواند وارد شود. اگر به جزئیات پرداخت، شماره های تامین اجتماعی یا سایر انواع داده های خصوصی دسترسی داشته باشید، بسیاری از افراد ممکن است در معرض خطر سوء استفاده قرار بگیرند.
از سوی دیگر، اگر مهاجم موفق شود پایگاه داده را به طور قابل توجهی تغییر دهد، بخش بزرگی از داده ها ممکن است برای همیشه از بین بروند. در مجموع، تزریق SQL می تواند کل پایگاه داده را تنها از طریق یک حمله از بین ببرد. در حالی که آنها از سال 1998 وجود داشته اند، هنوز هم در عصر کنونی مرتبط و خطرناک هستند.
همانطور که توسط پروژه امنیتی برنامه وب باز (OWASP) مشخص شد، 274000 نمونه از تزریق SQL هنگام آزمایش برنامه ها برای حضور چنین حمله ای در سال 2021 شناسایی شد.
انواع تزریق SQL
چند نوع مختلف تزریق SQL وجود دارد که سه نوع اصلی آن تزریق کور، درون باند و خارج از باند است.
تزریق کور (یا استنباطی) SQL زمانی اتفاق میافتد که برنامه یا سایت توسط تزریق مورد حمله قرار میگیرد، اما پاسخهای HTTP (پروتکل انتقال ابرمتن) ارائهشده حاوی نتیجه جستجوی SQL نیستند. به عبارت دیگر، هیچ داده ای از پایگاه داده مورد حمله به مجرم سایبری داده نمی شود. خب، این چه فایده ای دارد؟
با استفاده از تزریق کور SQL، مهاجم دادهها را به سرور مورد نظر ارسال میکند و سپس میتواند از طریق ماهیت خود پاسخ HTTP چیزهای خاصی را در مورد پایگاه داده تشخیص دهد. علاوه بر این، عوامل مرتبط با پاسخ HTTP می توانند به مهاجم کمک کنند تا تزریق SQL موثرتری برای دسترسی به پایگاه داده ایجاد کند.
دو نوع کلیدی تزریق SQL کور وجود دارد که به نامهای مبتنی بر زمان و بولی شناخته میشوند. این دو نوع از نظر ماهیت کاملاً مشابه هستند. هر دو تزریق SQL مبتنی بر زمان و منطقی، آرایهای از سؤالات پاسخ بله یا خیر را ارسال میکنند، اگرچه سؤال دوم به پایگاه داده نیاز دارد تا قبل از پاسخ به سؤالات مدت کوتاهی منتظر بماند.
در مرحله بعد، تزریق SQL درون باند وجود دارد. تزریق SQL درون باند به اپراتور اجازه می دهد تا حمله را انجام دهد و با استفاده از همان کانال به نتیجه دلخواه برسد. تزریقهای SQL درون باند رایجترین مواردی هستند که استفاده میشوند، صرفاً به این دلیل که به دلیل اینکه فقط به یک کانال نیاز دارند، سادهترین روشها هستند.
در نهایت، شما یک تزریق SQL خارج از باند دارید. این اساساً نسخه جایگزین تزریق SQL درون باند است که در آن مهاجم نمیتواند حمله را در مجموع با استفاده از یک کانال انجام دهد. از طرف دیگر، اگر سرور هدف برای ارائه نتایج به اندازه کافی سریع نباشد، ممکن است یک حمله به تزریق SQL خارج از باند متوسل شود.
این عوامل فرآیند را کمی دشوارتر می کند، به این معنی که برای موفقیت باید بر روی ویژگی های خاصی تکیه کند تا در پایگاه داده هدفمند فعال باشد. به عنوان مثال، پلتفرمی که مورد حمله قرار می گیرد باید فاقد پاکسازی ورودی باشد. به همین دلیل، تزریق SQL درون باند بسیار رایج تر از تزریق SQL خارج از باند است. اما هنوز هم اتفاق میافتند.
آیا می توان از تزریق SQL جلوگیری کرد؟
تزریق SQL بیشتر از افراد عادی برای کسب و کارها و سازمان ها نگران کننده است. اما کارهایی وجود دارد که این اهداف بالقوه می توانند انجام دهند تا احتمال اصابت چنین حمله ای را کاهش دهند.
پاکسازی ورودی کلیدی ترین روش رایج برای اجتناب از تزریق SQL است. این یک فرآیند فیلتر است که ورودی شخصیت های خطرناک را اسکن و پاک می کند. اگر کد SQL قبل از پاکسازی پردازش شود، به طور طبیعی احتمال تزریق SQL افزایش می یابد.
علاوه بر این، پرس و جوهای پارامتری شده می توانند به شما کمک کنند تا از تزریق SQL دوری کنید. اینها کوئری هایی هستند که حداقل به یک پارامتر برای اجرا نیاز دارند. اعمال پارامترها انجام موفقیت آمیز حمله تزریق SQL را برای مجرمان سایبری دشوارتر می کند.
اما هیچ راه مطمئنی برای جلوگیری از تزریق SQL وجود ندارد. همانطور که در مورد بسیاری از حملات سایبری وجود دارد، تقریباً غیرممکن است که دستگاه ها و سیستم های خود را کاملاً محفوظ نگه دارید. هنگامی که صحبت از تزریق SQL به میان می آید، بهترین کاری که می توانید انجام دهید این است که تمام ورودی ها را پاکسازی کنید و پرس و جوهای پارامتری ایجاد کنید.
تزریق SQL قدیمی است، اما هنوز یک تهدید است
در حالی که تزریق SQL بیش از 20 سال است که وجود دارد، هنوز هم برای بسیاری از وب سایت ها و برنامه ها خطر ایجاد می کند. بنابراین ایده خوبی است که این شکل از حمله را در ذهن داشته باشید و اقدامات لازم را برای جلوگیری از آن انجام دهید، زیرا ممکن است در آینده تهدیدی برای پایگاه داده شما باشد.