در حال حاضر، حدود ۲۰۰ میلیون وبسایت فعال وجود دارد و تعداد بسیار کمی از آنها فقط از صفحات HTML ایستا که در سالهای اولیه اینترنت بسیار رایج بودند تشکیل شدهاند. اکثر سایتهای مدرن با کمک برنامههای وب پیچیده و پایگاههای داده، حجم زیادی از اطلاعات حساس را مدیریت میکنند.
با این حال، ما مطمئن هستیم که اشتباه نمیکنیم اگر بگوییم بسیاری از صاحبان وبسایتها کاملاً از چیستی SQL Injection (یا SQLi) آگاه نیستند.
هدف راهنمای امروز ما رفع این مشکل است.
وضعیت امنیت سایبری
چشمانداز امنیت سایبری مدرن بسیار پیچیده است. دامنه حملات به وبسایتها گستردهتر از همیشه است و با توجه به اینکه بیش از ۶۰٪ جمعیت جهان اکنون به اینترنت دسترسی دارند، تعداد اهداف نیز بیشتر شده است.
به عنوان یک صاحب وبسایت، اولویت اصلی شما باید امنیت برنامه وب شما باشد. شاید بخواهید نظر سازمانی به نام OWASP را بشنوید. OWASP مخفف Open Web Application Security Project است و یک انجمن آنلاین متشکل از داوطلبان و متخصصانی است که در کمک به مدیران وبسایت برای حفظ امنیت پروژههایشان تخصص دارند.
هر سال، کارشناسان OWASP رایجترین تهدیداتی را که مدیران باید مراقب آنها باشند رتبهبندی میکنند و برای مدتی طولانی، تزریق کد در صدر این لیست قرار داشته است.
به دلیل فناوری مورد استفاده اکثر وبسایتهای مدرن، SQLi به مراتب محبوبترین نوع تزریق کد امروزی است. طبق گفته Akamai، یک شرکت امنیتی، نزدیک به دو سوم تمام حملات به برنامههای وب شامل تزریقهای SQL است.
SQLi قطعاً تهدیدی نیست که باید دست کم گرفته شود، اما چه چیزی آن را اینقدر منحصر به فرد میکند؟
SQL Injections چیست؟
وقتی کاربران نهایی با یک وبسایت تعامل میکنند، مجموعهای از فایلهای متنی و رسانهای را میبینند که روی صفحه نمایش مرتب و نمایش داده میشوند.
اما پشت صحنه اتفاقات بیشتری در حال رخ دادن است.
بر اساس ورودی کاربر، برنامه وب پرس و جوهای پایگاه داده را اجرا میکند تا به منابع مناسب دسترسی پیدا کند و محتوای صحیح را نمایش دهد. به عنوان مثال، پس از وارد کردن اطلاعات ورود و زدن دکمه ورود، برنامه وب نام کاربری و رمز عبور شما را میگیرد و از پایگاه داده میپرسد که آیا آنها صحیح هستند یا خیر. اگر این مورد صحیح باشد – به شما اجازه ورود به پروفایل خود داده میشود.
SQL (مخفف Structured Query Language) زبان برنامهنویسی است که این ارتباط را تسهیل میکند. برنامه وب از آن برای ایجاد پرس و جوهای پایگاه داده بر اساس ورودی کاربر استفاده میکند.
در یک سناریوی تزریق SQL، مهاجم پرس و جوهای SQL را اصلاح میکند تا پاسخ خاصی از پایگاه داده دریافت کند. با استفاده از پرس و جوهای مخرب، آنها میتوانند دسترسی غیرمجاز به دادههای حساس پیدا کنند یا یکپارچگی سیستم شما را به خطر بیندازند.
تزریق SQL به عنوان یک بردار حمله در سال ۱۹۹۸ کشف شد، با این حال، طبق گفته Acunetix، حدود ۸٪ از وبسایتهای مدرن هنوز در برابر آن آسیبپذیر هستند. صاحبان چنین وبسایتهایی باید پیکربندی خود را بهبود بخشند زیرا یک حمله SQLi موفق میتواند خسارات زیادی به بار آورد.
دسترسی غیرمجاز به اطلاعات حساس مانند اطلاعات ورود، جزئیات پرداخت و دادههای شخصی به تنهایی میتواند برای هر کسب و کار آنلاین فاجعهبار باشد. علاوه بر این، یک تزریق SQL موفق میتواند درهای پشتی را برای تسهیل یک حمله پیچیده علیه کل سازمان باز کند.
چگونه تزریقهای SQL کار میکنند؟
برخلاف سایر اشکال جرائم سایبری، ابزارهای تزریق SQL به راحتی در انجمنها و بازارهای هک زیرزمینی در دسترس نیستند. گزینههای خودکارسازی این فرآیند بسیار محدود است و مهاجمان به سطح نسبتاً بالایی از مهارتهای فنی نیاز دارند. حداقل، هکر باید درک کند که پرس و جوهای SQL چگونه کار میکنند.
ابتدا، مهاجمان هدف خود را شناسایی میکنند. خوشبختانه، از آنجایی که این تهدید بسیار شناخته شده است، برنامههای وب مدرن معمولاً با نوعی محافظت داخلی در برابر SQLi همراه هستند. همچنین ابزارها و بهترین شیوههای صنعتی برای توسعهدهندگانی که وبسایتها را از ابتدا میسازند وجود دارد.
متأسفانه، عدم استانداردسازی و مدیریت ضعیف وصلهها به این معنی است که وبسایتهای آسیبپذیر در برابر SQLi هنوز وجود دارند. اسکنرهای آسیبپذیری مدرن میتوانند آنها را به سرعت شناسایی کنند.
پرس و جوهایی که مهاجمان طراحی میکنند به نوع پایگاه داده و سیستم مدیریت پایگاه داده بستگی دارد. حرکت بعدی جمعآوری اطلاعات در مورد هدف است.
در نهایت، تزریق واقعی آغاز میشود. برخی از حملات SQLi بر تغییرات در درخواستهای HTTP خاص متکی هستند، در حالی که در موارد دیگر، مهاجمان از فرمهای مبتنی بر وب (مانند صفحات ورود یا نوارهای جستجو) برای اصلاح پرس و جوهای SQL استفاده میکنند.
به عنوان مثال، یک هکر میتواند به صورت تئوری از فرم ورود یک وبسایت برای دستیابی به امتیازات مدیر بدون دانستن رمز عبور مدیر استفاده کند. اینگونه کار میکند:
معمولاً، وقتی مدیر وارد سیستم میشود، پرس و جوی SQL که فرم ورود ایجاد میکند به این شکل است:
SELECT * FROM members WHERE username = ‘admin’ AND password = ‘[رمز عبور مدیر]’
اگر مهاجم “admin’–” را در فیلد نام کاربری وارد کند و فیلد رمز عبور را خالی بگذارد، پرس و جو به این شکل خواهد بود:
SELECT * FROM members WHERE username = ‘admin’–‘ AND password = ”
‘– که بلافاصله بعد از نام کاربری مدیر قرار گرفته، بقیه پرس و جو را باطل میکند، به این معنی که پایگاه داده اصلاً بررسی نمیکند که آیا چیزی در فیلد رمز عبور وجود دارد یا خیر.
در عوض، به سادگی مهاجم را به عنوان مدیر وارد سیستم میکند و اینجاست که کابوس شروع میشود…
انواع تزریقهای SQL
بسته به نتایجی که به دست میآورند، میتوانید چندین نوع مختلف از تزریقهای SQL را شناسایی کنید:
تزریقهای SQL بررسی پایگاه داده – این اغلب اولین قدم در لیست کارهای مهاجمان پس از شناسایی یک هدف مناسب است. آنها از یک پرس و جوی SQL ساخته شده برای به دست آوردن اطلاعات خاص پایگاه داده استفاده میکنند که در مراحل بعدی حمله به آنها کمک میکند.
تزریقهای SQL بازیابی دادههای پنهان – این نوع تزریق اطلاعاتی را آشکار میکند که در غیر این صورت برای مهاجم غیرقابل دسترسی خواهد بود. به عنوان مثال، یک تغییر ساده در درخواست HTTP میتواند محصولات فهرست نشده را در یک سایت تجارت الکترونیک آسیبپذیر به SQLi نمایش دهد.
حملات UNION SQLi – عملگر SQL UNION میتواند برای ترکیب چندین پرس و جوی SQL تحت یک دستور واحد استفاده شود. در نتیجه، با اصلاح یک پرس و جوی SQL، مهاجمان میتوانند برنامه وب را وادار کنند تا دادهها را از بخشهایی از پایگاه داده که معمولاً غیرقابل دسترسی میماند، استخراج کند. این ممکن است شامل اطلاعات ورود به سیستم باشد.
تزریقهای SQL برای تغییر منطق برنامه – توانایی دخالت در منطق برنامه وب، در را برای طیف متنوعی از فعالیتهای مجرمانه باز میکند. تکنیک دور زدن رمز عبور که در بخش قبلی توضیح دادیم نمونهای از این نوع حمله است.
تزریقهای SQL کور – تزریقهای SQL کور بسیار سختتر قابل اجرا هستند زیرا نتایج پرس و جوی SQL در پاسخ پایگاه داده قابل مشاهده نیست. با این حال، مهاجمان با مهارتهای فنی پیشرفته میتوانند از این حملات برای ایجاد تعامل شبکهای خارج از باند و تسهیل خروج سریع دادهها استفاده کنند.
چه کاری برای جلوگیری از حمله تزریق SQL باید انجام داد؟
تزریقهای SQL به هکرها این امکان را میدهند که از احراز هویت عبور کنند، دادهها را بدزدند، تغییر دهند و خراب کنند، کدهای دلخواه را اجرا کنند و حتی به سرور دسترسی پیدا کنند. معمولاً حملات نسبتاً سریع هستند و مدیران اغلب تا زمانی که خیلی دیر شده متوجه نمیشوند که مورد حمله قرار گرفتهاند.
به عبارت دیگر، بهتر است اقدامات لازم را برای جلوگیری از حمله SQLi انجام دهید تا اینکه پس از اینکه هکرها سایت شما را به خطر انداختند، سعی کنید همه چیز را دوباره سر جای خود قرار دهید.
پروژههای مختلف به تکنیکهای پیشگیری متفاوتی نیاز دارند.
به عنوان مثال، مدیرانی که از سیستمهای مدیریت محتوا (CMS) برای ساخت وبسایتهای خود استفاده میکنند، نیازی به اجرای دستی اقدامات خاص ضد SQLi ندارند. این وظیفه توسعهدهندگان CMS است که اطمینان حاصل کنند آسیبپذیریها به موقع برطرف میشوند. تنها چیزی که صاحبان وبسایت باید به آن فکر کنند، اعمال تمام بهروزرسانیها به محض انتشار آنهاست.
کار مدیران وبسایتهای با کد سفارشی کمی چالشبرانگیزتر است. هیچ لیستی از اقدامات تنظیم و فراموش کردن که تهدید را کاملاً از بین ببرد وجود ندارد. مراحل دقیقی که برای رفع یک آسیبپذیری نیاز دارید به عواملی مانند زبان برنامهنویسی مورد استفاده، موتور پایگاه داده SQL و نوع آسیبپذیری SQL که سعی در رفع آن دارید بستگی دارد.
با این حال، چند نکته وجود دارد که میتوانید برای محافظت خوب از وبسایت خود دنبال کنید:
ممیزیهای امنیتی منظم انجام دهید – اسکنرهای آسیبپذیری میتوانند حفرههای احتمالی SQLi را در سایت شما با سهولت نسبی تشخیص دهند و شما هیچ بهانهای برای استفاده نکردن از آنها ندارید. هر چه اسکنها مکررتر باشند، شانس یافتن و رفع آسیبپذیریهای SQLi قبل از اینکه خیلی دیر شود بیشتر است.
اطمینان حاصل کنید که برای تهدید آماده هستید – اگر شما یک سازمان بزرگ هستید که یک وبسایت بزرگ را نگهداری میکنید، همه، از متخصص کنترل کیفیت گرفته تا رهبر توسعه، باید از خطراتی که تزریقهای SQL ایجاد میکنند آگاه باشند. بهروزرسانی منظم کارکنان خود در مورد حملات بالقوه جدید نیز کلیدی برای اطمینان از اتخاذ اقدامات مناسب است.
تمام ورودیها را پاکسازی کنید – هرگز از هیچ ورودی مستقیماً استفاده نکنید، صرف نظر از اینکه از یک کاربر احراز هویت شده یا عمومی میآید. برنامه وب شما همچنین باید مکانیزمهایی داشته باشد که درخواستها را پاکسازی کرده و عناصر کد مخرب احتمالی را حذف کند.
از مکانیزمهای آزمایش شده و تأیید شده استفاده کنید – مکانیزمهای خاص زبان برای محافظت از برنامهها در برابر تزریقهای SQL وجود دارد. تحقیق کنید و ببینید کدام یک بهترین محافظت را ارائه میدهند. استفاده از آنها به جای توسعه دستی تکنیکهای امنیتی خودتان گزینه بسیار بهتری است.
مطلع بمانید و از آخرین ابزارها استفاده کنید – حملات SQLi از تکامل باز نمیایستند و مکانیزمهایی که ما برای محافظت از وبسایتها استفاده میکنیم نیز همینطور. اگر سایت خود را پشت یک تکنولوژی قدیمی پنهان کنید، خطر جدی آسیبپذیری در برابر آخرین حملات تزریق SQL را به جان میخرید.
یک فایروال برنامه وب مستقر کنید – یک فایروال برنامه وب از قوانین سختگیرانه برای بررسی و فیلتر کردن تبادلات HTTP استفاده میکند. درخواستهایی که الگوهای SQLi را نشان میدهند مسدود میکند و یکی از سادهترین راههای محافظت از وبسایت شما در برابر طیف گستردهای از حملات برنامه وب است.
نقش ارائهدهنده میزبانی شما
تزریقهای SQL برنامههای وب را هدف قرار میدهند – حوزهای که به طور دقیق، اولویت شرکت میزبانی که انتخاب کردهاید نیست. با این حال، یک میزبان خوب بیش از یک ارائهدهنده خدمات صرف است. این یک شریک است که به شما در ادامه کسب و کار آنلاین خود کمک میکند و به عنوان چنین، هر کاری انجام خواهد داد تا اطمینان حاصل کند سایت شما تا حد امکان خوب محافظت شده است.
به عنوان مثال، اگر پروژه شما بر اساس یک CMS است، احتمالاً یک نصب کننده یک کلیکی خواهید داشت. علاوه بر راهاندازی برنامههایی مانند وردپرس در چند ثانیه، این ابزار ویژگیهای بهروزرسانی خودکار را هم برای هسته و هم برای افزونهها دارد.
به این ترتیب، بعید است که هیچ وصله امنیتی حیاتی را از دست بدهید.
یک میزبان خوب به شما در استقرار یک فایروال برنامه وب کمک خواهد کرد و همچنین یک سیستم نظارتی را شامل خواهد شد که کل حساب میزبانی شما را برای رفتارهای مشکوک اسکن میکند و به محض تشخیص مشکلی به شما اطلاع میدهد.
نتیجهگیری
اگرچه تزریقهای SQL برای اولین بار بیش از بیست سال پیش ظاهر شدند، این تهدید همچنان به اندازه گذشته مرتبط است. در ماه مه ۲۰۲۰، وزارت دادگستری ایالات متحده یک هکر را به اتهام استفاده از تزریقهای SQL برای سرقت هزاران جزئیات کارت اعتباری و سایر اطلاعات شخصی متهم کرد. چند ماه بعد، هکرها از یک حمله SQLi برای سرقت بیش از ۸ میلیون رکورد از سایت منابع گرافیکی آنلاین Freepik استفاده کردند.
این یک تهدید جدی است، اما خبر خوب این است که متخصصان امنیتی در طول سالها اطلاعات زیادی در مورد تزریقهای SQL کسب کردهاند. بر اساس این دانش، ابزارها و سیاستهای زیادی وجود دارد که به طور موثر حملات را متوقف میکنند. این به عهده شماست که مناسبترین را انتخاب کنید.