OSSEC 源码解析
OSSEC 源码解析
一、克隆 OSSEC 仓库:
git clone https://github.com/ossec/ossec-hids.git
要分析 OSSEC 的规则引擎源码,你需要查看 OSSEC 的源代码仓库,特别是与规则解析和执行相关的部分
二、客户端 OSSEC Agent
配置文件说明:https://www.51cto.com/article/407645.html
ossec.conf: 主配置文件,指定要监控的目录、进程、文件类型等;警报输出,如邮件通知、Syslog服务器等
local_rules.xml: Rootkit检测规则文件中定义特定的rootkit检测规则。例如,可以添加规则来检测已知的rootkit特征或异常行为。
(一)、规则解析与执行代码
src/rules.c: 这个文件中包含了处理规则文件的函数,如,加载和解析规则文件。
src/lua/rules_lua.c: 这部分代码处理 Lua 脚本的加载和执行。src/lua/rules_lua.c 和 src/lua/rules_lua.h:这些文件包含了与 Lua 脚本交互的代码。
关键函数:
load_rules():加载和解析规则文件。
execute_rules():执行匹配的规则。
lua_execute_rule():在 Lua 环境中执行规则。 这个函数会调用 Lua 解释器来执行具体的规则脚本。例如,你可以查看如何传递日志数据到 Lua 脚本,并如何从脚本中获取结果。
| 平台 | 程序入口 :start_agent | 进程/服务 | 子线程 | 消息接收 |
| Windows平台 |
后台服务入口: win_agent.c::main() //src\win32 => win_service.c::os_WinMain() -> //src\win32 |
win_agent.c::skthread() receiver-win.c :: receiver_thread() |
=*=> receiver-win.c :: receiver_thread() |
|
| Windows平台 |
前端Windows窗口程序入口点:os_win32ui.c::WinMain() -> //src\win32\ui DlgProc() |
|||
| Linux平台 | 入口: main.c::main() //src\client-agent => agentd.c::AgentdStart(dir, uid, gid, user, group) //src\client-agent => start_agent.c::start_agent(1); //src\client-agent |
=*=> main.c::main() |
(二)rootkit检测
关于rootkit检测部分的源码位于 ossec-hids\src\rootcheck 目录下:

整体代码结构,详见: https://blog.csdn.net/weixin_34749048/article/details/112639273
run_check.c :: start_daemon() run_rk_check.c :: run_rk_check() check_rc_policy.c :: check_rc_winaudit() // 审计 -> check_rc_winmalware() // 恶意软件 -> check_rc_winapps() // windows app的特征 common_rcl.c :: rkcl_get_entry() //* rootcheck功能实现的核心函数 -> _rkcl_getrootdir() -> _rkcl_getfp() -> rkcl_get_vars() common.c :: rk_check_file(char *file, char *pattern) win-common.c :: is_registry(char *entry_name, char *reg_option, char *reg_value) common.c :: rk_check_dir(const char *dir, const char *file, char *pattern) -> is_process(char *value, OSList *p_list)

附录 A:编译连接与安装配置
参考:https://www.anquanke.com/post/id/238774
| Windows平台 | src/Makefie | win32/ossec-agent.exe: win32/icon.o win32/win_agent.o win32/win_service.o $(filter-out syscheckd/seechanges.o, ${syscheck_o}) ${rootcheck_o} $(filter-out client-agent/main.o, $(filter-out client-agent/agentd.o, $(filter-out client-agent/event-forward.o, ${client_agent_o}))) $(filter-out logcollector/main.o, ${os_logcollector_o}) ${os_execd_o} ${ossec_libs} ${ZLIB_LIB} ${OSSEC_CCBIN} -DARGV0=\"ossec-agent\" -DOSSECHIDS ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@ |
| Linux平台 |
浙公网安备 33010602011771号