The Adventures of the Elusive Malware، قسمت چهارم: DDE و زمینه های سند Word (ما اینجا هستیم)
در این مقاله، من قصد داشتم به سناریوی حمله بدون فایل چند مرحلهای پیچیدهتر با پین کردن روی سیستم بپردازم. اما سپس با یک حمله بسیار ساده و بدون کد مواجه شدم – بدون نیاز به ماکروهای Word یا Excel! و این فرضیه اصلی من را که در زیربنای این سری مقالات بسیار مؤثرتر است ثابت می کند: شکستن محیط بیرونی هر سازمانی اصلاً کار دشواری نیست.
اولین حمله ای که توضیح خواهم داد از آسیب پذیری Microsoft Word استفاده می کند که مبتنی بر آن است منسوخ شده پروتکل تبادل اطلاعات پویا (DDE). او قبلا بود درست شد. دومی از یک آسیب پذیری عمومی تر در COM مایکروسافت و قابلیت های انتقال اشیا سوء استفاده می کند.
بازگشت به آینده با DDE
آیا کسی دیگر DDE را به یاد دارد؟ احتمالا زیاد نیست. یکی از اولین ها بود پروتکل های ارتباطی بین فرآیندی که به برنامه ها و دستگاه ها امکان انتقال داده ها را می داد.
من خودم کمی با آن آشنا هستم زیرا قبلا تجهیزات مخابراتی را بررسی و تست می کردم. در آن زمان، DDE به عنوان مثال، به اپراتورهای مرکز تماس اجازه داد تا شناسه تماس گیرنده را به یک برنامه CRM منتقل کنند، که در نهایت کارت مشتری را باز کرد. برای این کار باید یک کابل RS-232 را بین گوشی و کامپیوتر خود وصل کنید. آن روز ها، روزهایی بود که!
همانطور که مشخص است، مایکروسافت ورد هنوز است پشتیبانی می کند DDE.
چیزی که این حمله را بدون کد موثر می کند این است که می توانید به پروتکل DDE دسترسی داشته باشید مستقیما از فیلدهای خودکار در یک سند Word (کلاه به SensePost برای تحقیقات و انتشارات در مورد آن).
کدهای فیلد یکی دیگر از ویژگی های قدیمی MS Word است که به شما امکان می دهد متن پویا و کمی برنامه نویسی را به سند خود اضافه کنید. واضح ترین مثال فیلد شماره صفحه است که می تواند با استفاده از مقدار {PAGE *MERGEFORMAT} در پاورقی درج شود. این اجازه می دهد تا شماره صفحه به طور خودکار تولید شود.
نکته: می توانید مورد منوی فیلد را در زیر درج پیدا کنید.
به یاد دارم که وقتی برای اولین بار این ویژگی را در Word کشف کردم، شگفت زده شدم. و تا زمانی که پچ آن را غیرفعال کرد، Word همچنان از گزینه فیلدهای DDE پشتیبانی می کرد. ایده این بود که DDE به Word اجازه میدهد تا مستقیماً با برنامه ارتباط برقرار کند تا بتواند خروجی برنامه را به یک سند منتقل کند. در آن زمان این یک فناوری بسیار جوان بود - پشتیبانی از تبادل داده با برنامه های کاربردی خارجی. بعداً به فناوری COM تبدیل شد که در ادامه به آن خواهیم پرداخت.
در نهایت هکرها متوجه شدند که این اپلیکیشن DDE می تواند یک پوسته فرمان باشد که البته پاورشل را راه اندازی کرد و از آنجا هکرها می توانند هر کاری که می خواهند انجام دهند.
اسکرین شات زیر نحوه استفاده من از این تکنیک مخفیانه را نشان می دهد: یک اسکریپت کوچک PowerShell (که از این پس به عنوان PS نامیده می شود) از فیلد DDE، اسکریپت PS دیگری را بارگیری می کند که مرحله دوم حمله را راه اندازی می کند.
با تشکر از Windows برای هشدار پاپ آپ مبنی بر اینکه فیلد داخلی DDEAUTO مخفیانه سعی در راه اندازی پوسته دارد.
روش ترجیحی برای بهره برداری از آسیب پذیری استفاده از یک نوع با فیلد DDEAUTO است که به طور خودکار اسکریپت را اجرا می کند. در افتتاحیه سند ورد.
بیایید به این فکر کنیم که در این مورد چه کاری می توانیم انجام دهیم.
به عنوان یک هکر تازه کار، می توانید، برای مثال، یک ایمیل فیشینگ بفرستید، وانمود کنید که از سرویس مالیاتی فدرال هستید، و فیلد DDEAUTO را با اسکریپت PS برای مرحله اول (در اصل یک قطره چکان) جاسازی کنید. و شما حتی نیازی به انجام کدنویسی واقعی ماکروها و غیره ندارید، مانند آنچه من انجام دادم مقاله قبلی
قربانی سند شما را باز می کند، اسکریپت تعبیه شده فعال می شود و هکر به داخل کامپیوتر می رود. در مورد من، اسکریپت PS از راه دور فقط یک پیام را چاپ می کند، اما می تواند به راحتی کلاینت PS Empire را راه اندازی کند، که دسترسی پوسته از راه دور را فراهم می کند.
و قبل از اینکه قربانی وقت داشته باشد چیزی بگوید، هکرها ثروتمندترین نوجوانان دهکده خواهند بود.
پوسته بدون کوچکترین کدگذاری راه اندازی شد. حتی یک کودک هم می تواند این کار را انجام دهد!
DDE و فیلدها
مایکروسافت بعداً DDE را در Word غیرفعال کرد، اما قبل از اینکه شرکت اعلام کرد که این ویژگی به سادگی مورد سوء استفاده قرار گرفته است. بی میلی آنها برای تغییر هر چیزی قابل درک است. در تجربهام، من خودم نمونهای دیدهام که در آن بهروزرسانی فیلدها هنگام باز کردن یک سند فعال بود، اما ماکروهای Word توسط IT غیرفعال شدند (اما اعلان را نشان میدادند). ضمناً می توانید تنظیمات مربوطه را در قسمت تنظیمات Word پیدا کنید.
با این حال، حتی اگر بهروزرسانی فیلد فعال باشد، مایکروسافت ورد علاوه بر این، هنگامی که یک فیلد درخواست دسترسی به دادههای حذف شده را میدهد، مانند مورد DDE بالا، کاربر را مطلع میکند. مایکروسافت واقعاً به شما هشدار می دهد.
اما به احتمال زیاد، کاربران همچنان این هشدار را نادیده می گیرند و به روز رسانی فیلدها را در Word فعال می کنند. این یکی از فرصتهای کمیاب برای تشکر از مایکروسافت برای غیرفعال کردن ویژگی خطرناک DDE است.
امروزه یافتن یک سیستم ویندوز وصله نشده چقدر دشوار است؟
برای این آزمایش، من از AWS Workspace برای دسترسی به دسکتاپ مجازی استفاده کردم. به این ترتیب من یک ماشین مجازی MS Office بدون وصله دریافت کردم که به من اجازه داد فیلد DDEAUTO را وارد کنم. من شک ندارم که به روشی مشابه می توانید شرکت های دیگری را پیدا کنید که هنوز پچ های امنیتی لازم را نصب نکرده اند.
رمز و راز اشیاء
حتی اگر این وصله را نصب کرده باشید، حفره های امنیتی دیگری در MS Office وجود دارد که به هکرها اجازه می دهد کاری بسیار شبیه به آنچه ما با Word انجام دادیم انجام دهند. در سناریوی بعدی خواهیم آموخت از Excel به عنوان طعمه برای حمله فیشینگ بدون نوشتن هیچ کدی استفاده کنید.
برای درک این سناریو، اجازه دهید مایکروسافت Component Object Model یا به اختصار را به یاد بیاوریم COM (مدل شیء جزء).
COM از دهه 1990 وجود داشته است و به عنوان یک "مدل جزء شی گرا، زبانی خنثی" بر اساس فراخوانی روش از راه دور RPC تعریف شده است. برای درک کلی از اصطلاحات COM، بخوانید این پست در StackOverflow.
اساساً، می توانید یک برنامه COM را به عنوان یک فایل اجرایی Excel یا Word یا یک فایل باینری دیگر که اجرا می شود در نظر بگیرید.
به نظر می رسد که یک برنامه COM نیز می تواند اجرا شود سناریو - جاوا اسکریپت یا VBScript. از نظر فنی به آن می گویند اسکریپت. ممکن است پسوند .sct را برای فایل ها در ویندوز دیده باشید - این پسوند رسمی برای اسکریپت ها است. در اصل، آنها کدهای اسکریپتی هستند که در یک بسته بندی XML پیچیده شده اند:
<?XML version="1.0"?>
<scriptlet>
<registration
description="test"
progid="test"
version="1.00"
classid="{BBBB4444-0000-0000-0000-0000FAADACDC}"
remotable="true">
</registration>
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("cmd /k powershell -c Write-Host You have been scripted!");
]]>
</script>
</scriptlet>
هکرها و نفوذگران کشف کرده اند که ابزارها و برنامه های کاربردی جداگانه ای در ویندوز وجود دارد که اشیاء COM و بر این اساس، اسکریپت ها را نیز می پذیرند.
من می توانم یک اسکریپت را به یک ابزار ویندوز که با VBS نوشته شده است، به نام pubprn ارسال کنم. این در اعماق C:Windowssystem32Printing_Admin_Scripts قرار دارد. به هر حال، ابزارهای دیگر ویندوز وجود دارند که اشیاء را به عنوان پارامتر می پذیرند. بیایید ابتدا به این مثال نگاه کنیم.
کاملا طبیعی است که پوسته را می توان حتی از روی یک اسکریپت چاپی راه اندازی کرد. برو مایکروسافت!
به عنوان یک آزمایش، من یک اسکریپت راه دور ساده ایجاد کردم که یک پوسته راه اندازی می کند و یک پیام خنده دار را چاپ می کند، "شما به تازگی اسکریپت گرفته شده اید!" اساسا، pubprn یک شی اسکریپت را نمونهسازی میکند و به کد VBScript اجازه میدهد تا یک wrapper را اجرا کند. این روش برای هکرهایی که میخواهند مخفیانه وارد سیستم شما شده و مخفی شوند، مزیت آشکاری را فراهم میکند.
در پست بعدی توضیح خواهم داد که چگونه اسکریپت های COM توسط هکرها با استفاده از صفحات گسترده اکسل مورد سوء استفاده قرار می گیرند.
برای تکالیف خود، نگاهی بیندازید این ویدیو از Derbycon 2016، که دقیقا توضیح می دهد که چگونه هکرها از اسکریپت ها استفاده می کنند. و همچنین بخوانید این مقاله در مورد اسکریپت ها و نوعی نام.