راهنمای بدون دردسر برای جستجوی رویدادهای رویداد (EQL) برای شکار تهدید

آیا تا به حال اصرار داشته اید که چندین اسکریپت PowerShell را گرد هم آورید تا تجزیه رویدادهای Sysmon را تجزیه و تحلیل کنید تا بتوانید نرم افزار تحلیل تهدید خود را ایجاد کنید؟ هیچ چیز در مورد خجالت نکشید! اما قبل از انجام هرگونه بثورات ، ابتدا باید در مورد نتایج تلاش های متوسط ​​خودم در این زمینه مطالعه کنید. اگر هنوز هم متقاعد شده اید که می خواهید این پروژه را به عهده بگیرید ، به سرعت متوجه می شوید ، همانطور که من ، چقدر سخت ایجاد نظارت بر تهدید در سطح سازمانی واقعی است.

قسمت اول: بررسی اجمالی از EQL
قسمت دوم: یافتن تهدیدات با پیوستن و توالی EQL

خوشبختانه ، اکنون یک نرم افزار منبع باز با نام EQL وجود دارد ، که از قسمت های دردناک این پروژه که شامل تجزیه و سازماندهی داده های رویداد Sysmon است ، مراقبت می کند. . با استفاده از EQL ، می توانید به طور مستقیم به داخل شیرجه بزنید ، از اجتناب از منحنی شیب دار که PowerShell ، Sysmon ، JSON ، ساختار داده و موارد دیگر را در آن استفاده کردم ، اجتناب می کنید.

در قسمت اول ، ما به سرعت مبانی EQL را می پردازیم ، و سپس در بخش دوم ، ما نشان خواهیم داد كه چگونه می توانید تجزیه و تحلیل مبتنی بر رفتار نسبتاً پیشرفته را برای كشف تهدیدها انجام دهید.

قسمت اول: مرور اجمالی EQL

EQL (تلفظ برابر) زبان ایمنی سایبر است كه توسط افراد در Endgame – عاشق آن نام باشید! – یک شرکت تحقیق و مشاوره سایبری. در حالی که در ابتدا EQL برای استفاده در داخل شرکت محدود شده بود ، در سال 2018 به عنوان یک پروژه منبع باز در Github برای پرورش همکاری میان پزشکان امنیتی در سراسر جهان منتشر شد. ایده عالی! EQL همچنین به عنوان ابزاری برای آزمایش قلم از پتانسیل برخوردار است ، که ما در یک پست آینده به بررسی آن خواهیم پرداخت.

زبان اصلی EQL مبتنی بر پایتون است ، با ویندوز سیسمون ادغام شده است ، و تجزیه و تحلیل های گسترده ای در آن وجود دارد. EQL از توانایی آن برای مطابقت با وقایع ، داده های پشته و انجام تجزیه و تحلیل مجموعه های داده های کل سود می برد. به زبان ساده ، می توانید به راحتی در متن فرایندهای مختلفی که معمولاً به یک پرس و جو پیچیده و کد نویسی برای چیزی مانند "همه فرآیندهای انجام فعالیت شبکه که از regsrvr32.exe است ، انجام دهید" استفاده کنید. این برنامه همچنین مستقل از طرحواره و OS-agnostic است ، و بنابراین می توان با هر مجموعه داده یا سیستم عامل (لینوکس ، ویندوز) مورد استفاده قرار گرفت.

هدف EQL فراتر رفتن از میراث متکی بر شاخص ها است. سازش (IoCs) با استفاده از نحو آشنا از نوع پوسته برای جستجوی سؤالات برای کشف رفتارهای جالب. به هر حال ، قابلیت های آنالیز امنیتی با مدل Miter ATT @ CK مطابقت دارد. اطلاعات بیشتری در مورد نحوه EQL در انجام کارها در این فیلم بسیار تماشایی وجود دارد – در مورد علامت 6:50 بروید.

EQL ایده ها

اجازه دهید در این شیرجه اولیه بیاییم. برای ساده کردن جستجو ، EQL خوشبختانه فراوانی کلمات کلیدی موجود در اسکریپت های PowerShell را به نفع یک نحو عملکرد ساده تر و کاربردی تر می کند. این توابع را می توان برای انجام ریاضیات و ایجاد عبارات پیچیده تر بدون وارد کردن رشته های طولانی کلمات کلیدی-سنگین استفاده کرد. بله!

Booleans

همانطور که انتظار دارید ، EQL دارای اپراتورهای بولی (و یا ، نه) ، مقایسه کننده های معمول (<,> ، <=,> = ،! =) است ، و یک مورد غیر حساس است جستجوی wildcard از طریق شخصیت ستاره در دسترس است. به عنوان مثال ، اگر می خواستید یک فرآیند خدمات "svchost" را جستجو کنید که در خط فرمان یا -k نداشته باشد ، یا service.exe را به عنوان یک فرآیند اصلی ، جستجو کنید ، می توانید پرس و جو را مانند این بنویسید:

 پردازش در جایی که process_name == "svchost.exe" و (command_line! = "* -k *" یا mother_process_name! = "service.exe") 

دنباله ها

توالی های EQL می توانند برای شناسایی نقاط داده ای که دارای ویژگی های مشترک هستند ، استفاده شوند مانند یک مسیر پردازش مشترک و مسیر پرونده. این نمایش داده شدگان دنباله همچنین می توانند حساس به زمان و رویداد باشند ، برای مثال ، می توانید یک نقطه ردیابی را برای پایان دادن به هنگام وقوع یک رویداد ورود یا بعد از اتمام مدت زمان مشخص تنظیم کنید. این می تواند برای حذف مطالب غیر منحصر به فرد و کاهش استفاده از حافظه مفید باشد.

یک سؤال دنباله عمومی به این شرح است: [دنباله

 دنباله [event_type1 where condition1][event_type2 where condition2]  ... [event_typeN where conditionN] 

به

پیوست. پایگاه داده مانند بسیار ساده می پیوندد. پیوندها می توانند برای مطابقت با رویدادهای هماهنگ که یک یا چندین ویژگی تعریف شده توسط کاربر دارند به اشتراک بگذارند. پیوستن EQL را می توان به عنوان نوعی از نحو توالی فکر کرد ، اما بدون محدودیت زمانی.

 به // توسط shared_field1 ، shared_field2 ، ... [event_type1 where condition1] بپیوندید. // توسط field1 [event_type2 where condition2] // توسط field2 ... [event_typeN where conditionN] // توسط field3 

لوله ها

از لوله ها می توان برای فیلتر كردن راحت و كاهش تعداد نتایج حاصل از یك مجموعه داده استفاده كرد و ویژگی های بیشتری را در پرس و جوهای پس از پردازش اضافه كرد. می توانید ورودی های تکراری را با استفاده از لوله "منحصر به فرد" حذف کنید ، یا می توانید بیشترین یا کمترین ورودی های مشترک را در یک مجموعه داده با دستور "filter" درخواست کنید.

لوله "count" تعداد کل ورودی های موجود را باز می گرداند. مطابق با جستجوی جستجو ساختار اساسی لوله به شرح زیر است:

 فرآیند در صورت صحیح | شمارش // نتایج به نظر می رسد مانند // "count": 100، "key": total "

Lineage Process

Lineage فرآیند است [بهطورخودکار برای ساده سازی کشف اطلاعات حیاتی در مورد یک فرآیند ، پیگیری می شود ، مانند منشأ آن و چه مدت زنده مانده است. با استفاده از این داده های اصل و نسب ، EQL می تواند نتایج مورد نیاز شما را جدا کند.

شما می توانید نتایج را فقط برای پردازش شناسه ها (PID ها) با یک فرزندپروری خاص محدود کنید یا PID ها را بر اساس هنگامی که آنها فعال شدند این به شما کمک می کند تا از جستجوی همان نتایج بارها و بارها اجتناب کنید ، زیرا می توانید به سرعت نادیده گرفتن PID های فعال را قبل از آخرین باری که همان جستجو را انجام داده اید برای جستجوی ورودی های PowerShell که نبود توسط ویندوز اکسپلورر راه اندازی شده است ، شما وارد این رشته می شوید:

 شبکه ای که پردازش_name == "قدرتhell.exe" و از فرزندان [process where process_name == "explorer.exe"] 

سلام جهان در EQL نیست

این پست فقط معرفی سریع ، و ما بار دیگر EQL را با دقت بیشتری بررسی خواهیم کرد. می تواند بلاگر infosec یک پرس و جو بسیار بی اهمیت EQL را در حدود 30 دقیقه نصب و اجرا کنید؟ پاسخ مثبت است.

من قبلاً باید این نکته را گوشزد می کردم که EQL با ورودی JSON کار می کند. بنابراین اگر می خواهید خروجی Sysmon را تجزیه و تحلیل کنید ، باید آن را به JSON تبدیل کنید – که در PowerShell به راحتی قابل دستیابی است و سپس از طریق EQL اجرا می شود. خوشبختانه ، باند Endgame قبلاً چند مجموعه داده را روی Github منتشر کرده است تا بتواند با آن کار کند.

با استفاده از یکی از مجموعه ها ، معادل EQL "سلام جهانی" را اجرا کردم تا تعداد فرایندهای ویندوز را که با "cmd" شروع می شود بشمارم.

پیروزی! من EQL را نصب کردم و آن را کردم تا در حدود 30 دقیقه ورودی JSON را تجزیه کنم!

نکته من در این بخش اول نشان دادن این است که این یک زبان بسیار نزدیک است. در بخش بعدی ، ما چگونگی استفاده از این زبان ساده را برای دستیابی به کاوش در مورد تهدیدهای مفید ، بررسی خواهیم کرد.

قسمت دوم: یافتن تهدیدات با پیوستن و توالی EQL

قبل از اینکه به ویژگیهای قدرتمند EQL بپردازیم ، قدم برمی داریم و بررسی می کنیم. کاری که ما واقعاً سعی در انجام آن داریم. نکته بزرگتر در مورد EQL این است که به طرز حیرت انگیز به معنای جستجوی نام های بدافزار خاص یا سایر نشانگرهای واضح نیست – کلمات کلیدی متن ساده که در پرونده ها دفن شده اند. دسترسی بسیار گرانول به فرآیندهای ایجاد شده ، DLL ها بارگیری شده ، و همچنین پرونده هایی که خوانده شده و نوشته شده اند. با این اطلاعات و دانش واقعی در مورد تهدیدات – متشکرم ، میتر! – ما می توانیم برای فعالیت های اساسی که در ویروس میراث یا اسکن امضا ظاهر نمی شوند شکار کنیم.

باند EQL حتی نقشه ای از ماتریس Miter Att & ck را در بیانیه های مربوط به EQL قرار داده است. اگر می خواهید از بازی جلوتر بروید ، می توانید در سناریوهای تهدیدآمیز به آنها نگاهی بیندازید ، اما ما در قسمت سوم به آن باز خواهیم گشت.

کار با Sysmon Log

EQL است. یک زبان پرس و جو ، پس پرس و جو چیست؟ پاسخ: پرونده ای با فرمت JSON مبتنی بر سیاهه Sysmon.

خوشبختانه ، EQL دارای ابزار خوبی است که عمل بالا بردن را انجام می دهد. می توانید به مخزن Github من بروید تا scrape-Events.ps1 را بارگیری کنید ، و سپس عملکرد Get-LastProcesses را برای انجام تبدیل اجرا کنید ، مانند این: [

 دریافت-جدیدترین پردازش ها | ConvertTo-Json | Out-File -Encoding ASCII -FilePath my-log.json 

یا اگر طرفدار بزرگی از پست شکار تهدید Sysmon ما هستید و ماژول منزل من را نصب کرده اید ، می توانید این کار را انجام دهید

 -sysmonlogs | 

اگر Sysmon ندارید ، می توانید برخی از گزارشهای سفارشی شده از قبل پخته شده را قرض بگیرید که در مخزن EQL یافت می شود.

یک خط لوله برای تبدیل یک Sysmon وارد قالب JSON شوید. شما به Eventcraper.ps1 EQL احتیاج دارید.

به هر حال ، با ورود به سیستم JSON ، شما آماده همکاری با EQL هستید. نصب برای EQL مبتنی بر پایتون روی یک پلتفرم لینوکس ساده است ، و پس از آنکه مترجم دستور EQL تمام شد ، وارد سیستم JSON شوید:

ورود به سیستم JSON خام را وارد کنید و طرح را فقط بررسی کنید تا ببینید که نام های حوزه را تشخیص می دهد

در سطح فنی تر ، شما باید اطمینان حاصل کنید که نام اصلی هسته sare در دسترس EQL است ، بنابراین باید طرح EQL را برای انواع مختلف رویدادهای Sysmon مطالعه کنید ، که می توانید در اینجا بیابید.

برای این کار روی رویدادهای "پردازش" تمرکز می کنید ، بنابراین برای دستیابی به برخی شکارهای تهدیدهای مفید ، به چند قسمت (pid ، ppid ، timestamp) نیاز دارید. برای به دست آوردن مقدار کامل EQL ، باید زمینه Timestamp را نیز تغییر دهید ، بنابراین نماد علائم را نشان می دهد. متأسفیم ، اما برای انجام این کار به عنوان بخشی از خط لوله ، باید بیانیه PowerShell اضافه کنید (به شیء datetime و خاصیت کنه ها مراجعه کنید) ، و من آن را به عنوان یک تمرین ترک می کنم.

شکار تهدید اساسی. با عضویت در

EQL به شما امکان می دهد با آزمایش آسان تكان های (تحصیل كرده و تحقیق شده) آسان خود را آزمایش كنید. ممکن است یک کاربر عادی که مستقیماً با PowerShell یا میراث cmd کار می کند ، نکاتی از این حساب درگیر فعالیت های غیرمعمول باشد.

شما می توانید مستقیماً وارد مفسر دستور EQL شوید:

 فرآیند جستجو در جایی که process_name == "PowerShell.exe" یا process_name == "cmd.exe" 

متأسفانه ، EQL پس از اجرای این دستور ، JSON را شروع می کند ، که ممکن است برای یک پرونده کوچک قابل تحمل باشد. روش تهویه JSON اولیه استفاده از دستور جدول EQL و فرمت کردن خروجی در ستون ها است:

دستور جدول EQL به زیباسازی خروجی JSON خام کمک می کند.

احتمالاً می خواهید معیارهایی را اضافه کنید که بیشتر مبتنی بر اجرای یک پوسته فرمان است: یک پوسته فرمان توسط "whoami.exe" و " findstr.exe "باید زنگ هشدار را فعال کند. و سپس اگر EQL تطابقی پیدا کند ، می خواهید به جای اینکه شاهد آن باشید به صورت تصادفی تمام خروجی ها را تحت عنوان کاربر سازماندهی کنید. این پیوستن آشنا از دنیای بانک اطلاعات است ، درعوض برای خروجی JSON اعمال می شود. من می توانم دستور زیر را انجام دهم:

 جستجو توسط کاربر [process where process_name == "cmdl.exe"] بپیوندید
[process where process_name ==  “whoami.exe”]
[process where process_name ==  “findstr.exe”] 

در حقیقت ، شما در حال جستجوی هر کاربرانی هستید که هر سه دستور را اجرا کند:

با آقای برنز چه می گذرد؟

Leets 'Sequence It!

من به سرعت می بینم که مونتی کارمند مظنون احتمالی است. ممکن است توضیحی خوش بینانه برای استفاده وی از پوسته cmd وجود داشته باشد. واقعاً چه قضیه می تواند این باشد که این دنباله از دستورات در یک بازه زمانی کوتاه اجرا شوند.

شما می توانید ببینید که من به چه صورت می گویید ، درست است؟ شاید مونتی شش ماه پیش یک پوسته cmd زد و پس از آن به هر دلیلی پرونده های خود را با استفاده از findstr جستجو می کرد ، و بعد از سه ماه قبل ، حوصله اش کشید ، پوسته ای آورد و وارد "whoami.exe" شد. عجیب است ، اما آیا او کمی مثل من و من نیست ، همانطور که این آهنگ ادامه می یابد؟

اگر پوسته cmd ، findstr و کسانی که همه در آنجا اجرا می شدند ، می گویند 10 دقیقه با هم هستند ، پس می توانید با اطمینان بیشتری بگویید که رفتار مونت به مراتب بیشتر با حسابی که هک شده است سازگار است.

این جایی است که دنباله EQL وارد بازی می شود. در اصل این پیوستن به یک پارامتر زمان است. بنابراین من آن را به این صورت اجرا کرده ام:

 دنباله جستجو توسط کاربر با حداکثر 10 متر [process where process_name == "cmdl.exe"]
[process where process_name ==  “whoami.exe”]
[process where process_name ==  “findstr.exe”] 

اگر من دریابم که فعالیت های مونی متناسب با این جستجوی توالی EQL است ، من آماده ام تا بگویم "کردم بله". اگرچه احتمالاً می خواهم تجزیه و تحلیل بیشتری انجام دهم.

این نکته خوبی برای پایان بخش دوم است ، و شما باید به جستجوی برخی از جستجوهای خود در داده های ورود به سیستم SSMON با اندازه JSON بپردازید. هفته آینده را به قسمت III برگردانید ، جایی که حتی در اعماق آن حتی عمیق تر می شویم و همچنین برخی از اسکریپت های تهدید Miter Att & ck را کشف خواهیم کرد.