عادیسازی لاگهای فورتیگیت و طراحی کنش سریع
Splunk یک پلتفرم جامع برای جمعآوری، نمایهسازی (Indexing) و تحلیل دادههای ماشین (Machine Data) در مقیاس بزرگ است. برخلاف پایگاههای داده سنتی که نیازمند تعریف پیشینی طرح (Schema) هستند، Splunk عمدتاً از رویکرد Schema-on-the-Fly بهره میگیرد: بخش عمدهای از استخراج فیلدها هنگام جستجو (Search Time) انجام میشود، اگرچه برخی استخراجها نیز میتوانند در زمان ایندکس (Index Time) صورت پذیرند. این انعطافپذیری باعث میشود Splunk برای محیطهای چندمنبعی مانند مراکز عملیات امنیت (SOC) ابزاری ایدهآل باشد.
خط لوله پردازش داده در Splunk از مراحل اصلی زیر تشکیل میشود:
هسته جستجو در Splunk زبان خطلولهای SPL (Search Processing Language) است که مجموعه بزرگی از دستورات را برای کاوش، تبدیل و تحلیل دادهها در اختیار تحلیلگر قرار میدهد. با SPL میتوان پرسشهای پیچیده امنیتی را در میان میلیاردها رخداد در کسری از ثانیه پاسخ داد.
اما پیش از هر تحلیلی باید لاگ (Log) را به درستی شناخت. لاگ یک رکورد خودکار از رویدادهای سیستم است که توسط سیستمعاملها، برنامهها، تجهیزات شبکه (مانند فایروال FortiGate) و سایر مؤلفههای دیجیتال تولید میشود. هر رخداد لاگ استاندارد از چند مؤلفه کلیدی تشکیل شده است:
لاگها در قالبهای متنوعی تولید میشوند: Syslog (طبق استانداردهای RFC3164 یا RFC5424)، JSON، CSV، Key-Value (مانند نمونههای FortiGate با ساختار key=value) و XML. هر یک از این قالبها روش استخراج فیلد متفاوتی میطلبد. اَدآنهای (Add-ons) Splunk برای تجهیزات شناختهشده – از جمله FortiGate – این فرآیند را خودکار کرده و فیلدهایی مانند srcip، dstip، action، service، policyid و ... را از پیش استخراج میکنند.
چالش بزرگ در محیطهای واقعی، ناهمگونی (Heterogeneity) لاگهاست. یک مفهوم واحد مانند «کشور مبدأ» ممکن است در فایروال FortiGate با نام srccountry، در روتر Cisco با source_country، در یک پروکسی با country و در سرور لینوکسی دیگری با geo_src نمایش داده شود. بدون عادیسازی (Normalization) – از جمله تعریف Field Aliases، Calculated Fields و یکسانسازی sourcetype – جستجوهای امنیتی ناقص میمانند و مهاجمان از شکافهای ناشی از این آشفتگی عبور میکنند.
در این راهنما، با استفاده از دادههای واقعی یک FortiGate 400F که از طریق اَدآن رسمی وارد Splunk شده، مفاهیم عادیسازی، Field Alias، فیلدهای محاسباتی و Workflow Actions را به صورت عملی فرا میگیریم. هدف نهایی آن است که تحلیلگر امنیتی پیش از شروع هرگونه شکار تهدید، دادههای خود را به وضعیتی یکپارچه و آماده تحلیل برساند.
در مراکز عملیات امنیت (SOC)، لاگها از منابع مختلف با قالبهای متفاوت جمعآوری میشوند. عادیسازی یعنی یکسانسازی نام فیلدها، نوع مقادیر و ساختار دادهها تا تحلیل، جستجو و هشدارها سریعتر و دقیقتر اجرا شوند.
تعریف: نگاشتی از چند نام مختلف فیلد به یک نام واحد.
کاربرد: در فورتیگیت، کشور مبدأ گاهی با country و گاهی با srccountry نمایش داده میشود. با تعریف Alias با نام src_country، میتوان بدون نگرانی از نام دقیق، همهی رویدادها را با یک دستور تحلیل کرد.
اهمیت: بدون Alias، کوئری stats count by country تنها بخشی از دادهها را پوشش میدهد و باعث تحلیل ناقص میشود.
تعریف: فیلدی که مستقیماً در لاگ خام وجود ندارد و با استفاده از eval از روی فیلدهای موجود ساخته میشود.
مثال: total_bytes = sentbyte + rcvdbyte حجم کل ترافیک یک نشست را نشان میدهد.
تعریف: جداسازی فیلدهای معنیدار از متن خام رویداد (_raw).
اَدآن رسمی FortiGate برای Splunk بیشتر فیلدها را بهطور خودکار استخراج میکند. درک این فرآیند برای عیبیابی ضروری است.
مسئله: ممکن است لاگهای یک دستگاه با sourcetype اشتباه یا قدیمی (مثلاً fortigate_old) ایندکس شده باشند.
راهکار موقت: eval sourcetype = "fortigate"
راهکار دائمی: تنظیم rename در فایل props.conf.
تعریف: دکمهای قابل کلیک در نتایج جستجو که روی مقدار یک فیلد (مثلاً srcip) عملی مانند باز کردن URL خارجی را انجام میدهد.
مثال: جستجوی Whois با کلیک روی IP.
کوئری زیر را گامبهگام تفسیر کنید و بگویید هدف نهایی آن چیست. چرا استفاده از src_country به جای srccountry حیاتی است؟
index=firewall sourcetype=fortigate | eval total_bytes = sentbyte + rcvdbyte | stats sum(total_bytes) as bytes, dc(dstip) as unique_dest by srcip, src_country | where bytes > 10000 AND unique_dest > 3 | sort - bytes
مدیر از شما میخواهد بهجای مجموع بایت، درصد اتصالات timeout هر IP را محاسبه کنید و فقط IPهایی را نمایش دهید که این نسبت برایشان بالای ۵۰٪ باشد و حداقل ۱۰ اتصال کل داشته باشند. کوئری چالش اول را چگونه تغییر میدهید؟
با استناد به مفهوم Field Alias توضیح دهید: اگر چندین دیوایس مختلف وجود داشته باشد که هرکدام نام کشور مبدأ را متفاوت بنویسند، چرا عدم تعریف Alias منجر به تحلیل ناقص میشود؟ در سناریوی بالا، اگر فقط از srccountry استفاده میکردیم، چه بخشی از رویدادها نادیده گرفته میشد؟ با یک مثال عددی توضیح دهید.