حمله به برنامه های وبی (?)
در بخشهای پیشین از این مجموعه مقالات تعدادی از روشهای حمله به برنامههای وبی معرفی شدند. در ادامه به روشهایی که با استفاده از آنها میتوان به پایگاه داده سیستم نفوذ کرد اشاره میشود.
تزریق SQL
به زبان ساده این نوع حمله وارد کردن کد SQL به یک برنامه است، در شرایطی که توسعه دهنده برنامه قصد آن را نداشته و یا حتی پیشبینی آن را نیز نکرده باشد. ریشه این نوع حملات به ساختار طراحی ضعیف برنامه برمیگردد و تنها در مورد برنامههایی قابل انجام است که از روشهای ساخت رشته های SQL بهره میگیرند.
به مثال زیر توجه کنید:
Dim StrSQL as String = "SELECT CustomerID, CompanyName, ContactName, " & -
"ContactTitle FROM Customers WHERE CustomerID = "" & txtCustID.Text & """
در عبارت فوق با استفاده از روش ساخت رشته به صورت پویا یک رشته SQL تولید میشود که CustomerID با مقدار موجود در txtCustID جایگزین میشود. در شرایط عادی کاربر شناسه خود را در Box وارد مینماید، برنامه اقدام به جستجو در پایگاه داده نموده و پس از آن نتایج برای کاربر نمایش داده میشود. به عنوان مثال اگر کاربر شناسه ALFKI را وارد نماید نتایجی که برنامه تولید میکند به شرح زیر خواهد بود:
امنیت در پایگاههای داده ای - بخش اول
امنیت سرور
مقدمه
با گسترش استفاده از تکنولوژی وب و توسعه برنامه هایی که برای کارکرد درین بستر تولید میشوند مباحث مربوط به امنیت پایگاههای داده ای بعد جدیدتری پیدا کرده اند. هر چند از آغاز پیداش پایگاههای داده همواره امنیت و تامین آن یک دغدغه مهم و پیاده سازی مناسب و کارای آن یک خصوصیت بنیادی در پایگاههای داده بوده است اما بهر روی بحث امنیت (Security)همواره در سایه مقولاتی همچون عملکرد مناسب (Functionality) ، کارایی (Performance) و قابلیت اطمینان (Reliability) قرار میگرفت. به عبارتی هنوز هم چندان عجیب نیست اگر ببینیم یک برنامه رده سازمانی (Enterprise Level) با تعداد زیادی Client بدون هیچگونه ملاحظه امنیتی تولید شده و مورد استفاده باشد. حتی میتوان درین زمینه مثالهای جالبتری یافت. اغلب برنامه های Client-Server با نام کاربری sa(System Administrator) به پایگاههای داده متصل میشوند. از دید امنیتی این مطلب یک فاجعه محسوب میشود. هیچ تغییر و یا خرابکاری ای قابل ردیابی نیست، همه کاربران به همه اطلاعات دسترسی دارند و الی آخر.
آنچه ذکر شد ، در واقع تصویری از وضعیت جاری بود، که باید از دو منظر نگریسته شود: عدم وجود مکانیزمهای امنیتی مناسب و نیز در صورت وجود چنین مکانیزمهایی عدم بهره گیری صحیح ازانها یا نداشتن سیاست امنیتی مطلوب.
این وضعیت شاید در دنیای برنامه های مبتنی بر تکنولوژی های Mainframe یا Client-Server قابل تحمل بود اما در شرایط فعلی که برنامه ها با سرعت زیادی به سمت بهره گیری از بستر وب میروند ادامه این روند فاجعه بار است. در حال حاضر دیگر کاربران یک برنامه به صورت بالقوه تنها کارمندان یک سازمان نیستند. هر فردی میتواند به سادگی باز کردن یک مرورگر وب به پایگاه داده شما متصل شود و مطمئن باشید اگر مکانیزمهای امنیتی را رعایت نکرده باشید ، حذف تمامی داده های شما حتس از عهده یک نفوذگر عادی هم بر می آید.
اجازه دهید یک فرض اساسی را مطرح کنیم. مدیران IT یک سازمان بر دو دسته اند: مدیران نوگرایی که به صورت داوطلبانه سازمان را به سمت ارائه خدمات عمومی و گسترده هدایت میکنند و به همین دلیل تکنولوژی وب را به عنوان تنها بستر موجود برای ارائه این خدمات میپذیرند و مدیران سنتی محافظه کاری که قابلیت اطمینان و کارایی سیستم جاری را تحت هیچ شرایطی حاضر نیستند در معرض خطر قرار دهند. وب از نظر این گروه دوم کماکان یک تکنولوژی مشکوک غیر قابل اطمینان است. در واقع دلایل فنی این گروه دوم هنوز هم چشمگیر و قابل اعتناست، به خصوص گروهی که از mainframe ها صحبت میکنند. قابلیت اطمینان 0.99999 هنوز هم در دنیای غیر Mainframe یک رویاست.
زمانی که بحث امنیت در بستر وب مطرح میشود به صورت عمده سه جزء زیر مد نظر است:
امنیت سرور(Server Security)
امنیت در تصدیق اعتبار(Authentication Security)
امنیت محاوره(Session Security)
در ادامه نگاهی به جزئیات هریک از اجزای این دسته بندی خواهیم داشت.
شاید بخش عمده امنیت سرور مربوط به مدیر شبکه و نیز کارشناس امنیت اطلاعات باشد. ازین نظر DBA مسئولیت چندانی ندارد ، البته این به شرطی ست که قبلا متخصص امنیت شبکه مکانیزمهای امنیتی مناسب را جهت سرور پیش بینی کرده باشد. این مکانیزمها محدوده وسیعی از ابزارها و راه حلهای امنیتی را در بر میگیرد: فایروالها ، تشخیصگرهای نفوذ (Intrusion Detectors) ، ضد ویروسها ، ... از جمله ابزارها هستند . معماری امن شبکه و لحاظ کردن مسائل امنیتی درین معماری نیز میتواند حائز اهمیت باشد. تمامی این مباحث زیر مجموعه بحث امنیت شبکه می باشند که در بخش آتی به صورت خیلی مختصر به آن اشاره خواهیم کرد:
حمله به برنامههای وبی (?)
اگر خود و دشمن را میشناسید، نیازی به نگرانی در مورد نتیجه هر نبردی ندارید.
اگر خود را میشناسید ولی شناخت مناسبی از دشمن ندارید، در پی هر پیروزی باید نگران شکست باشید.
اگر نه خود را میشناسید و نه دشمن، در همه نبردها مغلوب خواهید بود.
برگرفته از کتاب «هنر جنگ» نوشته سان تزو
از یک دید امنیت شبیه جنگی تمام عیار است که هر روز و در تمام ساعات و لحظات ادامه دارد. بسیاری از آسیب پذیریها در سیستمهای نرمافزاری توسط توسعه دهندگانی ایجاد میشود که دانش اندکی در رابطه با نکات یا تهدیدات امنیتی دارند و نمیدانند که کدهایی که تولید میکنند تا چه حد آسیبپذیر است.
میزان استفاده از برنامههای وبی برای مدیریت تجارت و جذب مشتریهای جدید از طریق اینترنت در شرکتهای مختلف در حال افزایش است، و به این ترتیب بازار قابل توجهی برای متخصصین توسعه این گونه سیستمها بوجود آمده است. مزیت اصلی در استفاده از تجارت مبتنی بر وب برای شرکتهای مختلف در این است که میتوانند با استفاده از حداقل امکانات پیام خود را به مشتریان بازار در سراسر دنیا برسانند. وب طیف مخاطبان وسیعی را پوشش میدهد، این نکته با وجودی که یک ایدهآل تجاری است ولی میتواند اهداف شرکت را نیز به مخاطره بیندازد زیرا مشخص نیست که چه کسانی سایت شرکت را مشاهده میکنند. بینندگان سایت علاوه بر شرکای تجاری و مشتریان میتوانند کاربران بدخواهی باشند که با اهداف خرابکارانه در پی نفوذ به سیستم میباشند.
در این مقاله نقاط آسیب پذیری رایج مورد بررسی قرار میگیرند و راههایی که کاربران میتوانند از طریق آن برنامهها را تهدید کنند معرفی میشوند.
******
مقدمه ای بر IPSec
IP Security یا IPSec رشته ای از پروتکلهاست که برای ایجاد VPN مورد استفاده قرار می گیرند. مطابق با تعریف IETF (Internet Engineering Task Force) پروتکل IPSec به این شکل تعریف می شود:
یک پروتکل امنیتی در لایه شبکه تولید خواهد شد تا خدمات امنیتی رمزنگاری را تامین کند. خدماتی که به صورت منعطفی به پشتیبانی ترکیبی از تایید هویت ، جامعیت ، کنترل دسترسی و محرمانگی بپردازد.
در اکثر سناریوها مورد استفاده ،IPSec به شما امکان می دهد تا یک تونل رمزشده را بین دو شبکه خصوصی ایجاد کنید.همچنین امکان تایید هویت دو سر تونل را نیز برای شما فراهم می کند.اما IPSec تنها به ترافیک مبتنی بر IP اجازه بسته بندی و رمزنگاری می دهد و درصورتی که ترافیک غیر IP نیز در شبکه وجود داشته باشد ، باید از پروتکل دیگری مانند GRE در کنار IPSec استفاده کرد.
IPSec به استاندارد de facto در صنعت برای ساخت VPN تبدیل شده است.بسیاری از فروشندگان تجهیزات شبکه ، IPSec را پیاده سازی کرده اند و لذا امکان کار با انواع مختلف تجهیزات از شرکتهای مختلف ، IPSec را به یک انتخاب خوب برای ساخت VPN مبدل کرده است.
انواع IPSec VPN
شیوه های مختلفی برای دسته بندی IPSec VPN وجود دارد اما از نظر طراحی ، IPSec برای حل دو مسئله مورد استفاده قرار می گیرد :
1- اتصال یکپارچه دو شبکه خصوصی و ایجاد یک شبکه مجازی خصوصی
2- توسعه یک شبکه خصوصی برای دسترسی کاربران از راه دور به آن شبکه به عنوان بخشی از شبکه امن
بر همین اساس ، IPSec VPN ها را نیز می توان به دو دسته اصلی تقسیم کرد:
1- پیاده سازی LAN-to-LAN IPSec
این عبارت معمولا برای توصیف یک تونل IPSec بین دو شبکه محلی به کار می رود. در این حالت دو شبکه محلی با کمک تونل IPSec و از طریق یک شبکه عمومی با هم ارتباط برقرار می کنند به گونه ای که کاربران هر شبکه محلی به منابع شبکه محلی دیگر، به عنوان عضوی از آن شبکه، دسترسی دارند. IPSec به شما امکان می دهد که تعریف کنید چه داده ای و چگونه باید رمزنگاری شود.
2- پیاده سازی Remote-Access Client IPSec
این نوع از VPN ها زمانی ایجاد می شوند که یک کاربر از راه دور و با استفاده از IPSec client نصب شده بر روی رایانه اش، به یک روتر IPSec یا Access server متصل می شود. معمولا این رایانه های دسترسی از راه دور به یک شبکه عمومی یا اینترنت و با کمک روش dialup یا روشهای مشابه متصل می شوند. زمانی که این رایانه به اینترنت یا شبکه عمومی متصل می شود، IPSec client موجود بر روی آن می تواند یک تونل رمز شده را بر روی شبکه عمومی ایجاد کند که مقصد آن یک دستگاه پایانی IPSec ،مانند یک روتر، که بر لبه شبکه خصوصی مورد نظر که کاربر قصد ورود به آن را دارد، باشد.
در روش اول تعداد پایانه های IPSec محدود است اما با کمک روش دوم می توان تعداد پایانه ها را به ده ها هزار رساند که برای پیاده سازی های بزرگ مناسب است.
رمزنگاری
?- معرفی و اصطلاحات
رمزنگاری علم کدها و رمزهاست. یک هنر قدیمی است و برای قرنها بمنظور محافظت از پیغامهایی که بین فرماندهان، جاسوسان، عشاق و دیگران ردوبدل میشده، استفاده شده است تا پیغامهای آنها محرمانه بماند.
هنگامی که با امنیت دیتا سروکار داریم، نیاز به اثبات هویت فرستنده و گیرنده پیغام داریم و در ضمن باید از عدم تغییر محتوای پیغام مطمئن شویم. این سه موضوع یعنی محرمانگی، تصدیق هویت و جامعیت در قلب امنیت ارتباطات دیتای مدرن قرار دارند و میتوانند از رمزنگاری استفاده کنند.
اغلب این مساله باید تضمین شود که یک پیغام فقط میتواند توسط کسانی خوانده شود که پیغام برای آنها ارسال شده است و دیگران این اجازه را ندارند. روشی که تامین کننده این مساله باشد "رمزنگاری" نام دارد. رمزنگاری هنر نوشتن بصورت رمز است بطوریکه هیچکس بغیر از دریافت کننده موردنظر نتواند محتوای پیغام را بخواند.
رمزنگاری مخففها و اصطلاحات مخصوص به خود را دارد. برای درک عمیقتر به مقداری از دانش ریاضیات نیاز است. برای محافظت از دیتای اصلی ( که بعنوان plaintext شناخته میشود)، آنرا با استفاده از یک کلید (رشتهای محدود از بیتها) بصورت رمز در میآوریم تا کسی که دیتای حاصله را میخواند قادر به درک آن نباشد. دیتای رمزشده (که بعنوان ciphertext شناخته میشود) بصورت یک سری بیمعنی از بیتها بدون داشتن رابطه مشخصی با دیتای اصلی بنظر میرسد. برای حصول متن اولیه دریافتکننده آنرا رمزگشایی میکند. یک شخص ثالت (مثلا یک هکر) میتواند برای اینکه بدون دانستن کلید به دیتای اصلی دست یابد، کشف رمزنوشته (cryptanalysis) کند. بخاطرداشتن وجود این شخص ثالث بسیار مهم است.
رمزنگاری دو جزء اصلی دارد، یک الگوریتم و یک کلید. الگوریتم یک مبدل یا فرمول ریاضی است. تعداد کمی الگوریتم قدرتمند وجود دارد که بیشتر آنها بعنوان استانداردها یا مقالات ریاضی منتشر شدهاند. کلید، یک رشته از ارقام دودویی (صفر و یک) است که بخودیخود بیمعنی است. رمزنگاری مدرن فرض میکند که الگوریتم شناخته شده است یا میتواند کشف شود. کلید است که باید مخفی نگاه داشته شود و کلید است که در هر مرحله پیادهسازی تغییر میکند. رمزگشایی ممکن است از همان جفت الگوریتم و کلید یا جفت متفاوتی استفاده کند.
دیتای اولیه اغلب قبل از رمزشدن بازچینی میشود؛ این عمل عموما بعنوان scrambling شناخته میشود. بصورت مشخصتر، hash functionها بلوکی از دیتا را (که میتواند هر اندازهای داشته باشد) به طول از پیش مشخصشده کاهش میدهد. البته دیتای اولیه نمیتواند از hashed value بازسازی شود. Hash functionها اغلب بعنوان بخشی از یک سیستم تایید هویت مورد نیاز هستند؛ خلاصهای از پیام (شامل مهمترین قسمتها مانند شماره پیام، تاریخ و ساعت، و نواحی مهم دیتا) قبل از رمزنگاری خود پیام، ساخته و hash میشود.
یک چک تایید پیام (Message Authentication Check) یا MAC یک الگوریتم ثابت با تولید یک امضاء برروی پیام با استفاده از یک کلید متقارن است. هدف آن نشان دادن این مطلب است که پیام بین ارسال و دریافت تغییر نکرده است. هنگامی که رمزنگاری توسط کلید عمومی برای تایید هویت فرستنده پیام استفاده میشود، منجر به ایجاد امضای دیجیتال (digital signature) میشود.
Cross-Site ing
این نوع حمله خیلی مشابه به حملات تزریق اسکریپت است و در مواقعی اتفاق میافتد که کد اسکریپت توسط صفحات پویای وب سایر سایتها در مرورگر وب وارد شود. در این نوع حملات، هدف هکر خود سایت نیست، بلکه کاربران آن مد نظر میباشند. فرض کنید که یک سایت عبارات جستجو را با استفاده از مجموعه QueryString (در صورتی که برنامه با استفاده از فناوری .NET توسعه داده شده باشد) و از طریق متد HTTP Get دریافت میکند، و سایر سایتها میتوانند عبارات جستجو را با عبارت پرس و جوس Search ارسال کنند.
YourSite.com?Search=asp.net
صفحه جستجو رشته پرس و جو را خوانده و در پایگاه داده به دنبال عبارت مورد نظر میگردد و در نهایت نتیجه جستجو را نمایش میدهد. در صورتی که دادهای متناسب با عبارت مورد نظر در پایگاه داده وجود نداشته باشد، پیامی مبنی بر یافت نشدن جواب تولید و نمایش داده خواهد شد.
در صفحه جستجو قالبی کدهای زیر وجود دارند:
void Page_load( Src,EventArgs E)
{
String sSearchStr="";
NameValueCollection ColQstr = Request.QueryString;
String[] qStrAry = colQstr.AllKeys;
for (int i = 0; i<= qStrAry.GetUpperBound(0); i++)
{
if (qStrAry[i] == "search")
{
String[] qStrAry = colQstr.AllKeys;
for (int j = 0; j<=qStrAryVal.GetUpperBound(0); j++)
{
sSearchStr = qStrAryVal[j];
break;
}
}
}
if (sSearchStr.Trim() != "")
{
if (SearchDataStore(sSearchStr) == false)
lblResult.Text = "The search keyword " + sSearchStr +
" did not produce any results. Please try again.";
}
}
bool SearchDataStore(String sSearchStr)
{
/*Perform the search against the datastore and display the
result. if there are no results then return false.*/
return false;
}
کلیدها در رمزنگاری
با روشن شدن اهمیت وجود کلیدها در امنیت دادهها، اکنون باید به انواع کلیدهای موجود و مکان مناسب برای استفاده هر نوع کلید توجه کنیم.
?- کلیدهای محرمانه (Secret keys)
الگوریتمهای متقارن مانند DES از کلیدهای محرمانه استفاده میکنند؛ کلید باید توسط دو طرف تراکنش منتقل و ذخیره شود. چون فرض بر این است که الگوریتم شناخته شده و معلوم است، این قضیه اهمیت امن بودن انتقال و ذخیره کلید را مشخص میسازد. کارتهای هوشمند معمولا برای ذخیره کلیدهای محرمانه استفاده میشوند. در این حالت تضمین اینکه قلمرو کلید محدود است، مهم است: باید همیشه فرض کنیم که یک کارت ممکن است با موفقیت توسط افراد غیرمجاز تحلیل گردد، و به این ترتیب کل سیستم نباید در مخاطره قرار گیرد.
?- کلیدهای عمومی و اختصاصی (Public and private keys)
امتیاز اصلی و مهم سیستمهای کلید نامتقارن این است که آنها اجازه میدهند که یک کلید (کلید اختصاصی) با امنیت بسیار بالا توسط تولید کننده آن نگهداری شود در حالیکه کلید دیگر (کلید عمومی)میتواند منتشر شود. کلیدهای عمومی میتوانند همراه پیامها فرستاده شوند یا در فهرستها لیست شوند (شروط و قوانینی برای کلیدهای عمومی در طرح فهرست پیامرسانی الکترونیکی ITU X.500 وجود دارد)، و از یک شخص به شخص بعدی داده شوند. مکانیسم توزیع کلیدهای عمومی میتواند رسمی (یک مرکز توزیع کلید) یا غیررسمی باشد.
محرمانگی کلید اختصاصی در چنین سیستمی مهمترین مساله است؛ باید توسط ابزار منطقی و فیزیکی در کامپیوتری که ذخیره شده، محافظت گردد. کلیدهای اختصاصی نباید هرگز بصورت رمزنشده در یک سیستم کامپیوتر معمولی یا بشکلی که توسط انسان قابل خواندن باشد، ذخیره شوند. در اینجا نیز کارت هوشمند برای ذخیره کلیدهای اختصاصی یک فرد قابل استفاده است، اما کلیدهای اختصاصی سازمانهای بزرگ معمولا نباید در یک کارت ذخیره شود.
?- کلیدهای اصلی و کلیدهای مشتقشده (Master keys and derived keys)
یک روش کاستن از تعداد کلیدهایی که باید منتقل و ذخیره شوند، مشتق گرفتن از آنهاست هر زمانی که استفاده میشوند. در یک برنامه اشتقاق کلید، یک کلید اصلی همراه با چند پارامتر مجزا برای محاسبه کلید مشتقشده استفاده میشود که بعدا برای رمزنگاری استفاده میگردد. برای مثال، اگر یک صادرکننده با تعداد زیادی کارت سروکار دارد، میتواند برای هر کارت، با استفاده از کلید اصلی، شماره کارت را رمز کند و به این ترتیب کلید مشتقشده حاصل میشود و به آن کارت اختصاص داده میشود.
شکل دیگری از کلیدهای مشتقشده با استفاده از tokenها که محاسبهگرهای الکترونیکی با عملکردهای بخصوص هستند، محاسبه میشوند. آنها ممکن است بعنوان ورودی از یک مقدار گرفته شده از سیستم مرکزی، یک PIN وارد شده توسط کاربر و تاریخ و زمان استفاده کنند. خود token شامل الگوریتم و یک کلید اصلی است. چنینی tokenهایی اغلب برای دسترسی به سیستمهای کامپیوتری امن استفاده میشوند.
اسپم چیست؟
اگر برای مدت طولانی است که از اینترنت استفاده میکنید، بدون شک تاکنون تعداد زیادی از ایمیلهای ناخواسته دریافت کردهاید. بعضی ادعا میکنند که شما را بسرعت ثروتمند میکنند. بقیه قول محصولات یا خدمات جدید را میدهند. بعضی فضایی از صندوق پیستی شما را اشغال میکنند و از شما میخواهند که ایمیل را به بقیه ارسال کنید یا وبسایت مشخصی را ببینید. در جامعه اینترنتی ایمیلهای بعضاً تجاری ناخواسته، “اسپم” نامیده میشوند. اسپم اثری بیش از مزاحمت برای استفادهکنندگان اینترنت دارد و بطور جدی بازدهی شبکه و سرویسدهندگان ایمیل را تحت تاثیر قرار میدهد. و این به این دلیل است که فرستندگان اسپم از هزینه بسیار پایین ایمیل استفاده میکنند و صدهاهزار یا حتی میلیونها ایمیل را در یک زمان ارسال میکنند. حملههای اسپم پهنای باند زیادی را میگیرد، صندوقهای پستی را پر میکند و زمان خوانندگان ایمیل را تلف میکند. گاهی میتوان اسپمها را از عناوین عجیب، غیرمنطقی و مضحکشان تشخیص داد.
آمار زیر درصد ایمیلهایی را که در ماههای اخیر بعنوان اسپم تشخیص داده شدهاند، به تفکیک ماه در نمودار و جدول زیر مشخص شدهاند.
درصدهایی که از کل ایمیلها،
بعنوان اسپم شناخته شدهاند
(در مدت یک سال)
March 2004
63%
February 2004
62%
January 2004
60%
December 2003
58%
November 2003
56%
October 2003
52%
September 2003
54%
August 2003
50%
July 2003
50%
June 2003
49%
May 2003
48%
April 2003
46%
چگونه با اسپم مقابله کنیم؟
لیست کل یادداشت های این وبلاگ
ازدواج با کسی که والدین تمایل ندارند
عشق چیست و آیا لازمه ی ازدواج است؟
اختلاف طبقاتی چه پیامدهایی می تواند به همراه داشته باشد؟
مسائل مهم در دوران نامزدی خانمها
دلواپسی های دوران نامزدی ( قسمت اول)
عشق و عاشقی های دوران نامزدی
نامزدی ،بهترین فرصت عاشقی
راز تفاوت ساختار جسمی و روانی زن و مرد
Emotional Intelligence
[عناوین آرشیوشده]