طبقه بندی و تجزیه و تحلیل حملات SQL Injection در نرم افزارهای مبتنی بر وب

1395/4/31 مهدی احمدی 2157

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

این آسیب پذیری های امنیتی ادامه پیدا می کنند و این برنامه های کاربردی تحت وب را از طریق حملات SQL Injection آلوده می کنند.

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

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

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

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

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

نقض امنیتی پایگاه داده ها در سراسر جهان وجود دارد و این امر بر اعتبار، مسئولیت و همچنین مشتریان سازمان ها تاثیر می گذارد.  

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

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

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

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

مهاجم با دانستن نقاط ضعف می تواند از SQL به طور مستقیم در جهت کسب اطلاعات از پایگاه داده ها و برای دریافت اطلاعات نامحدود و دسترسی غیر مجاز استفاده کند.

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

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

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

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

 

1- اصول   SQL Injection

همان طور که اشاره شد بیشترین روش مورد استفاده برای حمله به برنامه های تحت وب، حملاتSQL Injection  می باشد.

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

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

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

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

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

 

2- آسیب پذیری هایSQL Injection  

آسیب پذیری های نرم افزارها و برنامه های تحت وب به عنوان جدی ترین تهدید برای برنامه های کاربردی وب محسوب می گردند.

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

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

برنامه نویسی ضعیف، همانند شیوه برنامه نویسی نادرست برای اخذ ورودی ها، نوع بررسی، کاربری های ضعیف و پیام های خطا، منجر به آسیب پذیری می شوند.

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

 

3- طبقه بندی حملات SQL Injection

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

 

  1. حملات SQL Injection برنامه ریزی شده
  2. حملات SQL Injection کور

 

1-3- حملات SQL Injection برنامه ریزی شده

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

همچنین می توانیم این دسته  ازحملات برنامه ریزی شده را به عنوان اساس این حملات در نرم افزارها یا سیستم ها دانست.

حملات SQL Injection کور، نوع دیگری از حملاتSQL Injection  محسوب می گردد. در این حمله، مهاجم به اطلاعات حساس تنها با جستجوی یک سری از سوالات درست و نادرست از طریق دستورات SQL  دسترسی پیدا می کند.

این اطلاعات بر اساس پاسخ های ارائه شده توسط نرم افزار استخراج می شوند. در این سناریو مهاجم به جای گرفتن پیام های خطا،  به داده های مورد نظر دست می یابد.

 

2-3- طبقه بندی حملات برنامه ریزی شدهSQL Injection

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

 

  1. تزریق برنامه ریزی شده اولیه
  2. تزریق برنامه ریزی شده ثانویه
  3. تزریق برنامه ریزی شده جانبی

 

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

در این مدل حمله، مهاجم نتیجه مورد نظر خود را بلافاصله توسط پاسخ مستقیم برنامه که با آن ها در تعامل است، دریافت می کند. در واقع یک مهاجم می تواند یک لینک یا یک فایل را به عنوان یک ارسال ضمیمه با ایمیل ارسال کند.

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

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

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

در یک حمله تزریق برنامه ریزی شده ثانویه، کدهای برنامه ریزی شده مخرب در نرم افزار مبتنی بر وب تزریق می شوند.

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

از اقدامات پیشگیرانه این نوع از حمله می توان به استفاده از دستوراتPOST  برای ارسال اطلاعات به سرور به جای دستوراتGET و اجتناب از درج دستوراتSQL  در کوکی ها اشاره کرد.

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

در واقع در این روش حمله، مهاجم روش PL/SQL  (زبان جستجو ساختار بندی شده) را مورد سوء استفاده قرار می دهد.

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

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

 

2-3- حملات SQL Injection کور

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

شایان ذکر است درست است که تزریق کدهای مخرب دشوار می شود اما غیر ممکن نیست. مهاجم هنوز هم می تواند داده ها را با پرسیدن یک سری از گزاره های درست یا نادرست سرقت نماید.

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

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

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

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

 

4- تجزیه و تحلیل حملات SQL Injection

تجزیه و تحلیل حملات تزریق  که در بالا بحث  شد بر اساس برخی از ویژگی های زیر انجام می شود:

 

  1. تاثیر حمله به پایگاه داده نرم افزار
  2. تلاش صوت گرفته در اجرای حملات
  3. تشخیص و حفاظت از آسیب پذیری  SQL

 

می توان حملات مرتبه اول را به راحتی توسط بدافزارها فیلتر نمود. پیاده سازی حملات کور بسیار دشوار است. در این میان حملات تزریق مرتبه دوم  تهدید بزرگی در مقایسه با حملات دیگر هستند. ورودی کاربر فیلتر نشده باعث ترغیب حملات SQL Injection می شود.

شایان ذکر است در یک نگاه کلی اصلی ترین دلیل حملات SQL Injection برنامه ریزی شده دوم می تواند موارد زیر باشند:

 

  1. مشخصات نوع داده ها ضعیف است
  2. حساب، بیش از حد ایمن است
  3. اعتبار سنجی ورودی ناکافی است
  4. پیام های خطا وجود دارد
  5. عدم فیلتر داده هایی که  از طریقURL  به سرور فرستاده می شوند

 

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

 

  1. طول رشته ورودی باید محدود شود
  2. از حساب های مختلف پایگاه داده ها برای رسیدن به سطوح مختلف امنیت استفاده شود
  3. پیام های خطا باید برای مخفی کردن جزئیات پارامترهای تزریقی سفارشی شوند
  4. از پارامتر نمایش داده شده برای دسترسی به پایگاه داده ها استفاده شود
  5. از روش های ذخیره سازی شده برای جلوگیری از دسترسی مستقیم به پایگاه داده ها استفاده شود
  6. از ایجاد پرس و جوهای از درجه اعتبار ساقط شده  SQL برای کوکی ها و متغیرهای HTTPاجتناب شود

کلمات کلیدی