صفحه اول > مقالات

 

حمله به برنامه‌های وبی (۱)

 

اگر خود و دشمن را می‌شناسید، نیازی به نگرانی در مورد نتیجه هر نبردی ندارید.

اگر خود را می‌شناسید ولی شناخت مناسبی از دشمن ندارید، در پی هر پیروزی باید نگران شکست باشید.

اگر نه خود را می‌شناسید و نه دشمن، در همه نبردها مغلوب خواهید بود.

برگرفته از کتاب «هنر جنگ» نوشته سان تزو

 از یک دید امنیت شبیه جنگی تمام عیار است که هر روز و در تمام ساعات و لحظات ادامه دارد. بسیاری از آسیب پذیری‌ها در سیستم‌های نرم‌افزاری توسط توسعه دهندگانی ایجاد می‌شود که دانش اندکی در رابطه با نکات یا تهدیدات امنیتی دارند و نمی‌دانند که کدهایی که تولید می‌کنند تا چه حد آسیب‌پذیر است.

میزان استفاده از برنامه‌های وبی برای مدیریت تجارت و جذب مشتری‌های جدید از طریق اینترنت در شرکت‌های مختلف در حال افزایش است،‌ و به این ترتیب بازار قابل توجهی برای متخصصین توسعه این گونه سیستم‌ها بوجود آمده است. مزیت اصلی در استفاده از تجارت مبتنی بر وب برای شرکت‌های مختلف در این است که می‌توانند با استفاده از حداقل امکانات پیام خود را به مشتریان بازار در سراسر دنیا برسانند. وب طیف مخاطبان وسیعی را پوشش می‌دهد، این نکته با وجودی که یک ایده‌آل تجاری است ولی می‌تواند اهداف شرکت را نیز به مخاطره بیندازد زیرا مشخص نیست که چه کسانی سایت شرکت را مشاهده می‌کنند. بینندگان سایت علاوه بر شرکای تجاری و مشتریان می‌توانند کاربران بدخواهی باشند که با اهداف خراب‌کارانه در پی نفوذ به سیستم می‌باشند.

در این مقاله نقاط آسیب پذیری رایج مورد بررسی قرار می‌گیرند و راه‌هایی که کاربران می‌توانند از طریق آن برنامه‌ها را تهدید کنند معرفی می‌شوند.

******

 بسیاری از برنامه‌های وبی اطلاعاتی را از کاربر دریافت می‌کنند و پس از پردازش این اطلاعات بر مبنای الگوریتم‌های خود نتایجی را تولید می‌کنند. به عنوان مثال برنامه یک فرم جستجوی ساده را در اختیار کاربر قرار می‌دهد که عبارت جستجو در آن وارد شده و پس از جستجو در پایگاه داده نتایجی تولید و برای کاربر نمایش داده می‌شود. این فرایند یک نمونه عملکرد بسیار رایج است که در بسیاری از برنامه‌های وبی مشاهده می‌شود.

در صورتی که کاربری اهداف خراب‌کارانه داشته باشد ممکن است بتواند با وارد کردن یک عبارت جستجو ثبات و امنیت برنامه وبی را به خطر بیندازد. این خطر به میزانی جدی است که حتی اگر زیرساخت امنیتی بسیار مستحکمی (به عنوان مثال فایروالی مناسب که همه حملات را متوقف کند) مورد استفاده قرار گرفته باشد ولی ورودی‌های کاربران مورد ارزیابی قرار نگیرد، تمامی‌ تلاشی که برای ایجاد زیرساخت امنیتی به کار گرفته شده است به هدر می‌رود.

بنابراین طراحان سیستم باید این نکته مهم را در ذهن خود داشته باشند که همه ورودی‌های کاربران تا زمانی که از امن بودن آنها اطمینان حاصل نشده است، باید نامطمئن تلقی شوند. هکرها می‌دانند که برنامه‌ها چگونه ورودی‌ها را استفاده می‌کنند و چگونه می‌توان از آنها برای بهره‌گیری از نقاط آسیب پذیر سیستم بهره گرفت. بنابراین بهترین روش برای مقابله با این مشکل تایید اعتبار همه ورودی‌های کاربران است. هرچند که این فرایند باعث کاهش سرعت و کارآیی برنامه می‌شود ولی برای حفظ امنیت سیستم اجتناب ناپذیر می‌باشد.

داده‌های نامطمئن از طرق مختلفی می‌توانند وارد سیستم شوند، که می‌توان به موارد زیر اشاره نمود:

·        رشته‌های پرس و جوی URL

·        فرم‌های HTML

·        Cookieها

·        پرس‌ و جوهایی که بر روی یک پایگاه داده انجام می‌شوند.

رشته های پرس و جو، فیلدهای اطلاعاتی فرم ها و Cookie ها را می توان قبل از پردازش اعتبارستجی نمود.

حملاتی که در نتیجه استفاده از داده نامطمئن بر روی برنامه‌ و سایت وبی صورت می‌گیرند را می‌توان به شرح زیر خلاصه نمود:

تزریق اسکریپت1

این نوع حمله در صورتی اتفاق می‌افتد که با استفاده از یک باکس ورودی کاربر اقدام به ورود نشانه‌ها2و یا کد اسکریپت خرابکارانه نموده باشد. این ورودی در پایگاه داده و یا در Cookie‌ها ذخیره می‌شود. چنین کدی می‌تواند به گونه‌ای طراحی شود که اثرات مختلفی داشته باشد و ممکن است عملکرد یک برنامه یا سایت اینترنتی را برای همه کاربران تحت تاثیر قرار دهد.

وقتی یک مرورگر که اسکریپت‌های آن فعال است این کد را می‌خواند، کد ناخواسته اجرا می‌شود و اثرات خود را به جای می‌گذارد. نشانه‌هایی که در این روش قابل استفاده هستند
شامل
<script>، <object>، <applet> و <embed> می‌باشند.

مثالی از این نوع حمله به صورت زیر است. فرض کنید در یک صفحه وبی که لیستی از نام مولفین ارائه می‌دهد، فیلدی وجود دارد که می‌توان در آن نام‌های جدید را وارد نمود. این مثال فقط برای روشن شدن مطلب ارائه می‌شود ولی نمونه‌های زیادی وجود دارند که کاربر می‌تواند داده‌ای را وارد نماید. رایج‌ترین نمونه این صفحات، آنهایی هستند که کاربر می‌تواند از طریق آنها عبارت جستجویی را وارد کند.

اگر کاربر عبارت زیر را به عنوان نام یک مولف وارد نماید اتفاق جالبی خواهد افتاد؛
<script> alert(‘Script Injection’);  </script>

در یک برنامه ضعیف این ورودی اعتبار سنجی نشده و به عنوان نام یک مولف وارد پایگاه داده می‌شود، بنابراین هر بار که لیست مولفین نمایش داده می شود کد JavaScript فوق اجرا می شود.

در صورتی که این اسکریپت در پایگاه داده اضافه شود، هر بار که کاربری بخواهد لیست مولفین را ببیند چنین صفحه‌ای را خواهد دید:

با بررسی اتفاقاتی که رخ داده مشخص می‌شود که اسکریپت وارد شده در صفحه، کد سمت سرور برنامه را تغییر نمی‌دهد. آنچه که اتفاق افتاده تغییر محتوای پویای سایت است. با وجود عدم تغییر کد برنامه، باز این تزریق اسکریپت خطرناک است، زیرا اسکریپتی که وارد شده است به عنوان بخشی از محتویات سایت در مرورگر‌های کاربران اجرا می‌شود. کد اسکریپت وارد شده توسط همه کاربرانی که به سایت مراجعه می‌کنند رویت می‌شود.

به طریق مشابه کاربر می‌تواند هر کد JavaScript دیگری را نیز به سایت تزریق نماید. به عنوان مثال:

<script> location.href = ‘Malicious.html’; </script>
با درج عبارت فوق در پایگاه داده به عنوان نام یکی از مولفین هر گاه صفحه نام مولفین توسط کاربری مشاهده شود، کنترل مرورگر به صورت خودکار به صفحه Malicious.html انتقال داده می‌شود. (نشانه location که با یک آدرس URL‌ اشاره می‌کند، محتویات صفحه‌ای که آدرس آن در href معرفی شده است را در مرورگر بار می‌کند.)

هکر در صفحه Malicious.html می‌تواند هر کاری انجام دهد. به عنوان مثال می‌تواند یک کنترل ActiveX و یا کد JavaScript را بر روی دستگاه کاربر بار کرده و اقدام به اجرای آن نماید، و یا تعدادی زیادی مرورگر جدید باز نموده و در هر یک از آنها یک سایت جدید را باز کند.

 


1. Script Injection

2. Tags