شاید نام این بردار حمله خطرناک را شنیده باشید، اما در واقع تزریق فرمان چیست؟ چگونه کار می کنند و چگونه می توانید از خود محافظت کنید؟
حملات تزریقی یکی از رایجترین روشهایی است که هکرها به سیستمها حمله میکنند زیرا به آنها اجازه میدهد به راحتی دستورات و کدها را اجرا کنند. تزریق فرمان سیستم عامل یکی از این حملات تزریقی است که باید از آن آگاه باشید. این یک آسیب پذیری را مورد سوء استفاده قرار می دهد که مدیران سیستم، پایگاه داده و برنامه های کاربردی وب باید آن را بسیار جدی بگیرند.
بنابراین حمله تزریق فرمان سیستم عامل چیست؟
تعریف OS Command Injection
تزریق فرمان سیستم عامل به مهاجم مخرب اجازه می دهد تا با سوء استفاده از یک سیستم عامل، برنامه، برنامه، پایگاه داده یا افزونه آسیب پذیر، هر دستوری را که می خواهد اجرا کند. زمانی اتفاق میافتد که برنامهها نتوانند به درستی پارامترهایی را که هنگام فراخوانی توابع پوسته مانند system() یا exec() برای اجرای دستورات سیستم استفاده میکنند، اعتبارسنجی و پاکسازی کنند.
برای درک بهتر تشخیص و بهره برداری از تزریق فرمان سیستم عامل، بررسی این موضوع در سه دسته اصلی مفید است.
1. تزریق دستور مستقیم
این را از دیدگاه مهاجم در نظر بگیرید. مهاجم سایبری متوجه می شود که یک برنامه در حال اجرای یک فرمان سیستمی خاص است. آنها دستور مخرب را به عنوان بخشی از آرگومان های مورد انتظار وارد می کنند. سپس برنامه دستور اصلی را اجرا می کند و سپس دستور مخرب را اجرا می کند.
مهاجم از روش های مختلفی برای یافتن چنین آسیب پذیری استفاده می کند. ساده ترین روش برای مبارزه با این امر این است که سیستم عامل را همیشه به روز نگه دارید. شما می توانید این کار را با همکاری یک تیم توانمند IT انجام دهید. باید از همه برنامهها و برنامههایی که ممکن است باعث آسیبپذیری سیستم شوند اجتناب کنید زیرا مهاجم ممکن است مستقیماً کد را وارد کند و آسیب غیرقابل پیشبینی است.
2. تزریق دستور غیر مستقیم
در مورد تزریق دستور غیر مستقیم، مهاجم به طور مستقیم کد یا دستوری را به سیستم وارد نمی کند. برای این کار از یک اپلیکیشن یا برنامه آسیب پذیر در سیستم استفاده می کنند. این آسیب پذیری پلی بین مهاجم و سیستم عامل ایجاد می کند. با بهره گیری از این ارتباط، هدف مهاجم اجرای کدها و دستورات مخرب بر روی هدف است.
مهاجم یک سری آزمایش را برای شناسایی این آسیب پذیری انجام می دهد و متوجه می شود که نرم افزار از داده های یک منبع خارجی مانند یک فایل یا یک متغیر محیطی برای فراخوانی یک فرمان سیستم استفاده می کند. سپس مهاجم محتوای منبع خارجی را تغییر می دهد، بنابراین اکنون حاوی یک دستور مخرب است. سپس در کنار دستورالعمل های برنامه اصلی اجرا می شود.
تفاوت اصلی بین تزریق دستور مستقیم و غیرمستقیم این است که مهاجم از یک برنامه کاربردی برای برقراری ارتباط با سیستم عامل استفاده می کند. اما هیچ تفاوت واقعی بین آسیبی که دو نوع تزریق می توانند ایجاد کنند وجود ندارد، بنابراین هر دو باید مورد توجه قرار گیرند. به همین دلیل باید مطمئن شوید که برنامه های موجود در شبکه شما قابل اعتماد و ضروری هستند. برنامه هایی را که به آنها اعتماد ندارید در دستگاه خود نگه ندارید.
3. تزریق دستور کور
نوع دیگری از تزریق فرمان سیستم عامل، تزریق دستور کور است. این به این معنی است که برنامه هیچ خروجی از دستور در پاسخ HTTP برنمیگرداند. مهاجم از تکنیک های مختلفی مانند تاخیر زمانی و مسیریابی خروجی برای سوء استفاده از این آسیب پذیری استفاده می کند.
تصور کنید که در حال جستجوی یک وب سایت هستید و مقدار “/?search=id” در URL با هر جستجو تغییر می کند. مقدار شناسه در اینجا می تواند یک صفحه کاربر، آدرس عکس محصول یا هر صفحه ای در سایت باشد. مهاجم می تواند با تغییر مقدار id نتایج متفاوتی به دست آورد. انجام این کار به صورت دستی دشوار است، اما ابزارهایی مانند Burp Suite برای این کار وجود دارد. بعداً، مهاجم یک چیز عجیب و غریب را در یک صفحه کشف میکند: ممکن است یک مقدار شناسه بازگردانده شود که حتی اگر هیچ نتیجهای را نشان نداد، پاسخ وبسایت 200 بود که نشان میدهد همه چیز خوب است. در چنین حالتی، مهاجم می تواند از تزریق دستور کور استفاده کند.
تکنیکی مانند تاخیر زمانی بسیار مفید است. از آنجایی که صفحه ای که باز می شود خالی خواهد بود، هیچ پاسخی دریافت نخواهید کرد، اما همچنان ممکن است بتوانید اطلاعاتی در مورد آنچه در پایگاه داده ذخیره شده است را بر اساس تأخیرهای زمانی جمع آوری کنید که فقط در صورت وجود کاراکتر خاصی صفحه را بارگیری می کند. این خیلی وقت گیر است تا یک فرآیند دستی باشد، اما ابزارهای زیادی می توانند حمله را خودکار کنند.
نمونه ای از سناریوی حمله
بیایید همه موارد فوق را از طریق یک مثال مرور کنیم. تصور کنید یک اپلیکیشن خرید دارید که به کاربر امکان می دهد ببیند محصولات موجود هستند یا خیر. بیایید از یک URL مانند آدرس زیر برای دسترسی به همه این اطلاعات استفاده کنیم:
example_unsafe_store.com/stockStatus?productID=245&storeID=
تصور کنید شناسههای محصول و فروشگاه را بهعنوان آرگومان به یک فرمان پوسته، مانند “stockstat.pl 245 38” منتقل کنید، زیرا برنامه باید برای رکوردهای قدیمی پرس و جو کند. اگر توسعهدهنده هیچ اقدامی در برابر تزریق دستور انجام ندهد، مهاجم میتواند یک ورودی برای اجرای دستور مورد نظر ارسال کند:
& echo this_a_harmful_command &
اگر این ورودی در پارامتر productID قرار گیرد، دستور اجرا شده توسط برنامه به صورت زیر خواهد بود:
stockstat.pl & echo this_a_harmful_command & 38
دستور echo یک روش مفید برای تشخیص تزریق فرمان و همچنین اطمینان از ظاهر شدن رشته داده شده در خروجی است. کاراکتر “&” جداکننده دستورات پوسته است، بنابراین آنچه اجرا می شود سه دستور جداگانه است که یکی پس از دیگری اجرا می شود. در نتیجه خروجی برگشتی به کاربر به صورت زیر خواهد بود:
Error -productID not found
this_a_harmful_command
38: command not found
در اینجا، فایل “stockstat.pl” دستور را بدون آرگومان هایی که انتظار داشت اجرا کرد و بنابراین یک پیغام خطا برگرداند. سپس دستور اکو تزریق شده توسط مهاجم اجرا شد و مهاجم عبارتی را که وارد کرده بود روی صفحه دید. آرگومان اصلی، “38” به عنوان یک فرمان خطا اجرا شد.
نحوه محافظت در برابر تزریق فرمان سیستم عامل
اگرچه تزریق فرمان یک بردار حمله قدرتمند و مضر است، اما ترفندهایی برای اجتناب از آن وجود دارد. منطق پشت حملات تزریق فرمان سیستم عامل، اجرای دستورات خاص سیستم عامل با استفاده از یک برنامه کاربردی است. شما باید جلوی این اتفاق را بگیرید. مواردی وجود دارد که باید در نظر گرفته شود:
- شما باید از اجرای کد هر کسی که به برنامه دسترسی دارد جلوگیری کنید.
- شما باید از هر کسی که به برنامه دسترسی دارد از درخواست به سرور با عبارات نحوی جلوگیری کنید.
- شما باید عباراتی را که هر کسی که به آن دسترسی دارد درخواست می کند رمزگذاری کنید.
بیایید هر مورد را یکی یکی مرور کنیم. یک راه حل خوب برای اولین مشکل این است که از روش لیست سفید استفاده کنید تا از اجرای کدها یا درخواست های خاص توسط افرادی که به لایه برنامه دسترسی دارند جلوگیری کنید. هر کسی را که شناسایی نکنید قادر به اجرای کد نخواهد بود.
راه حل دوم این است که برخی از عبارات متنی استفاده شده در دستورات را نپذیریم. کاربر فقط می تواند مقادیر عددی را وارد کند. این را همراه با روش لیست سفید اعمال کنید و سیستم بسیار امن تری خواهید داشت.
مورد سوم در مورد رمزگذاری پارامترهای نحوی مانند کاراکتر وارد شده و فاصله ها است. در نتیجه، روش لیست سفید، بررسی نحوی ورودیها و رمزگذاری ورودیها باید از شما در برابر تزریق فرمان سیستم عامل محافظت کند.
حملات تزریقی هر روز پیشرفت می کنند
روشهای تزریق زیادی با تکنیکهای مختلف حمله، مانند دستور OS، SQL، SSI و XPath وجود دارد. تلاش برای جلوگیری از هر یک از آنها آسان نیست. به خاطر داشته باشید که همه این حملات هر روز تکامل مییابند و از آسیبپذیریهای کوچکی که توسعهدهندگان نادیده گرفتهاند استفاده میکنند. به همین دلیل بسیار مهم است که همیشه بهروز باشید و تحولات جاری در دنیای امنیت سایبری را از نزدیک دنبال کنید.