Pooye Content SQL 14011244 00 01 min

حمله تزریق SQL injection را چقدر می شناسید؟

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

Pooye Content SQL 14011244 00 01 min

  • تزریق SQL چیست؟

تزریق SQL، همچنین به عنوان SQLI شناخته می شود، یک بردار حمله رایج است که از کد SQL مخرب برای دستکاری پایگاه داده back-end و دسترسی به اطلاعات آن استفاده می‌کند. این اطلاعات ممکن است شامل انواع مختلف باشد، از جمله داده‌های حساس شرکت، لیست کاربران یا جزئیات مشتری خصوصی.

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

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

در حالی که این بردار را می توان برای حمله به هر پایگاه داده SQL استفاده کرد، وب سایت ها متداول ترین اهداف هستند.

 

  • پرس و جوهای SQL چیست؟

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

یک کوئری معمولی پایگاه داده SQL eStore ممکن است به شکل زیر باشد:

SELECT Itemname, ItemDescription

از مورد

WHERE ItemNumber = ItemNumber

از این طریق، برنامه وب یک کوئری رشته ای ایجاد می کند که به عنوان یک دستور SQL به پایگاه داده ارسال می شود:

sql_query = “

SELECT Itemname, ItemDescription

از مورد

WHERE ItemNumber = ” & Request.QueryString (“ItemID”)

سپس یک ورودی ارائه شده توسط کاربر http://www.estore.com/items/items.asp?itemid=999 می تواند پرس و جوی SQL زیر را ایجاد کند:

SELECT Itemname, ItemDescription

از مورد

WHERE شماره مورد = 999

همانطور که می توانید از موارد فوق استنتاج کنید، این پرس و جو نام و توضیحات مورد شماره 999 را ارائه می دهد.

Pooye Content SQL 14011244 00 02 min

  • انواع تزریق SQL

تزریق های SQL معمولاً در سه دسته قرار می گیرند: SQLi درون باند (کلاسیک)، SQLi استنتاجی (کور) و SQLi خارج از باند. شما می توانید انواع تزریق SQL را بر اساس روش هایی که برای دسترسی به داده های باطن استفاده می کنند و پتانسیل آسیب آنها طبقه بندی کنید.

  • SQLi درون باند

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

  1. SQLi مبتنی بر خطا: مهاجم اقداماتی را انجام می دهد که باعث می شود پایگاه داده پیام های خطا تولید کند. مهاجم می تواند به طور بالقوه از داده های ارائه شده توسط این پیام های خطا برای جمع آوری اطلاعات در مورد ساختار پایگاه داده استفاده کند.
  2. SQLi مبتنی بر اتحادیه – این تکنیک از اپراتور UNION SQL بهره می برد که چندین دستور انتخابی تولید شده توسط پایگاه داده را برای دریافت یک پاسخ HTTP ترکیب می کند. این پاسخ ممکن است حاوی داده هایی باشد که مهاجم می تواند از آنها استفاده کند.
  • SQLi استنتاجی (کور)

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

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

  1. Boolean – این مهاجم یک پرس و جوی SQL را به پایگاه داده می فرستد و از برنامه می خواهد نتیجه را برگرداند. بسته به درست یا نادرست بودن پرس و جو، نتیجه متفاوت خواهد بود. بر اساس نتیجه، اطلاعات درون پاسخ HTTP تغییر می کند یا بدون تغییر باقی می ماند. سپس مهاجم می تواند بررسی کند که آیا پیام یک نتیجه درست یا نادرست ایجاد کرده است.
  2. مهاجم مبتنی بر زمان یک پرس و جوی SQL را به پایگاه داده ارسال می کند، که باعث می شود پایگاه داده (برای مدتی در چند ثانیه) قبل از اینکه بتواند واکنش نشان دهد منتظر بماند. مهاجم می تواند از زمانی که پایگاه داده پاسخ می دهد، درست یا نادرست بودن یک پرس و جو را ببیند. بر اساس نتیجه، یک پاسخ HTTP بلافاصله یا پس از یک دوره انتظار ایجاد می شود. بنابراین مهاجم می تواند بدون اتکا به داده های پایگاه داده متوجه شود که آیا پیامی که استفاده کرده است درست یا نادرست است.
  • SQLi خارج از باند

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

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

Pooye Content SQL 14011244 00 03 min

  • مثال تزریق SQL

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

برای مثال، ورودی فوق الذکر که اطلاعات یک محصول خاص را می کشد، می تواند برای خواندن http://www.estore.com/items/items.asp?itemid=999 یا 1=1 تغییر یابد.

در نتیجه، کوئری SQL مربوطه به شکل زیر است:

SELECT Itemname, ItemDescription

از موارد

WHERE شماره مورد = 999 یا 1 = 1

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

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

به عنوان مثال، این ورودی http://www.estore.com/items/iteams.asp?itemid=999; DROP TABLE کاربران پرس و جوی SQL زیر را ایجاد می کنند:

SELECT Itemname, ItemDescription

از موارد

WHERE شماره مورد = 999; کاربران جدول را رها کنید

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

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

برای مثال، ورودی http://www.estore.com/items/items.asp?itemid=999 UNION SELECT user-name, password FROM USERS عبارت SQL زیر را ایجاد می کند:

SELECT Itemname, ItemDescription

از موارد

WHERE ItemID = ‘999’ UNION SELECT نام کاربری، رمز عبور از کاربران;

با استفاده از عبارت UNION SELECT، این درخواست برای نام و توضیحات مورد 999 را با دیگری ترکیب می کند که نام و رمز عبور را برای هر کاربر در پایگاه داده می گیرد.

Pooye Content SQL 14011244 00 04 min

  • تزریق SQL همراه با اجرای فرمان سیستم عامل: حمله Accellion

Accellion، سازنده File Transfer Appliance (FTA)، یک دستگاه شبکه است که به طور گسترده در سازمان ها در سراسر جهان مستقر شده و برای جابجایی فایل های بزرگ و حساس استفاده می شود. این محصول بیش از 20 سال قدمت دارد و اکنون به پایان عمر خود رسیده است.

FTA موضوع یک حمله منحصر به فرد و بسیار پیچیده بود که ترکیبی از تزریق SQL با اجرای فرمان سیستم عامل بود. کارشناسان گمانه زنی می کنند که حمله Accellion توسط هکرهایی با ارتباط با گروه جرایم مالی FIN11 و گروه باج افزار Clop انجام شده است.

این حمله نشان می دهد که تزریق SQL فقط حمله ای نیست که بر برنامه های کاربردی وب یا سرویس های وب تأثیر می گذارد، بلکه می تواند برای به خطر انداختن سیستم های Back-end و استخراج داده ها نیز مورد استفاده قرار گیرد.

  • چه کسی تحت تأثیر این حمله قرار می گیرد؟

سوء استفاده Accellion یک حمله زنجیره تامین است که بر سازمان های متعددی که دستگاه FTA را مستقر کرده بودند، تحت تاثیر قرار داد. مثلا بانک رزرو نیوزلند، ایالت واشنگتن، کمیسیون اوراق بهادار و سرمایه گذاری استرالیا، غول مخابراتی سینگتل، و سازنده نرم افزارهای امنیتی Qualys، و همچنین تعداد زیادی دیگر بودند.

  • جریان حمله شتاب

بر اساس گزارشی که توسط Accellion تهیه شده است، ترکیب SQLi و حمله اجرای دستور به شرح زیر عمل می کند:

  1. مهاجمان برای دسترسی html، SQL Injection را اجرا کردند و کلیدهای رمزگذاری را از پایگاه داده Accellion FTA بازیابی کردند.
  2. مهاجمان از کلیدها برای تولید توکن های معتبر استفاده کردند و از این نشانه ها برای دسترسی به فایل های اضافی استفاده کردند.
  3. مهاجمان از نقص اجرای فرمان سیستم عامل در فایل php سوء استفاده کردند و به آنها اجازه می داد دستورات خود را اجرا کنند.
  4. مهاجمان یک پوسته وب در مسیر سرور /home/seos/courier/oauth.api ایجاد کردند.
  5. با استفاده از این پوسته وب، آنها یک پوسته وب سفارشی و با ویژگی های کامل را روی دیسک آپلود کردند که شامل ابزار بسیار سفارشی شده برای استخراج داده ها از سیستم Accellion بود. محققان این پوسته را DEWMODE نامیدند.
  6. با استفاده از DEWMODE، مهاجمان فهرستی از فایل های موجود را از پایگاه داده MySQL در سیستم Accellion FTA استخراج کردند و فایل ها و ابرداده های آنها را در یک صفحه HTML فهرست کردند.
  7. مهاجمان درخواست های دانلود فایل را که شامل درخواست هایی به مؤلفه DEWMODE بود، با پارامترهای URL رمزگذاری شده و رمزگذاری شده انجام دادند.
  8. DEWMODE می تواند این درخواست ها را بپذیرد و سپس درخواست های دانلود را از لاگ های وب FTA حذف کند.

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

Pooye Content SQL 14011244 00 05 min

  • پیشگیری و کاهش SQLI

چندین راه موثر برای جلوگیری از وقوع حملات SQLI و همچنین محافظت در برابر آنها در صورت وقوع، وجود دارد.

مرحله اول اعتبارسنجی ورود است، که تمرین نوشتن کدی است که می تواند ورودهای نا معتبر کاربر را شناسایی کند.

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

به همین دلیل، یک فایروال برنامه کاربردی وب (WAF) معمولاً برای فیلتر کردن SQLI و همچنین سایر تهدیدات آنلاین استفاده می شود. برای انجام این کار، یک WAF معمولاً به لیستی بزرگ و دائماً به روز شده از امضاهایی که با دقت ساخته شده است، متکی است که به آنها اجازه می دهد تا درخواست های SQL مخرب را با جراحی حذف کند. معمولاً، چنین فهرستی دارای امضاهایی برای رسیدگی به بردارهای حمله خاص است و به طور منظم برای معرفی قوانین مسدودسازی برای آسیب پذیری های تازه کشف شده وصله می شود.

فایروال های کاربردی وب مدرن نیز اغلب با راه حل های امنیتی دیگر ادغام می شوند. یک WAF می تواند اطلاعات اضافی را دریافت کند که قابلیت های امنیتی آن را بیشتر می کند.

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

 

  • برای مطالعه مقاله “فضای مجازی و تهدیدات امنیتی آن” بر روی اینجا کلیک کنید.