حملات injection یا تزریق کد مانند تزریق SQL، OS و LDAP زمانی اتفاق می افتد که داده های بی اعتبار به عنوان دستور یا کوئری به یک مفسر فرستاده می شود. داده مخرب مهاجم می تواند مفسر را به اجرای دستورات ناخواسته مجبور کند و یا اینکه به مهاجمین اجازه دهد که به داده هایی بدون انجام احراز هویت دسترسی یابند.
بهترین راه برای فهمیدن اینکه یک برنامه در مقابل تزریق کد آسیب پذیر است یا نه، این است که تمام اطلاعات غیر قابل اعتماد را قبل از رسیدن به دستورها و کوئری ها از هم جدا کنیم. برای فراخوانی های SQL، به این معنی است که در عبارات و stored procedure ها از متغیرهای قیدی استفاده کنیم و از کوئری های دینامیک جلوگیری کنیم.برای اینکه بفهمید کدتان از مفسر بدون خطر استفاده می کند، کدتان را چک کنید. چک کردن کد یکی از سریع ترین و دقیق ترین روش ها برای این کار است. ابزارهای تحلیل گر کد به متخصصین تحلیل امنیت کمک می کنند تا کاربرد مفسر و جریان داده درون برنامه را بررسی کنند.
تسترهای نفوذی هم هستند که اعمال برنامه را واکاوی می کنند و نقاط ضعف را استخراج می کنند. همچنین می توانید از روش های اسکن دینامیک استفاده کنید. با این روش می توانید بعضی از نقاط ضعف برنامه تان در برابر تزریق کد را پیدا کنید. اسکنرها همیشه نمی توانند به مفسر دسترسی پیدا کنند و در پیدا کردن حملات موفقیت آمیز، مشکل دارند. هرچه قدر در برنامه تان مدیریت خطا را قوی تر انجام دهید، پیدا کردن نقاط ضعف در برابر تزریق کد ساده تر می شود.
مهم ترین مسئله در پیشگیری از این نوع حمله ها، جدا کردن داده های غیر قابل اعتماد از دستورها و کوئری ها است.
سناریو 1. برنامه از داده های غیر قابل اعتماد در ساختار این دستور آسیب پذیر SQL استفاده می کند:
String query = “SELECT * FROM accounts WHERE custID=’” + request.getParameter(“id”) + “’”;
سناریو 2. همانند سناریو بالا، اعتماد کورکورانه برنامه به فریم ورک باعث شده که کوئری های غیذ قابل اعتماد داشته باشیم. (مانند Hibernate Query Language):
QUERY HQLQuery = session.createQuery(“FROM accounts WHERE custID=’” + request.getParameter(“id”) + “’”);
در هر دو مثال، مهاجم می تواند مقدار پارامتر id را با ‘ or ‘1’=’1 مقدار دهد. برای مثال:
http://example.com/app/accountView?id=’ or ‘1’=’1
این کار باعث می شود که کوئری بالا تمام اطلاعات جدول accounts را در خروجی ارایه دهد. حملات خطرناک تر می توانند اطلاعات را دستکاری کنند و یا stored procedureها را درخواست کنند.
نویسنده: پویا فضلعلی
منبع: انجمن تخصصی فناوری اطلاعات ایران
هرگونه نشر و کپی برداری بدون ذکر نام منبع و نویسنده دارای اشکال اخلاقی می باشد.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود