مانیتورینگ شبکه با ابزار Zeek و ELK

مانیتورینگ شبکه با ابزار Zeek و ELK
در این پست می‌خوانید:
برای مطالعه بیشتر در مورد elk میتواند به این مقاله مراجعه کنید
دوره مدیریت لاگ با elk میتواند برای درک بهتر بسیار مفید باشد - دوره مدیریت لاگ با ELK

زیک چیست؟

Zeek (Broسابق)یک فریم ورک تحلیل شبکه که رایگان و منبع باز است.اولین بار در سال1994توسط ورن پاکسون ساخته شد و در اصل با اشاره به برادر بزرگ جورج اورول از رمان نوزده هشتاد و چهارش نامگذاری شد.می تواند به عنوان یک سیستم تشخیص نفوذ شبکه(NIDS)اما با تجزیه و تحلیل زنده اضافی از وقایع شبکه استفاده شود.تحت مجوزBSDمنتشر می شود.

معماری کاربردی Zeek

بسته هایIPگرفته شده باpcapبه موتور رویدادی منتقل می شوند که آنها را قبول یا رد می کند.بسته های پذیرفته شده به مفسر اسکریپت خط مشی ارسال می شوند.

موتوررویدادها، ترافیک زنده یا ضبط شده شبکه را تجزیه و تحلیل می کند.این اتفاقات زمانی روی می دهد کهیک چیزیاتفاق بیفتد.

رویدادها توسط اسکریپت های خط مشی اداره می شوند ، که رویدادها را تجزیه و تحلیل می کنند تا سیاست های عملیاتی ایجاد کنند.متن ها به زبان برنامه نویسی کامل تورینگZeekنوشته شده اند.به طور پیش فرضZeekبه راحتی اطلاعات مربوط به رویدادها را در پرونده ها ثبت می کند(Zeekاز ثبت وقایع در خروجی باینری نیز پشتیبانی می کند).با این حال ، می توان آن را پیکربندی کرد تا اقدامات دیگری مانند ارسال ایمیل ، افزایش هشدار ، اجرای دستور سیستم ، به روزرسانی متریک داخلی و حتی فراخوانی اسکریپتZeekدیگر را انجام دهد.رفتار پیش فرض ، خروجی مانندNetFlow (ورودی ورود به سیستم)و همچنین اطلاعات رویداد برنامه را تولید می کند.اسکریپت هایZeekقادر به خواندن داده های پرونده های خارجی مانند لیست های سیاه برای استفاده در اسکریپت های سیاستZeekهستند.

سوریکاتا چیست

Suricata یک موتور تشخیص نفوذ متن باز است که توسط OISF ایجاد شده است. نسخه Beta آن در اواخر سال 2009 و نسخه استاندارد آن در اواسط سال 2010 منتشر شد. این موتور می تواند به عنوان یک سیستم تشخیص نفوذ (IDS)، سیستم جلوگیری از نفوذ (IPS) و یا به عنوان ناظر بر امنیت شبکه استفاده شود. این ابزار با استفاده از مجموعه قوانین گسترده و زبان امضا، بر ترافیک شبکه نظارت می کند.

دلیل انتخابSuricataبه عنوان یک سیستم تشخیص نفوذ

همان طور که بیان شد یکی از رایج ترین گزینه ها ،Snort است که مدت هاست ابزاری مورد علاقه بسیاری از ادمین های شبکه  است.اگرچهSuricataبسیار جدیدتر است، اما چندین مزیت دارد.این دو ابزار در معماری های مختلفی بنا شده اند، اما هر دو از امضاهای یکسان برای تشخیص استفاده می کنند.یک تفاوت اساسی بین آنهاچند نخی بودنSuricataاست، به این معنی که این ابزار می تواند از چند هسته همزمان در انجام امور خود استفاده کند(پردازش موازی).

این موتور به منظور بهره گیری از جدیدترین مجموعه های تراشه پردازنده چند هسته ای و همچنین استفاده از شتاب سخت افزاری برای قدرت پردازش بیشتر طراحی شده است.راندمان بالا، پشتیبانی ازIPو تشخیص خودکار پروتکل، آن را به ابزاری اثربخش برای دید بیشتر به شبکه تبدیل می کند. Suricataابزاری عالی و کم هزینه است که به نظارت  بیشتر در شبکه کمک کرده و با طیف وسیعی از ابزارهایSnortسازگار است.

تعامل با چندینCPUبهSuricataاجازه می دهد تا چندین رویداد را همزمان بدون اینکه مجبور به قطع سایر درخواست ها شود، انجام دهد.قابلیت چند نخی، این ابزار را قادر می سازد تا بینCPUها تعادل بار(Load Balancing)برقرار کند،این قابلیت یک مزیت سیار بزرگی محسوب شده چرا که این ابزار می تواند مقادیر زیادی از ترافیک را بدون نیاز به کاهش قوانین، پردازش کند و این خود موجب کاهش بار پردازشی می گردد. بنابراین این سیستم تشخیص نفوذ می تواند عملکرد کلی تحلیل ترافیک شبکه را بهبود بخشد.

نصب و پیکربندی Suricata و Zeek

در همه مراحل یک کارت شبکه مشخص میشود که ترافیک شبکه به طو mirror به آن ارسال میشود. سناریو همان span پورت در سوییچ است.

نصب suricata

add-apt-repository ppa:oisf/suricata-stable
apt-get install suricata

حال می بایست در فایل /etc/suricata/suricata.yml  هرجایی که آدرس کارت شبکه مشخص شده بود مقدار نام همان کارت شبکه ای را قرار دهیم که میخواهیم آن را مانیتور کنیم.

همین کار را برای فایل /etc/default/suricata هم انجام میدهیم

سوریکالا از رول هایی برای شناسایی خطرات در شبکه استفاده میکند برای بروز نگه داشتن این رول ها ابزاری به نام suricata-update تعبیه شده است

برای نصب suricata-update میتوانید از راه حل زیر استفاده کنین

 

apt install python3-pip
pip3 install pyyaml
pip3 install https://github.com/OISF/suricata-update/archive/master.zip
pip3 install --pre --upgrade suricata-update

حق دسترسی های مورد نیاز این ابزار به صورت زیر است

Directory /etc/suricata: read access
Directory /var/lib/suricata/rules: read/write access
Directory /var/lib/suricata/update: read/write access

ابتدا می بایست سورس هایی که میخواهیم از آن ها این رول ها را دریافت کنیم فعال کنیم

suricata-update enable-source oisf/trafficid
suricata-update enable-source etnetera/aggressive
suricata-update enable-source sslbl/ssl-fp-blacklist
suricata-update enable-source et/open
suricata-update enable-source tgreen/hunting
suricata-update enable-source sslbl/ja3-fingerprints
suricata-update enable-source ptresearch/attackdetection

برای بروزرسانی rule ها از دستور زیر استفاده میکنیم

suricata-update

 

حال سرویس آن را استارت میکنیم

systemctl enable suricata
systemctl start suricata

خروجی لاگ های این ابزار در فایل/var/log/suricata/eve.json ذخیره میشود .

نصب zeek

برای نصب این ابزار ابتدا رپازیتوری آن را اضافه و سپس ابزار را نصب میکنیم

echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.10/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
apt update
apt -y install zeek

سپس به دایرکتوری زیر مراجعه و فایل ‌های زیر را ویرایش میکنیم

/opt/zeek/etc

 

### node.cfg
# This is a complete standalone configuration. Most likely you will
# only need to change the interface.
[zeek]
type=standalone
host=localhost
interface=eth0 -- < در اینجا آدرس کارت شبکه مشخص میشود

### networks.cfg
# List of local networks in CIDR notation, optionally followed by a
# descriptive tag.
# For example, "10.0.0.0/8" or "fe80::/64" are valid prefixes.
در این بخش آدرس های داخلی شبکه شما مشخصی مشود
10.0.0.0/8          Private IP space
172.16.0.0/12       Private IP space
192.168.0.0/16      Private IP space

فایل zeekctl.cfg دارای پیکربندی خود سرویس زیک است که میتوانید بنا به نیاز خود آن را تغییر دهید

برای اینکه لاگ های ذخیره شده توسط زیک فرمت json داشته باشند میبایست در فایل زیر عبارتی را اضافه کنیم

### /opt/zeek/share/zeek/site/local.zeek#add this line
@load policy/tuning/json-logs.zeek

بعد از اعمال تغییرات بالا سرویس را اجرا میکنیم

./zeekctl install
./zeekctl deploy

تمامی لاگ ها در آدرس/opt/zeek/logs/current ذخیره میشوند

 

ارسال لاگ های زیک و سوریکاتا به ELK

برای مطالعه بیشتر در مورد elk میتواند به این مقاله مراجعه کنید

دوره مدیریت لاگ با elk میتواند برای درک بهتر بسیار مفید باشد – دوره مدیریت لاگ با ELK

برای ارسال فایل های لاگ زیک و سوریکاتا به استک الستیک از فایل بیت بدین منظور استفاده کینیم.

این ابزار دارای ماژول برای زیک و سوریکاتا بوده آنها را فعال میکنیم و سپس محتویات تنظیمالت ماژول آن دو را ادیت میکنیم

 

apt-get install apt-transport-httpswget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
apt-get update && apt -y install filebeat
 
filebeat modules enable suricata
filebeat modules enable zeek

محتویات فایل ها به صورت زیر  است

######## /etc/filebeat/modules.d/zeek.yml
# Module: zeek
# Docs: /guide/en/beats/filebeat/7.6/filebeat-module-zeek.html
 
- module: zeek
  capture_loss:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/capture_loss.log"]
  connection:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/conn.log"]
  dce_rpc:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/dce_rpc.log"]
  dhcp:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/dhcp.log"]
  dnp3:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/dnp3.log"]
  dns:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/dns.log"]
  dpd:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/dpd.log"]
  files:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/files.log"]
  ftp:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/ftp.log"]
  http:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/http.log"]
  intel:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/intel.log"]
  irc:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/irc.log"]
  kerberos:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/kerberos.log"]
  modbus:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/modbus.log"]
  mysql:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/mysql.log"]
  notice:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/notice.log"]
  ntlm:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/ntlm.log"]
  ocsp:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/ocsp.log"]
  pe:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/pe.log"]
  radius:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/radius.log"]
  rdp:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/rdp.log"]
  rfb:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/rfb.log"]
  sip:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/sip.log"]
  smb_cmd:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/smb_cmd.log"]
  smb_files:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/smb_files.log"]
  smb_mapping:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/smb_mapping.log"]
  smtp:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/smtp.log"]
  snmp:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/snmp.log"]
  socks:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/socks.log"]
  ssh:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/ssh.log"]
  ssl:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/ssl.log"]
  stats:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/stats.log"]
  syslog:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/syslog.log"]
  traceroute:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/traceroute.log"]
  tunnel:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/tunnel.log"]
  weird:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/weird.log"]
  x509:
    enabled: true
    var.paths: ["/opt/zeek/logs/current/x509.log"]
 
 
 
 
######## /etc/filebeat/modules.d/suricata.yml 
# Module: suricata
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.x/filebeat-module-suricata.html
 
- module: suricata
  # All logs
  eve:
    enabled: true
 
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/suricata/eve.json"]

 

سپس سرویس فایل بیت را استارت و داده را در کیبانا مشاهده میکنیم

systemctl enable filebeat
systemctl start filebeat

برای مطالعه بیشتر در مورد elk میتواند به این مقاله مراجعه کنید

دوره مدیریت لاگ با elk میتواند برای درک بهتر بسیار مفید باشد – دوره مدیریت لاگ با ELK

امیدارم راضی باشین

 

یا حق

دیدگاه‌ها ۰
ارسال دیدگاه جدید