امنيت در نرم افزار و برنامه نويسي(قسمت اول)
    -(8 Body)
|
امنيت در نرم افزار و برنامه نويسي(قسمت اول)
Visitor
624
Category:
دنياي فن آوري
در ادبيات مرسوم مباحث مرتبط با امنيت نرم افزار ، ديباگر ، نرم افزاري است که امکان بررسي دقيق روند اجراي يک برنامه اجرائي يا کتابخانه يا درايور را فراهم ميکند و در اين روند ، کنترل کامل و جزئي حافظه ، متغيرها و توابع ، تراکنشهاي پردازنده و حافظه و ديسک و ... و ارتباط با کتابخانه هاي اشتراکي در اختيار ديباگر ميباشد . ديباگر برنامه اجرائي يا کتابخانه يا درايور را با ترتيباتي قابل پيکره بندي فراخواني ميکند ، به توسعه گر يا آزمايش کننده اين امکان را ميدهد که در مواقع به خصوصي روند اجرا را متوقف يا منوط به وقوع اتفاق خاصي نمايد ، يا حافظه را براي کشف مقدار يا مقادير به خصوصي جستجو کند يا تراکنشهاي برنامه با کتابخانه هاي همراه ، کتابخانه هاي سيستم عامل ، سخت افزارهاي همراه و ...را کنترل نمايد . در واقع وظيفهء اصلي يک ديباگر کنترل کامل فرآيند اجرا شدن يا فراخواني شدن يک برنامه يا کتابخانه اشتراکي است . اطلاعاتي که ميتوان با استفاده از ديباگرها بصورت معمول بدست آورد : • - هر آنچه بين نرم افزار و حافظه اتفاق مي افتد . آدرس دهي متغيرها و توابع ، جايگزيني مقادير ، تخصيص حافظه و آزاد سازي ، محل دستورات زبان ماشين در حافظه ، داده هاي در حال ارسال به پردازنده و ... - وضعيت لحظه به لحظهء پردازنده ؛ محتويات رجيسترها و ... - هر آنچه بين نرم افزار و کتابخانه هائي که از آن تغذيه ميکند واقع ميگردد . فراخواني توابع ، کلاسها يا اشياء ؛ آدرس کتابخانه ها و توابع مربوطه در حافظه و ... عموم ديباگرها متداول غير از موارد فوق اطلاعات متنوع ديگري را نيز فراهم ميکنند که بسته به مورد و نوع کاربرد متفاوت هستند . انواع ديباگر ها :: از ديد لايهء کاربرد : • - Application Mode - Kernel Mode ديباگرهاي Application Mode فقط به Ring3 و فضاي User Mode سيستم عامل دسترسي دارند و امکان Resolve آدرسها فقط در اين محدوده برايشان موجود است اما ديباگرهاي Kernel Mode يا اصطلاحا" Kernel Debugger ها امکان دسترسي به فضاي آدرسي Ring0 يا Kernel Space را نيز دارند و در صورت وجود Symbol file هاي ، امکان Resolve آدرسها در فضاي کرنل نيز برايشان وجود دارد . از ديد نوع عملکرد : • - Source code Level - Assembler Level ديباگرهاي Source Code Level با استفاده از سورس کد برنامه ، وظايف مذکور رو کنترل و بررسي ميکنند و عموما" هنگام توسعهء يک نرم افزار ، به خطا يابي يا ايجاد روندهاي کنترل خطاي منطقي کمک بسياري ميکنند اما ديباگرهاي Assembler Level بدون استفاده يا نياز به سورس کد و صرفا" با داشتن نسخهء باينري ، وظايفشون رو انجام ميدن . امکان کنترل کد ، در سطح Assembler وجود دارد يعني فرضا" ميتوانيد روي دستوري مانند Call يا Test يا Mov برنامه مورد نظر يک BreakPoint بگذاريد . ديباگرها اولين وسيله مورد استفاده نفوذگران نرم افزاري است فلذا روتين هاي آنتي ديباگ هميشه يکي از عناوين مطرح در روشها و ابزارهاي حفاظت از نرم افزار هستند . اين روتينها عموما" از اين روشها براي شناسائي ديباگر استفاده ميکنند : • - استفاده از مشخصات فردي ديباگر : نام پرسه ، مشخصات ثبت شده در رجيستري ، مولفه هاي هدر و ... - بررسي حافظه مجازي اختصاص يافته به برنامه و تست وجود ديباگر ( Hook آدرس يا Hook آدرس ِ آدرس ِ توابع ديباگ ويندوز و بررسي وجود پوينتر به آنها يا عدم وجود آن ) - بررسي پردازنده ( مخصوص روتين هاي Ring0 ) براي تمامي اين Trick ها و روشهائي که از هر کدام منشعب ميشود ، نيز ، بالتبع روشهاي متقابلي وجود دارد ؛ در مجموع چيزي به عنوان متوقف کردن قطعي همه ديباگر ها منطقا" غير ممکن است ؛ بهترين روتينهاي موجود که هر کدوم با مدتها تحقيق و بررسي ارائه شده اند در کمترين زمان ممکن by Pass شدن . استفاده از روتين هاي آنتي ديباگ براي حفاظت از نرم افزار روش مناسبي براي کند تر کردن فعاليت نفوذگران تازه کار تر است ، نه چيزي بيشتر . بجاي ليست کردن ديباگرها و توضيحات غير مفيد در مورد هر کدوم ، توصيه هاي شخصي ام رو مينويسم که صرفا" نشان دهندهء ديدگاه خودم است نه چيز ديگر . - Windbg : ديباگر مايکروسافت . رابط کاربري نسبتا" خوبي داره و به خوبي با Windows Symbol files متصل ميشه . مطمئنا" داشتنش براي کساني که به هر دليل به ديباگر نياز دارند يک ضرورته . - Ollydbg : قدرتمند ترين ديباگر Assembler Level و Application Mode موجود . اسکريپتهاي متعددي براي خودکار سازي بسياري از وظايف توسط افراد مختلف براش نوشته شده . زندگي بدون Olly براي نفوذگران نرم افزاري قطعا" غير ممکنه . Olly توسط BCB6 توسعه داده شده/ميشه . - SoftICE : قدرتمند ترين ديباگر Kernel Mode که بصورت همزمان Source Level و Assembler Level نيز هست . بجاي تکيه بر رابط کاربري ، دستورات پيچيده اي داره که انعطاف بيشتري به روند ديباگ ميده . غير حرفه اي ها نميتونن رابطهء خوبي باهاش برقرار کنن . نسخ متعددي داره که هر کدوم رو بايد تو يه فضاي خاص استفاده کرد . بعدا" ممکنه يه تاپيک مجزا براش ايجاد بشه . Visual SoftICE به عنوان آخرين نسخه ارائه شده ، همراه با DriverStudio ي DevPartnet ارائه ميشه و امکانات بصري خوبي به نسخه هاي سنتي SICE اضافه کرده . - kd : يا Kernel Debugger ، ديباگر استاندارد DDK ويندوز يا Driver development Kit است . يک Kernel Mode درايور که هم بصورت Assembler Level و هم بصورت Source Level کار ميکنه . با SICE قابل مقايسه نيست اما چون سازگاري خوبي با Windows Symbol Files داره ، براي ديباگ درايورها فوق العاده مفيده . ديباگرهاي ديگري هم وجود دارن که هر کدوم ممکنه نسبت به موارد فوق مزايا يا نقائصي داشته باشن ؛ ليکن تجربه نشون ميده OllyDBG براي اغلب کاربردها ، SICE براي حرفه اي ها و kd نهايتا" براي توسعه گران Ring0 ، همه نيازها رو برطرف ميکنند . اين مطلب در ادامه به معرفي ويژگيهاي Disassembler ها و Decompiler ها خواهد پرداخت . اين مطلب قراره الفباي اين حوزه رو به کساني که باهاش غريبه هستن ياد بده ، نه چيزي بيشتر . ادامه دارد....
الف
|
|
|