در این بخش قراره در مورد SIEMها بخصوص Splunk صحبت کنیم. ابتدا در مورد اسپلانک صحبت میکنیم بعد مروری بر Threat hunting یا شکار تهدیدات داریم و در نهایت با نحوه حرفه ای کوئری زدن در اسپلانک اشنا میشیم.
ابزارهای SIEM قلب SOC هستند و تمامی تحلیلگران امنیت با استفاده از این ابزارها تحلیل های امنیتی خود رو انجام میدهند، یوزکیس و سناریو های امنیتی رو پیاده سازی میکنند و شاید بهتر باشه بگم باهاشون زندگی می کنند.
شاید بد نباشه ابتدا یکم در مورد بخش های SOC توضیح کوتاهی بدهیم. هر SOC از سه بخش تشکیل میشه:
People: شامل تحلیلگران امنیتی که در مرکز عملیات امنیت مشغول به فعالیت هستند Process: شامل فرایندها و پروسه هایی هست که باید برای تحلیل رخدادهای امنیتی طی بشه Technology: شامل ابزارهایی هست که تحلیلگران برای کارهای خود استفاده میکنند
اسپلانک چیه؟
اسپلانک یک SIEM (Security information and event management) است که بصورت پلتفرمی قدرتمند بمنظور جمع آوری لاگها، جستجو، مشاهده، آنالیز و تحلیل دادهها در سازمانها نصب میشود و فعالیت میکند. کشف اطلاعات از طریق پردازش هزاران داده از بررسی لاگها انجام میشود. به بیانی دیگر Splunk دادههای خام را جمع آوری و فهرست بندی میکند و به شما این امکان را میدهد که بتوانید بر روی تمام دادهها عملیات جستجو را انجام دهید و نتایج را به هر صورت قابل دلخواه مشاهده کنید.
چطور با اسپلانک شکار تهدیدات(Threat Hunting) کنیم؟
مفهوم شکار تهدیدات یا همان Threat Hunting به این فرآیند اشاره دارد که ما به دنبال تهدیدات و کشف تهدیدات متنوع باشیم که اغلب ممکن است در سازمان و شبکه ما وجود نداشته باشند. شکار تهدیدات شامل پروسه های متعددی از جمله بررسی پروسس ها، مموری، سرویس ها، Scheduled taskها و غیره می باشد. برای انجام شکار تهدیدات نیاز است یوزکیس های امنیتی مشخصی داشته باشید.
چطور با اسپلانک بهینه کوئری بزنیم؟
اگر با اسپلانک کار کرده باشید، قطعا متوجه شده اید که بعضی از کوئری ها در اسپلانک مدت زمان زیادی برای اجرا طول میکشند. بعضا زمانبر شدن آن باعث کلافه شدن تحلیلگران میشه. در این بخش میخوایم چند نکته رو ذکر کنیم که باعث میشه کوئری های شما سریعتر و حرفه ای تر اجرا شوند.
حرفه ای کوئری بزنید..
زبان کوئری در اسپلانک SPL میباشد. کوئری دارای دو بخش است: 1- فیلتر 2- پردازش
برای مثال در کوئری زیر خط اول فیلتر و خط دوم پردازش میباشد. به صورت کلی تمامی موارد قبل از "|" (Pipeline) فیلتر و بعد از آن پردازش قرار دارد.
index=windows source="XmlWinEventLog:Security" sourcetype=XmlWinEventLog | head 1
? محدود نمودن زمان
برای مشاهده Eventها در زمان محدود، پیشنهاد میشود زمان کوئری متناسب با Event محدود گردد. برای مثال در صورتیکه Event روز گذشته در ساعت 17 مد نظر باشد، بهتر است زمان در این بازه محدود شود و از فیلترهای زمانی 24 ساعت گذشته استفاده نگردد.
در Splunk برای محدود نمودن زمان از دو طریق میتوان اقدام نمود:
1- استفاده از Time Picker
در این بخش میتوان به روشهای مختلف محدوده زمانی را اعمال نمود.
2- استفاده از Time Modifier
با استفاده از earliest, latest میتوان محدوده زمانی را تغییر داد. برای مثال جهت مشاهده Eventهای روز گذشته میتوان فیلترهای زیر را اعمال نمود:
earliest=-1d latest=now()
? مشخص کردن index, source, sourcetype
تمامی کوئریها باید این سه مقدار را داشته باشند. برای مثال در صورت مشاهده لاگهای 4624 بهتر است از کوئری زیر استفاده شود.
کوئری صحیح:
index=windows source="XmlWinEventLog:Security" sourcetype=XmlWinEventLog EventCode=4624
کوئری غلط:
index=windows EventCode=4624
? استفاده از TERM
در صورتیکه یک IP، کلمه یا موردی جستجو شود که هیچ اطلاعاتی در مورد آن نباشد، استفاده میشود.
کوئری صحیح:
TERM (“1.1.1.1”) TERM (“My Word”)
کوئری غلط:
index=* 1.1.1.1 index=* “My Word”
? عدم استفاده از * تا حد ممکن
تا حد امکان سعی شود کوئری مشخص باشد. همچنین باید سعی شود تا حد امکان از * در کوئری خودداری شود. برای مثال درصورتیکه کد وضعیتهای 404 HTTP مدنظر باشد، بهتر است این مقدار ذکر گردد.
کوئری صحیح:
status=404
کوئری غلط:
status=4**
? عدم استفاده ازNOT تا حد ممکن
برای درک بهتر این موضوع کوئریهای زیر بررسی میشود.
کوئری صحیح:
src!=x.x.x.x
در این کوئری، تمامی آدرسهای مبدا که مخالف x.x.x.x باشند، برگردانده میشود.
کوئری غلط:
NOT src=x.x.x.x
در این کوئری برای Splunk اهمیت ندارد که لاگها فیلد src را دارند یا خیر و در تمامی لاگها بدنبال آدرسهایی میگردد که مخالف x.x.x.x باشند. در نتیجه این کوئری سربار پردازشی بیشتری برروی سرور دارد.
? استفاده از fields
با استفاده از آن، کوئری تنها برروی فیلدهای ذکر شده انجام میگردد. برای مثال در کوئری زیر تنها باید مقادیر فیلد EventCode جستجو شود.
کوئری صحیح:
index=windows source="XmlWinEventLog:Security" sourcetype=XmlWinEventLog | fields EventCode | stats count by EventCode
کوئری غلط:
index=windows source="XmlWinEventLog:Security" sourcetype=XmlWinEventLog | stats count by EventCode
? مشخص بودن کوئری
یکی از مواردی که به افزایش سرعت جستجو کمک میکند، مشخص نمودن فیلد مورد نظر در بخش فیلتر است. درصورتیکه که این مقدار مشخص نشود، Splunk در تمامی لاگها بدنبال آن میگردد که ممکن است تمامی لاگها این فیلد را نداشته باشند. برای مثال در کوئری زیر اگر فیلد EventCode مشخص نشود، تمامی لاگها بررسی میشوند که سبب کاهش سرعت انجام کوئری میشود.
کوئری صحیح:
index=windows source="XmlWinEventLog:Security" sourcetype=XmlWinEventLog EventCode=* | stats count by EventCode
کوئری غلط:
index=windows source="XmlWinEventLog:Security" sourcetype=XmlWinEventLog | stats count by EventCode
? استفاده از tstats
از دستور tstats جهت افزایش سرعت کوئریها استفاده میشود. این دستور فایلهای tsidx را بررسی کرده که سبب افزایش سرعت کوئری میشود. در مثال زیر، نمونه سادهای از این کوئری مشاهده میشود. همانطور که مشاهده میشود دستور tstats کوئری را در 1 ثانیه و stats آن را در 456 ثانیه اجرا کرده که هنوز تمام نشده است.
کوئری صحیح:
| tstats count where index=windows by host
کوئری غلط:
index=windows | stats count by host
? استفاده از دستور metadata
دادهها در Splunk در Bucketهای مختلف ذخیره میشوند. در فایل tsidx اطلاعاتی شاملhost, source, sourcetype و... ذخیره میشود. برای استفاده از دستور metadata باید بخشهای type آن را مشخص نمود.
| metadata type=hosts index=*
در بخش type میتوان host, source, sourcetype را وارد کرد. نکته مهم این است که در بخش type باید حرف s را به host, source, sourcetype اضافه کرد. برای مثال hosts, sources, sourcetypes
کوئری صحیح:
| metadata type=sources index=*
کوئری غلط:
index=* | stats count by source
نتیجه گیری
در این بخش با روش هایی که حرفه ای ها کوئری میزنند آشنا شدیم. امیدوارم این بخش مورد استفاده و توجه شما قرار بگیره.