بخشی از مقاله
*** این فایل شامل تعدادی فرمول می باشد و در سایت قابل نمایش نیست ***
افزايش امنيت در نرم افزار هاي تحت وب
چکيده : با توجه به گسترش روز افزون نرم افزارهاي تحت وب و انجام انواع تبادلات ملي و تجاري بروي بستر وب ، نياز به امنيت بـالا در ايـن نوع از نرم افزار امري ضروري است . در حل حاضر بسياري از سـازمانها و موسسات دولتي و خصوصي در داخـل و خـارج از کـشور، بـسياري از خدمات خود را بر بستر وب ارائه مي دهند . از جمله ايـن خـدمات مـي توان به انواع ثبت نام هاي اينترنتي ، دوره هاي آموزش مجـازي ، ارائـه انواع خدمات بانکي ، خريد و فروش آنلاين کالا و صـدها خـدمت ديگـر که امروزه با استفاده از نرم افزار هاي تحت وب چه در سطح اينترنـت و چه در سطح شبکه هاي خصوصي مورد استفاده وسـيع مـي باشـد . در اين مقاله روش هاي مرسومي که هکر ها براي هک کردن نرم افزارهاي تحت وب استفاده مي کنند معرفـي مـي گـردد و همچـنن راه کارهـاي مقابله با اين حملات در لايه برنامه نويسي نيز بيان مي شود . در پايـان چند نرم افزار هايي معرفي مي گردد کـه نـرم ازار هـاي تحـت وب را از نظر انواع آسيب پذيري ها مورد تست و آزمون قرار مي دهد.
واژه هاي کليدي : Encryption– Hacker --SQl injection CRLF injection - نرم افزار تحت وب
١- مقدمه
امروزه با حضور انواع ديواره هاي آتش ، آنتـي ويروسـهاي قـوي و همچنين افزايش امنيت در نـرم افـزار هـاي شـبکه و اسـتفاده از تکنولوژيهاي جديد در قطعات سخت افزاري شبکه ، باعث کـاهش آمار هک شدن سرور هاي وب شده است و از اين رو هکر هـا کـم کارتر از گذشته شده اند ! ولي هچ چيزي نمي تواند جلـودار هکـر هاي سمج شود و آنها را از کار بيکار کند . اکنون هکـر هـا توجـه خود را به هک کردن سايت ها و نرم افزار هاي تحـت وب دوختـه اند تا از نقاط ضعف طراحان نرم افزار هاي تحت وب استفاده کنند سايت مورد نظر را نابود سازند . در ادامه اين مقاله به مرسوم ترين شيوه هاي هک سايت هاي اينترني اشاره مي شود و راه کار هـاي مقابله با اينگونه حملات نيز بيان مي شود.
٢- نرم افزار تحت وب (Web Based) چيست ؟
نرم افزار تحت وب ، برنامه کـاربردي اسـت کـه بـروي وب سـرور سازمان يا شرکت نصب است و کاربران مجاز اينترنت يا اينترانت مي توانند از آن استفاده کنند و از خدمات آن بهـره منـد شـوند .
يک نرم افزار تحت وب در سه لايه قابل تعريف مي شود ، لايه اول مرورگرهاي وب هستند ، لايه دوم توليد کننده محتوا مي باشد که با استفاده از تکنو لوژيهاي سـمت مـشتري ماننـد Java Script ، VB Script و يا سمت سـرور ماننـد ASP &CGI و PHP پيـاده سازي مـي شـود . لايـه سـوم نيـز سيـستمهاي بانـک اطلاعـاتي مي باشد که از جمله پرکاربردترين آنها مـي تـوان بـه My SQL & MS SQL &Oracle * DB٢ اشاره کرد .
٢ – طرز کار نفوذگران نرم افزار هاي تحت وب
هکرها گنجينه اي از انواع مکانيزمهاي نفوذ به نرم افزارهـاي تحـت وب براي خود دارند که با توجه بـه شـرايط بهتـرين شـيوه را بـراي آسـيب رساني استفاده مي کنند . از جمله ويژگيهايي که هکـر بـراي شناسـايي راه هاي نفوذ به سيستم مورد ارزيابي قرار مي دهد به قرار زير است :
١-٢ بررسي زيرساختار سرور و سيستم عامل سرور
هکر در ابتدا سعي مي کند با استفاده از يک سـري ابـزار هـايي کـه بـه Sniffer Scanner معروفند به شناسايي ساختار سـرور مـي پـردازد تـا بتواند به ماهيت سيستم عامل که وب سرور بروي آن در حال جراسـت پي ببرد ، از جمله معروفترين اين سيستم عامل ها سرور مـي توانـد بـه Windows, unix , Redhat linux , Sun Solaris , FreeBSD اشاره کرد . در فاز بعدي نفـوذگر بـه شناسـايي نـوع وب سـرور مـورد استفاده مي پردازد تا بتواند از حفره هاي امنيتي آنها براي نفوذ به سرور استفاده کند ، از معروفترين وب سرور هاي مي توان به Apache ،IIS ,(Lighttpd Oversee, GWS)Google Web Server *Ngnix اشاره کرد که به ترتيب موارد کاربرد ذکر شده .
٢-٢ نقشه برداري از عملکرد سايت
يک هکر با حوصله کل سايت را پويش مي کند تا بتواند حفره هاي امنيتي و اشتباهاتي که از چشم برنامه نويس پنهان مانده را بيابد و از آن براي نفوذ و آسيب رساندن به نرم افزار تحت وب استفاده کند . هکر براي اين منظور از انواع مکانيزم هايي از قبيل تزريق اسکريپ هاي آلوده به سايت و همچنين جهل هويت براي نفوذ به نرم افزار تحت وب استفاده مي کند. هکر ها با استفاده از اسکريپ هاي آلوده (جهت رخ دادن استثنا پبش بيني نشده و برگرداندن يک سري داده بعنوان خطا که براي هکر بسيار ارزشمند است ) به سيستم تحت وب و بازخورد دريافتي سعي در يافتن راهي براي نفوذ يا آسيب رساني دارند ، در اينجا اين موضوع اهميت پيدا مي کند که برنامه نويس يک نرم افزار تحت وب بايد با انواع روش هاي نفوذ آشنا باشد تا با استفاده از راه کارهاي مناسب تا حد امکان آسيب پذيري سيستم را کاهش دهد .
٣-٢ اعتبار سنجي ورودي ها در سايت
از جمله روشهاي ديگري که هکر ها براي نفوذ به سايت مـورد اسـتفاده قرار مي دهند اعتبار سنجي در مقابل انواع داه هاست ، اگر برنامه نويس نرم افزار تحت وب در اين مورد کوتاهي کنـد بـه احتمـال فـروان بايـد منتظر تبعات زيانبار باشد ! چه بسا در برخي موارد هکر ها مي توانند با استفاده از اين نقطه ضعف دستورات بسيار خطرناک را بروي سرور اجرا کنند که به قيمت از دست رفتن اطلاعات نرم افزار و آسيب ديدن ساير سايت ها و نرم افزار هاي تحت وبي کـه سـرور ميزبـان آنهاسـت تمـام شود.
٢-٤ ضربه آخر
اکنون هکر با توجه به اطلاعاتي که از ماهيت سرور و نقـاط ضـعف نـرم افزار تحت وب بدست آورده و پس از ايزولـه کـردن آنهـا ضـربه آخـر را خواهد ضد و مي تواند آسيب هايي جدي به صـاحبان وب سـايت ، وب سرور و کاربراني که از اين سايت ها و نرم افزار هاي تحت وب اسـتفاده مي کنند وارد کند، از قبيل تغيير home page گرفته ، پاک کردن داده ها در بانک اطلاعاتي و يا فايل هـاي مهـم و همچنـين اسـتفاده از وب سرور قرباني بعنوان پايگاهي براي انتشار ويروس و کرم هـاي اينترنتـي جهت آلوده ساختن کامپيوتر هاي کاربران و بازديد کنندگاني که جهت استفاده از نرم افزار تحت وب به آن مراجعه کرده انـد و نـا خواسـته در دام ويروس افتاده اند !
٣ – شيوه هاي محبوب هکر ها براي نفوذ
در اين قسمت از اين مقاله به مرسوم ترين شيو ه هاي هـک کـردن وب سايت ها و نرم افزارهاي تحت وب در لايه application و همچنين راه کارهاي مقابله با اينگونه حملات نيز بيان مي شود.
١-٣ تزريق دستورات SQL آلوده به سايت (Sql injection)
اين شيوه نفوذ يکي از پرکاربردترين راه نفوذ بـه وب سـايت هـا و نـرم افزار هاي تحت وب مـي باشـد کـه هکـر هـا بـراي آسـيب رسـاندن و دزديدن اطلاعات از آن استفاده مي کنند ، ايـن شـيوه از پرکـاربردترين روش هايي حمله در لايه کاربردي (application) است که امروزه به کررات مورد استفاده قرار مي گيرد و با اين وجـود هنـوز بـسياري از سايت ها هستند که در مقابل اينگونه حمـلات کـاملاً آسـيب پذيرنـد .
بعنوان مثال يک هکر مي تواند به فورمي که براي ورود به نرم افزار نيـاز به نام کاربري و رمز عبور دارد بگويد که بدن نياز به نام کـاربري و رمـز عبور اجازه دسترسي بدهد !
وب سايت ها و نرم افزار هاي تحت وب به کاربران مـشروع خـود اجـاره مي دهند تا اطلاعاتي را ارسال کنند و همچنين داده هـايي را از پايگـاه وب بازيابي کنند . بانک اطلاعات هسته مرکزي وب سايت است که داده هاي مورد نياز کاربران و ساير موارد از جمله اطلاعات محصولات ، اخبار ، مقالات آموزشي را در آن ذخيره مي شود و مي توان ايـن اطلاعـات را پـس ار بازيـابي در اختيـار کـاربران قـرار داد . هکـر هـا بـا اسـتفاده از دستورات غير اصولي زبان SQL در پس زمينه به وب سايت هـا حملـه مي کنند که در صورت موفقيت مي توانند بـه اطلاعـاتي ارزشـمندي از نرم فزار تحت وب دست يابند .برخي از قسمت هاي سـايت در معـرض خطر نفوذ حملاتي از نوع Sql injection قرار دارندکه از جمله آنها مي توان به فورم ورود به سيـستم ، جـستجو در سـايت ، فـورم ارسـال پيشنهاد و انتقاد ، بخش خريد آنلاين اشاره کرد.
لازم مي بينم براي درک بهتر مثالي را مطرح کنم ، فرض کنيد کـه مـا فورمي در وب سايت خود داريم که قـرار اسـت کـاربران سـايت بعـد از اينکه نام کاربري و رمز عبـور خـود را وارد کردنـد بتوانـد وارد سيـستم شوند و سوالات خود را در بخش سـوال و جـواب (Faq) درج کننـد .
بعد از اينکه کاربر نام کاربري و رمز عبور خود را وارد کرد منتظر تاييـد نرم افزار مي ماند تا بعد از اينکه صحت نام کـاربري و رز عبـور بررسـي شد اجاره کار با نرم افزار تحت وب به وي داده شود. بـراي گـرفتن ايـن تائيديه تعاملي بين نرم افزار و بانک اطلاعـاتي انجـام مـي گيـرد . ايـن مکانيزم نفوذ مي تواند به تمامي تکنولوژي هاي برنامه نيسي که جهـت توليد سايت هاي دايناميک و پويا اسـتفاده مـي شـود آسـيب برسـاند ، تلنولوژيهايي نظير : JSP and CGI ,PHP ,ASP.Net ,ASP . براي تمامي اين تکنولوژي فقط به يک ابزار جهت هک کردن نياز اسـت و آن چيزي جز يک مرورگر وب سايت نيست !
سوال : شايد برايتان سوال پيش آمده باشـد گـه چـرا ارسـال مـستقيم دستورات SQL بروي بانک اطلاعاتي که در پشت ديوارهـاي هـا آتـش (Firewall) و مکانيزم هاي امنيتي ديگر قرار دارد ممکن است ؟ جواب : از زمانيکه وب سايت بر بستر وب انتشار مي يابد سياست هـاي امنيتي براي حفاضت از آن در نظـر گرفتـه مـي شـود و بـا اسـتفاده از فايروال ها و ساير ابزار هاي امنيتي از پـورت هـا ي آن در مقابـل نفـوذ حفاظت مي شود ، ولـي هميـشه اجـازه بـروز آوري و ايجـاد داده هـاي جديد در بانک اطلاعاتي فراهم است زيرا براي تغيير داده هـا و افـزودن داده هاي جديد بايد به بانک طلاعاتي دسترسي داشت .
زبان SQL به شما امکان مي دهد که داده ها را تغيير دهيـد و يـا داده هاي جديد را به بانک اطلاعاتي بيفزاييد و در نهايت اطلاعات را بازيـابي کنيد . در واقع زبان SQL تنها راهي است که اين امکان را فـراهم مـي سازد که وب سايت ها و نرم افزار هـاي تحـت وب بتواننـد بـا بانکهـاي اطلاعاتي رابطه اي ارتباط داشته باشد . از جمله بانـک هـاي اطلاعـاتي رابطـه اي مـي تـوان بـه My SQL ,Microsoft Access ,Oracle
, Microsoft SQL server اشاره کرد .
در اينجا قطعه کدي را مي بينيم که اکثر برنامه نويسان نرم افـزار هـاي تحت وب از اين مکانيزم براي نوشـتن سيـستم Login اسـتفاده مـي کنند ، به کد زير توجه کنيد :
کد Html بالا دو فيلد در فورم ظاهر مـي کنـد کـه بـراي گـرفتن نـام کاربري و رمز عبور از کاربر در نظر گرفته شده است حالا کد SQL که بصورت معمول در لايه برنامـه نويـسي از سـوي برنامـه نويـسان مـورد استفاده قرار مي گيرد را بررسي مي کنيم :
اگر برنامه نويس مقادير متغير هاي username@ و password@ بصورت مستقيم و بدون فيلتر کردن از فورم کاربري دريافت کند کار هکر ها را براي هک کردن سايت بسيار آسان کرده است . به کد زير توجه کنيد :
هکر فرض مي کند که کاربري با نام Reza در اين سايت يا سيستم تحت وب عضويت دارد ولي به رمز عبور آن دسترسي ندارد ، اگر سياست هاي صحيح امنيتي از سوي برنامه نويس در نظر گرفته نشده باشد هکر با استفاده از تجربه و خلاقيت خود به سايت حمله خواهد کرد ، همان گونه که در کد ديديد هکر براي رمز عبور رشته OR 'x'=x'' را وارد مي کند ، حال خود قضاوت کنيد . اين ترفند به هکر اجاره مي دهد که از قسمت اول شرط WHERE صرف نظر شود و هکر موفق مي شود بدون اينکه واقعاً رمزعبور و نام کاربري را بداند وارد سيستم مي شود .
راه حل : بنده در اينجا الگوريتمي را بيان مي کنم که بر اساس تجربيات شخصي خود در طراحي نرم افزار هاي تحت وب طراحي شده . من از اين الگوريتم در سايت يکي از سازمان هاي کشور استفاده کرده ام و تا کنون پس از گذشت ک سال و با بيش از يک ميليون و سيصد هزار بازديد هيچ نفوذي به سايت با استفاده از SQL injection گزارش نشده . اين الگوريتم به زيان Vb.Net است و با اندکي تغيير مي توانيد در ساير زبان ها از آن استفاده کنيد :
اين تابع در صورتي که کاراکتر هاي آلوده در ورودي رشته باشد آنها را از رشته حذف مي کند . اين تابع را مي توان به گونه اي ديگر نيز تغيير داد که بصورت تشخيص دهنده عمل کند و با برگشت مقدار true يا false بيان کند که رشته ورودي آلوده است يا نه .
٢-٣ حملاتي از نوع (Cross Site Scripting)CSS or XSS
هکر ها دائماً در حال کشف روش هاي جديد نفوذ هستند تا با اسـتفاده از آن به داده هاي بسيار مهم مانند رمز عبور حـساب هـاي اينترنتـي و اطلاعات مهم دولتي دسترسي داشته باشند . همانگونه کـه در شـکل ١ مشاهده مي کنيد مشخص است که بيشترين تعداد حمله به سايت ها از بين روش هاي شناخته شده حمله هايي از نوع Cross site Scripting است . در حالت کلي در اين روش هکر بعنوان کاربر نهايي نرم افزار کـد هاي خطرناک براي سايت ارسال مي کند که با استفاده از آنها اطلاعات مهمي را نيز به دست مي آورد .