OSSIM开源安全信息管理系统(十七)
2021SC@SDUSC
七、Agent部分源代碼分析
1、Agent 簡介
OSSIM Agent中所有腳本采用 Python 編寫,負責從安全設備采集相關信息(比如報警日志等),并將采集到的各類信息統一格式,最后將這些數據傳至 Server。從采集方式上看,Agent 屬于主動采集,可以形象理解為由OSSIM Server 安插在各個監控網段的“耳目”,由它們收集數據,并主動推送到 Collector 中,然后 Collector 又連接著消息隊列系統、緩存系統及存儲系統。
Agent 相關目錄在 /etc/ossim/agent/ ,代理插件目錄在 /etc/ossim/agent/plugins/ ,配置文件路徑:/etc/ossim/agent/config.cfg ,OSSIM系統的代理信息查看方法,通過 Analysis→Detection 下的 HIDS 標簽中 Agents 查看。
Agent 結構:
Agent 的主要功能是接收或抓取 Plugins 發送過來或者生成的日志,經過歸一化處理,然后有序地傳送到 OSSIM的 Server,它的功能很復雜,因為它的設計要考慮到如果 Agent 和 Server 之間的網絡中斷、擁堵、丟包等情況。
Agent 會主動連接兩個端口與外界通信,一個是連接 Server 的40001端口,而另一個是連接數據庫的3306端口。如圖所示。
Agent 將原始日志分成若干段并填充到相應的域中,相關字段如下:
-
date、sensor、interface、plugin_id、plugin_sid、priority、protocol、src_ip、src_port、dst_ip、dst_port
-
username、password、filename、userdata1、userdata2、userdata3、userdata4、userdata5、userdata6、userdata7、userdata8、userdata9
2、Agent.py 源碼分析
首先導入一些必要的模塊
import os import sys import time import signal import threading import socket import codecs import uuid import yaml import subprocess as sub然后導入本地模塊
Conf 類繼承自 ConfigParser
from Config import Conf, Plugin, Aliases, CommandLineOptions from ConfigParser import Error as BaseConfigError from ParserLog import ParserLog from ParserJson import ParserJson from Watchdog import Watchdog from Logger import Logger from Output import Output from Stats import Stats from Conn import ServerConn, IDMConn, FrameworkConn from Exceptions import AgentCritical from ParserDatabase import ParserDatabase from ParserWMI import ParserWMI from ParserSDEE import ParserSDEE from ParserRemote import ParserRemote from ParserUtil import HostResolv from ParserFtp import ParserFTP from ParserFormattedSnort import SnortEventsParser定義全局變量:
Logger 類:用于日志記錄的靜態類。用于輸出運行日志,可以設置輸出日志的等級、日志保存路徑、日志文件回滾等。
logger = Logger.loggerSTAT_SIGNALS = {'clients': 40, 'plugins': 41, 'all': 50} DEFAULT_SYSTEM_FILE = "/etc/ossim/agent/agentuuid.dat" DEFAULT_PULSE_PLUGIN_PATH = '/etc/ossim/agent/av_pulse.cfg'接下來就是具體類 Agent 的代碼部分。
1、初始化方法 __init__
def __init__(self):# 調用CommandLineOptions的get_options()方法,解析命令行選項self.options = CommandLineOptions().get_options()# 讀取相關配置self.conf = Conf()if self.options.config_file:self.__conffile = self.options.config_file#如果options中未通過“-c”命令行指定配置文件,則采用Conf類中默認的配置文件#DEFAULT_CONFIG_FILE = "/etc/ossim/agent/config.cfg"else:self.__conffile = self.conf.DEFAULT_CONFIG_FILE#通過類Conf的read方法以latin1編碼方式讀取配置文件#Latin1是一種編碼方式,為ISO-8859-1的別名self.conf.read([self.__conffile], 'latin1')# 插件列表self.__plugins = []#其中的規則總數self.__nrules = 0#從/etc/ossim/agent/host_cache.dic中加載緩存HostResolv.loadHostCache()self.detector_objs = []self.watchdog = Noneself.shutdown_running = Falseself.__outputServerConnection = Noneself.__outputIDMConnection = Noneself.__frameworkConnection = Noneself.__keep_working = Trueself.__checkThread = Noneself.__stop_server_counter = 9999self.__pluginStopEvent = threading.Event()self.__sensorID = ""self.__systemUUIDFile = ""配置文件格式:
本篇文章部分內容參考或轉載自下列文章及書籍。侵權即刪。
參考書籍:
- 《開源安全運維平臺OSSIM疑難解析(入門篇)》——李晨光著
- 《開源安全運維平臺OSSIM疑難解析(提高篇)》——李晨光著
- 《開源安全運維平臺:OSSIM最佳實踐》——李晨光著
參考文章:
- https://blog.51cto.com/chenguang/2426473
- https://blog.csdn.net/lcgweb/article/details/101284949
- https://blog.51cto.com/chenguang/1665012
- https://www.cnblogs.com/lsdb/p/10000061.html
- https://blog.51cto.com/chenguang/1691090
- https://blog.51cto.com/chenguang/category10.html
- https://blog.51cto.com/topic/ossim.html
- https://blog.csdn.net/isinstance/article/details/53694361
- https://blog.51cto.com/chenguang/1332329
- https://www.cnblogs.com/airoot/p/8072727.html
- https://blog.51cto.com/chenguang/1738731
- https://blog.csdn.net/security_yj/article/details/120153992
上一篇:
下一篇:
總結
以上是生活随笔為你收集整理的OSSIM开源安全信息管理系统(十七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G进度卡关 联发科应如何解困?
- 下一篇: 尔宾团队角色(Belbin Team R