[[{"content_id":441829,"content_number":0,"portal_id":184,"lang_id":"fa","content_title":"بررسی حملات DLL Hijacking، تشخیص و پیشگیری","content_rtitr":"","content_short_title":null,"content_summary":"","content_summary_fill":0,"content_body":"DLL&nbsp;مخفف کتابخانه پیوند پویا و بخش های خارجی از برنامه های کاربردی است که بر روی ویندوز یا هر سیستم عامل دیگری اجرا می شود. بسیاری از برنامه های کاربردی خودشان کامل نیستند و کد را در فایل های مختلف ذخیره می کنند. در صورتی که نیاز به کد پیدا شود فایل مرتبط در حافظه بارگذاری و استفاده می شود. این کار موجب کاهش اندازه فایل برنامه کاربردی به همراه بهینه سازی استفاده ازRAM&nbsp;می شود. در ارتباط با&nbsp;DLLها حملاتی تحت عنوانDLL Hijacking&nbsp;&nbsp; مطرح است. مسیر فایل های&nbsp;DLL&nbsp;توسط سیستم عامل ویندوز تعیین شده است. به طور پیش فرض اگر برنامه ای یک فایل&nbsp;DLL&nbsp;درخواست کند، سیستم عامل در همان پوشه که در آن برنامه ذخیره شده است، جستجو می کند. اگر آنجا پیدا نشد، به دنبال پوشه دیگر می رود. اولویت هایی که برای مسیرها تعیین شده است، به ویندوز کمک می کند که در چه فولدرهایی به دنبال فایل های&nbsp;DLL&nbsp;بگردد. این دقیقا نقطه ای است که حملات&nbsp;DLL Hijacking&nbsp;&nbsp;وارد عمل می شود. در این گزارش به معرفی این نوع حملات و تکنیک های مورد استفاده برای کاهش و رفع آنها خواهیم پرداخت.\r\n\r\n1- فایل&nbsp;DLL&nbsp;یا کتابخانه پیوند پویا (Dynamic Link Library)\r\n\r\nکتابخانه پیوند پویا یک مولفه پایه در سیستم عامل ویندوز است. زمانی که برنامه کاربردی ویندوز شروع می شود، در صورت نیاز&nbsp;DLL&nbsp;های خاصی به آن بارگذاری می شود.&nbsp;DLL&nbsp;کتابخانه ای است که شامل کد و داده است که می تواند به طور همزمان توسط بیش از یک برنامه استفاده شود. برای مثال در سیستم عامل های ویندوز، کتابخانه&nbsp;Comdlg32&nbsp;توابع مرتبط با کادر محاوره ای رایج را انجام می دهد. بنابراین هر برنامه می تواند از قابلیتی که درون اینDLL&nbsp;است برای اجرای یک کادر محاوره ای باز استفاده کند. این به ترویج استفاده مجدد از کد و استفاده کارآمد از حافظه کمک می کند.\r\n\r\nبا استفاده از&nbsp;DLL، برنامه می تواند از اجزای جداگانه تشکیل شود (ماژولار شود). برای مثال یک برنامه حسابداری می تواند به صورت ماژول به فروش برسد. هر ماژول می تواند در صورتی که نصب شده باشد، در زمان اجرا به برنامه اصلی بارگذاری شود. به دلیل این که ماژول ها جدا هستند، زمان بارگذاری برنامه سریع تر است و ماژول تنها زمانی بارگذاری می شود که قابلیتی خاص مورد نیاز است. به علاوه به روزرسانی برای اعمال بر هریک از ماژول ها آسان تر است بدون این که بر قسمت های دیگر برنامه تاثیر گذارد. برای مثال ممکن است یک برنامه حقوق داشته باشیم و نرخ مالیات در هر سال تغییر کند. زمانی که این تغییرات مربوط به یک&nbsp;DLL&nbsp;است، می توان به روزرسانی را بدون نیاز به ساخت و یا نصب دوباره برنامه اعمال کرد.\r\n\r\n2- مزایای&nbsp;DLL\r\n\r\nلیست زیر برخی از مزایای استفاده برنامه ها از&nbsp;DLL&nbsp;را نشان می دهد:\r\n\r\n\r\n\tاستفاده از منابع کمتر: زمانی که چندین برنامه کتابخانه یکسانی از توابع را استفاده می کنند،&nbsp;DLL&nbsp;میتواند کدهای تکراری که به دیسک و حافظه بارگذاری می شود را کاهش دهد .\r\n\tترویج معماری ماژولار:&nbsp;DLL&nbsp;به ترویج برنامه های ماژولار در حال توسعه کمک می کند. همچنین کمک می کند که برنامه های بزرگ که به چندین نسخه زبان مختلف نیاز دارند یا برنامه هایی که نیاز به معماری ماژولار دارند توسعه داده شوند. مثالی از برنامه ماژولار برنامه حسابداری است که چندین ماژول دارد که می تواند به صورت دینامیک در زمان اجرا بارگذاری شود.\r\n\tسهولت گسترش و نصب: هنگامی که تابع درون&nbsp;DLL&nbsp;نیاز به به روزرسانی یا تعمیر دارد، برای استقرار و نصب و راه اندازی&nbsp;DLL&nbsp;نیازی نیست که برنامه مجدد به&nbsp;DLL&nbsp;لینک شود. به علاوه اگر چندین برنامه&nbsp;DLL&nbsp;مشابهی را استفاده کنند، همه برنامه ها از به روزرسانی&nbsp;DLL&nbsp;بهره مند می شوند. این موضوع هنگام استفاده از&nbsp;DLL&nbsp;طرف سوم که به طور منظم به روزرسانی یا تعمیر می شود، بسیار موثر است.\r\n\r\n\r\nDLL Hijacking -3&nbsp;چیست؟\r\n\r\n&nbsp;DLL Hijacking&nbsp;که عموماً تحت عنوان&nbsp;Load Order Hijacking&nbsp;یا&nbsp;Search Order Hijacking&nbsp;شناخته می شود یک تکنیک دوام بدافزار برای گریز از تشخیص بوده و همچنین به عنوان یک چالش مهم برای محققان مطرح است. برطبق مقاله ای از مایکروسافت&nbsp;DLL Hijacking&nbsp;&nbsp;به صورت زیر تعریف می شود:\r\n\r\n&ldquo;زمانی که برنامه ای به صورت پویا و بدون مشخص کردن نام مسیر کامل کتابخانه ای را بارگذاری می کند، ویندوز برای تعیین محل&nbsp;DLL&nbsp;با جستجوی مجموعه تعریف شده ای از دایرکتوری ها با ترتیب خاصی تلاش می کند. اگر حمله کننده بتواند هنگام جستجوی&nbsp;DLL&nbsp;کنترل یکی از دایرکتوری ها را به دست بگیرد، می تواند یک کپی مخرب از&nbsp;DLL&nbsp;در آن دایرکتوری قرار دهد، این اغلب با عنوان&nbsp;Preloading attack&nbsp;یا&nbsp;Binary planting attack&nbsp;شناخته می شود. اگر سیستم قبل از جستجوی دایرکتوری دستکاری شده کپی مجاز از&nbsp;DLL&nbsp;را پیدا نکند، کپی مخرب را پیدا خواهد کرد.&rdquo;\r\n\r\nاز آنجا که&nbsp;DLL&nbsp;ها به عنوان یک افزونه هستند و اغلب در اکثر برنامه های کاربردی در سیستم ضروری هستند، در پوشه های مختلفی در سیستم قرار گرفته اند. اگر فایل&nbsp;DLL&nbsp;اصلی با یک فایل&nbsp;DLLقلابی که دارای کد مخرب است، جایگزین شود به عنوان&nbsp;DLL Hijacking&nbsp;شناخته می شود. این آسیب پذیری ها در نرم افزارهایی همچون&nbsp;Windows Movie Maker&nbsp;&nbsp;و&nbsp;Windows Address Book&nbsp;دیده می شود. به منظور درک&nbsp;DLL Hijackingابتدا بایستی نحوه بارگذاری فایل های&nbsp;DLL&nbsp;توسط ویندوز هنگامی که آدرس کامل کتابخانه داده نشده است را دانست. ویندوز نیازی ندارد که برنامه های کاربردی یک مسیر کامل برای&nbsp;DLL&nbsp;های بارگذای شونده در زمان اجرا مشخص کند. به همین علت برنامه نویسان اغلب مسیر کامل به فایل هایDLLای که می خواهند استفاده کنند، مشخص نمی کنند. این می تواند منجر به این مشکل شود که&nbsp;DLLها را نتوان پیدا کرده و استفاده کرد. هنگامی که یک مسیرکامل ارایه نمی شود ویندوز تلاش می کند که&nbsp;DLL&nbsp;ها را در مکان هایی از پیش تعیین شده قرار دهد.\r\n\r\nبه طور پیش فرض اولین موردی که یافت می شود، اولین آیتمی است که استفاده می شود. بنابراین این امکان برای مهاجم وجود دارد که این ترتیب را با اضافه کردن یک&nbsp;DLL&nbsp;&nbsp;مخرب با همان نام نسخه مجاز در مکانی قبل از آن عوض کند که این باعث می شود سیستم عامل به طور ناخواسته&nbsp;DLL&nbsp;مخرب را بارگذاری کند. اگر برنامه کاربردی&nbsp;DLL&nbsp;را تنها با نام آن بارگذاری می کند (به طور مثال&nbsp;ntshrui.dll) ویندوز ترتیب تعریف شده از قبل را برای شناسایی و بارگذاری دنبال می کند و اولین کتابخانه پیدا شده با نام&nbsp;ntshrui.dll&nbsp;را بارگذاری می کند.\r\n\r\nدایرکتوری برنامه\r\n\r\n\r\n\r\nدایرکتوری جاری\r\n\r\n\r\n\r\nدایرکتوری سیستم\r\n\r\n\r\n\r\nدایرکتوری سیستم 16 بیتی\r\n\r\n\r\n\r\nدایرکتوری ویندوز\r\n\r\n\r\n\r\nدایرکتوری های ذخیره شده در متغیر&nbsp;PATH\r\n\r\nبرای مثال اگر برنامه ای (مثلاً&nbsp;Test.exe)&nbsp;DLL&nbsp;ای را تنها توسط نام بارگذاری کند(مثلا&nbsp;foo.dll&nbsp;) ویندوز ترتیب جستجویی را بسته به این کهSafeDllSearchMode&nbsp;فعال یا غیرفعال است، برای تعیین محل&nbsp;DLL&nbsp;مجاز دنبال می کند. اگر حمله کننده دانشی درباره این برنامه داشته باشد، می تواند&nbsp;DLL&nbsp;مخربی در مسیر جستجوی آن با همان نام قرار دهد و برنامه را مجبور کند که&nbsp;DLL&nbsp;مخرب را بارگذاری کند.\r\n\r\nبرنامه هایی که از مکان های ناامن اجرا می شوند برای مثال پوشه های قابل نوشتن توسط کاربر همانند پوشه&nbsp;Downloads&nbsp;یا&nbsp;TempDirectory&nbsp;تقریبا همیشه در معرض این آسیب پذیری هستند.\r\n\r\n4- جزئیات حمله\r\n\r\nبسته به پیکربندی سیستم، برنامه می تواند تصمیم بگیرد که ترتیب مسیرهایی که باید برای بارگذاری&nbsp;DLL&nbsp;جستجو کند، چگونه باشد. به طور پیش فرض ترتیب این جستجو به صورت زیر است :\r\n\r\n\r\n\tمسیری که از آن برنامه کاربردی بارگذاری می شود.\r\n\tدایرکتوری جاری\r\n\tدایرکتوری سیستم، معمولاً&nbsp;C:\\Windows\\System32\\&nbsp;(تابع&nbsp;GetSystemDirectory&nbsp;برای دستیابی به این دایرکتوری فراخوانی می شود)\r\n\tدایرکتوری سیستم 16 بیتی &ndash; هیچ تابع اختصاص داده شده برای بازیابی مسیر این دایرکتوری وجود ندارد، اما این دایرکتوری نیز جستجو می شود.\r\n\tدایرکتوری ویندوز، تابعGetWindowsDirectorبرای دستیابی به این دایرکتوری فراخوانی می شود.\r\n\tدایرکتوری های لیست شده در متغیر محیطی&nbsp;PATH\r\n\r\n\r\nدر جستجوی این مسیرها برنامه اولین&nbsp;DLL&nbsp;ای را که با آن نام پیدا کرد، استفاده می کند.\r\n\r\nدر این مورد دایرکتوری جاری مشکل است. زمانی که یک برنامه تصمیم به بارگذاری&nbsp;DLL&nbsp;از دایرکتوری جاری می گیرد می تواند به&nbsp;DLL Hijacking&nbsp;منجر شود. برای مثال اگر کاربر یک سند&nbsp;Microsoft word&nbsp;را باز می کند،&nbsp;Microsoft office&nbsp;سعی خواهد کرد که مولفه&nbsp;DLL&nbsp;آن را از مکان فایل داکیومنت بارگذاری کند. حمله کننده سپس می تواند یک&nbsp;DLL&nbsp;بدخواه در مکان سند جایگذاری کند و در نتیجه&nbsp;Microsoft office&nbsp;&nbsp;&nbsp;کد بدخواهانه را بارگذاری می کند.\r\n\r\nبا فرض این که &nbsp;SafeDllSearchMode&nbsp;فعال شده است (که به صورت پیش فرض فعال است) برای حمله استفاده از این تکنیک بسیار سخت تر است. در این صورت&nbsp; سیستم عامل اول بررسی می کند که آیا یک&nbsp;DLL&nbsp;با همین نام در حال حاضر در حافظه بارگذاری شده است یا آیا&nbsp;DLL&nbsp;&nbsp;در کلید رجیستری&nbsp;(HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\KnownDLLs)&nbsp;تعریف شده است(KnownDLLs). اگر هیچ یک از شرایط برقرار نبود ویندوز با استفاده از ترتیب زیر کتابخانه ها را بارگذاری می کند:\r\n\r\n\r\n\tدایرکتوری که از آن برنامه بارگذاری می شود.\r\n\tدایرکتوری سیستم&nbsp;(C:\\Windows\\System32)\r\n\tدایرکتوری سیستم 16 بیتی&nbsp;(C:\\Windows\\System)\r\n\tدایرکتوری ویندوز&nbsp;(C:\\Windows)\r\n\r\n\r\n\r\n\tدایرکتوری کار جاری&nbsp;([1]CWD)\r\n\tدایرکتوری های لیست شده در متغیرهای محیطی&nbsp;PATH(System&nbsp;&nbsp;و بعد از آن&nbsp;user)\r\n\r\n\r\nبا این وجود دایرکتوری جاری هنوز در لیست دایرکتوری ها برای جستجو است. تفاوت در اینجا در این است که برنامه در ابتدا دایرکتوری های سیستم را برای مولفه های&nbsp;DLL&nbsp;جستجو می کند، اگر پیدا نشد، سپس دایرکتوری جاری را جستجو می کند.\r\n\r\nبه عنوان یک قاعده کلی برنامه های اجرا شونده خارج از&nbsp;&ldquo;C:\\Windows\\System32&rdquo;&nbsp;&nbsp;که کتابخانه ای را بدون ارایه مسیر کامل بارگذاری می کنند، اهداف بالقوه هستند. توجه داشته باشید که کتابخانه درخواست شده نباید قبلاً در حافظه وجود داشته باشد یا در مقدار رجیستری&nbsp;KnownDlls&nbsp;قرار گرفته باشد.\r\n\r\n5- پیداکردن آسیب پذیری های&nbsp;&nbsp;DLL Hijacking\r\n\r\nپیداکردن آسیب پذیری در برنامه ها اولین قدم برای سواستفاده از آن است. روش صحیح برای این کار استفاده از&nbsp;Process Monitor&nbsp;&nbsp;برای دیدن این که چه زمانی برنامه جستجویی را برای فایل&nbsp;DLL&nbsp;اجرا می کند. هنگامی که&nbsp;Process Monitor&nbsp;بارگذاری می شود می توان سعی کرد که یک تابع از&nbsp;DLLدیگری را به کار انداخت یا این که منتظر باشید تا این که یکی به کار انداخته شود. بعد از انجام این کار، تمام آن چه که نیاز است این است که به منویFilter&nbsp;&nbsp;رفته و فیلترهای خود را اعمال کنید.\r\n\r\nاگر شما چیزی شبیه این ها پیدا کردید بسیار محتمل است که یک آسیب پذیری&nbsp;DLL Hijacking&nbsp;پیدا کرده باشید.\r\n\r\n\r\n\r\n6- پیداکردن نام توابع ازDLL\r\n\r\nبرای ایجاد کردن یک&nbsp;DLL&nbsp;جدید با کد مخرب ، ابتدا بایستی نام توابعی که در آن به کار رفته است را بدانیم . در ویندوز این می تواند توسط ابزارDUMPWIN&nbsp;انجام شود. با&nbsp;DUMPWIN&nbsp;ما می توانیم از گزینه&nbsp;&nbsp;\/EXPORTS&nbsp; استفاده کنیم. در زیر مثالی از خروجی&nbsp;dll&nbsp;نمونه آمده است:\r\n\r\nDump of file C:\\example.dll\r\n\r\nFile Type: DLL\r\n\r\n&nbsp;Section contains the following exports for example\r\n\r\n&nbsp; 00000000 characteristics\r\n\r\n&nbsp; 4FC31DEF time date stamp Mon Jun 05 18:32:49 2013\r\n\r\n&nbsp;&nbsp;&nbsp; 0.00 version\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 ordinal base\r\n\r\n&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 number of functions\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 number of names\r\n\r\n&nbsp;&nbsp;&nbsp; ordinal hint RVA name\r\n\r\n1000007BA0 output_data&nbsp;\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 1 00007C40 show_integer\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 2 00008940 add_integers\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Summary\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .CRT\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .bss\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .data\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .edata\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .idata\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .rdata\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .reloc\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 9000 .text\r\n\r\n&nbsp;&nbsp;&nbsp;&nbsp; 1000 .tls\r\n\r\n&nbsp;\r\n\r\nگزینه دیگر استفاده از یک اشکال زدا است. اشکال زداها می توانند متن آشکاری که در برنامه ها ذخیره شده است را به شما نشان دهند. ما می توانیم نام هر فایل&nbsp;DLL&nbsp;ارجاع شده و ذخیره شده، را نیز به صورت متن آشکار ببینیم.\r\n\r\n7- دفاع در برابر&nbsp;DLL Hijacking\r\n\r\nمهم ترین بخش از تعریف یک آسیب پذیری، توضیح چگونگی مقابله با آن است. مسئولیت حفاظت از کاربران به عهده خود توسعه دهندگان نرم افزار می افتد. در مورد&nbsp;DLL Hijacking&nbsp;&nbsp;برای اجتناب از این مشکل مسیر کامل به کتابخانه بایستی مشخص شود.\r\n\r\nگزینه دیگر انتقال فایل های&nbsp;DLL&nbsp;به جایی است که در ترتیب جستجو زودتر چک می شود. گزینه دیگر ایجاد یک هش&nbsp;Checksum&nbsp;از فایل&nbsp;DLL&nbsp;و ذخیره آن درون خود برنامه است، بنابراین در زمان اجرا زمانی که&nbsp;DLL&nbsp;پیدا شد هش&nbsp;Checksum&nbsp;آن بایستی با هش ذخیره شده&nbsp; درون برنامه مطابقت کند. این روش می تواند توسط استفاده از یک روش هشینگ قوی به همراه&nbsp;Salt&nbsp;&nbsp;یا توسط استفاده از کلیدهای عمومی و خصوصی داخل برنامه برای رمز کردن&nbsp;checksum&nbsp;خارج از برنامه و رمزگشایی آن بهبود داده شود.\r\n\r\nکاربران همچنین توانایی محافظت از خود با درنظر گرفتن اقدامات احتیاطی خاصی را دارند. کاربر می تواند اطمینان حاصل کند که فایل هایی که دارد باز می کند در همان دایرکتوری&nbsp;DLL&nbsp;هایی نیست که مشکوک به نظر می رسد. برای مثال اگر&nbsp;DLL&nbsp;ای به همراه عکسی که شما دانلود کرده اید بیاید، بهتر است که قبل از بازکردن عکس&nbsp;DLL&nbsp;را حذف کنید. کاربران همچنین توان تغییر کلید رجیستری&nbsp;CWDIllegalInDllSearch&nbsp;را دارند.در ضمن کاربران می توانند دو کلید رجیستری مختلف خودشان ست کنند.\r\n\r\n&nbsp;\r\n\r\n\r\n[1]&nbsp;current working directory\r\n\r\n\r\n\r\n\r\n&nbsp;","content_html":"<h4>DLL مخفف کتابخانه پیوند پویا و بخش های خارجی از برنامه های کاربردی است که بر روی ویندوز یا هر سیستم عامل دیگری اجرا می شود. بسیاری از برنامه های کاربردی خودشان کامل نیستند و کد را در فایل های مختلف ذخیره می کنند. در صورتی که نیاز به کد پیدا شود فایل مرتبط در حافظه بارگذاری و استفاده می شود. این کار موجب کاهش اندازه فایل برنامه کاربردی به همراه بهینه سازی استفاده ازRAM می شود. در ارتباط با DLLها حملاتی تحت عنوانDLL Hijacking   مطرح است. مسیر فایل های DLL توسط سیستم عامل ویندوز تعیین شده است. به طور پیش فرض اگر برنامه ای یک فایل DLL درخواست کند، سیستم عامل در همان پوشه که در آن برنامه ذخیره شده است، جستجو می کند. اگر آنجا پیدا نشد، به دنبال پوشه دیگر می رود. اولویت هایی که برای مسیرها تعیین شده است، به ویندوز کمک می کند که در چه فولدرهایی به دنبال فایل های DLL بگردد. این دقیقا نقطه ای است که حملات DLL Hijacking  وارد عمل می شود. در این گزارش به معرفی این نوع حملات و تکنیک های مورد استفاده برای کاهش و رفع آنها خواهیم پرداخت.<\/h4>\n\n<h1 dir=\"rtl\"><strong>1- فایل DLL یا کتابخانه پیوند پویا (Dynamic Link Library)<\/strong><\/h1>\n\n<p dir=\"rtl\">کتابخانه پیوند پویا یک مولفه پایه در سیستم عامل ویندوز است. زمانی که برنامه کاربردی ویندوز شروع می شود، در صورت نیاز DLL های خاصی به آن بارگذاری می شود. DLL کتابخانه ای است که شامل کد و داده است که می تواند به طور همزمان توسط بیش از یک برنامه استفاده شود. برای مثال در سیستم عامل های ویندوز، کتابخانه Comdlg32 توابع مرتبط با کادر محاوره ای رایج را انجام می دهد. بنابراین هر برنامه می تواند از قابلیتی که درون اینDLL است برای اجرای یک کادر محاوره ای باز استفاده کند. این به ترویج استفاده مجدد از کد و استفاده کارآمد از حافظه کمک می کند.<\/p>\n\n<p dir=\"rtl\">با استفاده از DLL، برنامه می تواند از اجزای جداگانه تشکیل شود (ماژولار شود). برای مثال یک برنامه حسابداری می تواند به صورت ماژول به فروش برسد. هر ماژول می تواند در صورتی که نصب شده باشد، در زمان اجرا به برنامه اصلی بارگذاری شود. به دلیل این که ماژول ها جدا هستند، زمان بارگذاری برنامه سریع تر است و ماژول تنها زمانی بارگذاری می شود که قابلیتی خاص مورد نیاز است. به علاوه به روزرسانی برای اعمال بر هریک از ماژول ها آسان تر است بدون این که بر قسمت های دیگر برنامه تاثیر گذارد. برای مثال ممکن است یک برنامه حقوق داشته باشیم و نرخ مالیات در هر سال تغییر کند. زمانی که این تغییرات مربوط به یک DLL است، می توان به روزرسانی را بدون نیاز به ساخت و یا نصب دوباره برنامه اعمال کرد.<\/p>\n\n<h1 dir=\"rtl\"><strong>2- مزایای DLL<\/strong><\/h1>\n\n<p dir=\"rtl\">لیست زیر برخی از مزایای استفاده برنامه ها از DLL را نشان می دهد:<\/p>\n\n<ul><li dir=\"rtl\">استفاده از منابع کمتر: زمانی که چندین برنامه کتابخانه یکسانی از توابع را استفاده می کنند، DLL میتواند کدهای تکراری که به دیسک و حافظه بارگذاری می شود را کاهش دهد .<\/li>\n\t<li dir=\"rtl\">ترویج معماری ماژولار: DLL به ترویج برنامه های ماژولار در حال توسعه کمک می کند. همچنین کمک می کند که برنامه های بزرگ که به چندین نسخه زبان مختلف نیاز دارند یا برنامه هایی که نیاز به معماری ماژولار دارند توسعه داده شوند. مثالی از برنامه ماژولار برنامه حسابداری است که چندین ماژول دارد که می تواند به صورت دینامیک در زمان اجرا بارگذاری شود.<\/li>\n\t<li dir=\"rtl\">سهولت گسترش و نصب: هنگامی که تابع درون DLL نیاز به به روزرسانی یا تعمیر دارد، برای استقرار و نصب و راه اندازی DLL نیازی نیست که برنامه مجدد به DLL لینک شود. به علاوه اگر چندین برنامه DLL مشابهی را استفاده کنند، همه برنامه ها از به روزرسانی DLL بهره مند می شوند. این موضوع هنگام استفاده از DLL طرف سوم که به طور منظم به روزرسانی یا تعمیر می شود، بسیار موثر است.<\/li>\n<\/ul><h1 dir=\"rtl\"><strong>DLL Hijacking -3 چیست؟<\/strong><\/h1>\n\n<p dir=\"rtl\"> DLL Hijacking که عموماً تحت عنوان Load Order Hijacking یا Search Order Hijacking شناخته می شود یک تکنیک دوام بدافزار برای گریز از تشخیص بوده و همچنین به عنوان یک چالش مهم برای محققان مطرح است. برطبق مقاله ای از مایکروسافت DLL Hijacking  به صورت زیر تعریف می شود:<\/p>\n\n<p dir=\"rtl\">“زمانی که برنامه ای به صورت پویا و بدون مشخص کردن نام مسیر کامل کتابخانه ای را بارگذاری می کند، ویندوز برای تعیین محل DLL با جستجوی مجموعه تعریف شده ای از دایرکتوری ها با ترتیب خاصی تلاش می کند. اگر حمله کننده بتواند هنگام جستجوی DLL کنترل یکی از دایرکتوری ها را به دست بگیرد، می تواند یک کپی مخرب از DLL در آن دایرکتوری قرار دهد، این اغلب با عنوان Preloading attack یا Binary planting attack شناخته می شود. اگر سیستم قبل از جستجوی دایرکتوری دستکاری شده کپی مجاز از DLL را پیدا نکند، کپی مخرب را پیدا خواهد کرد.”<\/p>\n\n<p dir=\"rtl\">از آنجا که DLL ها به عنوان یک افزونه هستند و اغلب در اکثر برنامه های کاربردی در سیستم ضروری هستند، در پوشه های مختلفی در سیستم قرار گرفته اند. اگر فایل DLL اصلی با یک فایل DLLقلابی که دارای کد مخرب است، جایگزین شود به عنوان DLL Hijacking شناخته می شود. این آسیب پذیری ها در نرم افزارهایی همچون Windows Movie Maker  و Windows Address Book دیده می شود. به منظور درک DLL Hijackingابتدا بایستی نحوه بارگذاری فایل های DLL توسط ویندوز هنگامی که آدرس کامل کتابخانه داده نشده است را دانست. ویندوز نیازی ندارد که برنامه های کاربردی یک مسیر کامل برای DLL های بارگذای شونده در زمان اجرا مشخص کند. به همین علت برنامه نویسان اغلب مسیر کامل به فایل هایDLLای که می خواهند استفاده کنند، مشخص نمی کنند. این می تواند منجر به این مشکل شود که DLLها را نتوان پیدا کرده و استفاده کرد. هنگامی که یک مسیرکامل ارایه نمی شود ویندوز تلاش می کند که DLL ها را در مکان هایی از پیش تعیین شده قرار دهد.<\/p>\n\n<p dir=\"rtl\">به طور پیش فرض اولین موردی که یافت می شود، اولین آیتمی است که استفاده می شود. بنابراین این امکان برای مهاجم وجود دارد که این ترتیب را با اضافه کردن یک DLL  مخرب با همان نام نسخه مجاز در مکانی قبل از آن عوض کند که این باعث می شود سیستم عامل به طور ناخواسته DLL مخرب را بارگذاری کند. اگر برنامه کاربردی DLL را تنها با نام آن بارگذاری می کند (به طور مثال ntshrui.dll) ویندوز ترتیب تعریف شده از قبل را برای شناسایی و بارگذاری دنبال می کند و اولین کتابخانه پیدا شده با نام ntshrui.dll را بارگذاری می کند.<\/p>\n\n<p dir=\"rtl\">دایرکتوری برنامه<\/p>\n\n<p dir=\"rtl\"><img alt=\"\" src=\"https:\/\/www.certcc.ir\/documents\/20182\/24257\/untitled3-4.bmp\/2d4bee66-501b-41bd-8eb7-cc7498a1cb65?t=1470471551428\" \/><\/p>\n\n<p dir=\"rtl\">دایرکتوری جاری<\/p>\n\n<p dir=\"rtl\"><img alt=\"\" src=\"https:\/\/www.certcc.ir\/documents\/20182\/24257\/untitled3-4.bmp\/2d4bee66-501b-41bd-8eb7-cc7498a1cb65?t=1470471551428\" \/><\/p>\n\n<p dir=\"rtl\">دایرکتوری سیستم<\/p>\n\n<p dir=\"rtl\"><img alt=\"\" src=\"https:\/\/www.certcc.ir\/documents\/20182\/24257\/untitled3-4.bmp\/2d4bee66-501b-41bd-8eb7-cc7498a1cb65?t=1470471551428\" \/><\/p>\n\n<p dir=\"rtl\">دایرکتوری سیستم 16 بیتی<\/p>\n\n<p dir=\"rtl\"><img alt=\"\" src=\"https:\/\/www.certcc.ir\/documents\/20182\/24257\/untitled3-4.bmp\/2d4bee66-501b-41bd-8eb7-cc7498a1cb65?t=1470471551428\" \/><\/p>\n\n<p dir=\"rtl\">دایرکتوری ویندوز<\/p>\n\n<p dir=\"rtl\"><img alt=\"\" src=\"https:\/\/www.certcc.ir\/documents\/20182\/24257\/untitled3-4.bmp\/2d4bee66-501b-41bd-8eb7-cc7498a1cb65?t=1470471551428\" \/><\/p>\n\n<p dir=\"rtl\">دایرکتوری های ذخیره شده در متغیر PATH<\/p>\n\n<p dir=\"rtl\">برای مثال اگر برنامه ای (مثلاً Test.exe) DLL ای را تنها توسط نام بارگذاری کند(مثلا foo.dll ) ویندوز ترتیب جستجویی را بسته به این کهSafeDllSearchMode فعال یا غیرفعال است، برای تعیین محل DLL مجاز دنبال می کند. اگر حمله کننده دانشی درباره این برنامه داشته باشد، می تواند DLL مخربی در مسیر جستجوی آن با همان نام قرار دهد و برنامه را مجبور کند که DLL مخرب را بارگذاری کند.<\/p>\n\n<p dir=\"rtl\">برنامه هایی که از مکان های ناامن اجرا می شوند برای مثال پوشه های قابل نوشتن توسط کاربر همانند پوشه Downloads یا TempDirectory تقریبا همیشه در معرض این آسیب پذیری هستند.<\/p>\n\n<h1 dir=\"rtl\"><strong>4- جزئیات حمله<\/strong><\/h1>\n\n<p dir=\"rtl\">بسته به پیکربندی سیستم، برنامه می تواند تصمیم بگیرد که ترتیب مسیرهایی که باید برای بارگذاری DLL جستجو کند، چگونه باشد. به طور پیش فرض ترتیب این جستجو به صورت زیر است :<\/p>\n\n<ul><li dir=\"rtl\">مسیری که از آن برنامه کاربردی بارگذاری می شود.<\/li>\n\t<li dir=\"rtl\">دایرکتوری جاری<\/li>\n\t<li dir=\"rtl\">دایرکتوری سیستم، معمولاً C:\\Windows\\System32\\ (تابع GetSystemDirectory برای دستیابی به این دایرکتوری فراخوانی می شود)<\/li>\n\t<li dir=\"rtl\">دایرکتوری سیستم 16 بیتی – هیچ تابع اختصاص داده شده برای بازیابی مسیر این دایرکتوری وجود ندارد، اما این دایرکتوری نیز جستجو می شود.<\/li>\n\t<li dir=\"rtl\">دایرکتوری ویندوز، تابعGetWindowsDirectorبرای دستیابی به این دایرکتوری فراخوانی می شود.<\/li>\n\t<li dir=\"rtl\">دایرکتوری های لیست شده در متغیر محیطی PATH<\/li>\n<\/ul><p dir=\"rtl\">در جستجوی این مسیرها برنامه اولین DLL ای را که با آن نام پیدا کرد، استفاده می کند.<\/p>\n\n<p dir=\"rtl\">در این مورد دایرکتوری جاری مشکل است. زمانی که یک برنامه تصمیم به بارگذاری DLL از دایرکتوری جاری می گیرد می تواند به DLL Hijacking منجر شود. برای مثال اگر کاربر یک سند Microsoft word را باز می کند، Microsoft office سعی خواهد کرد که مولفه DLL آن را از مکان فایل داکیومنت بارگذاری کند. حمله کننده سپس می تواند یک DLL بدخواه در مکان سند جایگذاری کند و در نتیجه Microsoft office   کد بدخواهانه را بارگذاری می کند.<\/p>\n\n<p dir=\"rtl\">با فرض این که  SafeDllSearchMode فعال شده است (که به صورت پیش فرض فعال است) برای حمله استفاده از این تکنیک بسیار سخت تر است. در این صورت  سیستم عامل اول بررسی می کند که آیا یک DLL با همین نام در حال حاضر در حافظه بارگذاری شده است یا آیا DLL  در کلید رجیستری (HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\KnownDLLs) تعریف شده است(KnownDLLs). اگر هیچ یک از شرایط برقرار نبود ویندوز با استفاده از ترتیب زیر کتابخانه ها را بارگذاری می کند:<\/p>\n\n<ul><li dir=\"rtl\">دایرکتوری که از آن برنامه بارگذاری می شود.<\/li>\n\t<li dir=\"rtl\">دایرکتوری سیستم (C:\\Windows\\System32)<\/li>\n\t<li dir=\"rtl\">دایرکتوری سیستم 16 بیتی (C:\\Windows\\System)<\/li>\n\t<li dir=\"rtl\">دایرکتوری ویندوز (C:\\Windows)<\/li>\n<\/ul><ul><li dir=\"rtl\">دایرکتوری کار جاری (<a href=\"https:\/\/www.certcc.ir\/web\/guest\/news\/-\/view\/بررسی-حملات-DLL-Hijacking،-تشخیص-و-پیشگیری-\/21184#_ftn1\" title=\"\" rel=\"nofollow\">[1]<\/a>CWD)<\/li>\n\t<li dir=\"rtl\">دایرکتوری های لیست شده در متغیرهای محیطی PATH(System  و بعد از آن user)<\/li>\n<\/ul><p dir=\"rtl\">با این وجود دایرکتوری جاری هنوز در لیست دایرکتوری ها برای جستجو است. تفاوت در اینجا در این است که برنامه در ابتدا دایرکتوری های سیستم را برای مولفه های DLL جستجو می کند، اگر پیدا نشد، سپس دایرکتوری جاری را جستجو می کند.<\/p>\n\n<p dir=\"rtl\">به عنوان یک قاعده کلی برنامه های اجرا شونده خارج از “C:\\Windows\\System32”  که کتابخانه ای را بدون ارایه مسیر کامل بارگذاری می کنند، اهداف بالقوه هستند. توجه داشته باشید که کتابخانه درخواست شده نباید قبلاً در حافظه وجود داشته باشد یا در مقدار رجیستری KnownDlls قرار گرفته باشد.<\/p>\n\n<h1 dir=\"rtl\"><strong>5- پیداکردن آسیب پذیری های  DLL Hijacking<\/strong><\/h1>\n\n<p dir=\"rtl\">پیداکردن آسیب پذیری در برنامه ها اولین قدم برای سواستفاده از آن است. روش صحیح برای این کار استفاده از Process Monitor  برای دیدن این که چه زمانی برنامه جستجویی را برای فایل DLL اجرا می کند. هنگامی که Process Monitor بارگذاری می شود می توان سعی کرد که یک تابع از DLLدیگری را به کار انداخت یا این که منتظر باشید تا این که یکی به کار انداخته شود. بعد از انجام این کار، تمام آن چه که نیاز است این است که به منویFilter  رفته و فیلترهای خود را اعمال کنید.<\/p>\n\n<p dir=\"rtl\">اگر شما چیزی شبیه این ها پیدا کردید بسیار محتمل است که یک آسیب پذیری DLL Hijacking پیدا کرده باشید.<\/p>\n\n<p><img alt=\"\" src=\"https:\/\/www.certcc.ir\/documents\/20182\/24257\/untitled3-5.bmp\/1d7c3740-bdcb-4153-bd34-25c0dc26b50d?t=1470471945000\" \/><\/p>\n\n<h1 dir=\"rtl\"><strong>6- پیداکردن نام توابع ازDLL<\/strong><\/h1>\n\n<p dir=\"rtl\">برای ایجاد کردن یک DLL جدید با کد مخرب ، ابتدا بایستی نام توابعی که در آن به کار رفته است را بدانیم . در ویندوز این می تواند توسط ابزارDUMPWIN انجام شود. با DUMPWIN ما می توانیم از گزینه  \/EXPORTS  استفاده کنیم. در زیر مثالی از خروجی dll نمونه آمده است:<\/p>\n\n<p dir=\"rtl\"><em>Dump of file C:\\example.dll<\/em><\/p>\n\n<p dir=\"rtl\"><em>File Type: DLL<\/em><\/p>\n\n<p dir=\"rtl\"><em> Section contains the following exports for example<\/em><\/p>\n\n<p dir=\"rtl\"><em>  00000000 characteristics<\/em><\/p>\n\n<p dir=\"rtl\"><em>  4FC31DEF time date stamp Mon Jun 05 18:32:49 2013<\/em><\/p>\n\n<p dir=\"rtl\"><em>    0.00 version<\/em><\/p>\n\n<p dir=\"rtl\"><em>        1 ordinal base<\/em><\/p>\n\n<p dir=\"rtl\"><em>        3 number of functions<\/em><\/p>\n\n<p dir=\"rtl\"><em>        3 number of names<\/em><\/p>\n\n<p><em>    ordinal hint RVA name<\/em><\/p>\n\n<p><em>1000007BA0 output_data <\/em><\/p>\n\n<p dir=\"rtl\"><em>       2 1 00007C40 show_integer<\/em><\/p>\n\n<p dir=\"rtl\"><em>       3 2 00008940 add_integers<\/em><\/p>\n\n<p dir=\"rtl\"><em>      Summary<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .CRT<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .bss<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .data<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .edata<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .idata<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .rdata<\/em><\/p>\n\n<p dir=\"rtl\"><em>     1000 .reloc<\/em><\/p>\n\n<p dir=\"rtl\"><em>     9000 .text<\/em><\/p>\n\n<p><em>     1000 .tls<\/em><\/p>\n\n<p dir=\"rtl\"> <\/p>\n\n<p dir=\"rtl\">گزینه دیگر استفاده از یک اشکال زدا است. اشکال زداها می توانند متن آشکاری که در برنامه ها ذخیره شده است را به شما نشان دهند. ما می توانیم نام هر فایل DLL ارجاع شده و ذخیره شده، را نیز به صورت متن آشکار ببینیم.<\/p>\n\n<h1 dir=\"rtl\"><strong>7- دفاع در برابر DLL Hijacking<\/strong><\/h1>\n\n<p dir=\"rtl\">مهم ترین بخش از تعریف یک آسیب پذیری، توضیح چگونگی مقابله با آن است. مسئولیت حفاظت از کاربران به عهده خود توسعه دهندگان نرم افزار می افتد. در مورد DLL Hijacking  برای اجتناب از این مشکل مسیر کامل به کتابخانه بایستی مشخص شود.<\/p>\n\n<p dir=\"rtl\">گزینه دیگر انتقال فایل های DLL به جایی است که در ترتیب جستجو زودتر چک می شود. گزینه دیگر ایجاد یک هش Checksum از فایل DLL و ذخیره آن درون خود برنامه است، بنابراین در زمان اجرا زمانی که DLL پیدا شد هش Checksum آن بایستی با هش ذخیره شده  درون برنامه مطابقت کند. این روش می تواند توسط استفاده از یک روش هشینگ قوی به همراه Salt  یا توسط استفاده از کلیدهای عمومی و خصوصی داخل برنامه برای رمز کردن checksum خارج از برنامه و رمزگشایی آن بهبود داده شود.<\/p>\n\n<p dir=\"rtl\">کاربران همچنین توانایی محافظت از خود با درنظر گرفتن اقدامات احتیاطی خاصی را دارند. کاربر می تواند اطمینان حاصل کند که فایل هایی که دارد باز می کند در همان دایرکتوری DLL هایی نیست که مشکوک به نظر می رسد. برای مثال اگر DLL ای به همراه عکسی که شما دانلود کرده اید بیاید، بهتر است که قبل از بازکردن عکس DLL را حذف کنید. کاربران همچنین توان تغییر کلید رجیستری CWDIllegalInDllSearch را دارند.در ضمن کاربران می توانند دو کلید رجیستری مختلف خودشان ست کنند.<\/p>\n\n<p> <\/p>\n\n<hr align=\"left\" size=\"1\" width=\"33%\" \/><p align=\"right\" dir=\"rtl\"><a href=\"https:\/\/www.certcc.ir\/web\/guest\/news\/-\/view\/بررسی-حملات-DLL-Hijacking،-تشخیص-و-پیشگیری-\/21184#_ftnref1\" title=\"\" rel=\"nofollow\">[1]<\/a> current working directory<\/p>\n\n<p> <\/p>","content_source":"","content_url":"","content_date_start":"2016-08-09 08:36:00","content_date_event":"2016-08-09 08:36:00","content_date_event_start":null,"content_date_event_end":null,"content_show_title_slider":1,"content_date_last_edit":"2016-08-09 08:37:19","content_date_register":"2016-08-09 08:37:19","content_columns":0,"content_show_img":1,"content_show_details":0,"content_show_related_img":0,"content_show_slider":1,"content_comment":1,"content_score":0,"tag_id":0,"score_average":null,"score_count":null,"score_date_last":null,"uid":15356,"eid":0,"attach_title":null,"attaches":[{"sizes":{"150":"file\/184\/attach\/197001\/attach.png","300":"file\/184\/attach\/197001\/attach.png","400":"file\/184\/attach\/197001\/attach.png","600":"file\/184\/attach\/197001\/attach.png","900":"file\/184\/attach\/197001\/attach.png","1200":"file\/184\/attach\/197001\/attach.png"}}]}]]