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

 

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

 

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

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

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

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

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

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

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

******

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

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

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

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

·        رشته‌هاي پرس و جوي 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