 |
 |
|
|
|
| |
Packer پر کاربردترین عنصر امنیتی در حوزهء نرم افزار است . وظیفهء Packer :
-
تغییر شکل و قالب بخشهای مهم فایلهای اجرائی
-
ارائه روتینهائی برای حفاظت از برنامه روی حافظه
-
کنترل یکپارچگی باینری
-
مخفی نگهداشتن مشخصه های حائز اهمیت باینری مانند کامپایلر و کتابخانه ها و ... است .
شاید بشود براحتی گفت بخش اصلی و پر رنگ روند نفوذ به حریم امنیتی یک نرم افزار ، در UnPack کردن آن خلاصه می شود .
Packer ها عموما" از این روشهای متداول برای انجام وظایفشان استفاده میکنند :
-
ارائهء روتین های آنتی دیباگ ( کشف دیباگر و توقف آن یا توقف روند اجرای برنامه یا ... )
-
ارائهء روتین های آنتی دامپ ( جلوگیری از بازسازی فایل باینری از طریق Memory Image )
-
حفظ یکپارچگی فایل با تکنیکهائی مانند CRC و Hash و امضاهائی دیجیتال
-
رمزنگاری اجزاء مهم نرم افزار روی دیسک و حافظه و اجرا از طریق توابع درون ساختهء نسبتا" امن Packer
-
درهم ریزی ساختار قابل شناسائی باینری برای جلوگیری از باز-شناسائی ابزارهای توسعه
اغلب Packer ها بخش قابل توجهی از این نیازها را پوشش می دهند و برخی از آنها با ارائه روشهای ابتکاری امکانات دیگری هم در اختیار توسعه گر قرار میدهند ، مثلا" حفاظت از کدهای سطح کاربر از طریق روتین های سطح کرنل ، یا اجرای کد رمز شده به کمک یه VM ماشین مجازی درون ساختهء Packer
Packer های رایگان و تجاری متعدد و متفاوتی این روزها در دسترس هستند که هر کدام نقاط ضعف و نقاط قوتی دارند و از این مهمتر : برای اغلب اونها ابزارهای خودکار UnPack نیز موجود است . یعنی به محض استفاده از یک Packer متداول و شناخته شده ، یک نفوذگر نرم افزاری با تجربه براحتی آن را می شناسد و از ابزار خودکاری که احتمالا" فرد دیگری منتشر کرده است برای عبور از آن و بازسازی مجدد فایل باینری اصلی استفاده می کند . در این مسیر ابزارهای کمکی متعددی نیز وجود دارند که این روند را تقریبا" به یک وظیفهء روتین و نسبتا" ساده مبدل میکنند ، فی الواقع برای UnPack اغلب راه حلهای آزاد یا تجاری موجود ،به چیزی حدود [حداکثر] نیم ساعت وقت نیاز است !
اما با این تفاصیل ، استفاده از Packer همچنان یک گزینهء مثبت است . چون اگر انتشار باینری به همان شکلی که هست "بدتر" باشه ، انتشار نسخهء Packed اون با [حتی] یک Packer غیر حرفه ای "بد" است و آدم عاقل می داند بین این دو کدام را انتخاب کند ؛ معهذا همیشه یک حالت بهتر وجود دارد .
برای حفاظت از امنیت یک نرم افزار به کمک Packer ها باید به چند نکته مقدماتی توجه کنید :
-
Packer اولین سنگر حفاظتی است ، نه جدی ترین ، و نه آخرین .
-
Packer برای ایجاد وقفه در مسیر سهل تخریب امنیت نرم افزار مورد استفاده قرار میگیرد نه چیز دیگر
-
توسعهء یک Packer
-
حتی با استفاده از یک Packer خصوصی ، به امنیت غیر قابل دسترسی نخواهیم رسید
روش غلط استفاده از Packer :
-
برنامه ات رو بنویس .
-
یک Packer خیلی ساده و غیرحرفه ای از یک سایت روسی یا چینی بگیر .
-
برنامه ات رو Pack کن و منتشرش کن .
-
به نزدیکترین ATM مراجعه کن تا پولی که از برنامه ات درآوردی برداری.
-
بعد از مشاهدهء حساب خالی ات ، ....
وش صحیح استفاده از Packer :
-
برنامه ات رو بنویس .
-
ضمن توسعهء برنامه ات با مطالعهء مداوم مقالات مربوط به امنیت نرم افزار در سایت ها و کتابهای مختلف، سعی کن کمی با ادبیات این حوزه آشنا شوی .
-
حتما در بین کدهای برنامه ات هم از روشهای آنتی دیباگ و آنتی دامپ استفاده کن.
-
با استفاده از اطلاعات منتشر شده ، دنبال یک Packer
-
تو یک ایمیل به توسعه گر آن packer در مورد مشخصات برنامه ات توضیح بده و بخواه که بهترین توصیه ها را برای شما بفرسته.
-
با استفاده از توصیه های او برنامه ات رو Pack کن .
-
با استفاده از یک HEX Editor قسمتهای به خصوصی از باینری ات رو تغییر بده . این کار باید باعث نا شناخته موندن Packer مورد استفاده بشه ؛ با مطالعهء مقاله های موجود تمام تلاشت رو برای تغییر شکل و قالب نرم افزار بکار ببند و در این مسیر از هیچ ابزار عمومی و خودکاری استفاده نکن ؛ اگر نمیدونی چطور باید اینکار رو بکنی حتما جستجوی خودت رو در مورد این کار بیشتر کن و مقاله هائی در این زمینه را مطالعه کن .
- برنامه ات رو منتشر کن .
Packer ها عموما" تاثیرات به خصوصی هم روی نرم افزارها می گذارند که لازم است در مورد بعضی از این تاثیرات فکر کنید :
-
سرعت : Packer ها به شکل چشمگیری سرعت اجرا و سرویس دهی برنامه رو کم میکنند ؛ اگر یک سرویس مینویسید ، یا درایور سطح کرنلی دارید که قرار است با یک کارت PCI مرتبط باشد ، استفاده از Packer قابل توصیه نیست .
-
اعتماد : در بسیاری از حوزه ها ، اعتماد به ماهیت نرم افزار ، نقش مهمی در توسعهء آن ایفا میکند . عموما" استفاده از Packer ضمن اینکه یک روش امنیتی محسوب میشود ، روشی برای مخفی سازی عملکرد نرم افزار نیز به شمار می آید .
Packer های قدرتمندی همیشه در دسترس هستنداما آنچه نقش مهم و حیاتی را ایفا میکند ، کسب دانش و توانائی درک نحوهء عملکرد ابزارهای امنیتی ، و اختصاصی سازی برخی از اونها برای دشوارتر کردن مسیر خدشه دار شدن حفاظ های نرم افزاری است . برای عمومیت برنامه نویسان ، کسب توانائی و تخصص فوق العاده بالا در امنیت نرم افزار نسبتا" امکان پذیر نیست ، چون کسب توانائی در این حوزه منوط به تعطیل شدن فعالیت در سایر حوزه هاست ؛ اما مطالعهء مقدماتی و آشنائی با ادبیات و کسب توانائیهای ابتدائی ، یقینا" یک وظیفهء غیر قابل چشم پوشی است .
|
| |
|
|
تمامی حقوق این وبسایت متعلق به شرکت منشور سیمین می باشد.
|