حمله SQL Injection چیست و چگونه از آن خلاص شویم

حمله SQL Injection چیست و چگونه از آن خلاص شویم

وقتی صحبت از اینترنت به میان میاید، امنیت و مطمئن بودن از این که اطلاعات شما دست نخورده باقی می ماند یکی از مواردی بوده است که همراه با وب در ذهن تداعی می شود. در مقابل آن هک شدن سایت ها و اطلاعات کاربران مورد دیگری است که به همین اندازه مهم است و این مورد نیز از بحث های داغ اینترنت است. در این مقاله قصد داریم تا به یکی از انواع حملات مهم در وب و اینترنت بپردازیم و ببینیم که چگونه می توان از آن جلوگیری نمود. حمله SQL Injection یکی از مهمترین و کاربردی ترین روش هایی است که یک هکر میتواند از آن برای نفوذ به سایت شما استفاده کند و در این مقاله قصد داریم به بررسی جزئیات این حمله و روش های جلوگیری و مهار آن بپردازیم.

نقطه آسیب پذیری که حمله SQL Injection از آن استفاده می کند پایگاه داده سایت شما است. پس بهتر است قبل از هر اقدامی به بررسی این اصل مهم از برنامه های کامپیوتری و سایت های اینترنتی بپردازیم و ببینیم که زمین بازی ما کجاست و هکر ها برای نفوذ با استفاده از حمله SQL Injection کجا را انتخاب کرده اند و می توانند با یک حمله موفق چه چیزی بدست بیاورند.

 

ساختار پایگاه داده ها

پایگاه داده ها یا Database را می توان یکی از اصلی ترین بخش های یک برنامه و یا یک سایت معرفی کرد که مسئولیت این را بر عهده دارد که داده های شما و اطلاعاتی که برنامه و یا سایت نیاز دارد تا به صورت پایدار در خود ذخیره کند را بر عهده دارد. اطلاعات پایدار اطلاعاتی هستند که شما انتظار دارید مدت زیادی روی سایت شما باقی بمانند و در موقع نیاز به روش های ممکن از آنها استفاده شوند. همین مقاله ای که اکنون در حال مطالعه آن هستید یکی از اطلاعات پایدار به شمار می آید. در این داده ما یک داده عمومی را شاهد هستیم که هر کسی می تواند وارد سایت شده و به آن دستیابی داشته باشد.

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

ساختار پایگاه داده

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

در یک سایت جدول های مختلفی وجود دارد که هر کدام از آنها می تواند حاوی اطلاعاتی عمومی باشد و یا اطلاعات محرمانه را برای ما ذخیره سازی کند. اما در پایگاه داده های غیر رابطه ای اوضاع کی متفاوت است. یک پایگاه داده غیر رابطه ای داده های خود را بر اساس ساختاری درختی و شبیه به XML ذخیر سازی می کند که به صورت سطری بوده و در هر سطر یکی از عناصر پایگاه داده و مقداری که دارد قرار خواهد گرفت. به عنوان مثال می توان برای پایگاه داده رابطه ای پایگاه داده MariaDB و برای غیر رابطه ای پایگاه داده MongoDB را معرفی نمود.(برای اطلاعات بیشتر در خصوص این پایگاه داده های می توانید به مقالات MariaDB چیست و مانگو دی بی چیست مراجعه کنید.)

برای برقراری ارتباط با پایگاه داده باید از زبان های مخصوص به پایگاه داده ها استفاده کنید که برای پایگاه داده های رابطه ای از زبان پرس و جوی رابطه ای که به اختصار SQL نامیده می شود استفاده می شود. برای پایگاه داده های غیر رابطه ای نیز این زبان غیر رابطه ای بوده و NOSQL نامیده می شود. البته تفاوت زبان های SQL و NOSQL خیلی بیشتر از اضافه شدن یک NO در اول یکی از آنها می باشد و با دو مقوله کاملا مجزا طرف هستیم. حمله SQL Injection اصطلاحی است که عموما برای زبان ها و پایگاه داده های رابطه ای به کار می رود اما این به این معنی نیست که پایگاه های غیر رابطه ای از دست آن فرار کرده اند.

در ادامه به بررسی اینکه حمله SQL Injection چیست و دقیقا چگونه می تواند به سایت ما آسیب برساند خواهیم پرداخت.

 

حمله SQL Injection چیست

حمله SQL Injection یا همان تزریق کد SQL نوعی حمله است که در آن فرد یا گروه مهاجم سعی دارند با ارسال کدهای مختلف برای پایگاه داده راهی را برای نفوذ و یا بدست آوردن اطلاعات و یا حتی تخریب اطلاعاتی که نمی دانند چیست و در کجا قرار دارد، دارند. این نوع از حملات یک نوع خطرناک به شمار می آید و از خانواده حملات Code Injection هستند که همان تزریق کد می باشد. عموما URL هایی که کوئری های مختلفی را درون خود دارند، صفحه های وارد کردن اطلاعات به فرم ها و همینطور صفحه های لاگین از مواردی هستند که می توانند اهداف مناسبی برای اجرای حمله SQL Injection باشد.

اجرای حمله SQL Injection به این صورت است که یک فهرست از دستورات و کوئری های مختلف برای پایگاه داده تهیه شده و از روزنه ای که تشخیص داده شده است و هکر ها فکر می کنند که ممکن است کدهایی که از آنجا وارد می شود روی پایگاه داده پردازش شوند به سایت تزریق می شود. این تزریق ها میتواند به وسیله ابزار های خاصی مانند پک های نرم افزاری موجود روی Kali Linux، jSQL Injection برای پلتفرم های جاوا و NoSQLMap برای پایگاه داده های NOSQL انجام بگیرد.

حمله SQL Injection چیست

همانطور که دیدیم اجرای حمله SQL Injection روی پایگاه داده های غیر رابطه ای نیز ممکن می باشد و واژه حمله SQL Injection دقیقا به معنی تزریق کد SQL نیست. بلکه هدف تزریق کوئری هایی است که بتواند از پایگاه داده اطلاعاتی را بدست بیاورد. تشخیص و جلوگیری از این حملات کار ساده ای نیست و معمولا پایگاه داده کوئری ای را که به آن برسد بررسی کرده و آن را اجرا میکند. خیلی از این کوئری ها حتی ممکن است که خروجی خاصی نداشته باشند و فقط به دنبال حذف پایگاه داده و مواردی از این دست باشند.

در ادامه به معرفی مهمترین روش ها و انواع حمله SQL Injection خواهیم پرداخت و میبینیم که چند نوع از این حمله وجود دارد.

 

انواع حمله SQL Injection کدامند

روش های مختلفی برای به اجرا درآوردن حمله SQL Injection وجود دارد اما میتوان گفت که چهار روش اصلی و پایه وجود دارد و اگر روش دیگری هم باشد از ترکیب این روش ها با هم صورت خواهد گرفت. برای بررسی این روش ها باید کمی بیشتر در مورد ساختار زبان های پرس و جوی رابطه ای و SQL صحبت کنیم. یک کوئری SQL از سه بخش اصلی تشکیل شده است در اولین بخش از کوئری ها که عموما با Select شروع می شود شما بخشی که مد نظر شما است که برگردانده شود و به شما نمایش داده شود را انتخاب می کنید. این قسمت یک و یا چند تا از ستون های جدول شما می باشد.

قسمت دوم مشخص کننده جدولی است که شما از آن استفاده می کنید و می خواهید داده ها را از آن دریافت کنید. قسمت بعدی هم که در واقع شرط این دستور می باشد با عبارت Where جدا می شود. در این قسمت یک شرط مورد بررسی قرار می گیرد که میتواند به هر چیزی اشاره داشته باشد. به طور کل این ساختار را میتوان برای این دستورات معرفی نمود:

SELECT column1, column2, …

FROM table_name

WHERE condition;

در بخش اول ستون های 1 و 2 معرفی شده و بعد از آن نام جدول مورد نظر شما قرار گرفته است که در این نمونه table_name نام دارد و در بخش سوم نیز شرایط قرار خواهند داشت که خود این شرایط و Condition ها می تواند خود روی چند جدول به صورت همزمان به اجرا در بیاید.

انواع حمله SQL Injection

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

 

فیلتر های اشتباه در بخش Where

در این تکنیک میتوان از بخش Condition که در مورد متغیر بود آن و چند دستوره آن صحبت کردیم سو استفاده کرد به این صورت که به جای داده ورودی ای که در این بخش چک می شود، یک کوئری وارد می شود و از روش های مختلفی برای اجرایی کردن این کد استفاده می شود. به عنوان مثال کدی را در نظر بگیرید که به اینصورت اجرا خواهد شد که موضوع جستجویی را که از شما دریافت می کند به عنوان شرط در بخش Where ارسال می کند تا اطلاعاتی که مربوط به داده درخواستی شما می باشد را نمایش دهد.

در این قسمت اگر بی دقتی انجام گرفته باشد ممکن است در این بین یک کد وارد شود که می تواند تعدادی از جدول های شما را تخریب کند یا همه آنها را به نمایش بگذارد. به عنوان مثال برای کاراکتر متنی ای که آن را کنترل می کنید. یک کاراکتر ارسال کرده و بعد از آن دستور را با ; می بندد، دستور بعدی را برای حذف و یا دراپ کامل یک جدول نوشته و شرط منطقی آخر را نیز با یک عبارت همیشه درست کاراکتری تعیین می کند که می تواند تکمیل کننده باقی عبارتی باشد که قرار بوده است واقعا اجرا شود. به این صورت یک کوئری که قرار بود به عنوان شرط چک شده در Where انتخاب شود تبدیل به یک کد کاملا مخرب می شود که کل پایگاه داده را به هم می ریزد.

 

ورودی های کنترل نشده

مورد دیگری که می تواند بسیار خطرناک باشد این است که ورودی ها از لحاظ نوعی که دارند کنترل نشده باشند. در این مورد می توان به راحتی کدهای مخرب را در یک محل ورود داده وارد کرده و با زدن کلید اینتر و ارسال پارامتر ها با ارسال واژه مورد نظر یک کد مخرب را نیز ارسال کرد. به عنوان مثال ورودی زیر را در نظر بگیرید که می تواند به عنوان نام کاربری ارسال شود:

 ;1DROP TABLE users

در این ارسال عدد 1 به عنوان نام کاربری معرفی شده و بعد از آن دستور DROP TABLE وارد عمل شده و کل جدول users را پاک خواهد کرد. استفاده از ماژول های هوشمند و تکمیلی می تواند تا حد زیادی از این مساله جلوگیری کند.

ورودی های کنترل نشده در حمله SQL Injection

 

تزریق به صورت Blind Attack

حمله SQL Injection به روش کور یا همان Blind Attack را می توان یکی از پرکاربردترین انواع این حمله ها داشت. خصوصا اکنون که ماژول های هوشمند توانسته اند جای خود را بیشتر پیدا کنند و مانند موراد قبلی به مشکلی بر نخواهند خورد.

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

خیلی از ابزار هایی که برای حمله SQL Injection استفاده می شوند، از این نوع از حمله استفاده می کنند. خودکار سازی این نوع از حملات و سرعت آنها این موضوع که استفاده از آنها بیشتر از سایر نوع حملات می باشد را نیز بیشتر می کند.

 

تغییر مقادیر شرطی

یکی دیگر از موراد پرکاربرد حمله SQL Injection تغییر شرط های بررسی شده است که به پایگاه داده ارسال می شود. اگر به URL هایی که کوئری های خود را دارند دقت کرده باشید موارد مختلفی را اجرا می کنند که میتواند شامل کدهایی مانند ID، NAME، و موارد مختلف باشد که به فایل PHP خاصی ارسال شده و مورد پردازش قرار می گیرد. امتحان مقادیر مختلف در این URL ها می تواند منجر به دریافت نتیجه های مختلف برای این عمل باشد.

تغییر مقادیر شرطی در حمله SQL Injection

اکنون که دیدیم انواع روش های حمله SQL Injection چه هستند و چگونه این حملات اتفاق می افتد وقت آن رسیده است تا ببینیم که چگونه می توان از آنها جلوگیری کرد و برای اینکه از این نوع از حملات در امان بمانیم باید چه کار کنیم.

 

روش جلوگیری از حمله SQL Injection چیست

در مورد اینکه حمله SQL Injection را چگونه باید خنثی کنیم باید بگوییم که میتوان روش های این کار را به دو صورت تعیین نمود. در اولین اقدام شما باید مطمئن باشید که سایت شما انقدر امن می باشد که صرفا کوئری های صحیح را به پایگاه داده ارسال کند و بتواند در مقابل موارد ناخواسته مقاومت کند. به طور کلی به اینصورت باشد که درز و سوراخی برای تزریق روی آن وجود نداشته باشد. در مورد دوم نیز پایگاه داده شما باید کمی هوشمند باشد و بتواند تشخیص دهد که چه دستوری را نباید اجرا کند و این هم باز بستگی به تنظیمات و طراحی ای است که شما روی آن انجام می دهید.

جلوگیری از حمله SQL Injection

به طور کلی می توان روش های جلوگیری از حمله SQL Injection را به این صورت معرفی کرد:

 

نصب پچ ها و آپدیت های امنیتی

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

 

کنترل ورودی ها

مورد کاربردی دیگری که باید به سراغ آن برروید این است که ورودیهای خود را کنترل کنید و مطمئن باشید امکان ارسال کوئری های از پیش تعیین نشده و دور از انتظار در آنها وجود ندارد. در صورتی که از سایت های شخصی سازی شده و یک CMS اختصاصی استفاده می کنید باید توجه داشته باشید که این کار را حتما در اولویت قرار دهید. اگر این سوال برای شما وجود دارد که چگونه باید این مورد رفع شود باید بگوییم که در اینجا خلاقیت برنامه نویس در میان است و برنامه نویس شما باید از روش هایی که بلد است استفاده کند و یا روش های جدیدی را یاد بگیرد.

عموما با کمی بازی با کد ها می توان از این مشکلات جلوگیری کرد و کار زیاد سختی در پیش نخواهد بود. اما در نظر داشته باشید همین کار ساده بسیار حیاتی و مهم است.

 

ایجاد سطوح دسترسی روی پایگاه داده

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

سطوح دسترسی در حمله SQL Injection

باید توجه داشته باشید که تایید اکانت ها و احراز هویت در این پایگاه داده ها باید به شدت قوی باشد وگرنه این کار می تواند بی فایده باشد.

 

تنظیم امکانات پایگاه داده برای برخورد

یکی دیگر از مواردی که باید در نظر داشته باشید برخورد های پایگاه داده با کوئری های نامشخص می باشد که می تواند بسیار کمک کننده باشد. گاهی اوقات پایگاه داده های شما می توانند در صورت مشاهده کوئری های عجیب و غریب که از مکان های نامشخص رسیده اند واکنش هایی را نشان دهند. به اینصورت که علاوه بر اجرا نشدن آن کاربر مورد نظر می تواند به عنوان یک کاربر مشکوک و مخرب بن شده و دسترسی آن به سایت قطع شود. به کارگیری این مکانیزم ها میتواند بسیار کمک کننده باشد.

 

دقت کردن به ارور ها

یکی دیگر از موارد که می تواند به شما بگوید که یک حمله SQL Injection روی سایت شما در حال اجراست و باید فکری به حال آن بکنید، ارور هایی است که پایگاه داده شما به شما باز می گرداند. در موراد زیادی پایگاه داده متوجه دستورات بی معنی ای که به آن می رسد شده و خطاهایی را مبنی بر اطلاعات و دستورات ناقص باز می گرداند. اگر به این خطاها بی توجه باشید ممکن است حمله SQL Injection بالاخره به ثمر برسد و پایگاه داده شما را منهدم کند!

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

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

دقت به ارور ها در حمله SQL Injection

 

تشخیص آسیب پذیری در برابر حمله SQL Injection

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

برای تشخیص حمله SQL Injection مانند هر نقطه ضعف دیگری در سیستم های رایانه ای ابزار ها و اسکنر های مخصوصی وجود دارد که می تواند این کار را برای شما انجام دهد. یکی از معروف ترین و موثر ترین ابزار هایی که می تواند برای اسکن سایت شما در برابر حمله SQL Injection مورد استفاده قرار گیرد، OWASP ZAP نام دارد. این ابزار یکی از ابزار های حرفه ای برای بررسی دقیق سایت شما است که توسط انجام OWASP ارائه شده است. این انجمن در سال 2001 به عنوان یک مجتمع امنیتی از طرف مهندسین کامپیوتر با تخصص امنیت تاسیس شد و هدف آن ارائه راهکارها و ابزار هایی برای بالاتر بردن سطح امنیت سایت بود.

OWASP ابزار های زیادی را در زمینه های مختلفی مانند حمله SQL Injection مشکلات احراز هویت، حملات دیکشنری اتک و مواردی از این دست ارائه می کند. تمامی ابزار های ارائه شده در این انجمن اوپن سورس بوده و با استفاده از آنها می توانید مطمئن باشید که یک ابزار خوب را برای امنیت سایت خود در اختیار دارید. OWASP ZAP یکی از اسکنر هایی است که این انجمن به طور خاص برای بررسی حمله SQL Injection ارائه کرده است و شما با بهره گیری از آن می توانید سایت خود را به صورت کامل تحلیل کنید.

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

ابزار OWASP ZAP را می توان بهترین ابزار امنیتی برای چک کردن آسیب پذیری سایت در برابر حمله SQL Injection معرفی کرد، اما باید در نظر داشته باشید ابزار های دیگری که برای هک سایت استفاده می شود نیز همین قابلیت ها را می توانند به شما بدهد.

 

نتیجه گیری

در این مقاله در مورد حمله SQL Injection و چگونگی کارکرد آن صحبت کردیم. معمولا یک حمله SQL Injection برای کاربرد های مختلف مانند ورود های غیر مجاز و تخریب مورد استفاده قرار می گیرد و از آنجایی که پایگاه داده را درگیر می کند، میتواند صدمات بسیار بالایی را در کیس های مختلف به سایت شما وارد کند. بهترین راه برای مقابله با حمله SQL Injection این است که از پیش برای اینکار آماده شوید و قبل از اینکه این حمله روی سایت شما اتفاق بیافتد فکر آن را بکنید. زیرا ماهیت خودکار این حملات زیاد به شما وقت نخواهد داد که کاری انجام دهید و اگر قرار باشد این حمله موفقیت آمیز باشد قبل از اینکه شما اصلا متوجه ارور های پایگاه داده شوید، آن را برای شما از کار خواهد انداخت.

 

واکنش شما چیست؟
+1
+1
+1
1
+1
+1
+1
+1
برچسب‌ها:, , ,
تیم تولید محتوا

Author by : تیم تولید محتوا

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

نظر دهید

آدرس ایمیل شما منتشر نخواهد‌شد.