ابر آروان

راه حل‌های مبتنی بر شبکه توزیع محتوا
CDN, DDoS Protection, Video Platform

انواع آسیب‌پذیری‌های برنامه‌های تحت وب با استفاده از استاندارد OWASP

۲۰ اسفند ۱۳۹۷
آسیب‎پذیری‎های تحت وب

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

Injection

آسیب‌پذیری‌ تزریق یا Injection
آسیب‎پذیری‎های تزریق انواع مختلفی دارند و به‌طور کلی این حملات از ارسال داده‎ی نامطمین به یک نقطه‎ی آسیب‌پذیر از برنامه (که معمولن نقش مفسر دارد) ناشی می‌شوند. حمله‎کننده ممکن است بتواند با سواستفاده از آن داده، موفق به اجرای یک دستور در سرور آسیب‌پذیر شود یا به اطلاعات محرمانه دسترسی پیدا کند. برای جلوگیری از این نوع حملات لازم است تا روی داده‎های ورودی تمرکز کرد و اعتبارسنجی آن‌ها را با دقت بیش‌تری انجام داد. به‎ویژه داده‎هایی که به‌سمت مفسرهای مختلف مانند مفسر پایگاه‎های داده فرستاده می‎شوند. کاوش این نوع آسیب‎پذیری کار چندان سختی نیست و بهترین روش برای انجام این عمل، مرور کد منبع است. یکی از بهترین روش‎های جلوگیری از این نوع آسیب‎پذیری، اعتبارسنجی مقادیر ورودی براساس وایت‌لیست (whitelisting) در سمت سرور و استفاده از APIهای امن برای ارتباط با مفسرهاست.

Broken Authentication

آسیب‌پذیری Broken Authentication
اگر قسمت‎هایی از برنامه که مسوولیت تصدیق اصالت و مدیریت نشست کاربران را به‌عهده دارند درست طراحی و پیاده‌سازی نشده باشد، این آسیب‎پذیری محتمل خواهد بود. این آسیب‎پذیری می‎تواند به حمله‎کننده اجازه‎ی دسترسی به گذرواژه، کلیدهای حساس، اطلاعات نشست و… را بدهد و در نتیجه‎ی آن مهاجم می‌تواند خود را به‌جای کاربر مجاز یا حتا مدیر سیستم معرفی کند.
با استفاده از ابزارهای خودکار تست آسیب‌پذیری نیز به‌راحتی می‎توان از برخی اقسام این آسیب‎پذیری سواستفاده کرد. دقت داشته باشید که حتا به‎دست آوردن یک جفت نام کاربری و گذرواژه‎ی صحیح با دسترسی پایین توسط مهاجم نیز می‎تواند بسیار خطرناک باشد. یکی از راه‎های جلوگیری از این آسیب‎پذیری، مراقبت از نام کاربری و عدم استفاده از گذرواژه‎ی ضعیف و پیش‌فرض، هم‌چنین پیاده‎سازی فرآیند captcha است. امن‎سازی  فرآیند فراموشی رمز عبور، طراحی و پیاده‎سازی فرآیند تصدیق اصالت چند عامله، تغییرات دوره‎ای گذرواژه و محافظت از شماره‎ی نشست از دیگر راهکارهای جلوگیری از این آسیب‎پذیری هستند.

Sensitive Data Exposure

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

آسیب‌پذیری (XML External Entities (XXE
بسیاری از پردازنده‎های قدیمی یا ضعیف XML در پردازش برخی از اسناد XML، ارجاعات به موجودیت‎های خارجی (external entityها) را نیز ارزیابی می‎کنند. این امر می‌تواند سبب ایجاد مشکلات امنیتی از قبیل، افشای اطلاعات داخلی، اسکن پورت، اجرای حمله‌ی denial-of-service و حتا اجرای دستورات از راه دور شود. قسمت‎هایی از برنامه که با اسناد XML یا وب‌سرویس کار می‎کنند، از قسمت‎های مستعد این آسیب‎پذیری هستند. این نوع آسیب‎پذیری را با تحلیل کد منبع می‌توان کشف کرد. غیرفعال کردن ارجاعات به موجودیت‌های خارجی در مفسرهای XML هم‌چنین به‎روزرسانی این مفسر، از بهترین راهکارهای جلوگیری از این آسیب‎پذیری است.

Broken Access Control

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

آسیب‌پذیری Security Misconfiguration
یکی از مسایل بسیار رایج در سامانه‎های آنلاین استفاده از تنظیمات ناامن و به‌ویژه تنظیمات پیش‌فرض است. در برخی موقعیت‌ها این تنظیمات بسیار خطرناک است و می‌توانند منجر به دسترسی مهاجم به سیستم شوند. تنظیمات ناامن محدود به بخش خاصی از سامانه نیست و می‎توانند در تمامی قسمت‎های برنامه رخ دهند. اسکنرهای خودکار راهکار خوبی برای کشف این نوع آسیب‎پذیری هستند. مدیر سامانه باید از نصب هرگونه سرویس زاید اجتناب و به‎طور مرتب سرویس‎های لازم را به‎روزرسانی کند، هم‌چنین با تنظیمات امنیتی آن‌ها آشنا باشد.
Cross-Site Scripting

آسیب‌پذیری (Cross-Site Scripting (XSS
این آسیب‎پذیری قدیمی، حاصل تفسیر قسمتی از کدهای ورودی کاربر توسط مرورگر، بدون اعتبارسنجی مناسب است. در این حمله، مهاجم اسکریپت مخرب خود را با روش‌های مختلفی مانند ارسال یک URL با استفاده از ایمیل، بارگذاری در بخش‌های آسیب‌پذیر وب‌سایت و… برای کاربری دیگر  ارسال می‌کند و به ‌این ‌ترتیب می‌تواند کنترل مرورگر کاربر قربانی را در اختیار گیرد. قسمت‎هایی از برنامه که داده‎های پویا را نمایش می‎دهند، از قسمت‎های مستعد به این آسیب‎پذیری به‌شمار می‌آید.

ابزارهای تست خودکار و بررسی کد منبع از بهترین روش‎های کشف این آسیب‎پذیری هستند. این نوع آسیب‎پذیری برای از بین بردن مراقبت‎های آسیب‎پذیری‎های CSRF نیز استفاده می‎شود. پیاده‎سازی امن و حساس به زمینه‎ی (context sensitive encoding)  APIهای نمایش داده‎های پویا در  چارچوب‎های (Framework) ساخت نرم‎افزارهای تحت وب از بهترین راه‎های جلوگیری از این نوع آسیب‎پذیری است. فعال‎سازی خط‎مشی امن محتوا ((Content Security Policy (CSP) نیز از دیگر روش‎های جلوگیری از این نوع آسیب‎پذیری است.

آسیب‌پذیری Insecure Deserialization
Serialization عملی است که به‌واسطه‌ی آن می‌توان Object را از کد برنامه گرفت و آن را به قالبی برای سایر مصارف همانند ذخیره‌سازی آن روی حافظه یا انتقال آن روی لینک ارتباطی در ساختار شبکه تبدیل کرد. عکس این عمل Deserialization نام دارد. به‎طور کلی ارتباط بین برنامه‎ها، ارتباط با سرویس‎های وب، پایگاه‎های داده، سامانه‎ی فایل، Cache کردن و تبادل اطلاعات تصدیق اصالت، از موارد استفاده‎ی فرآیند سریال‎سازی به‌شمار می‌آیند.

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

در حالتی دیگر،  مهاجم حتا می‌تواند این آسیب‎پذیری را به آسیب‎پذیری‎های تزریق، تبدیل کند. تست دستی بهترین روش کشف این آسیب‎پذیری است. برای جلوگیری از این نوع آسیب‎پذیری می‎بایست داده‎های سریال‎شده پس از بازگشایی، اعتبارسنجی شوند. این اعتبارسنجی می‎تواند از نوع چک کردن امضای دیجیتال یا بررسی قیود امنیتی باشد. نظارت (Monitor) بر شیوه‎ی تشکیل اشیا براساس بازگشایی ورودی سریال‎شده (input object deserialization) نیز از انواع روش‎های تشخیص سواستفاده از این آسیب‎پذیری است.

Using Components with Known Vulnerabilities
استفاده از اجزای (Component) ناامن در سامانه‎های آنلاین امری شایع است. اگر یکی از اجزای مورد استفاده دارای آسیب‎پذیری گزارش شده باشد، مهاجم به‌سادگی می‎تواند با استفاده از آن آسیب‎پذیری به سامانه حمله کند. بررسی و به‎روزرسانی اجزای استفاده شده در برنامه و تعریف این بررسی به‌عنوان یک فرآیند تکرارشونده، یکی از راه‎حل‎های جلوگیری از این آسیب‎پذیری است. استفاده از اسکنرهای خودکار به‎روز شده نیز روش مناسبی برای کشف این آسیب‎پذیری به‌شمار می‌آید.

Insufficient Logging & Monitoring

Insufficient Logging & Monitoring
با این‌که فرآیند لاگ کردن نامناسب، خود یک آسیب‎پذیری نیست، اما می‌تواند فراهم‌کننده‌ی بستری مناسب برای مخفی ماندن مهاجم ‎باشد. در بیش‌تر موارد با فرآیند نظارت و لاگ کردن (Logging) مناسب حتا با وجود آسیب‎پذیری‎های خطرناک، باز هم امکان کشف و خنثا‎سازی حمله بسیار بالاست. استفاده‎ی مناسب از فرآیند‎های نظارت و لاگ کردن برای امنیت حداقلی الزامی هستند. هم‌چنین جدی توصیه‌ می‌شود از فرآیند مرکزی‌سازی لاگ و تحلیل خودکار لاگ استفاده شود.

Buffer Overflows

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

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

Cross Site Request Forgery
 آسیب‌پذیری (Cross Site Request Forgery (CSRF
این آسیب‎پذیری سبب می‎شود تا حمله‎کننده بتواند فعالیتی ناخواسته را -به‎ویژه انجام فعالیتی که منجر به تغییر حالت سیستم شود- توسط قربانی (کاربر مجاز سیستم) انجام دهد. از بهترین روش‎های جلوگیری از این دسته از آسیب‎پذیری‌ها، ایجاد توکن‎های موقت که نمی‌توان حدس زد و ذخیره‌ی آن‌ها در نشست (session) برای درخواست‎های کاربر مجاز و منوط شدن انجام درخواست کاربر به صحت توکن است. برای یافتن این آسیب‎پذیری باید تمامی فعالیت‎های کاربرِ مجاز به این توکن‎ها مجهز باشند وگرنه، سامانه در برابر این تهدید آسیب‎پذیر خواهد بود.
Information Leakage and Improper Error Handling

Information Leakage and Improper Error Handling
برنامه‎های تحت وب می‎توانند در حالت‌های مختلف اطلاعاتی از برنامه را نشت دهند که ممکن است برای حمله‎کننده مفید باشد. برنامه می‎بایست حداقل اطلاعات لازم را در اختیار کاربر قرار دهد. در برخی اوقات نیز با استفاده از ترکیبی از این نوع آسیب‎پذیری، آسیب‎پذیری‎های جدی‎تری هم‌چون تزریق پرس‎وجوی ساختارمند برمبنای اشکال، ایجاد می‌شوند. برای جلوگیری از این آسیب‎پذیری تنظیمات سیستم باید به‌گونه‌ای انجام شوند که اشکالات به‌شکل کلی در اختیار کاربر قرار گیرد و از ارایه‎ی جزییات صرف نظر شود.

دسته‎های آسیب‎پذیری Injection ،XXE ،XSS، برخی دسته‎های Insecure Deserialization ،Using Components with Known Vulnerabilities ،Buffer Overflows و برخی دسته‎های Denial of Service را به‌دلیل داشتن نوعی الگو، دیواره آتش لایه کاربردی یا همان (WAF (Web Application Firewall می‌تواند تشخیص دهد. البته گاهی اوقات مهاجم با دارا بودن دانش کافی می‎تواند از دیواره‎های آتش سامانه‎های وب نیز عبور کند یا در اصطلاح آن‌ها را Bypass کند. در واقع باید توجه داشت که استفاده از WAF، به تنهایی سبب امن شدن کامل برنامه‎ها و جلوگیری از تمام حملات نمی‌شود؛ اما با استفاده از تنظیمات مناسب در تجهیزات، می‎توان بسیاری حملات تحت وب را تشخیص داد و از به ثمر رسیدن آن‌ها جلوگیری کرد.

  • پوریا گفت:

    با سلام وسپاس؛متن و سبک نوشتار مقاله برای من کمی نا واضح بود.متن کمی بیش از حد لازم؛فارسی شده بود.امیدوارم از این سبک مقالات؛بیشتر تدوین کنید؛برای من خیلی جذاب و آموزنده اس.

  • واقعا آروان از همه جهات داره خوب کار میکنه
    با تمام هجمه‌ها و کمبودها برای آروان دعا میکنم …
    ان‌شاالله موفق باشند، بسیار زیاد.

  • تازه با سایتتون آشنا شده ام به نظر امکانات cdn خوبی دارید فقط اگر میشه درباره مرکز سرورها بیشتر توضیح بدید ممنون

  • × برای اطلاع از آخرین اخبار و مقالات آروان عضو خبرنامه ما شوید