کنترل امنیت شماره ۱۸: امنیت نرمافزارهای کاربردی
گاهی شبکه از بیرون مرتب به نظر میرسد: فایروال داریم، VPN کنترل شده، سرورها آپدیتاند و لاگها هم جمع میشوند. اما یک فرم لاگین ضعیف، یک آپلود فایل بدون کنترل یا یک API بدون احراز هویت درست، میتواند همه این نظم را دور بزند.
مبنای این مطلب: SANS Critical Security Control 18: Application Software Security، یعنی «امنیت نرمافزارهای کاربردی» در فهرست ۲۰ کنترل امنیتی SANS/CIS. متن زیر ترجمه خشک کنترل نیست؛ برداشت عملی از همان کنترل برای شبکه و زیرساخت سازمانی است.
کنترل شماره ۱۸ درباره امنیت نرمافزارهای کاربردی است. یعنی برنامهای که روی این زیرساخت اجرا میشود، خودش نباید مسیر ساده ورود مهاجم باشد.
امنیت از آخر پروژه شروع نمیشود
اگر امنیت فقط قبل از انتشار بررسی شود، معمولا یا دیر است یا گران. بهتر است از طراحی شروع شود: چه دادهای ذخیره میشود، چه کاربری چه دسترسی دارد، ورودیها از کجا میآیند، خطاها چطور نمایش داده میشوند و secretها کجا نگهداری میشوند.
خطاهای رایج هنوز رایجاند
با وجود همه ابزارها، خطاهای ساده هنوز زیاد دیده میشوند: SQL Injection، XSS، آپلود فایل خطرناک، Session ضعیف، نبود محدودیت روی درخواستها، دسترسی مستقیم به آبجکتها، API بدون کنترل درست و نمایش خطای فنی به کاربر.
برای همین استفاده از راهنماهایی مثل OWASP Top 10 هنوز کاربردی است، به شرطی که فقط به چکلیست تبدیل نشود و واقعا در کد و معماری دیده شود.
وابستگیها و secretها
بخش زیادی از نرمافزار امروز از کتابخانهها و پکیجها ساخته شده است. اگر وابستگیها بررسی نشوند، یک آسیبپذیری در پکیج قدیمی میتواند برنامه را آسیبپذیر کند. همینطور secretهایی مثل token، password، private key و connection string نباید داخل کد یا repository بمانند.
- وابستگیها دورهای اسکن و بهروزرسانی شوند.
- secret داخل Git و فایلهای قابل دانلود قرار نگیرد.
- دسترسی دیتابیس برای برنامه حداقلی باشد.
- خطاهای برنامه اطلاعات داخلی لو ندهند.
WAF کمک میکند، جای اصلاح کد نیست
ابزاری مثل FortiWeb یا هر WAF دیگر میتواند لایه دفاعی خوبی باشد، مخصوصا برای کاهش ریسک حملات شناختهشده و دیدن رفتار مشکوک. اما WAF نباید بهانهای برای اصلاح نکردن کد باشد. اگر برنامه دسترسی را اشتباه کنترل کند، WAF همیشه متوجه نیت تجاری برنامه نمیشود.
برای همین امنیت نرمافزار باید کنار پیکربندی درست WAF دیده شود، نه به جای آن.
چکلیست ذهنی برای کنترل امنیت شماره ۱۸
امنیت نرمافزار یعنی ورودیها کنترل شوند، دسترسیها درست طراحی شوند، وابستگیها رها نشوند، secretها امن بمانند و تست امنیتی بخشی از چرخه انتشار باشد. اگر برنامه ناامن باشد، زیرساخت امن فقط بخشی از مشکل را حل میکند.

کنترل امنیت شماره ۱۳: حفاظت از دادهها؛ وقتی فایل مهمتر از سرور است
SegmentSmack؛ آسیبپذیری TCP در کرنل لینوکس و ریسک DoS
مقابله با SYN Flood در روتر Cisco با TCP Intercept
کنترل امنیت شماره ۱۶: پایش و کنترل حسابهای کاربری
طراحی Access Control Policy در Cisco Firepower؛ از Ruleهای باز تا Policy قابل دفاع
کنترل امنیت شماره ۲۰: تست نفوذ و Red Team؛ آزمون واقعی کنترلها