روابط عمومی شرکت ایدکو (توزیع کننده محصولات کسپرسکی در ایران)؛ تزریق کد- که اغلب به آن اجرای کد ریموت (RCE) میگویند- نوعی حمله از سوی مهاجمینی است که قادرند یک کد آلوده را به اپلیکیشنی تزریق و اعمال کنند: یک حملهی تزریقی. این کدِ بیگانه قادر است به امنیت اطلاعات رخنه کرده و پایگاه اطلاعاتی یا مالکیتهای خصوصی را دچار نقص نماید. این نوع حملات در بسیاری از موارد میتوانند بخش احراز هویت را دور زده و معمولاً با آن دسته از اپلیکیشنهایی سر و کار دارند که برای اجرا به دادهی کاربری نیاز دارند.
به طور کلی، اگر این کد بدون عبور از مرحلهی اولیهی تأییدِ اعتبار اجرا شود، اپلیکیشنها آسیبپذیرتر نیز خواهند شد. نمونهی ساده از یک کد آسیبپذیر را در زیر نشان داده ایم.
در نمونهی فوق میبینیم که پیج اطلاعاتی PHP آسیب پذیر است و چنانچه کد ()URLhttp://example.com/?code=phpinfo اجرا گردد، نمایش داده خواهد شد.
این حقیقت را نمیتوان انکار کرد که در جهان آنلاینِ امروزی، تعامل کاربر با اپلیکیشنها بیش از هر زمان دیگری اهمیت دارد و از این رو، تزریق کد نیز بیش از قبل رشد کرده و تهدیدی جدی برای بسیاری از منابع آنلاین محسوب میشود.
انواع تزریق کد
عمدتاً چهار نوع تزریق کد وجود دارد: تزریق SQL، تزریق اسکریپت، تزریقِ شِل و تزریق دینامیک. هر چهار نوع مذکور قوانین اجرای یکسانی دارند: کد به اپلیکیشنها معرفیشده و در آنها اجرا میگردد؛ اما در این مقاله تمرکز خود را روی تزریقهای SQL و اسکریپت گذاشتهایم. با ما همراه باشید.
نحوهی عملکرد تزریقهای SQL
اگر تزریق از نوع SQL باشد، هدف حمله فاسد کردن پایگاه اطلاعاتی قانونی است؛ بطوریکه در فضای اطلاعاتی سر و گوش آب میدهد و دادههای غلط را در آن تزریق میکند. مهاجم ابتدا باید ورودی را در برنامهی کاربردی وبِ مورد نظر (داخلِ پرس وجوی SQL) قرار دهد. این روش تنها زمانی مؤثر است که SQL برنامهی کاربردی، ورودی کاربر را در خود داشته باشد. آنوقت است که پیلود (دستورِSQL آلوده) اجازهی ورود پیدا کرده و مأموریت خود را علیه سرور پایگاه داده شروع میکند.
شبهِکُدِ زیر، برنامهنویسیِ سمتِ سرور (side-server) است که میتواند نمونهی خوبی از یک تأییدیهی آسیبپذیر در مقابل تزریقهای SQL باشد.
مهاجم در کد بالا پیلودی را که دستور SQL (از سوی سرور پایگاه اطلاعات) را عوض میکند وارد مینماید. به عنوان مثال فیلدِ رمزعبور اینگونه خواهد بود:
password’ OR 1=1
این کار به طور اتوماتیک باعث میشود دستور زیر بر خلاف قواعد سرور پایگاه اطلاعاتی پیش رود:
SELECT id FROM users WHERE username=’username’ AND password=’password’ OR 1=1
تزریق SQL چه کارهایی میتواند انجام دهد؟
تزریق SQL از معمول ترین انواع تزریق است. با توجه به این موضوع که SQL زبانِ دستکاریِ اطلاعات ذخیرهشده در RDBMS (سیستمهای مدیریتی وابستهی پایگاه اطلاعاتی) است، با استفاده از حملهای که قادر باشد دستورهای SQL را بدهد و آنها را اجرا نیز بکند، براحتی میتوان به دادهها دسترسی پیدا کرده، آنها را دستکاری نموده و یا حتی از بین برد.
با این تزریق، مهاجم قادر است مرحلهی احراز هویت را دور زده، به تمامی اطلاعات ذخیرهشده در پایگاه اطلاعاتی دسترسی پیدا کرده و کل دادهها را دستکاری نماید. این تزریق همچنین میتواند باعث تغییر یا لغو تراکنشها نیز بشود.
چگونه جلوی تزریقهای SQL را بگیریم؟
چند روش برای کاهش میزان آسیبپذیری اپلیکیشنهایتان وجود دارد؛ اما پیش از شروع هر یک از این مراحل توصیه میشود حتیالامکان همهی دادههای کاربر-محور را آلوده تصور کرده و به هیچکس اعتماد نکنید و بعد راهکارهای زیر نیز در این راستا به شما کمک خواهند کرد:
- از SQL دینامیک استفاده نکنید. این بدان معنا میباشد که پرسجوهای پایگاه اطلاعاتی خود را بر پایهی
ورودی کاربر نسازید. در صورت لزوم، پیش از ساخت پرس وجو با اطلاعات ورودی کاربر، مقدارها را پاکسازی و اعتبارسنجی کرده و از آنها رد شوید.
- از فایروال استفاده کنید. فایروال برنامهی کاربردی وب (که یا نرم افزار یا اپمحور باشد) شما را در فیلتر دادههای آلوده کمک خواهد کرد.
- نرمافزار بهتری خریداری کنید. کدگذارهای نرمافزارهای با کیفیتتر، موظف به بررسی و رفع نواقصاند.
- رمزعبور و هر اطلاعات محرمانهی دیگر خود را پنهان و یا تکتک اجزای آن را درهمآمیزید تا قابل حفظ و شناسایی نباشند (این میتواند شامل رشتههای اتصال نیز بشود).
- از اتصال پایگاه اطلاعاتیتان به اکانتهای شخصی ادمین خودداری نمایید، مگر در مواقع لزوم.
تزریق اسکریپت
این آسیبپذیری امنیتی، تهدیدی است که به مهاجم اجازه میدهد تا از طریق مؤلفههای رابط کاربری، کد آلوده را مستقیماً به وبسایتهای دادهمحور تزریق کند. اغلب به این حمله Cross-Site Scripting یا XSS می گویند. تگهای <script>، <meta>، <html>، <body>، <embed>، <frame>، <frameset>، <img> بیش از بقیه مورد هدف تزریقهای اسکریپت قرار میگیرند.
چگونه از تزریقهای اسکریپت جلوگیری کنیم؟
روشهای جلوگیری از تزریقهای اسکریپت به کد برنامهنویسیای که استفاده میکنید بستگی دارند. به طور کلی این اقدامات شامل موارد زیر میشود:
- ورودی کاربر را با حذف محتوای مستعد آلودگی، تأیید و پاکسازی کرده و یا از آن رد شوید.
- هر رشتهی پرس وجو در URLها را پاک کنید.
- پیش از اجرا در سرور، هر نوع داده یا چینشی را تأیید و پاکسازی کنید.
نتیجهگیری
ساده بگوییم، پیشگیری بهتر از درمان است. با آپدیتهای جدیدی که در حوزهی فناوری پدیدار شدهاند باید منتظر تهدیدهای بیشتری برای سیستمهایمان باشیم. با این حال به منظور کنترل شرایط، باید جدیدترین پچها و بهروزرسانیها را داشته و همچنین برای دریافت راهکارهای امنیتی جدید، دائماً گوش به زنگ باشیم؛ بدینترتیب مهاجمین سختتر خواهند توانست با حملات مخربشان از ما یک قربانی بسازند.
منبع: کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکی، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکي نام دارد.