PDA

View Full Version : چند نکته در مورد امنیت DLL هاتون



r00tkit
چهارشنبه 05 آبان 1389, 13:31 عصر
وقتی یه برنامه به صورت داینامیکی یه DLL رو بدون تعیین کردن ادرس کامل لود می کنه، ویندوز سعی می کنه تا DLL رو دایرکتوری های well-defined با ترتیب مشخص که در این جا (http://msdn.microsoft.com/en-us/library/ms682586%28v=VS.85%29.aspx) مشخص می شه سرچ کنه .

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

به این نوع حملات گاهی DLL preloading attack یا binary planting attack گفته می شه

حالا اگه سیستم نتونهDLL اصلی رو توی ان تریتب تا قبل رسیدن به ان دایرکتوری که dll مهاجم هستش پیدا کنه DLL اقای هکر لود می شه تو سیستم بدبخت حالا فکر کنید برنامه تو حالت ادمین باشه .....!


به طور مثال فرض کنید یه برنامه طوری نوشته شده تا یه DLl رو از مسیر جاری برنامه لود کنه ، این برنامه LoadLibrary رو با فقط با اسم DLL فرا می خونه این کار باعث می شه برنامه دنبال DLL بگرده فرض کنید safe DLL search mode هم فعال هستش و برنامه به صورت متناوب سرچ نمی کنه

حالا برنامه DLL رو تو ترتیب زیر سرچ می کنه:



مسیر که برنامه لود میشه
مسیر سیستم
مسیر ویندوز
مسیر جاری
مسیر های لیست شده در PATH environment variable

مهاجم با دانش از برنامه کنترول مسیر جاری رو به دست می گیره و DLL مورد نظرش رو به مسیر جاری کپی می کنه وقتی برنامه Loadlibrary رو فرا می خونه سیستم دنبال DLL می کرده و DLL رو تو مسیر جاری پیدا و لود می کنه و ادامه.....

برنامه نویسا می تونن جلوی این نوع حملات رو با توجه به نکات زیر بگیرن



تا انجا که ممکنه مسیر کامل رو مشخص کنید وقتی از توابع از این توابع استفاده می کنید LoadLibrary (http://msdn.microsoft.com/en-us/library/ms684175%28v=VS.85%29.aspx), LoadLibraryEx (http://msdn.microsoft.com/en-us/library/ms684179%28v=VS.85%29.aspx), CreateProcess (http://msdn.microsoft.com/en-us/library/ms682425%28v=VS.85%29.aspx), یا ShellExecute (http://msdn.microsoft.com/en-us/library/bb762153%28v=VS.85%29.aspx)
استفاده از تکنیک DLL redirection (http://msdn.microsoft.com/en-us/library/ms682600%28v=VS.85%29.aspx) یا manifest (که تو پست بعدی کامل توضیح می دم) (http://msdn.microsoft.com/en-us/library/aa375365%28v=VS.85%29.aspx)
مطمئن باشید تا safe DLL search mode فعال هستش این کار باعث می شه مسیر جاری به اخرین رتبه در سرچ برسه و شانس این که DLL مهاجم لود بشه روکاهش می ده برای این کار به مسیر HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode رجستری برید

شما می تونید مسیر جاری رو با فراخوانی SetDllDirectory (http://msdn.microsoft.com/en-us/library/ms686203%28v=VS.85%29.aspx) رو با یه استرینگ خالی از جاهایی که سرچ می شن حذف کنید که این کار باید در مرحلهی initialization پروسس انجام بشه

خسته شدم بقیش رو تو پست بعدی می گم ( البته اگه کسی خواست )