PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : { تخصصی } تحلیل امنیتی



EM4D-M
2013-01-24, 14:01
♥ بسم الله الرحمن الرحیم ♥

پيامبر خدا صلى‏ الله ‏عليه و ‏آله و سلّم :خوابِ توأم با علم و دانش ، بهتر از نماز همراه با نادانى است .


سلام خدمت دوستان و بزرگواران شاپکیپری

خیلی از برنامه نویسان و توسعه دهندگان ، در مرحله تحلیل امنیتی با یک علامت سوال تحت عنوان " از کجا شروع کنم ؟! " مواجه میشوند . این جمله به ظاهر ساده ، بسیار خطرناک است اگر بدون مطالعه و برسی های جزء به جزء از آن عبور کرد .

در این مقاله سعی شده فرایند تحلیل امنیتی را به صورت شاخه ای و تک به تک بیان گردد .



شروع قسمت اول مقاله :

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


♦ مدلسازی تهدیدات ♦

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




♦ ایمن ساختن برنامه شما ♦


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

گروهبندی آسیب پذیری های امنیتی برنامه ها

◘ معتبر سازی ورودی :

چگونه میتوانید مطمئن شوید که ورودی نرم افزار شما صحیح و امن است ؟ معتبر سازی ورودی به وسیله فیلتر کردن ، امتناع کردن از پردازش ورودی قبل از انجام کار بر روی ورودی انجام میشود .

◘ هویت سنجی :

شما که هستید ؟ هویت سنجی پروسه ای است که از یک موجودیت استفاده میکند تا موجودیت دیگری را شناسایی کند ، معمولا از طریق محدودیت هایی همانند نام کاربری و رمز عبور .

◘ حق دسترسی :

یک کاربر یه کار هایی را جق دارد انجام بدهد ؟ به چه فایل هایی اجازه دسترسی دارد ؟ به کدام قسمت پایگاه داده میتوان دسترسی داشته باشد ؟ حق دسترسی ، پروسه ای است که یک برنامه برای کنترل دسترسی به اعمال و منابع از آن استفاده میکند .

◘ مدریت تنظیمات :

برنامه شما توسط چه کسی اجرا میشود ؟ از چه پایگاه داده ای استفاده می کند ؟ برنامه شما چگونه مدیریت میشود ؟ این تنظیمات چگونه امن میشوند ؟ مدریت تنظیمات به چگونگی پردازش این تنظیمات توسط برنامه گفته میشود .

◘ رمزنگاری :

چگونه به صورت مطمئن از اطلاعات سری محافظت میکنید ؟ از چه الگوریتم رمزنگاری استفاده میکنید ؟ چگونه با استفاده از tamperproofing ( فرایندی که دسترسی غیرمجاز به داده هارا عقب می اندازد و یا شناسایی میکند ) داده ها و کتابخانه های خود استفاده میکنید ؟

◘ داده های حساس :

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

◘ مدریت استثنا :

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

◘ تغییر پارامتر ها :

فیلد های فرم ، رشته های درخواست و مقادیر کوکی ها غالبا به صورت پارامتر های برنامه ی شما به کار میرود . دستکاری پارامتر ها به گونه ای هکر را گمراه کند ، در امنیت سایت شما موثر خواهد بود .

◘ وقایع نگاری :

هرکسی چه زمانی چه کاری را انجام می دهد ؟ تهاجمات چگونه ثبت میشوند ؟


♦ منظور ما از امنیت چیست ؟ ♦

امنیت در وب بر اساس نکات زیر پایه ریزی میشود :

◘ هویت سنجی :

هویت سنجی ، پرسش شما چه کسی هستید را مطرح میکند . و به معنای پروسه معرفی کلاینت های نرم افزارها و سرویس های شما میباشد . کلاینت ها ممکن است کاربران ، سرویس های دیگر ، پروسه ها کامپیوترها باشند .

◘ حق دسترسی :

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

◘ وقایع نگاری :

وقایع نگاری شایسته در واقع کلید non-repudiation است . non-repudiation تضمین میکند که یک کاربر نمیتواند انجام یک عمل یا شروع یک تراکنش را انکار کند .
برای مثال در یک سیستم تجارت الکترونیکی مکانیزم های non-repudiation برای اطمینان حاصل کردن از این که یک مشتری نمیتواند سفارش 100 کپی از یک کتاب را انکار کند مورد نیاز است .

* non-repudiation : یک اصطلاح امنیتی است . به طور کلی معنی آن نیست هرکاربر کاری را که در سیستم انجام میدهد ، کاملا مشخص است و نمیتواند انکار کند .

◘ محرمانگی :

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

◘ صحت داده ها :

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

◘ در دسترس بودن :

از نظر امنیتی ، دسترسی به معنای قابل دسترس بودن سیستم برای کاربران قانونی است . هدف بسیاری از مهاجمین با حملات DOS ، از کار انداختن یک نرم افزار یا اطمینان از سنگین شدن نرم افزار به صورتی که غیر قابل دسترسی شود میباشد .


پــایان قــــسمت اول

Mohamad26
2013-01-24, 14:07
ممنونم عماد جان
فوق العاده بود :x

EM4D-M
2013-01-28, 21:41
بخش دوم مقاله :

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

◘ به ورودی کاربر اعتماد نکنید :
ورودی کاربر در برنامه شما ، اسلحه اصلی مهاجم – وقتی که هدفش نرم افزار شما است ، میباشد . تصور کنید که تمامی ورودی ها غیر قابل اعتماد و خطرناک هستند ، مگر اینکه خلاف آن ثابت شود . یک استراتژی دفاع عمیق برای هوقت سنجی ورودی انجام دهید و پیشگیری هایی برای اطمینان از معتبر بودن ورودی قبل از انجام کار های حساس انجام دهید .

◘ نقاط آسیب پذیر را امن کنید :
آیا نقطه ضعفی در لایه شبکه وجود دارد که میتواند یک مهاجم از آن استفاده نماید ؟ در مورد میزبان چطور ؟ آیا برنامه شما امن است ؟ هر لینک ضعیفی در یک زنجیره باعث پایین آمدن امنیت میشود .

◘ از اختیارات کمتری برای اجرای فرایندها استفاده کنید :
این کار باعث پایین آمدن محدوده کار هایی میشود که یک تهاجم میتواند انجام دهد . با این کار محدوده ی پایین تری از کد ها در معرض تهدید خواهند بود .

◘ تنظیمات پیشفرض امنی را ایجاد کنید :
ایا حساب پیش فرض با کمترین اختیارات ایجاد شده است ؟ آیا حساب پیشفرض غیر فعال شده است و فقط در موارد مورد نیاز به صورت دستی فعال میشود ؟ آیا تنظیمات از یک رمز عبور متنی استفاده میکنند ؟ در زمان رخ دادن یک خطا ، آیا اطلاعات حساس به کلاینت نشان داده میشود ؟

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

◘ دفاع را عمیقا اعمال کنید :
برای دور نگاه داشتن مهاجمان ، از چند gatekeeper (قسمتی از مدیریت شبکه که وظیفه اش کنترل کردن دسترسی ها است ) استفاده نمایید . دفاع عمیق یعنی این که به یک لایه امنیتی اعتماد نکنید و تصور کنید که یکی از لایه های شما ممکن است مقاومت نکند و از بین برود .

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


♦مفاهیم اصولی♦

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

تهدید های برنامه و طبقه بندی نقاط ضعف

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

◘ فیلتر کردن ورودی :
هویت سنجی در موقع ورود کاربر . سر ریز بافر ، XSS ، تزریق SQL

◘ اعتبارسنجی : سرقت اطلاعات در شبکه ، حملات brute force ، حملات مبتنی بر لغتنامه ( در این نوع حملات تعداد زیادی از کلمات به عنوان کلمه عبور حدس زده میشوند ) ، cooke reply ، credential theft

◘ حق دسترسی :
حق دسترسی ، elevation اختیارات ، فاش شدن اطلاعات حساس ، date tempering ،حملات luring

◘ مدیریت تنظیمات :
دسترسی غیرمجاز به رابط های مدیریتی ، دسترسی غیرمجاز به تنظیمات ، عدم accountability شخصی ، دسترسی هایی با اختیارات بیشتر و حساب های کاربری سرویس .

◘ مدیریت Session ها :
Session fixation ،session hijacking

◘ داده های حساس :
دسترسی به داده های حساس در منابع داده
ردگیری بسته های داده در شبکه

◘ رمزنگاری :
ایجاد کلید های ضعیف یا مدیریت کلید ها به صورت ضعیف ، کدگذاری ضعیف یا دستی

◘ تعیین پارامتر ها :
تغییر رشته های درخواست ، تغییر فیلد های فرم ، تغییر کوکی ها ، تغییر سرآیند های http

◘ مدیریت استثنا ها :
فاش شدن اطلاعات ، denial of servicec

◘ ثبت کردن فعالیت کاربر :
Auditing و loggin کاربر انجام یک عمل انکار میکند . مهاجمان برنامه را مورد نفوذ قرار می دهند بدون آنکه ردگیری شوند . نفوذگر حملات و فعالیت های خودش را پنهان میکند .


◘ فیلتر کردن ورودی کاربر :
برسی کنید که برنامه شما چگونه ورودی کاربران را فیلتر میکند . زیرا بیشتر حملات در برنامه های وب از ورودی خطرناک نشات میگیرند . تزریق SQL ، XSS ، سرریز بافر ، تزریق کد و بعضی دیگر از حملات بدین گونه اند . جدول زیر تهدید های رایج عدم فیلتر کردن ورودی را نشان میدهد .

♦آسیب پذیری معمول فیلتر ورودی♦

◘ ورودی فیلتر نشده در جریان خروجی HTML :
برنامه میتواند مورد استفاده در حمله XSS قرار گیرد .

◘ ورودی فیلتر نشده برای ایجاد درخواست های SQL :
میتواند مورد حملات تزریق SQL قرار گیرد .

◘ اعتماد به هویت سنجی سمت کلاینت :
هویت سنجی سمت کلاینت به راحتی از میان برداشته میشود .

◘ استفاده از نام فایل های ورودی ، آدرس ها ، یا نام های کاربری برای تصمیات امنیتی :
برنامه میتواند شامل باگ شود که باعث مسائل امنیتی میشود .

◘استفاده از فیلتر های نرم افزار فقط برای ورودی های خطرناک :
این کار تقریبا غیرممکن است که بتوان این کار را به درستی انجام داد زیرا گستره وسیعی از ورودی های خطرناک وجود دارند . برنامه باید ورودی هارا محدود کند ، رد کند یا فیلتر کند . سوالات زیر را برای مسائل امنیتی فیلتر ورودی برسی کنید .

چگونه ورودی را فیلتر میکنید ؟
با ورودی چه میکنید ؟

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

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

◘ آیا محدوده های امن خود را میدانید ؟
اگر ورودی از یک محدوده امن می آید ، فیلتر ورودی نیاز نیست . اما اگر ورودی از جای امنی نمی آید لازم نیست .

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

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

◘ آیا داده های پایگاه داده را فیلتر میکنید ؟
همواره باید این ورودی ها را نیز فیلتر کنید ، مخصوصا اگر برنامه دیگری اطلاعاتی بر روی پایگاه داده می نیوسد . هیچ چشم پوشی درباره ی اعمال فیلتر ورودی آن برنامه نکنید .

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

◘ آیا به هویت سنجی و فیلتر کردن در سمت کلاینت اعتماد میکنید ؟
این کار را انجام ندهید . فیلتر کردن سمت کلاینت میتواند برای کمتر کردن بار سرور انجام میشود . اما برای موارد امنیتی به آن اعتماد نکنید زیرا به راحتی از میان برداشته میشود . تمام ورودی ها را در سرور فیلتر کنید .