امنیت در سیستم‌های تحت وب

 
نیاز به استفاده از سیستم‌های اطلاعاتی خارج از مرزهای فیزیکی سازمان، استفاده از نرم‌افزارهای تحت وب را بیش از پیش رایج و ضروری کرده است. در دسترس قرار گرفتن این نرم‌افزارها در بستر وب و انتقال داده‌ها از طریق اینترنت، با وجود مزایایی که به همراه دارد ریسک نفوذ در اطلاعات و حمله به آنها را نیز در بر دارد.  
 
بنابراین تامین امنیت نرم‌افزارهای تحت وب از اهمیت ویژه‌ای برای سازمان‌ها برخوردار است و نیازمند سرمایه‌گذاری در زمینه‌‌ی تجهیزات سخت‌افزاری و نرم‌افزاری است. 
 
برقراری امنیت از طریق امن کردن شبکه مانند بکارگیری فایروال، رمزنگاری جریان اطلاعات روی شبکه، آنتی ویروس و غیره برای نرم‌افزارهای تحت وب لازم است اما کافی نیست و برخی ریسک‌ها و حملات نفوذی، نقاط ضعف در طراحی و پیاده سازی نرم‌افزارهای تحت وب را هدف می‌گیرد. بدین ترتیب امنیت لایه‌های مختلفی دارد که بکارگیری هر کدام از تجهیزات امنیتی، سازمان را در برابر نوع خاصی از حملات و نفوذها ایمن می‌سازد. به عنوان مثال فایروال‌ها که می‌توانند سخت‌افزاری یا نرم‌افزاری باشند، از شبکه در مقابل ترافیک‌های ناخواسته محافظت می‌کنند و ترافیک‌های ورودی و خروجی از یک درگاه (پورت) را آنالیز کرده و بر اساس نوع قوانینی که برای آن تعریف می‌شود، اجازه ورود یا خروج از آن را صادر می‌کنند اما نمی‌توانند نرم‌افزار را در برابر حملاتی که با کدهای مخرب ایجاد می‌شود مانند SQL injection یا تلاش و حدس چند باره کلمه عبور کاربران محافظت کند. 
 
طراحی و ساخت یک برنامه کاربردی تحت وب امن بدون شناخت تهدیدهای احتمالی که برنامه را به خطر می‌اندازد، امکان‌پذیر نخواهد بود. در یک نگاه کلی، مبانی و مفاهیم امنیت اطلاعات در برنامه نویسی وب به شرح زیر است:
 
آسیب‌پذیری یک برنامه کاربردی به یک کاربر مخرب اجازه می‌دهد تا از شبکه یا میزبان وب بهره برداری کند. بنابراین برای ساخت یک برنامه کاربردی تحت وب امن، نیاز به به یک رویکرد جامع امنیت نرم‌افزار است که روی هر سه لایه برنامه کاربردی، میزبان وب و شبکه اعمال شود.
 
مبانی و مفاهیم امنیت اطلاعات
 
مبانی امنیت شامل احراز هویت [۱]، اعطای حق دسترسی[۲]، حسابرسی [۳]، محرمانگی[۴]، صحت[۵] و دسترس‌پذیری[۶] است که در ادامه تشریح می‌شوند:  
 
احراز هویت
«احراز هویت» به این سوال اشاره داد که شما چه کسی هستید؟ احراز هویت فرایند شناسایی منحصر به فرد سرویس گیرنده‌های نرم‌افزار کاربردی است که ممکن است کاربران نهایی یا سایر سرویس‌ها و فرایندهای برنامه‌نویسی باشند.
 
اعطای حق دسترسی
«اعطای حق دسترسی» به این سوال اشاره دارد که شما چه کاری می‌توانید انجام دهید؟ اعطای حق دسترسی فرایندی است که در آن، منابع و عملیاتی که کاربران احراز هویت شده اجازه دسترسی به آنها را دارند، مدیریت می‌شود. منابع شامل فایل‌ها، پایگاه‌های داده، جداول، سطرها و غیره است. عملیات می‌تواند شامل انجام یک تراکنش مانند خرید یک محصول یا انتقال وجه از یک حساب به حساب دیگر باشد.
 
حسابرسی
«حسابرسی» و رویدادنگاری، کلید عدم انکار [۷] است. عدم انکار بدین معناست که یک کاربر نمی‌تواند انجام کاری یا شروع یک تراکنش را در سیستم انکار کند.  
 
محرمانگی
«محرمانگی» که از آن به «حریم خصوصی» نیز یاد می‌شود، فرایند حصول اطمینان از این است که داده‌ها محرمانه و خصوصی می‌مانند و توسط کاربرانی که مجوز ندارند یا استراق سمع‌کنندگانی که به ترافیک شبکه نظارت می‌کنند، دیده نمی‌شوند. رمزگذاری اغلب برای رسیدن به این هدف به کار گرفته می‌شود. لیست کنترل دسترسی (ACL) نیز ابزار دیگری است که به همین منظور استفاده می‌شود.
 
صحت
«صحت» تضمین‌کننده این است که داده‌ها از هر گونه تغییر عمدی یا تصادفی محافظت می‌شوند. «صحت» داده از اهمیت ویژه‌ای به خصوص وقتی روی شبکه مبادله می‌شود برخوردار است. «صحت» داده هنگام نقل و انتقال عمدتا توسط روش‌های Hashing یا کدهای احراز هویت پیام فراهم می‌شوند.
 
دسترس‌پذیری
از منظر امنیت، «دسترس‌پذیری» یعنی اینکه سیستم برای کاربران معتبر در دسترس باشد. هدف بسیاری از مهاجمان با حملات از نوع انکار خدمت این است که برنامه کاربردی سقوط کند تا مطمئن شوند که کاربران دیگر نمی‌توانند به برنامه دسترسی داشته باشند. ۱۵
 
 اهمیت امنیت در برنامه‌های کاربردی تحت وب
 
یکی از اصول مهمی که همواره پیشنهاد می‌شود در فاز طراحی برنامه کاربردی در نظر گرفته شود، «مدل‌سازی تهدید» است. هدف مدل‌سازی تهدید این است که طراحی و معماری برنامه کاربردی را تحلیل کرده و حوزه‌هایی که پتانسیل آسیب‌پذیری دارند را مشخص کند.» آسیب‌پذیری در شبکه به یک کاربر مخرب اجازه می دهد تا از میزبان وب یا یک برنامه کاربردی  بهره‌برداری کند.«آسیب‌پذیری میزبان وب به یک کاربر مخرب اجازه می‌دهد تا از یک شبکه یا یک برنامه کاربردی بهره‌برداری کند.» «آسیب‌پذیری یک برنامه کاربردی به یک کاربر مخرب اجازه می‌دهد تا از شبکه یا میزبان وب بهره برداری کند.»[۸] بنابراین برای ساخت یک برنامه کاربردی تحت وب امن، نیاز به به یک رویکرد جامع امنیت نرم‌افزار است که روی هر سه لایه برنامه کاربردی، میزبان وب و شبکه اعمال شود.
 
بر اساس آخرین گزارش‌های منتشرشده توسط کنسرسیوم بین المللی «امنیت در برنامه‌ی کاربردی وب» OWASP، بیشترین حملات به نرم‌افزارهای تحت وب عبارتند از Cross-site scripting، SQL injection و Denial-of-service است. اگر فهرست بیشترین مسائل و مشکلات امنیتی برنامه‌های کاربردی تحت وب را مرور و تحلیل کنیم الگویی از مشکلات را شاهد خواهیم بود که با دسته‌بندی آنها در گروه‌های مشخص می‌توان به طور سیستماتیک با آنها مقابله کرد. این طبقه‌بندی‌ها که به عنوان چارچوبی هنگام ارزیابی امنیت نرم‌افزارهای کاربردی تحت وب مورد استفاده قرار می‌گیرند، عبارتند از: 
 
 اعتبارسنجی ورودی‌ها، احراز هویت، اعطای مجوز، مدیریت پیکربندی، داده‌های حساس، مدیریت نشست، رمزنگاری، دستکاری پارامترها، مدیریت خطاها، ممیزی و رویدادنگاری. 
امنیت نیز مانند بسیاری از جنبه‌های مهندسی نرم‌افزار، بر رویکرد مبتنی بر اصول استوار است که اصول پایه آن بدون در نظر گرفتن نوع فناوری پیاده‌سازی نرم‌افزار می‌تواند به کار گرفته شود. مهم‌ترین این اصول عبارتند از :
 
بخش‌بندی[۹]: با بخش‌بندی برنامه سطحی از برنامه که ممکن است مورد حمله قرار بگیرد کاهش می‌یابد. از خود بپرسید اگر یک مهاجم به سیستم دسترسی پیدا کرد به چه منابعی دسترسی خواهد داشت؟ آیا مهاجم می‌تواند به منابع شبکه دسترسی پیدا کند؟ چگونه پتانسیل خرابی برنامه را محدود می کنید؟ فایروال و اعطای حداقل مجوز دسترسی مصداق هایی از این اصل هستند.
 
استفاده از حداقل امتیاز[۱۰]: با اجرای فرایندها توسط حساب‌های کاربری با حداقل حقوق دسترسی‌ها و امتیازها امکان دسترسی مهاجمان به اجرای کدها کاهش می‌یابد.
دفاع در عمق [۱۱]: به این معنی که به یک لایه امنیت اکتفا نشود.
اعتماد نکردن به ورودی کاربر: ورودی کاربران نرم‌افزار اولین سلاح مهاجمان است. فرض کنید همیشه داده‌های ورودی کاربران مخرب هستند مگر اینکه خلاف آن اثبات شود.  
 
کنترل دروازه‌ها [۱۲]: حتما در اولین ورودی کاربران احراز هویت شوند.
شکست امن [۱۳]: اگر برنامه کاربردی از کار بیفتد داده‌های حساس در دسترس قرار نگیرند.
ضعیف‌ترین ارتباط امن شود [۱۴]: اگر در سطح شبکه، میزبان وب یا برنامه کاربردی آسیب‌پذیری وجود دارد، امن شود.
 
پیش‌فرض‌های امن: حساب‌های کاربری پیش فرض امن و با حداقل دسترسی و به طور پیش فرض غیر فعال باشند.
کاهش سطح تماس با مهاجمان[۱۵]: اگر چیزی را استفاده نمی‌کنید، آن غیر فعال یا حذف کنید.
 
لزوم به‌کارگیری آزمون‌های استاندارد امنیت
 
تعداد حملات به نرم‌افزارهای تحت وب رو به افزایش است. آنها مستقیما از ورودی‌های محیط با استفاده از پروتکل http عبور می‌کنند. به کارگیری مدل‌های دژهای معمولی و تکیه به ابزارهایی مانند فایروال و دفاع از میزبان وب به تنهایی کافی نیست. امن کردن نرم‌افزار تحت وب شامل اعمال امنیت در سه لایه شبکه، میزبان و برنامه کاربردی است. امنیت شبکه و زیرساخت میزبان وب یک اجبار است. علاوه بر آن، طراحی و ساخت برنامه کاربردی نیز باید با استفاده از مدل‌ها، طراحی و اصول پیاده سازی امن انجام شود. 
 
اما  با وجود تمام تلاش‌های برنامه‌نویسان و طراحان نرم‌افزار، گاهی اوقات ممکن است حفره‌های امنیتی‌ای ایجاد شود که از دید برنامه‌نویس پنهان مانده و برای رفع آنها اقدامی صورت نگرفته است. بهترین راه یافتن این قبیل مشکلات امنیتی نرم‌افزار این است که تحت آزمون‌های استاندارد امنیت قرار بگیرد و از جنبه‌های مختلف از جمله تست نفوذ در حوزه‌های احراز هویت، معماری سیستم، حقوق دسترسی، ذخیره و بازیابی اطلاعات، رد پای عملیات و وقایع و سایر حملات مورد ارزیابی قرار گیرد. 
 
در ایران نیز آزمایشگاه‌های مختلفی آزمون‌های تست نفوذ و امنیت نرم‌افزارهای تحت وب را بر اساس استانداردهای بین المللی انجام می‌دهند. در آزمایشگاه امنیت، عملیات ارزیابی محصولات نرم‌افزاری در سطوح مختلف اجرا می‌شود و در صورت موففیت آمیز بودن همه عناصر امنیتی مربوط به هر سطح، گواهینامه مربوط توسط مرکز صادر خواهد شد.