SQL Injection چیست؟
حمله 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 injection میتواند به منظور اجرایی کردن حملات زیر مورد استفاده قرار بگیرد:
- دور زدن سیستم احراز هویت و سطح دسترسی (authentication و authorization)
- افشای اطلاعات
- در معرض خطر قرار دادن یکپارچگی و در دسترس بودن سیستم (Integrity و Availability)
- اجرا کد از راه دور (Remote Code Execution)
همانطور که مشاهده میکنید، در صورتی که بخواهیم فقط نمونههایی از تاثیرات ممکنه پس از اجرای حمله SQL injection را بیان کنیم، میبینیم که با خطرناکترین پیشامدها روبرو هستیم و این یکی از ویژگیهای حملات تزریق میباشد.
چگونگی عملکرد و اجرای SQL injection در وب سایت
شیوه ی کار SQL injection یا تزریق دیتابیس به این صورت است که فرد مهاجم یا هکر در فرم های تعبیه شده بر روی وب سایت و در فیلدهایی که به جمع آوری اطلاعات کاربران می پردازد اقدام به ورود کدهای مخرب SQL می کند. پس از ورود اطلاعات توسط کاربر در این فرم ها ، کدهای مخرب عمل می کنند و به جای اجرای SQL اصلی، کدهای مخربی که مهاجمین وارد کرده اند اجرا می شوند.
روش SQL injection به شیوه های مختلف بر روی سایت ها اجرا می شود و به نوع سرویس هاست و پایگاه داده ی تعبیه شده بر روی وب سایت بستگی دارد. چرا که به طور عمده برخی از بانک های اطلاعاتی حساسیت هایی بر روی کاراکترهای خاص دارند که هکرها با شناسایی این مساله می توانند اقدام به تولید و ورود آنها به بخش های مختلف وب سایت کنند.
راه های مقابله با SQL اینجکشن
1 – بدون شک با توجه به تعریف و چگونگی عملکرد تزریق کد به بانک های اطلاعاتی، بهترین شیوه ی مقابله با حملات و نفوذهای SQL injection بررسی دائمی ورودی ها و سنجش دقیق این اطلاعات وارد شده قبل از ارسال آنها به پایگاه داده ی وب سایت است. این اطلاعات در قالب کدهای مختلف به پایگاه های داده در قالب یک پرس و جو یا Query ارسال می شوند. Query در بانک های اطلاعاتی زمانی مورد استفاده قرار می گیرد که قصد حذف، درج یا ویرایش برخی از اطلاعات موجود در پایگاه داده ی خود داریم. Queryها یا زبان پرس و جو به دلیل ساختار آسانی که دارند به زبان انسان ها بسیار شبیه هستند و وظیفه دارند تا خدمات مختلفی را به کاربران و برنامه نویسان بانک های اطلاعاتی ارائه دهند. بنابراین به منظور مقابله ی موثر با SQL injection می توانید در برابر ورودی فرم های موجود در وب سایت خود از شیوه هایی استفاده کنید که از ورود کاراکترها یا کدهای غیرمجاز جلوگیری کند و آنها را به طور دقیق شناسایی کند.
2 – به منظور مقابله با SQL injection می توانید دسترسی های مختلفی به کاربران پایگاه داده ی خود بدهید. با این شیوه می توانید تا محدوده ی زیادی از حملات SQL injection، تخریب ها و تزریق کدها به پایگاه داده ی خود جلوگیری کنید.
3 – افزایش امنیت پرس و جوها در هنگام ارسال به پایگاه داده با استفاده از شیوه های خلاقانه و زیادی که می توان از آنها استفاده کرد، سوء استفاده و هجوم کاربران را با اختلال مواجه می کند. بدین منظور می توانید به اصطلاح از Queryهای پارامتر شده استفاده کنید. بدین معنی که در ابتدا پیش بینی های لازم از پرس و جوهای مورد نیاز انجام شود و این کدها به پایگاه داده ارسال شوند اما بدون متغیر تا در شرایط مورد نیاز تنها اقدام به ارائه ی متغیر ورودی به آنها کرد. این مساله موجب ارسال جداگانه ی متغیرها می شود و درنتیجه امنیت، سرعت و کارایی وب سایت و پایگاه داده ی شما را نیز افزایش خواهد داد. این شیوه موجب می شود تا در صورت حملات احتمالی هکرها تنها به متغیرها دسترسی داشته باشند و کدهای موجود از دسترسی آنها خارج گردد.
4 – علامتگذاری یا به نوعی دستکاری داده های ورودی کاربر شیوه ای است که به بانک اطلاعاتی هشدار می دهد که داده های وارد شده از طریق کاربر هستند تا در صورت نیاز عکس العمل های لازم در برابر آن صورت بگیرد.
5 – مهندسی دقیق تری بر روی پیام های خطایی که تولید می کنید داشته باشید. این اطلاعات و پیام ها این کمک و هشدار را به هکر یا مهاجم می دهد که از ورود اعداد یا کاراکترهای خاص در قسمت های مختلف خودداری کنند.
6 – افزایش امنیت وب سایت و پایگاه داده همواره یکی از موضوعات مورد توجه و مهمی است که کاربران و مدیران وب سایت ها سرمایه گذاری های زیادی بر روی آنها انجام می دهند. این مساله علاوه بر اینکه موجب اعتماد، برندسازی و بهینه سازی بالاتر شما خواهد شد، در برابر عوامل مخربی نظیر SQL injection در پایگاه های داده نیز مقاومت بیشتری می کنند.
در مورد بانک های اطلاعاتی نکات زیادی وجود دارند که می توانند امنیت بیشتر آنها در برابر حملات مختلف را موجب شوند.
مقابله با SQL اینجکشن در برابر افزایش امنیت دیتابیس
– به روزرسانی نسخه های بانک اطلاعاتی می تواند روند بهتری در برابر جلوگیری از مشکلات امنیتی دیتابیس شما ایجاد کند بنابراین توصیه ی ما این است که همواره برنامه ی پایگاه داده ی خود را مطابق با آخرین نسخه آپدیت کنید.
– غیرفعال کردن نمایش خطاهای پایگاه داده به کاربر می تواند پایگاه داده و وب سایت شما در برابر هکرها یا مهاجمین احتمالی را امن تر نگه دارد. بدین ترتیب پس از اتمام نوشتن کدهایSQL این ویژگی را غیرفعال کنید.
– امنیت بیشتر پایگاه داده نیازمند ارائه ی پارامترهای قوی تر برای اطلاعات مهم تری نظیر رمزهای عبور است. بدین ترتیب استراتژی های محکم تری برای ذخیره سازی آنها در پایگاه داده اعمال کنید تا در صورت حمله های احتمالی نیز با مشکل مواجه نشوید. در این شرایط هکرها با دردسر بیشتری قادر به رمزگشایی اطلاعات مهم شما خواهند بود و در شرایطی هم ممکن است به این اطلاعات نرسند.
دیدگاهتان را بنویسید