چکلیست امنیت وب اپلیکیشن ها
برای شروع، بهتر است قبل از مفهوم امنیت وب اپلیکیشن ها، ابتدا با مفهوم تست نفوذ بیشتر آشنا بشیم. همانطور که در مقاله تست نفوذ چیست؟ گفتیم، تست نفوذ (pentest)، فرایندی است که در آن یک هکر قانونمند، برای ارزیابی اهداف خود، با ارسال کدهای مخرب به یافتن آسیبپذیریها میپردازد و هدف اصلی تست نفوذ، دسترسی غیرمجاز به سیستم به تقلید از یک هکر غیرقانونی است.
امنیت وب اپلیکیشن ها
امروزه تقریبا تمام رهنماهای متناظر با امنیت وبسایت، استفاده از ممیزی امنیت وب اپلیکیشن را یک بایست حتمی میدانند. متخصصان امنیت سایبری سالهاست بر نیاز به ممیزی امنیت وبسایت تاکید حداکثری دارند. با این حال، تنها در چند سال اخیر بوده که شاهد توجه صاحبان وبسایتها به ممیزی امنیت بودهایم؛ دلیل اصلی این چرخش باور، افزایش حملات سایبری به سایتها و چالش با امنیت وب اپلیکیشنهای با امنیت پایین بوده است.
توسعهدهندگان وب اپلیکیشنها، تقریبا تمام تمرکز خود را معطوفِ علمکرد اجزای آنها کردهاند و اقدامات امنیتی بسیار کمی را مدنظر قرار میدهند. واقعیت این است که بحث امنیتی جزء وظایف آنها نیست، پس چرا باید ذهن آنها را مشغول کند؟
همین واقعیت منجر به تولید وب اپلیکیشنهایی شده است که ویژگیهای آسیبپذیر زیادی مانند: ضعف در اعتبارسنجی کاربران ورودی، رسیدگی به خطا، مدیریت ضعیف سشنها، عدم اجرای صحیح پارامترهای کنترل و دسترسی را در خود دارند.
انواع وب اپلیکیشن ها
وب اپلیکیشنهای پویا | وب اپلیکیشنهای ایستا |
سیستمهای مدیریت محتوا | برنامههای کاربردی در تجارت الکترونیک |
وب اپلیکیشنهای متحرک | وب اپلیکیشنهای پورتال |
متاسفانه گاهی هوشیاری مدیران و توسعهدهندگان تنها زمانی حاصل میشود که دادههای باارزش یا کل برنامه از بین رفتهاند. و اما در این چکلیست، هدف ما بررسی گامهایی است که باید به منظور اجرای یک ممیزی امنیتی و تست نفوذ، برای سیستم سایت خود طی کنید. هدف اصلی در این گامها پیداکردن و رفع آسیبهای موجود در امنیت وباپلیکیشن ها است.
چکلیست ممیزی امنیت وباپلیکیشن
اعتبارسنجی دادهها | |
1 | اطمینان حاصل کنید که دادههای دریافتی ماهیت مورد انتظار شما را دارند و همچنین دادههای بازگردانده شده به کاربران نیز خروجی مطلوب شما را دارا باشند. |
2 | انجام اعتبارسنجی ورودی برای همه ورودیهای دریافتی (از خطاهای ” سرریز بافر” اجتناب کنید). |
3 | برای جلوگیری از خطاهای زمانبندی و ترتیب، Race Condition، بنبستها، وابستگیهای سفارش و خطاهای همگام سازی، از سازگاری ناهمگام اطمینان حاصل کنید. |
4 | برای شرایط خاص از Commit-or-Rollback استفاده کنید. |
5 | عملیات چند-وظیفهای و چند-رشتهای را در فضای امن پیادهسازی کنید. |
6 | برای دادهها مقادیر اولیه تعریف کنید. |
7 | اجتناب یا حذف ” درهای پشتی (Backdoors)” |
8 | اجتناب یا حذف شل اسکیپها. |
9 | قبل از هر استفادهای، اعتبار فایلهای پیکربندی را چک کنید. |
10 | قبل از هر چیز، پارامترهای خط فرمان را اعتبارسنجی کنید. |
11 | قبل از هر استفاده، متغیرهای محیطی را اعتبارسنجی کنید. |
12 | مطمئن شوید که صفهای ارتباطی ظرفیت موردنیاز را دارند. |
1. محافظت از دادهها
بعد از اعتبارسنجی دادهها، لازم است در مرحله بعدی به محافظت از دادهها توجه کنیم. برای همین امر در جدول زیر با ما همراه باشید:
محافظت از دادهها | |
1 | تمام عملکردهایی که به ورودی از جانب کاربر نیاز دارند و به او خروجی ارائه میدهند را بررسی کنید تا از حفاظت آنها مطمئن باشید. |
2 | رشتههایی که به منبع متصلاند باید رمزگذاری شوند. |
3 | دادههای حساس را هرگز در کدها قرار ندهید. |
4 | کوکیهایی که حاوی دادههای حساس هستند را رمزگذاری کنید. |
5 | دادههای حساس نباید از صفحهای به صفحه دیگر و از جانب کاربر، منتقل شوند. |
6 | صفحات حاوی دادههای حساس، فقط در صورت نیاز بازیابی شوند و از نگهداشت آنها در کش و حافظه خودداری کنید. |
2. رسیدگی به خطا
مرحله بعدی، رسیدگی به خطاها در امنیت وب اپلیکیشن است:
رسیدگی به خطا | |
1 | در تمام عملکردها، وضعیت خطاهای موجود را باید بررسی کرده و اطمینان حاصل کنید که تا نقطهای که اطلاعات کافی به کاربر برسد، خطاهای موجود ایزوله یا برطرف میشوند. |
2 | برنامههای تولید (برنامههای آماده لانچ) نباید پیامهای خطایی مشابه با مرحله توسعه برنامه را تولید کنند. |
3 | برای هر تابعی که به کاربر خروجی میدهد، مطمئن شوید که همه پیامهای خطا به میزانی به کاربر اطلاعات میدهند که از پس ممانعت از خطا بر بیاید. |
4 | هرگز پیام خطایی را که اطلاعاتی درباره سیستم و برنامههای اصلی را بروز میدهد، به کاربر ارائه ندهید. |
5 | حالت ایمن (safe mode) را پیشبینی و در برنامه قرار دهید تا در وضعیتهای ضروری فعال شود. اگر اتفاقی کاملا غیرمنتظره رخ داد و همهچیز با خطا مواجه شد، کاربر را خارج کنید و صفحه مرورگر را ببندید. کدهای محصول، نباید پیامهای مرتبط با اشکالزدایی سیستم را به کاربر بدهد. |
6 | بالاترین میزان امنیت را به فایلهای گزارش اختصاص بدهید. از این طریق، همیشه یک جعبه سیاه در اختیار دارید که در مواقع ضروری به یاری شما میآید. |
7 | انتظار هر نوع حملهای را داشته باشید. هر نقص امنیتی را جدی بگیرید، همیشه دلایل بروز خطا را بررسی کنید و هیچ خطایی را نادیده نگیرید. |
برای ارتباطات در امنیت وب اپلیکیشن ها باید به موارد زیر توجه کنید:
امنیت ارتباطات | |
1 | مطمئن شوید که دادههای حساس یا شخصی، هرگز بهصورت متنی واضح و از طریق رشتههای URL منتقل نمیشوند. |
2 | از بهروز بودن پیامها اطمینان حاصل کنید؛ حتی یک پیام درست هم میتواند در جلوگیری از حمله بعدی، تاثیرگذار باشد. |
3 | برای ردیابی جریان داده، از توابع مشخص شده در “where to start” و همکاری با توسعهدهنده استفاده کنید تا از رمزگذاری مناسب اطمینان حاصل کنید. |
4 | برای فراخوانی از پایگاههای داده، باید از رویکردهای ذخیره شده پارامتریک استفاده کنند. |
5 | از حالت محرمانه بودن پیامها اطمینان حاصل شود. |
3. احراز هویت
چکلیست دیگری که باید برای ارتقای امنیت وب اپلیکیشن ها (محافظت از وب اپلیکیشنها) درنظر گرفت، احزار هویت است:
احراز هویت | |
1 | قبل از ارائه هرگونه اطلاعات به افراد، احراز هویت آنها را انجام دهید. |
2 | همه حوزههایی که در آنها، رابط کاربری بین اطلاعات عمومی و خصوصیِ قابل مشاهده تغییر میکند را دقیقا مشخص کنید. |
3 | برای دسترسی به محلهای بسیار مهم از اپلیکیشن و سایت، یا انجام انتقالهای با ارزش بالا، کاربران را مجددا احراز هویت کنید. |
4 | بیشتر به فکر احراز هویت تراکنشها باشید تا خود کاربر. |
5 | احراز هویت مبتنی بر فرم به شما این امکان را میدهد که از یک مولفه کنترلی در دسترس استفاده کنید و خود نیازی به نوشتن آن نداشته باشید. |
6 | استفاده از رویکردهای احراز هویت قدرتمند مثل توکنها، گواهیها و غیره. |
مجوز | |
1 | هنگام اجرای مجوز در برنامه خود، باید از اصل حداقل امتیاز پیروی کنید. |
2 | فقط تعداد محدودی از کاربرانِ مجاز، باید به رابطهای مدیریتی مورد استفاده برای مدیریت محتوای سایت و پیکربندیها دسترسی داشته باشند. |
3 | همیشه فهرستهای کنترل دسترسی را از ” رد کردن همه” شروع کنید، سپس نقشها و امتیازات ضروری را اضافه کنید. |
4 | به محض اینکه سیستم از هویت درست کاربر اطمینان حاصل کرد، وارد مرحله تصمیمگیری درباره سطح دسترسی و نمایش سیستم به او میشویم. با پیگیری رابطهای شناسایی شده در مرحله احراز هویت، اکنون به سطح دید یا کنترل قابل دسترس برای او بپردازید و بخشهایی که امکان و نیاز ورود او وجود دارد را تعیین کنید. در برنامههای بزرگ، معمولا نقشها یا گروهها از قبل تعریف میشوند، سپس کاربر برچسب نقش یا گروه خاصی را دریافت میکند. |
5 | نقشها میتوانند انواعی مثل مدیر، مشتری یا تحلیلگر گزارش باشند. |
6 | با همکاری توسعهدهنده، نقشهایی را که در مسیر طراحی و اجرای برنامه به آنها نیاز هست را شناسایی و دسترسیهای لازم را تعریف کنید. |
7 | جریان تراکنش را پس از فرآیند احراز هویت دنبال کنید تا نحوه احراز هویت را آزمایش کنید. |
مدیریت سشنها | |
1 | سشنها باید متناظر با نوع کاربر و بازه زمانی باشند. |
2 | اطلاعات متناظر با مجوز تعیین نقش کاربر، باید تنها در سرور ذخیره شوند. |
3 | شناسایی سشنها باید تا سرحد امکان دقیق باشند. |
4 | رشتههای متناظر با پرسشنامه، نباید حاوی شناسههای سشن باشند که معیاری برای تعیین سطح کاربری تعریف شده است. |
5 | مدت زمان مشخصی برای هر سشن تعریف کنید. |
6 | اطلاعات فرم نباید شامل فیلدهای پنهان باشد، اگر پنهان است، پس باید محافظت شده و تنها در سرور نگهداری گردند. |
چکلیست تست نفوذ در امنیت وب اپلیکیشن
1. جمعآوری اطلاعات
- برای آزمایش امکان نشت اطلاعات، از عمل شناسایی کشف موتورهای جستجو استفاده کنید.
- اثر انگشت وبسرور (ردپای وبسرور)
- بررسی متافایلهای وبسرور، به منظور کشف وضعیت نشت اطلاعات
- شمارهبندی اپلیکیشنها در وبسرور
- بررسی محتویات صفحات وب به منظور کشف وضعیت نشت اطلاعات
- شناسایی نقاط ورودی برنامه
- آزمایش برنامه، برای کتابخانههای رایج و اثر انگشت
- اجرای مسیرهای نقشه درون برنامه
- انگشتنگاری (مسیرشناسی) چهارچوب وباپلیکیشن
- معماری نقشه برنامه
2. آزمون مدیریت پیکربندی و استقرار در امنیت وب اپلیکیشن
- آزمون پیکربندی پلتفرم برنامه
- مدیریت پسوند فایل آزمایشی برای اطلاعات با حساسیت بالا
- مرور فایلهای پشتیبان قدیمی و بدون مرجع متناظر با اطلاعات حساس
- بررسی زیرساخت و رابطهای مدیریت برنامه
- آزمودن روشهای HTTP
- آزمودن امنیت انتقال دقیق
- آزمودن رویکردهای دامنههای متقابل RIA
- آزمودن مجوزها
- آزمودن تصاحب زیردامنه (Subdomain)
- آزمودن فضای ذخیره ابری
آزمون مدیریت هویت در محافظت وب اپلیکیشن
- تعاریف متناظر با نقش آزمون
- آزمون فرآیند ثبتنام کاربر
- فرآیند تهیه حساب آزمایشی
- آزمونی برای شمارش حساب و حسابهای قابلحدس
- آزمون بررسی نام کاربری ضعیف یا غیرقابل پذیرش
3. آزمون احراز هویت در امنیت وب اپلیکیشن
- آزمونی برای اعتبارنامههای منتقل شده از طریق کانالی رمزگزاری شده
- آزمودن اعتبار پیشفرض
- آزمودن وجود مکانیسم ضعیف قفل کردن
- آزمودن امکان وجود روشهای دورزدن مرحله احراز هویت
- آزمون مرحله بهخاطرسپاری پسوردهای انتخابی
- آزمون جستجوی نقاط ضعف حافظه کش مرورگر
- آزمون خطمشی تعیین شده برای تشخیص پسوردهای ضعیف
- آزمونی برای سنجش سوالات امنیتی
- آزمودن عملکردهای ضعیف در مرحله تغییر پسورد یا بازنشانی آن
- آزمودن کانال جایگزین احراز هویت
4. آزمون مجوز
- آزمایش فایل پیمایش دایرکتوری
- آزمایش امکان دور زدن قواعد در مرحله ارائه مجوزها
- آزمون مرحله افزایش امتیاز
- آزمایش برای ایمنسازی ارجاعات مستقیم ناامن
5. آزمون مدیریت سشن در امنیت وب اپلیکیشن
- آزمایش رویکرد مورد استفاده در مدیریت سشنها
- آزمون ویژگیهای کوکیها
- آزمون تصحیح سشنها
- آزمایش متناظر با متغیرهای سشن در معرض دید
- آزمون جعل درخواستهای ارائه شده به سایت
- آزمون عملکرد خروج
- آزمون زمان پایان سشنها
- آزمون میزان پیچیدگی سشنها
6. آزمون اعتبارسنجی ورودیها در امنیت وب اپلیکیشن
- آزمایش اسکریپت نویسی متقابل سایت
- آزمون اسکریپتهای متقابل سایت که باید ذخیره شوند
- آزمون دستکاری فعل HTTP
- آزمون میزان آلودگی پارامتر HTTP
- آزمون ورود SQL
- آزمون اوراکل
- آزمون MySQL
- آزمون سرور SQL
- آزمون PostgreSQL
- آزمونی برای MS Access
- آزمونی برای NoSQL Injection
- آزمونی برای ورود ORM
- آزمون برای وضعیت سمت مشتری
- آزمونی برای ورود LDAP
- آزمونی برای ورود XML
- آزمونی برای ورود SSL
- آزمونی برای ورود XPath
- آزمون تزریق SMTP IMAP
- آزمونی برای ورود کد
- آزمونی برای گنجاندن فایلهای محلی
- آزمون بارگزاری فایلها از راهدور
- آزمونی برای Command Injection
- آزمون سرریز بافر
- آزمون سرریز هیپ
- آزمون سرریز پشته
- آزمون رشته قالب
- آزمون آسیبپذیریهای پنهان
- آزمون امکان قاچاق HTTP Splitting
- آزمایشی برای درخواستهای ورودی HTTP
- آزمون تزریق سربرگ میزبان
- آزمونی برای بررسی ورود قالبها از طرف سرور
7. تست نحوه رسیدگی به خطاها
- آزمون کد خطا
- آزمایشی برای Stack Traces
8. آزمون ضعف در رمزگزاری در امنیت وب اپلیکیشن
- آزمونی برای سنجش رمزهای ضعیف SSL TLS حملونقل ناکافیِ محافظت از لایهها
- آزمونی برای Padding Oracle
- آزمایش اطلاعات حساس ارسال شده از طریق کانالهای رمزگذارینشده
- آزمونی برای رمزگذاری ضعیف
9. تست منطق کسب و کار در محافظت وب اپلیکیشن
- مقدمهای بر منطق کسب و کار
- آزمون اعتبارسنجی دادههای منطق کسب و کار
- آزمودن امکان جعل درخواستها
- بررسی یکپارچگی آزمون
- آزمون زمانبندی فرآیند
- آزمون محدودیت موجود در تعداد دفعاتی که یک تابع میتواند استفاده شود
- آزمون امکان دور زدن جریان کار
- آزمان سطح محافظت از برنامه در برابر سوء استفاده
- آزمون امکان آپلود انواع فایلهای غیرمنتظره
- آزمون امکان آپلود فایلهای مخرب
10. آزمونهای سمت مشتری
- آزمون اسکریپت نویسی متقاطع سایت مبتنی بر DOM
- آزمون اجرای جاوا اسکریپت
- آزمونی برای ورود HTML
- آزمون تغییر مسیر URL از سمت مشتری
- آزمون ورود CSS
- آزمایشی برای دستکاری منابع سمت مشتری
- آزمون اشتراک گذاری منابع متقاطع
- آزمونی برای فلش سایت متقابل
- آزمون کلیک جک
- آزمون WebSockets
- آزمون پیامرسانی وب
- آزمون فضای ذخیرهسازی مرورگر
- آزمون میزان گنجایش اسکریپ متقابل سایت
ابزارهایی که میتوانید در امنیت وب اپلیکیشن استفاده کنید
- پروکسی حمله Zed
- Nikto
- NMap نقشه شبکه
- BurpSuite
- Netsparker
- SQLMap
- W3af
- TestSSL
- Archni
- Wapiti
- Metasploit
- Acunetix
- Grabber
- Ratproxy
- Wfuzz