Sysmon یه برنامه امنیتی رایگان هستش که جزء ابزارهای Microsoft Sysinternals هستش و میتونه فعالیتهای مشکوک یا مخرب رو مونیتور و شناسایی کنه و برای اونها رویدادهایی رو در Windows Event Log لاگ کنه.
بصورت پیش فرض، Sysmon رویدادهای مهمی مانند ایجاد یا خاتمه یه پروسس رو مونیتور میکنه. اما میتونید با ایجاد فایلهای پیکربندی کارهای زیادی مانند حذف فایل، تغییرات clipboard ویندوز و … رو هم مونیتور و در کنترل داشته باشید.
با استفاده از دستور sysmon -s
میتونید، لیست کاملی از Sysmon schema رو مشاهده کنید.
نسخه جدید که Sysmon 15 هستش دو ویژگی جدید داره :
- تبدیل پروسس Sysmon به یه پروسس محافظت شده.
- اضافه شدن گزینه جدید برای شناسایی ایجاد فایل اجرایی جدید
پروسس محافظت شده Sysmon :
با توجه به اینکه Sysmon ابزاری برای شناسایی رفتارهای مخرب هستش، بنابراین بازیگران تهدید علاقمند هستن که خود این برنامه رو دستکاری یا غیرفعال کنن.
در نسخه جدید، با تبدیل فایل اجرایی Sysmon.exe به پروسس محافظت شده، از تزریق کد مخرب به پروسس برنامه جلوگیری میشه.
این ویژگی پروسس های محافظت شده، از ویندوز 8.1 اومده که در اون مایکروسافت یه ویژگی جدید بنام سرویس های محافظت شده رو معرفی کرد که به سرویس های حالت کاربر ضد بدافزارها امکان راه اندازی بعنوان یه سرویس محافظت شده رو میداد. در این حالت ویندوز از یکپارچگی کد استفاده میکنه تا فقط کدهای قابل اعتماد، امکان اجرا رو داشته باشن و همچنین از حملاتی مانند تزریق کد و … محافظت میکنه.
برای بررسی این قضیه اگه Sysmon رو اجرا کنید و با Process Explorer وارد قسمت Properties اون بشید، در تب Security میتونید Protected رو ببینید:
همونطور که مشاهده میکنید، Sysmon بعنوان یه PPL process (PROTECTED_ANTIMALWARE_LIGHT) اجرا میشه که میتونید جزییاتش رو اینجا بخونید.
شناسایی فایلهای اجرایی :
نسخه جدید همچنین ، Sysmon schema رو به نسخه 4.90 ارتقاء داده که شامل گزینه FileExecutableDetected برای شناسایی فایلهای اجرایی ایجاد شده جدید هستش.
1 2 3 4 5 6 7 8 9 10 |
<event name="SYSMONEVENT_FILE_EXE_DETECTED" value="29" level="Informational" template="File Executable Detected" rulename="FileExecutableDetected" version="5"> <data name="RuleName" inType="win:UnicodeString" outType="xs:string" /> <data name="UtcTime" inType="win:UnicodeString" outType="xs:string" /> <data name="ProcessGuid" inType="win:GUID" /> <data name="ProcessId" inType="win:UInt32" outType="win:PID" /> <data name="User" inType="win:UnicodeString" outType="xs:string" /> <data name="Image" inType="win:UnicodeString" outType="xs:string" /> <data name="TargetFilename" inType="win:UnicodeString" outType="xs:string" /> <data name="Hashes" inType="win:UnicodeString" outType="xs:string" /> </event> |
برای مثال میتونید فولدرهای C:\ProgramData\
و C:\Users\
که اغلب توسط بازیگران تهدید برای قرار دادن بدافزارهاشون استفاده میشه ، با این ویژگی و با فایل پیکربندی زیر، مونیتور کنیم تا در صورت ایجاد فایل اجرایی در اونها، لاگ بشن :
1 2 3 4 5 6 7 8 9 10 11 |
<Sysmon schemaversion="4.90"> <!-- Capture all hashes --> <HashAlgorithms>MD5,SHA256</HashAlgorithms> <EventFiltering> <!-- Log executable file creations --> <FileExecutableDetected onmatch="include"> <TargetFilename condition="begin with">C:\ProgramData\</TargetFilename> <TargetFilename condition="begin with">C:\Users\</TargetFilename> </FileExecutableDetected> </EventFiltering> </Sysmon> |
در ادامه با استفاده از دستور sysmon -i
که در ادامه اش باید مسیر فایل پیکربندی بالا رو بدید، Sysmon اجرا شده و شروع به مونیتور و لاگ گیری میکنه.
1 |
sysmon -i fileMan.conf |
همه رویدادهای Sysmon در مسیر Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
در Event Viewer لاگ و قابل دسترس هستش.
اگه فایلی در مسیرهای بالا، طبق رولی که تعریف کردیم، ایجاد بشه، Sysmon اون فایل رو مسدود و یه رویداد با EventID 29, File Executable Detected در Event Viewer ایجاد میکنه.
اطلاعاتی که از این رویداد میشه گرفت :
- UtcTime : زمان شناسایی رویداد
- ProcessID : نشون دهنده PID پروسسی هستش که میخواد فایل اجرایی جدید ایجاد کنه.
- User : نشون دهنده کاربر پروسسی که میخواد فایل اجرایی جدید ایجاد کنه.
- Image : نام فایلی که میخواد فایل اجرایی جدید ایجاد کنه.
- TargetFilename : نام فایل اجرایی ایجاد شده. در تست ها این نام بصورت یه فایل موقت مشخص شده.
- Hash : هش فایل ایجاد شده که نوع هش هم بستگی به تنظیمات پیکربندی HashAlgorithms داره.
اگه نمیدونید چطوری یه فایل پیکربندی برای Sysmon توسعه بدید، محقق امنیتی آقای Florian Roth یه فایل پیکربندی آماده با ویژگی جدید Sysmon که امکان شناسایی بدافزارهای شناخته شده و فایلهای اجرایی ابزارهای هک رو داره، توسعه داده که میتونید از اون استفاده کنید.
با این ویژگی جدید چیکارا میتونیم بکنیم :
آقای Olaf Hartong یسری نکات جالب و خلاقانه در خصوص نحوه استفاده از این ویژگی Sysmon منتشر کرده که در ادامه یه نگاهی بهش میندازیم :
این روزها احتمالا شنیدید که بازیگران تهدید از درایورهای آسیب پذیر برای افزایش امتیاز و دور زدن محصولات امنیتی استفاده میکنن که به تکنیک Bring Your Own Driver (BYOD) معروف هستش. در این خصوص یه پروژه ای هست بنام loldrivers که لیستی از درایورهای آسیب پذیر رو با جزییات منتشر میکنه. با ویژگی جدید Sysmon میشه پیکربندی رو تعریف کرد که، اگه درایور آسیب پذیر روی سیستم دانلود شد، اونو شناسایی و مسدود و لاگ کنه.
یه همچین خروجی رو داریم :
1 2 3 4 5 6 7 8 9 |
File Executable Detected: RuleName: - UtcTime: 2023-06-22 16:03:25.857 ProcessGuid: {82b2c6a6-2312-6494-6603-000000000500} ProcessId: 7356 User: sysmon-test\olafhartong Image: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe TargetFilename: C:\Users\olafhartong\Downloads\e051a7af-a474-4f5c-b0e5-f983309688dc.tmp Hashes: SHA1=D48757B74EFF02255F74614F35AA27ABBE3F72C7,MD5=32365E3E64D28CC94756AC9A09B67F06,SHA256=09043C51719D4BF6405C9A7A292BB9BB3BCC782F639B708DDCC4EEDB5E5C9CE9,IMPHASH=1F2627FC453DC35031A9502372BD3549 |
این ویژگی رو میشه با استفاده از MarkOfTheWeb که در EventId 15 FileCreateStreamHash هستش ترکیب کرد و منشاء اصلی فایل رو هم بدست آورد:
نکته ای که وجود داره اینه که ، بازیگر تهدید ممکنه با مرورگر درایور آسیب پذیر رو دانلود نکنه و مثلا اونو کپی کنه. در این صورت هم میشه از این ویژگی جدید برای شناسایی استفاده کرد.
یه کاربرد دیگه از این ویژگی میشه روی مکانهایی که در sideloaded ، html smuggled یا توسط پیلودهای دیگه روی دیسک نوشته میشه ، نظارت کرد. این مکانها بسته به محیط میتونه مختلف باشه اما یه نمونه میتونه بصورت زیر باشه :
1 2 3 4 5 6 7 8 9 10 11 |
<Sysmon schemaversion="4.90"> <EventFiltering> <RuleGroup name="" groupRelation="or"> <FileExecutableDetected onmatch="include"> <TargetFilename condition="contains">\Downloads\</TargetFilename> <!--User Download folder--> <TargetFilename condition="contains">\Appdata\Local\Temp\</TargetFilename> <!--User Temp folder--> <TargetFilename condition="contains">\Appdata\Local\Microsoft\Windows\INetCache\Content.Outlook\</TargetFilename> <!--Microsoft Outlook Temp folder--> </FileExecutableDetected> </RuleGroup> </EventFiltering> </Sysmon> |