Attack Surface
مقاله
  • ۶ تیر ۱۴۰۴
  • Cybersecurity 101
  • ۱۰ دقیقه خواندن

Attack Surface

حمله‌های سایبری، در‌حال افزایش هستند؛ به‌ویژه در میان کسب‌وکارهای کوچک و متوسط. یک گزارش نشان می‌دهد که ۷۰درصد از شرکت‌های کوچک‌تر، مورد حمله قرار گرفته‌اند. بسیاری از کسب‌وکارهای کوچک و متوسط برای مقابله با افزایش تهدیدات امنیتی، آمادگی لازم را ندارند. در‌ واقع، ۴۵درصد از این کسب‌و‌کارها اعلام کرده‌اند که اقدامات امنیتی کافی برای پیشگیری از حمله‌های سایبری ندارند. این مقاله، به بررسی یکی از نقاط ضعف احتمالی می‌پردازد: سطوح حمله (Attack Surface) در نرم‌افزارهای کاربردی.

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

سطح حملۀ نرم‌افزارهای کاربردی

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

سطوح حمله‌ها، به سه نوع اصلی تقسیم می‌شوند:

  • سطح حملۀ دیجیتال: شامل تمامی محیط شبکه و نرم‌افزارهای یک سازمان می‌شود. این سطح می‌تواند برنامه‌های کاربردی، کدها، پورت‌ها و سایر نقاط ورود و خروج را در بر بگیرد.
  • سطح حملۀ فیزیکی: شامل تمامی دستگاه‌های Endpoint یک سازمان مانند سیستم‌های دسکتاپ، لپ‌تاپ‌ها، دستگاه‌های همراه و پورت‌های USB است.
  • سطح حملۀ مهندسی اجتماعی: حمله‌های مهندسی اجتماعی، از آسیب‌پذیری‌های کاربران انسانی سوءاستفاده می‌کنند. رایج‌ترین انواع این حمله‌ها علیه سازمان‌ها شامل فیشینگ هدفمند (Spear Phishing)، pretexting و سایر تکنیک‌های فریبنده‌ای است که برای گمراه کردن افراد و دسترسی به اطلاعات حساس استفاده می‌شوند.

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

شناسایی سطح حملۀ یک نرم‌افزار

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

پیاده‌سازی مدیریت سطح حمله‌

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

سطوح حملۀ اصلی

سطوح حمله، به‌طور مداوم در نوسان هستند؛ زیرا کسب‌وکارها اجزای جدیدی مانند وب‌سایت‌ها، برنامه‌های ابری و موبایل، هاست‌ها و غیره را اضافه می‌کنند. با‌این‌حال، به‌طور کلی انواع آسیب‌پذیری‌ها ثابت باقی می‌مانند.

شناسایی آسیب‌پذیری‌های نرم‌افزاری

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

مراقب این آسیب‌پذیری‌های نرم‌افزاری رایج باشید:

  • مشکلات مرتبط با کنترل دسترسی: کنترل دسترسی، زمانی دشوار می‌شود که کارمندان روش‌های مختلفی برای دسترسی به سیستم داشته باشند (مثلاً در محل کار و از راه دور). اغلب توسعه‌دهندگان نرم‌افزار مجبور می‌شوند قوانین را در چندین بخش از کد وارد کنند (اشکالاتی که به‌راحتی می‌توانند آشکار شوند و مورد سوءاستفاده قرار گیرند). حمله به آسیب‌پذیری‌های کنترل دسترسی می‌تواند به هکرها اجازه دهد محتوا را تغییر دهند یا حذف کنند یا حتی مدیریت سایت را به دست بگیرند.
  • نقص‌های Injection: نقص‌های Injection شامل فراخوانی‌های سیستم‌عامل و فراخوانی‌های پایگاه‌داده‌های Backend از طریق SQL می‌شود. حمله‌های Injection، اغلب از طریق فیلدهای ورودی که با پایگاه‌داده‌ها و دایرکتوری‌ها ارتباط برقرار می‌کنند، اتفاق می‌افتند. معمولاً این فیلدها، فاقد فیلتر ورودی هستند که آن‌ها را در برابر حمله‌ها، آسیب‌پذیر می‌کند.
  • مشکلات احراز هویت: زمانی که توابع مربوط به مدیریت نشست و احراز هویت در یک برنامه، به‌درستی پیاده‌سازی نشده باشند، مهاجمان می‌توانند با دسترسی مشابه کاربران هدف، وارد سیستم شوند. سپس می‌توانند کلیدها، رمزهای عبور و غیره را به خطر بیندازند.
  • مشکلات مرتبط با باگ XML External Entity: پیکربندی ضعیف پارسرهای XML که ورودی‌های حاوی ارجاع به External Entity را پردازش می‌کنند، می‌تواند به مشکلاتی، مانند افشای اطلاعات محرمانه و حمله‌های انکار سرویس (DoS) منجر شود.
  • API‌های سفارشی: APIها، از طریق احراز هویت کاربر ناقص، مجوزدهی ناقص در سطح شیء، افشای بیش‌از‌حد داده‌ها و سایر مشکلات، آسیب‌پذیری ایجاد می‌کنند.
  • فرم‌های وب: اضافه کردن فرم‌های وب، راه‌های بیشتری را برای ارسال مستقیم داده‌ها، به سرور شما فراهم می‌کند. یکی از تهدیدهای رایج فرم‌های وب، حمله‌های اسکریپت‌نویسی بین‌سایتی (XSS) است که در آن، مهاجم یک اسکریپت مخرب را در مرورگر کاربر اجرا می‌کند. تهدید دیگر، حمله‌های جعل درخواست بین‌سایتی (CSRF) است که در آن، مهاجمان کاربر را فریب می‌دهند تا ناخواسته، درخواستی را ارسال کند.
  • سازگاری با نسخه‌های قدیمی: هرچه نسخه‌های بیشتری از یک نرم‌افزار وجود داشته باشد، معرفی آسیب‌پذیری‌ها آسان‌تر می‌شود.

شناسایی سطوح حملۀ اولیۀ رایج

به‌طور کلی، رایج‌ترین سطوح حملۀ اولیه در نرم‌افزارهای کاربردی، نقاط ورود و خروج از راه دور هستند. این نقاط پرخطر شامل رابط‌هایی با سیستم‌های خارجی و اینترنت می‌شوند؛ به‌ویژه در جایی که سیستم، دسترسی ناشناس را مجاز می‌کند:

  • شماره‌های سامانۀ خودکار
  • آدرس‌ها و بلوک‌های IP
  • گواهی‌نامه‌های SSL و Attribution
  • رکوردهای WHOIS، اطلاعات تماس و تاریخچه
  • پورت‌های TCP / IP
  • فضای ابری عمومی و خصوصی
  • دامنه‌ها و زیر‌دامنه‌ها
  • سرویس‌های وب‌سرور مثل ایمیل‌ها و پایگاه‌داده‌ها

سطوح حمله‌ در مقابل بردارهای حمله

برای دستیابی به هوش تهدید کافی، لازم است تفاوت بین سطح حمله و بردارهای حمله را درک کنید. با این درک، کسب‌وکارها می‌توانند یک برنامۀ مدیریت سطح حمله ایجاد کنند تا در برابر حمله‌های سایبری محافظت شوند.

تعریف بردارهای حمله

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

بردارهای حمله را می‌توان به دو نوع مختلف تقسیم‌بندی کرد: حمله‌های غیرفعال و فعال.

بردارهای حملۀ غیرفعال، مسیرهایی هستند که برای دسترسی به سیستم، بدون تأثیرگذاری بر منابع آن، مورد سوءاستفاده قرار می‌گیرند. این بردارها شامل تکنیک‌های استراق‌سمع مانند ضبط جلسات، اسکن پورت‌ها یا تحلیل ترافیک هستند.

بردارهای حملۀ فعال، مسیرهایی هستند که با سوءاستفاده از آن‌ها، بر عملکرد سیستم تأثیر می‌گذارند. این بردارها شامل باج‌افزار، حمله‌های فیشینگ و حمله‌های منع سرویس توزیع‌شده (DDoS) می‌شوند.

تمایز سطح حمله از بردارهای حمله

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

شناسایی سطوح حمله و بردارهای حمله

سطح حملۀ دیجیتال، از دو نوع دارایی تشکیل شده است: عوامل شناخته‌شده و عوامل شناخته‌نشده.

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

عوامل شناخته‌نشده که به آن‌ها دارایی‌های فناوری اطلاعات پنهان (Shadow IT) نیز گفته می‌شود، شامل برنامه‌ها و دستگاه‌هایی هستند که بدون مجوز، به شبکۀ یک سازمان متصل شده‌اند. این موارد می‌توانند شامل دستگاه‌های فیزیکی (مانند گوشی‌های هوشمند و تبلت‌های کاربران)، برنامه‌های پیام‌رسان، فضای ذخیره‌سازی ابری و برنامه‌های بهبود کارایی محیط کار باشند. ازآنجاکه این دارایی‌ها، به‌طور رسمی توسط بخش‌های فناوری اطلاعات بررسی یا تأیید نشده‌اند، از دید امنیتی توسعه‌دهندگان پنهان می‌مانند و سیستم‌ها را در معرض خطر قرار می‌دهند.

مدیریت سطح حمله برای کسب‌وکارها اهمیت زیادی دارد؛ زیرا به آن‌ها کمک می‌کند تا تمام عوامل موجود در سطح حمله، چه شناخته‌شده و چه شناخته‌نشده را شناسایی کنند.

مدیریت سطوح حملۀ فیزیکی و دیجیتال

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

کاهش سطوح حمله

برای کاهش سطح حمله، به‌طور سیستماتیک و با ابتدایی‌ترین راه‌حل‌های امنیتی شروع کنید. برای مثال، از آنجا که پورت‌های باز TCP / IP آسیب‌پذیر هستند، مطمئن شوید که یک فایروال برای محدود کردن دسترسی به پورت‌های TCP / IP وجود دارد. به‌روزرسانی‌ها و وصله‌های امنیتی مرتبط را اعمال کنید و از رمزنگاری با گواهی‌های HTTPS و SSL استفاده کنید. اما بسته به محیط نرم‌افزاری که نیاز به محافظت دارد، اقدامات خاص‌تری نیز می‌توان انجام داد. برای مثال، میزان کدی را که در معرض دید است، محدود کنید. تمام کدها دارای آسیب‌پذیری‌هایی هستند که ممکن است مورد سوءاستفاده قرار گیرند، و هرچه کد بیشتر باشد، احتمال وجود نقص نیز بیشتر می‌شود. بنابراین، به حداقل رساندن حجم کد، راهکاری مناسب برای کاهش سطح حمله توسط کسب‌وکارها است. با بلوغ برنامه‌های نرم‌افزاری و افزودن ویژگی‌های جدید، ماژول‌های کلیدی ممکن است عملکردهای بیشتری را اضافه کنند. پارامترهای استفاده‌نشده را مخفی کنید تا هدف‌های کمتری برای مهاجمان وجود داشته باشد. اگر از پارامتری استفاده نمی‌کنید، از خود بپرسید که آیا می‌توان آن را حذف کرد. هر ماژول را به‌دقت بررسی کنید تا کدهای بی‌استفاده (Dead Code) را شناسایی کنید.

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

کاهش نقاط ورود در دسترس

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

علاوه‌بر این، برای محدود کردن دسترسی به نقاط ورودی، اقدامات زیر را در نظر بگیرید:

  • ورودی‌های فرم‌های وب را اعتبارسنجی کنید. این کار، از حمله‌های SQL Injection جلوگیری می‌کند.
  • فقط داده‌هایی را که نیاز دارید، جمع‌آوری کنید و در‌صورت امکان، آن‌ها را مخفی کنید.
  • با محدود کردن نوع فایل‌های قابل بارگذاری، اعتبارسنجی نوع فایل و اجازه دادن به کاربران مجاز برای بارگذاری فایل، آپلودهای امنی را ایجاد کنید.
  • امنیت ابری را با محافظت از بارکاری ابری (Cloud workload) افزایش دهید که از بار‌کاری‌ها، کانتینر و Kubernetes، در برابر نفوذ محافظت می‌کند.

غیرفعال کردن عملکردهای غیرضروری

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

 

این مقاله، ترجمه‌ای از مقالۀ CrowdStrike است.