ساختار متداول و رایج معماری client-server در وب، سطح حملات هکرها را بسیار بزرگ میکند و باعث آسیبپذیری وبسایت و سرور در برابر سوء استفادههای مخرب میشود. اگر یک وبسایت به گونهای پیکربندی شود که برای ارتباط با محیط هاست، دستورات را مستقیماً به سیستم عامل ارسال کند، خطرات امنیتی به طرز قابل توجهی افزایش مییابد.
وب سایت ها برای استفاده از قابلیت های خاص ممکن است نیاز به تعامل با محیط shell سرور، فراخوانی دستورات در shell یا اسکریپت های خارجی داشته باشند. اگر پیکربندی سرور به صورت ایمن پیاده سازی نشود، به مهاجم اجازه می دهد تا متغیرهای ارتباطی را دستکاری کرده و با ارسال یک درخواست مخرب برای سیستم عامل، به سرور آسیب برساند. این نوع حمله تزریقی، معمولا با نام حملات Command Injection شناخته می شود.
تصویر(1)
نکته: محیط Shell سرور (server's shell environment) به محیط کاری سیستم عامل سرور اشاره دارد. Shell یا محیط کاری، اجازه اجرا و ارسال دستورات به سیستم عامل را میدهد. با استفاده از این رابط کاربری، میتوان دستورات سیستم عامل را اجرا و نتیجه را دریافت کرد.
حملات Command Injection یکی از مخرب ترین حملات سایبری است که هکرها همواره از آن استفاده می کنند. توانایی تعامل با سیستم عامل سرور، پتانسیل زیادی برای سو استفاده ایجاد میکند که بسیار فراتر از دسترسی وب سایت مورد نظر است. Command Injection می تواند آنقدر قدرتمند باشد که امکان پاکسازی کل سرور را به هکر بدهد و قربانی را وادار کند که کل زیرساخت را از ابتدا بازسازی نماید.
در این مقاله توضیح داده می شود که چگونه مهاجمان می توانند سیستم های دفاعی مابین محیط وب سایت و سرور را دور بزنند. همچنین می توانید نحوه به حداقل رساندن این نوع حملات سایبری را بیاموزید. قبل از اینکه وارد دنیای Command Injection شوید، ضمن معرفی عملکرد Shell، نحوه تعامل برنامه های وب با آن، توضیح داده می شود. این کار به شما کمک می کند تا متوجه شوید از چه ابزاری برای ارسال درخواست های مخرب به محیط سرور استفاده می گردد.
تصویر(2)
Shell سیستم عامل چیست؟
Shell نوع خاصی از برنامه است که یک رابط را برای تعامل با سیستم عامل در اختیار کاربران قرار می دهد. Shell به عنوان واسطه بین کاربر نهایی و سیستم عامل سرور عمل کرده و دستورات ارائه شده از طریق رابط خط فرمان (command line) را تفسیر می کند. Shell ها به کاربران و اپلیکیشنها اجازه می دهند تا با استفاده از دستورات تعریف شده درخواست ها را به سیستم عامل ارسال کنند. Shell در سیستم عامل معمولاً برای انجام کارهای مختلف مانند مدیریت فایل ها و مسیرها، نصب و پیکربندی سرویس های نرم افزاری و راه اندازی وب سایت ها و اپلیکیشنهای تحت وب، استفاده می شود. اغلب، وبسایتها برای ویرایش فایلها و انجام سایر کارها نیاز به فراخوانی دستورات از طریق Shell دارند.
چگونه وب سایت ها با سیستم عامل سرور تعامل دارند؟
وبسایتها و اپلیکیشنهای تحت وب یا به طور مشخص قابلیتهایی که ارائه میدهند، در یک محیط جداگانه اجرا میشوند. این محیط به طور کامل از بخشهای حساس سیستم عامل سرور جدا شده است. در حالی که برخی از تکنیکهای مخرب مانند directory traversal به مهاجمان اجازه میدهند تا از طریق مرورگر به مناطق محدود شده ای از سرور قربانی دسترسی پیدا کنند اما چندین لایه امنیتی وجود دارد که این کار را غیرممکن می کند. تمامی کدها معمولاً به document root وب سایت محدود می شوند (یک دایرکتوری ویژه در سرور که به فایل های وب سایت اختصاص داده شده است). این ویژگی همراه با مکانیسم حفاظتی سطح دسترسی فایل، تضمین میکند که عملیات وبسایت به دایرکتوری روت وبسایت محدود میشود و نمیتواند بر سایر قسمتهای سیستم تأثیر بگذارد.
توابع وب سایت نیز به امکانات ارائه شده توسط زبان برنامه نویسی محدود می شوند. برای تعامل با محیط سرور، وب سایت ها باید از توابع خاصی استفاده کنند که به عنوان پلی بین محیط موجود و سیستم عامل عمل خواهند کرد. معمولا توابع ()system و ()exec برای این کار استفاده می شوند.
توابع ()system و ()exec در برنامهنویسی، به شما امکان اجرای دستورات سیستم عامل را میدهند. با استفاده از این توابع می توانید دستورات سیستم عامل را از طریق برنامههای خود اجرا کنید. این توابع می توانند خطرات امنیتی جدی ایجاد کرده و وب سایت و سرور را در برابر حملات Command Injection آسیب پذیر کنند.
تصویر(3)
حملات Command Injection چیست؟
حملات Command Injection به مهاجمان امکان میدهد تا با تزریق دستورات Shell از طریق یک درخواست HTTP به وبسایت آسیبپذیر، کد دلخواه خود را در سیستم عامل سرور اجرا کنند. این نوع حمله در صورتی که وب سایت برای فعالسازی برخی قابلیتها از دستورات Shell بهره ببرد امکانپذیر است.
حملات Command Injection هنگامی رخ میدهند که فرد مهاجم قادر باشد دستورات اضافی را به Shell تزریق و کد مخرب را با یک درخواست معتبر ترکیب کند. با این کار هکر می تواند به اطلاعات حساس سرور دسترسی پیدا کرده، نرمافزار مخرب نصب کند یا اقدامات مخرب دیگری را در سرور انجام دهد.
حملات Command Injection چگونه کار می کند؟
برای انجام Command injection، مهاجم از کاراکترهای ویژه مانند «;»، «|» و «&&» استفاده می کند تا دستورات مخرب را به پارامترهای درخواست اضافه نماید. هنگامی که رشته های موردنظر به سرور ارسال می گردد، کاراکترهای خاص توسط Shell سیستم تفسیر می شوند و آن را مجبور می کنند دستورالعمل های ارائه شده را به یک سری درخواست های جداگانه تبدیل کند. به این ترتیب، درخواست مخرب هکر بهعنوان یک دستورالعمل مجزا اجرا میشود که در ظاهر به درخواست اصلی که توسط وبسایت آسیبپذیر جهت اجرا ارسال شده، ارتباطی ندارد.
علاوه بر این، هکرها میتوانند یک دستور shell اصلی را که توسط اسکریپت استفاده میشود، با کد مخربی که در فایلی همنام با دستور اصلی در سرور ذخیره شده است، جایگزین کنند. معمولاً، محیط Shell متغیری به نام PATH$ دارد که برای مشخص کردن منابعی استفاده میشود که Shell برای جستجوی دستورات خارجی از آنها استفاده میکند. با تغییر این متغیر، مهاجمان میتوانند برنامههای مخرب را در سرور اجرا کنند. به عبارت دیگر، آنها میتوانند برنامه های مخرب را به گونهای تغییر دهند که در سیستم عامل سرور اجرا شوند.
تصویر(4)
نمونه ای از حملات Command Injection
جهت انجام یک حمله Command injection، هکرها نقص های امنیتی موجود در توابع استفاده شده برای ارسال دستورالعمل ها به Shell سرور را هدف قرار می دهند. برای ایجاد و حذف فایل ها می توان از این قابلیت استفاده کرد.
برای مثال فرض کنید که یک وب سایت به کاربران اجازه آپلود تصاویر و تبدیل آنها به فرمت دیگری را می دهد. این برنامه تصویر آپلود شده را ذخیره، آن را تبدیل و سپس تصویر اصلی را حذف می کند. اگر برنامه برای تعیین نام تصویر (پس از تبدیل و حذف)، ورودی های کاربر را اعتبارسنجی نکند، مشکلاتی ایجاد میشود.
در مثال زیر، "imagename" نام تصویری است که باید حذف شود. هکر می تواند با استفاده از "&&" دستورات اضافی را اعمال کند که رشته را به دو بخش تقسیم خواهد کرد. بخش اول نشان دهنده نام واقعی فایل است که هیچ شبهه ای را ایجاد نمی کند. بنابراین Shell بخش دوم دستورالعمل ها را نیز اجرا خواهد کرد.
تصویر(5)
اگر کاربر سیستمی که Shell درخواست را از آن پذیرفته است مجوزهای کافی برای این عملیات را داشته باشد، دستورالعمل زیر این پتانسیل را دارد که تمام تصاویر تبدیل شده را که قبلاً توسط برنامه ذخیره شده اند، حذف کند.
rm -rf /home/images/converted
به همین دلیل، سطح دسترسی فایلها یکی از مهمترین مکانیسمهای امنیتی سمت سرور است که اگر به درستی اعمال شوند، میتوانند یک لایه دفاعی در برابر command injections و سایر حملات سایبری ارائه دهند.
البته، این یک مثال بسیار ساده می باشد و بعید است که چنین نقص امنیتی در وب سایتی وجود داشته باشد. با این حال، منطق آن، در مورد حملات Command injection مدرن صدق می کند. تنها چیزی که برای این نوع حمله لازم است، یافتن پیاده سازی ضعیف یک تابع متکی به دستورات Shell می باشد.
Command injection و تزریق کد چه تفاوتی با هم دارند؟
حملات Command Injection اغلب با تزریق کد، اشتباه گرفته می شود که نوع خطرناک دیگری از حمله در سطح application است. در حالی که هر دو متعلق به یک گروه از حملات هستند اما تفاوت های قابل توجهی بین این دو وجود دارد.
تزریق کد یک مفهوم کلی می باشد و به هر نوع حمله در سطح اپلیکیشن اشاره دارد که هکر را قادر می سازد کدهای مخرب را به یک وبسایت یا اپلیکیشن تحت وب تزریق کند. این امر معمولاً از طریق ضعفهایی مانند عدم اعتبارسنجی صحیح جهت ورود یا نقاط ضعف دیگر صورت میگیرد. تزریق کد شامل یک مجموعه گسترده از حملات مانند تزریق XSS، حملات file inclusion، SQL injections و سایر حملات مشابه میشود.
Command Injection شکلی پیشرفته از تزریق کد است. مهاجم به جای انجام اقدامات مضر علیه مفسر کد و سوء استفاده از عملکرد وب سایت قربانی، سیستم عامل سرور را هدف قرار می دهد و اقداماتی را علیه Shell سیستم انجام می دهد. حملات Command injection به هکرها اجازه خواهند دارد تا از محدوده وب سایت قربانی خارج شوند و به طور قابل توجهی دامنه آسیب خود را افزایش دهند.
پتانسیل تخریب این نوع دستورات، آنها را به خطرناک ترین نوع حملات به سبک تزریق تبدیل می کند. به همین دلیل است که قبل از اینکه هکرها فرصت استفاده از آنها را داشته باشند و کسب و کار شما را نابود کنند، با نحوه شناسایی و کاهش آسیب پذیری های Command injection در وب سایت آشنایی پیدا کنید.
نحوه شناسایی آسیب پذیری های Command injection
هسته وردپرس دارای یک چارچوب امنیتی قدرتمند است که به طور موثر از وب سایت ها در برابر حملات Command Injection و سایر حملات تزریق محافظت می کند. با این حال، گزینه های سفارشی سازی گسترده ای که این پلتفرم طراحی وب سایت ارائه می دهد، فضایی را برای ایجاد این آسیب پذیری ها در وب سایت های وردپرسی ایجاد می کند. حتی افزونه ها و قالب های معتبر وردپرس نیز ممکن است دارای نقص امنیتی باشند که می تواند وب سایت ها را در معرض طیف گسترده ای از حملات مخرب قرار دهد.
استفاده از افزونه های امنیتی می تواند تا حد زیادی سایت شما را در مقابل این آسیب پذیری ها ایمن نگه دارد. افزونه های امنیتی مدیریت آسیبپذیری را ساده و خودکار میکنند و نیازی نیست به صورت دستی تمامی موارد را بررسی نمایید. افزونه های امنیتی با قابلیتهایی مانند اسکن آسیبپذیری ها، هرگونه نقص امنیتی را در وبسایت وردپرسی شما شناسایی کرده و هشدارهای لازم در خصوص بروزرسانیهای امنیتی افزونه ها را به روش های مختلف برای شما ارسال می کند.
چگونه از سایت وردپرسی خود در برابر Command injection دفاع کنید؟
افزونه ها و قالب های آسیب پذیر، یکی از اصلی ترین روش های حمله هکرها برای دسترسی غیرمجاز به وب سایت های وردپرسی جهت سرقت اطلاعات حساس، نصب بدافزار و راه اندازی حملات شبکه هستند. در حالی که پیروی از شیوه های کدنویسی امن وظیفه توسعه دهندگان افزونه و قالب است اما صاحبان وب سایت وردپرس باید اقدامات امنیتی را برای کاهش خطر حملات تزریق کد و Command injection اجرا کنند. استفاده از یک رویکرد چندگانه برای تامین امنیت وردپرس و مدیریت موثر تمام ریسک های امنیتی، ضروری می باشد.
تصویر(6)
بروزرسانیهای نرمافزاری منظم را انجام دهید
اطمینان از اینکه وب سایت وردپرسی شما به طور منظم بروز می شود، جهت جلوگیری از حملات سایبری حیاتی می باشد. بروز رسانی به موقع نرم افزارهای تحت وب تضمین می کند که پچ های امنیتی جدید به محض انتشار روی وب سایت شما نصب می شوند. اگر چندین سایت وردپرسی را مدیریت میکنید، پیشنهاد می شود از افزونه ManageWP Worker استفاده نمایید. این افزونه امکان انجام بروزرسانیها با یک کلیک، نظارت پیشرفته روی سایت ها و تهیه پشتیبان از راه دور را برای همه وبسایتهای شما از طریق یک پنل مدیریت امکان پذیر می کند.
سطح دسترسی فایل ها را پیکربندی کنید
تنظیم سطح دسترسی امن برای فایل ها یک بخش ضروری برای محافظت از وب سایت وردپرسی شما در برابر طیف گسترده ای از حملات تزریق است. در حملات Command Injection و code injection، هکر از یک آسیب پذیری در کد یک وب سایت برای اجرای کدهای مخرب سوء استفاده می کند که اغلب به دلیل سطح دسترسی نا امن فایل ها امکان پذیر می شود. اگر اصل حداقل دسترسی موردنیاز اجرا نشود، مهاجمان میتوانند به دادههای غیرضروری دسترسی داشته باشند. تنظیم سطح دسترسی امن برای فایل ها، به عنوان یک لایه دفاعی اضافی در برابر حملات Command Injection عمل می کند.
با این حال، نحوه پیکربندی ایمن سطح دسترسی فایل ها همیشه به صورت دقیق مشخص نیست. زیرا این مورد تا حد زیادی به محیط میزبانی که وبسایت در آن اجرا میشود بستگی دارد. به همین دلیل بهتر است از افزونه های امنیتی برای بررسیهای دقیق سطح دسترسی فایل ها، استفاده کنید.
از Web Application Firewall استفاده کنید
فایروال ها به عنوان اولین خط دفاعی در برابر طیف وسیعی از حملات تزریقی، مانند تزریق کد و دستور، عمل می کنند. WAF یا Web Application Firewall به عنوان نگهبان وب سایت شما عمل می کند، و با اسکن تمام درخواست های HTTP دریافتی و مواردی که با الگوهای مخرب شناخته شده مطابقت دارند، آنها را فیلتر می کند. در نتیجه از رسیدن آنها به وب سرور و آسیب رساندن به آن جلوگیری می شود. میهن وب هاست نیز جهت تامین امنیت سایت های وردپرسی و سایر پلتفرم های میزبانی شده در سرورهای خود از فایروال های سخت افزاری و نرم افزاری پیشرفته و بروز استفاده می کند و حتی سیستم امنیتی یکپارچه خود را نیز برای تضمین امنیت سرورها طراحی و راه اندازی کرده است.
نتیجه گیری نهایی
حملات Command Injection یکی از قدرتمندترین و مخرب ترین حملات سایبری است. حتی با وجود طیف گستردهای از اقدامات امنیتی که توسط وب سرورهای مدرن اعمال میشود، همچنان وبسایتها و اپلیکیشن های تحت وب را هدف قرار میدهد.
با سوء استفاده از ضعف های امنیتی یک وب سایت، از طریق Command injection، مهاجمان توانایی اجرای دستورات دلخواه را علیه سیستم عامل میزبان به دست می آورند. این سطح دسترسی بسیار فراتر از به خطر انداختن وب سایت مورد نظر است و مجموعه وسیعی از امکانات را برای سوء استفاده و کنترل بر کل سیستم، در اختیار مهاجم قرار می دهد. دفاع از وب سایت در برابر تزریق دستور و سایر حملات سایبری، کاری چالش برانگیز است. امروزه صرفا تکیه بر یک لایه دفاعی، برای تضمین امنیت سایت و سرور شما کافی نیست. به همین دلیل نیاز است از افزونه های امنیتی نیز برای ایجاد امنیت بیشتر برای وب سایت وردپرسی، استفاده کنید.