2024年3月12日发(作者:)
Neo -----@------qq:276109493 4/26/2022
OSSEC中文使用手册
OSSEC中文使用手册
注:该手册是本人为了阅读方便而翻译的,其中可能有不少错误。有任何疑问可以参考原文。
/doc/
•
o
o
o
o
o
o
o
o
Manual
Installation
Syscheck
Rootcheck
Agents
Log monitoring/analysis
Rules and Decoders
Output and Alert options
Active Response
OSSEC是一个开源的入侵检测系统,它可以执行LOG分析,完整性检查,windows注册表监控,rootkit
检测,实时报警及动态响影。它可以运行在大多数的操作系统上,包括Linux,OpenBSD,FreeBSD,Mac,Solaris
and Windows.等。
OSSEC安装
OSSEC HIDS 主程序和代理安装
安装OSSEC HIDS 很简单,只需要很少的几步就可完成整个安装。首先你要明白你要选择的安装类
型(主程序、代理,本地主机)你还要知道安装顺序(总是会先安装主程序)。
如果你熟悉LINUX,你只需要下载OSSEC HIDS的最新板本,解压后运行 “./” 脚本。
1. 下载最新板本并验证它的校验和。
# wget /files/
# wget /files/ossec-hids-latest_
# cat ossec-hids-latest_
MD5 () = XXXXXXX
1
Neo -----@------qq:276109493 4/26/2022
SHA1 () = YYYYYYYY
# md5
MD5 () = XXXXXXX
# sha1
SHA1 () = YYYYYYYY
注意:在部分系统MD5,shal,wget 命令或许不可用,你可以用md5sum,shalsum,lynx 分
别替换它们。
2. 解压ossec-hids-*., 并进入解压后的目录,运行”./”脚本,安装向导会带领你完成这
个安装。
# tar -zxvf ossec-hids-*. (or gunzip -d; tar -xvf)
# cd ossec-hids-*
# ./
3. 如果在服务器和代理之间有防火墙,要打开UDP端口1514(本地安装不需要这么做)
4. 启动OSSEC HIDS
# /var/ossec/bin/ossec-control start
无代理监控
无代理监控允许运行完整性检查(未来可以监控日志)它不需要在被监控系统上安装代理,(包
括routers,firewalls,switches,and even Linux/BSD systems)就可以执行完整性检查(校验和改变报警)
还可以进行文件比较并显示改变了什么。
无代理配置选项
Agentless
Frequency
Host
State
Arguments
在服务器端启用无代理监控
# /var/ossec/bin/ossec-control enable agentless
为你想要访问的主机提供SSH认证。例如Cisco 设备(PIX routers,etc), 您需要提供一个额外的参
数启用密码。在这个例子中,我添加了一个linux主机()和一个IPX防火墙()。
#/var/ossec/agentless/******************************************
***************************.
#/var/ossec/agentless/*****************************.localpixpass
enablepass
***************.localadded.
# /var/ossec/agentless/register_ list
*Available hosts:
2
Neo -----@------qq:276109493 4/26/2022
**********.local
****************
如果你要使用公钥认证而不是密码,你需要提供密码NOPASS并创建公钥。
# sudo -u ossec ssh-keygen
在/var/ossec/.ssh下公钥会被创建。而后将公钥用SCP考贝到远端主机。这是你不需要密码连接就可以工作。
配置说明
首先你要添加你要监控的系统,并配置OSSEC监控它们。默认情况下我们有四个无代理类型(很快我们
计划增加更多的类型)。
•
ssh_integrity_check_bsd
•
ssh_integrity_check_linux
•
ssh_generic_diff
•
ssh_pixconfig_diff
对于前两项,在配置文件中给出一个目录列表,OSSEC会对远程主机的指定目录做完整性检查。
ssh_generic_diff,比较远程主机运行的一组命令,当输出改变时报警。 ssh_pixconfig_diff当一台Cisco PIX
/路由器的配置变化时会报警.
下面的这个例子,我将每10小时监控(****************)的/bin,/etc,/sbin目录。(如果使用
ssh__integrity_check_bsd类型,参数也应该是目录。
PIX的例子,配置看起来像这样。
如果还要监控一些命令,如 ls –la /etc: cat /etc/passwd 只需要增加下面的参数就可以。注意如果你想监控
任何网络防火墙或交换机,您可以使用ssh_generic_diff,只是要在参数选项指定命令。要使用“su”,你需
要设置值“use_su”在主机名的前面(例如:
3
Neo -----@------qq:276109493 4/26/2022
完成配置后你需要重启OSSEC, OSSEC会对配置文件进行检查,如果有问题会有LOG日志生成,你可
以查看/var/ossec/logs/这个文件。假如你看到有错误信息,它的意思是你的server系统没有
安装可以执行的expect库。(在被监控的系统上不需要安装任何东西)在Ubuntu你可以用下列方法安装:
# apt-get install expect
重启OSSEC,你应该能看到它现在可以连接到被监控的系统。
在log中你应该可以看到一些报警消息
For the ssh_generic_diff:
OSSEC HIDS Notification.
2008 Dec 12 01:58:30
ReceivedFrom:(ssh_generic_diff)*****************>agentless
Rule: 555 fired (level 7) -> "Integrity checksum for agentless device changed."
Portion of the log(s):
ossec: agentless: Change detected:
35c35
< -rw-r-r- 1 root wheel 34 Dec 10 03:55
--
> -rw-r-r- 1 root wheel 34 Dec 11 18:23
-END OF NOTIFICATION
For the PIX:
OSSEC HIDS Notification.
2008 Dec 01 15:48:03
ReceivedFrom:(ssh_pixconfig_diff)**********.local->agentless
Rule: 555 fired (level 7) -> "Integrity checksum for agentless device changed."
4
Neo -----@------qq:276109493 4/26/2022
Portion of the log(s):
ossec: agentless: Change detected:
48c48
< fixup protocol ftp 21
--
> no fixup protocol ftp 21
100c100
< ssh timeout 30
--
> ssh timeout 50
More changes..
-END OF NOTIFICATION
完整性检测
Syscheck是OSSEC内部完整性检测进程的名称。它周期性检查是否有任何配置文件(或者windows
注册表)发生改变。
在网络中有许多类型的攻击和攻击载体,说起这些攻击,有一种攻击是很特别的,他们留下一个跟踪
程序,并总是想尽方法改变这个系统。它们用病毒修改一些文件,并破坏系统的完整性。
完整性检查是入侵检测系统的一个重要组成部分。当系统的完整性被改变时它能够通过比较文件的
MD5校验各发现。
它的工作方法是:“代理每几个小时扫描一次系统,并发送所有的校验和到server端。Server端存储这
些校验和文件并查找他们的不同。如果发现任何改变将会发送报警。
基本概况
多长时间运行一次
默认每6小时运行一次,但是这个频率可以自己设定
数据存放位置
在server端的/var/ossec/queue/syscheck
CPU使用情况
慢慢地进行扫描,以避免使用过多的CPU /内存。
如何处理误报
文件能够通过手工指定配置文件或使用规则到忽略不记,默认一个文件修改超过3次会自动忽略。
配置选项
下面的配置选项可以指定在每一个代理的文件,除了应用到manager和本地安装类型的
auto_ignore 和 alert_new_file. 如果ignore选项指定在manage,所有代理都会使用相同的设置。
目录
使用这个选项增加或者移除被监控的目录(目录这间用逗号分开)所有的文件和子目录也会被监控。
没有目录的驱动器字母是无效的。至少“。”应包括(D:.)。
默认:/etc,/sur/bin,/usr/sbin,/bin,/sbin
•
Attributes: 属性
realtime: Value=yes
5
Neo -----@------qq:276109493 4/26/2022
o
•
o
•
o
•
o
•
o
•
o
•
o
•
o
•
o
•
o
•
o
•
o
This will enable realtime/continuous monitoring on Linux (using the inotify system
calls) and Windows systems. (启用实时、连续的监控)
report_changes: Value=yes
Report diffs of file changes. This is limited to text files at this time. (文件改变比较
报告,只能用文本文件)
check_all: Value=yes
All the following check_* options are used together. (所有下面的check_*选项共同
起作用)
check_sum: Value=yes
Check the md5 and sha1 hashes of the of the files will be checked.
This is the same as using both check_sha1sum=”yes” and check_md5sum=”yes”
check_sha1sum: Value=yes
When used only the sha1 hash of the files will be checked.
check_md5sum: Value=yes
The md5 hash of the files will be checked.
check_size: Value=yes
The size of the files will be checked. (检查文件大小)
check_owner: Value=yes
Check the owner of the files selected. (文件所有者检查)
check_group: Value=yes
Check the group owner of the files/directories selected. (文件和目录所属的用户组
检查)
check_perm: Value=yes
Check the UNIX permission of the files/directories selected. On windows this will
only check the POSIX permissions. 文件和目录权限检查
restrict: Value=string
A string that will limit checks to files containing that string in the file name. (文件
内容中包含文件名的字符串将限制检查。
Allowed: Any directory or file name
ignore
List of files or directories to be ignored (one entry per element).列出的文件和目录将不被检查
Default: /etc/mtab
Attributes:
type: Value=sregex
This is a simple regex pattern to filter out files so alerts are not generated. 这个简
单的表达式过虑掉输出文件,所以报警不会生成。
Allowed: Any directory or file name
frequency
Frequency that the syscheck is going to be executed (in seconds).(syscheck多长时间执行一次,
默认是21600秒,也就是6个小时)
The default is 6 hours or 21600 seconds
Default: 21600
Allowed: Time in seconds
scan_time
Time to run the scans (can be in the formats of 21pm, 8:30, 12am, etc) 扫描系统的时间格式
(21pm晚上9点),8:30,(12am上午12点)。
Allowed: Time to run scan
scan_day
6
Neo -----@------qq:276109493 4/26/2022
Day of the week to run the scans (can be in the format of sunday, saturday, monday, etc)
在每周的那一天执行扫描
Allowed: Day of the week
auto_ignore
Specifies if syscheck will ignore files that change too often (after the third change)指定忽略频
繁改变的文件
Default: no
Allowed: yes/no
alert_new_files
Specifies if syscheck should alert on new files created.指定新文件被创建时是否报警
Default: no
Allowed: yes/no
scan_on_start
Specifies if syscheck should do the first scan as soon as it is started.(syscheck启动后是否立
即做第一次扫描。
Default: yes
Allowed: yes/no
windows_registry
Use this option to add Windows registry entries to be monitored (Windows-only).增加windows
注册表监控
Default: HKEY_LOCAL_MACHINESoftware
Allowed: Any registry entry (one per element)
registry_ignore
List of registry entries to be ignored.(不监控列出的注册表条目)
Default: ..CryptographyRNG
Allowed: Any registry entry (one per element)
配置例子
配置 syscheck,提供一个要被监控的目录和文件列表,check_all 选项会检查文件的md5, sha1,owner,和权
限。例如:
check_all="yes">/root/,/bsd,/root/
如果不想监控某些文件和目录,可以用ignore选项(或者registry_ignore 为windows注册表输入)
在ignore选项,这个类型属性可以设置sregex指定一个正则表达式语法。
7
Neo -----@------qq:276109493 4/26/2022
一个本地规则可以更严格的修改你想要更改的指定文件和目录。
在上边的例子中,当htdocs directory目录中的文件有改变时将会产生一个高严重级别的报警。
实时监控
在linux 和windows中OSSEC支持实时监控文件完整性检查(linux内核2.6.13以上板本支持)
配置很简单,在directories选项那里你可以指定要监控那些文件和目录,增加realtime=”yes”到启用。
check_all="yes">/etc,/usr/bin,/usr/sbin
在这个例子中,目录/etc, /usr/bin and /usr/sbin会被实时监控,同样的方法也实用与windows.
提示:实时监控并不会立即开始。首先ossec-syscheckd需要扫描文件系统并添加每一个了目录到实时队
列。要完成这些工作需要30分钟时间。(等待log文件出现如下信息:“ossec-syscheckd: INFO: Starting
real time file monitoring”)
注解:实时监控仅对目录有效,所以你可以监控 /etc 或者c:program files 目录,但不能是个别的文件,
像/etc/。
比较不同并生成报告
在linux 和unix系统比较所后的改变生成一个文本文件,OSSEC支持发送比较报告,
配置syscheck显示文件比较的不同很简单,添加report_changes=”yse”到directories选项。
Syscheck FQA
怎样使syscheck立即开始扫描系统?
运行代理控制工具使其立即开始完整性扫描(-a 选项使所有代理开始运行,-u选项可以指定某个代理
ID.
# /var/ossec/bin/agent_control -r -a
# /var/ossec/bin/agent_control -r -u
代理控制参数选项:
-h 显示帮助消息
-l 列出所有可能的代理
-lc 列出活动的代理
8
Neo -----@------qq:276109493 4/26/2022
例1: 列出所有活动的代理¶
-i
-r
-a
-u
获取代理的相关信息 agent_id
运行代理中的integrity/rootcheck检查,要和-u或-a 一起使用。
对所有代理起做用
agent_control -lc
, 列出已连接的活动代理.
agent_control -l
列出所有代理(包括连接的和非连接的)
# /var/ossec/bin/agent_control -lc
OSSEC HIDS agent_control. List of available agents:
ID: 000, Name: (server), IP: 127.0.0.1, Active/Local
ID: 002, Name: winhome, IP: 192.168.2.190, Active
ID: 005, Name: jul, IP: 192.168.2.0/24, Active
ID: 165, Name: esqueleto2, IP: 192.168.2.99, Active
ID: 174, Name: lili3win, IP: 192.168.2.0/24, Active
例 2: 使用代理ID号,获取指定代理的信息。
查询一个指定ID号的代理信息,
# /var/ossec/bin/agent_control -i 002
OSSEC HIDS agent_control. Agent information:
Agent ID: 002
Agent Name: winhome
IP address: 192.168.2.190
Status: Active
Operating system: Microsoft Windows XP Professional (Build 2600)
Client version: OSSEC HIDS v1.5-SNP-080412
Last keep alive: Fri Apr 25 14:33:03 2008
Syscheck last started at: Fri Apr 25 05:07:13 2008
Rootcheck last started at: Fri Apr 25 09:04:12 2008
当启动ossec时,告诉syscheck不要对系统进行扫描
在中指定
怎么从syscheck中排除一个频繁更改的文件?
在
下面的这个例子将从mswin1和ubuntu-dns代理中排除etc/a , /etc/b 和一个目录 /etc/dir。
在检测到数据据改变后怎么获取详细的报告?
Syscheck_control工具
9
Neo -----@------qq:276109493 4/26/2022
Syscheck_control提供了一个管理和查看数据库的接口。
Syscheck_control参数选项
-h 显示帮助消息
-l 列出可用的代理
-lc 列出当前活动的代理
-u
-u all 更新(清除)所有代理的数据库,
-i
-r –i 列出windows代理 中注册表改变的数据
-f
-z
-d 用 –f 参数,忽略该文件
-s 输出到CVS
Syscheck_control 使用实例
例 1:获取一个指定代理中已修改过文件的一个列表
关与OSSEC监控的文件和OSSEC部署后修改过的文件,运行syscheck_control –i 可以重新检索信息。
# /var/ossec/bin/syscheck_control -i 002
Integrity changes for agent 'ossec-agent (002) - 192.168.1.86':
Changes for 2009 Dec 21:
2009 Dec 21 13:52:40,0 - /etc/authorization
2009 Dec 21 13:52:42,0 - /etc/cups/
2009 Dec 21 13:52:42,0 - /etc/cups/.O
2009 Dec 21 13:52:58,0 - /etc/postfix/t
Changes for 2010 Jan 04:
2010 Jan 04 10:13:58,0 - /etc/authorization
同样的你会看到这个命令提供了一个关与文件改变的概述。
对于一个被修改的文件来说,如果你需要获取更多的详细信息,你可以使用syscheck_control 查看它。
文件被加入到syscheck数据库时的时间标记。
文件被加入到syscheck数据库时的完整性检查值
OSSEC发现了一个改变时的时间标记
每次OSSEC发现一个改变时的完整性检查值
完整性检查值包括:
文件改变了多少次
文件大小
文件权限
文件的拥有者和所属组
文件的MD5和SHAL哈希值
运行syscheck_control –i 到检索信息。
# /var/ossec/bin/syscheck_control -i 002 -f /etc/authorization
Integrity changes for agent 'ossec-agent (002) - 192.168.1.86':
Detailed information for entries matching: '/etc/authorization'
10
Neo -----@------qq:276109493 4/26/2022
2009 Dec 21 13:52:40,0 - /etc/authorization
File added to the database.
Integrity checking values:
Size: 27771
Perm: rw-r--r--
Uid: 0
Gid: 0
Md5: dd62912576ae05d611d7469be809cf1d
Sha1: 530df0283df52f0152b9e7ce1a518119b06ceebc
2010 Jan 04 10:13:58,0 - /etc/authorization
File changed. - 1st time modified.
Integrity checking values:
Size: >28050
Perm: rw-r--r--
Uid: 0
Gid: 0
Md5: >50da55def41bcede7d42ac5ee8fe12c9
Sha1: >97f4b2b48a97321a3e245221e0ea4353cf4fa8ef
例3:清除syscheck 数据库
要清除某个代理
syscheck
数据库,运行以下命令:
# /var/ossec/bin/syscheck_control -u 002
** Integrity check database updated.
运行
Shscheck_control –i 220
,现在将显示
ID
号为
002
的代理在数据库中没有修改过的文
件。
# /var/ossec/bin/syscheck_control -i 002
Integrity changes for agent 'ossec-agent (002) - 192.168.1.86':
** No entries found.
Syscheck下一次运行的时候,数据库内容将会再一次添充。
Rootcheck
11
Neo -----@------qq:276109493 4/26/2022
OSSEC HIDS会在每个安装了代理的系统运行rootkit检测。Rootkit发现引擎每过120分钟
会去探测任何可能已经安装的rootkit.. 和log分析及安全性检测一起使用,OSSEC HIDS将
是一个强有力的监控解决方案。
读这个rootkit_文件,其中包含了常被它们使的用文件和rootkits的基本数据。它
将统计每一个指定的文件。我们使用所有这些系统调用中,有一些kernel_level级别的rootkits
从系统调用隐藏了一些文件。我们偿试更多的系统调用到更好的发现。这种方法更像需要不
断更新的返病毒规则。误报的机会是非常的小,但是可以通过修改rootkits生成假的否定。
读这个rootkit_文件,内含了一个用
特洛伊文件签名的基本数据。这种用特洛伊板本
修改二进制的技术过去常常被流行的tootkits使用。
扫描/dev目录查找异常。这个目录应该只有设备文件和makedev 脚本。很多rootkits使用这个目录
隐藏文件,这和技术能发现非公有的rootkits.
扫描整个系统文件查找不正常的文件和权限问题。Root用户拥有文件的写权限,给其它人是非常危险
的。Rootkit发现会查找它们,隐藏的文件和目录出会被检查。
查找存在的隐藏进程,我们使用获取SID并杀死SID检查,是否有任何PID被使用。如果PID被使
用,但PS不能看到它,说明它是kernel-level级别的rootkit或者是特洛伊板本的PS.我们也会验证获取的
SID和kill输出的是否相同。
查找隐藏的端口。我们使用绑定端口的方式检查在系统中的每一个TCP、UDP端口。如
果我们不能绑定这个端口,但是netstat不能显示它,很可能系统中装了roottkit.
扫描在系统中的所有接口,找出启用杂乱模式的接口,如果IFCONFIG输出不能显示它,
很可能系统中装了roottkit。
配置选项
这些配置选项可以在每个代理的文件中指定。除去server端的选项
auto_ignore 和alert_new_file,如果ignore是在sever端设置,所有代理将会使用相同的设
置。
Base_directory
这个基本目录将会增加下面的选项。
•
rootkit_files
•
rootkit_trojans
•
windows_malware
•
windows_audit
•
windows_apps
•
systems_audit
允许:默认目录路径:/var/ossec
Rootkit_files
这个选项可以更改tootkit数据库文件的位置。
Allowed: 带有rootkit文件签名的一个文件
Default:/etc/shared/rootkit_
Rootkit_trojans
这个选项可以更改tootkit trojans数据库文件的位置。
Allowed: 带有TROJANS签名的一个文件
Default:/etc/shared/rootkit_
scanall
¶
12
Neo -----@------qq:276109493 4/26/2022
告诉 rootcheck 扫描整个系统 (可能会误报).
Default: no
Allowed: yes/no
frequency
¶
多长时间运行一次
Defaults: 36000 (10 hours)
Allowed: Time (in seconds)
disabled
¶
禁用rootcheck执行
Default: no
Allowed: yes/no
代理
OSSEC可以使用两种类型的代理,需要安装的代理,和不需要安装的代理。需要安装的
代理要装在被监控主机内。代理通过OSSEC加密消息协议将报告发送到OSSEC中心server
上。无代理代理无需在远程主机上安装。它是在OSSEC server端启用进程,使用任何远程
调用的方法从远程主机收集信息。
1. 在OSSEC server端运行manage_agents
2. 增加一个代理
3. 在server端为代理生成一个key
4. 考贝生成的Key 到代理端
5. 在代理端运行manage_agents
6. 输入从server端考贝过来的key
7. 重新启动OSSEC
8. 启动代理
9.
在OSSEC servers端管理代理
增加一个代理到OSSEC
为增加的代理生成一个KEY
从OSSEC中移除一个代理
列出所有已经增加到ossec的代理
用一个拥有ROOT权限的用户,在OSSEC server上执行以下命令,
# /var/ossec/bin/manage_agents
而后你能看到如下信息
13
Neo -----@------qq:276109493 4/26/2022
****************************************
* OSSEC HIDS v2.5-SNP-100809 Agent manager. *
* The following options are available: *
****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.
Choose your action: A,E,L,R or Q:
例1:增加一个代理
输入A到增加一个代理
Choose your action: A,E,L,R or Q: a
提示你要输入一个代理的名称,我们一般会写代理的主机名称。在这里我们添agent1
- Adding a new agent (use 'q' to return to the main menu).
Please provide the following:
* A name for the new agent: agent1
接下来你需要为这个新代理指定一个IP地址,可以是单一的地址(192.168.1.25),子
网(192.168.2.1/24)或者任何。当这个代理的IP是通过DHCP获取,并频繁改变的时候,
你最好使用地址汇总或者ANY.
* The IP Address of the new agent: 192.168.2.0/24
接下来你需要为这个代分配一个ID,系统会提供一个未分配的值供你参考,你一可以自
己手动输入。默认ID 000分配给了OSSEC server.
* An ID for the new agent[001]:
确认设置完成,这些信息会添加到/var/ossec/etc/ 文件中。
为代理生成key
代理增加以后,输入E 到创建KEY, 输入代理ID 生成我们想要的KEY.
Choose your action: A,E,L,R or Q: e
Available agents:
ID: 001, Name: agent1, IP: 192.168.2.0/24
Provide the ID of the agent to extract the key (or 'q' to quit): 001
Agent key information for '001' is:
MDAyIGFnZW50MSAxOTIuMTY4LjIuMC8yNCBlNmY3N2RiMTdmMTJjZGRmZjg5YzA4ZDk5MmQ4NDE4Mj
YwMjJkN2ZkMzNkYzZiOWE5NWY4MzU5YWRlY2JkY2Rm
你现在可以考贝KEY到agent1主机,运行manage_agents, 将key输入。
14
Neo -----@------qq:276109493 4/26/2022
移除一个代理
如果你想要从ossec srvers释放一个代理,你可以使用R选项,你会得到一个已加入SERVER
中的代理的列表。移除代理很容易,分别录入想要移除的代理的ID,按回车确认就可以。
Choose your action: A,E,L,R or Q: e
Available agents:
ID: 001, Name: agent1, IP: 192.168.2.0/24
Provide the ID of the agent to extract the key (or 'q' to quit): 001
Confirm deleting it?(y/n): y
Agent '001' removed.
OSSEC 代理提供了一个输入认证KEY的接口。
* OSSEC HIDS v2.5-SNP-100809 Agent manager. *
* The following options are available: *
****************************************
(I)mport key from the server (I).
(Q)uit.
Choose your action: I or Q: i
* Provide the Key generated by the server.
* The best approach is to cut and paste it.
*** OBS: Do not include spaces or new lines.
Paste it here (or 'q' to quit): [key extracted via manage_agents on the server]
Agent information:
ID:001
Name:agent1
IP Address:192.168.2.0/24
Confirm adding it?(y/n): y
Added.
** Press ENTER to return to the main menu.
为了使改变能够生效,需要重启OSSEC server 和代理。
代理在NAT的后边,或者代理使用DHCP获取IP的情况,
假如你想要在系统上安装一个代理,在没有静态IP或者处于NAT后面的情况下,你要配置
这个代理使用可变的IP地址。
15
Neo -----@------qq:276109493 4/26/2022
意思是:manage_agents工具要求输入一个IP时,你可以用一个可变的IP和掩码替代
一个固定IP.
关于DHCP的一个例子
例如:要增加一个可以通过DHCP接收192.168.2.0/24网段任何一个IP的代理。你只
要提供这个代理的IP为192.168.2.0/24就可以。
Please provide the following:
* A name for the new agent: test
* The IP Address of the new agent: 192.168.2.0/24
一个NAT的例子
同样的方法可以应用到NAT系统。要想OSSEC server能够看到NAT后边的所有代理,
它们应该有同网段的IP.
例如:你的代理IP为
192.168.1.2, 192.168.1.3 and 192.168.1.4,而你的OSSEC server连
接在NAT后面10.1.1.0/24网段。在这个例子中,代理的IP要设为10.1.1.0、24,因为这个IP是OSSEC
SERVER可以看到的IP.
Please provide the following:
* A name for the new agent: agent-1
* The IP Address of the new agent: 10.1.1.0/24
注解:如果它们从NAT server()进来,OSSEC SERVER应该能够看到它们。
日志监控、分析
在OSSEC内部有log收集和log分析进程,日志分析过程中,首先要收集log,然后对
日志进行分析(解码,过虑,分类)。
一有事件写入OSSEC立即会处理它们。OSSEC能读内部日志文件,windows日志事件,
和直接通过远程系统接收的日志。
程序监控
系统LOG是个好东西,在OSSEC中,我们把需要监控的目标当成一个日志来看,并用
适当的规则分析它。然而,有一些信息在日志文件中没有,但是我们还是想监控它。要解决
这个缺陷,我们需要在OSSEC中增加监控命令输出的功能,并且处理这些命令输出的。
它们像log文件一样。
配置实例:
监控磁盘空间利用率的一个例子
如果想要监控磁盘空间利用率,你需要设置一个crom任务,使命令df –h 的输出保存到一
个log文件(/var/log/)并且配置OSSEC查看它。
至OSSEC 2.3版本起,你可以在OSSEC中直接监控命令。配置如下:
在OSSEC中我们已经有了一个规则样本(为处理df –h 输出),当任何分区达到100%你
将能看到下面的输出。
** Alert 1257451341.28290: mail - ossec,low_diskspace,
2009 Nov 05 16:02:21 (home-ubuntu) 192.168.0.0->df -h
Rule: 531 (level 7) -> "Partition usage reached 100% (disk space monitor)."
16
Neo -----@------qq:276109493 4/26/2022
Src IP: (none)
User: (none)
ossec: output: "df -h": /dev/sdb1 24G 12G 11G 100% /var/backup
C中我们已经有了一个规则样本(为处理df –h 输出),当任何分区达到100%你将能看到
下面的输出。
监控平均负载的一个例子。
如果你想要监控系统的平均负载,你可以配置OSSEC监控“update”命令,并当值高于2时
报警。
增加一个 规则
当一个命令的输出改变时报警
如果你想要在一个命令的输出发生改变时报警,在OSSEC规则中查看(check_diff)选项。
用一个例子来说明:当我们的server在监听模式有一个新的端口被打开,创建一个规则使其
报警。
首先,在文件中,我们配置OSSEC运行
netstat -tan |grep LISTEN命令。
而后,我增加一个规则,当输出改变的时候报警。
'
注意我们使用的check_diff选项,第一次收到信息将存储在内部数据库。每次收到相同的数
据,都和先前存储的数据进行比较,如果输出改变生成报警信息。
在这个例子中,我们用netcat工具连接23456端口,我们能得到如下报警信息。
17
Neo -----@------qq:276109493 4/26/2022
OSSEC HIDS Notification.
2010 Mar 11 19:56:30
Received From: XYZ->netstat -tan |grep LISTEN|grep -v 127.0.0.1
Rule: 140123 fired (level 7) -> "Listened ports have changed."
Portion of the log(s):
ossec: output: 'netstat -tan |grep LISTEN|grep -v 127.0.0.1':
tcp4 0 0 *.23456 *.* LISTEN
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
Previous output:
ossec: output: 'netstat -tan |grep LISTEN|grep -v 127.0.0.1':
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
文件监控
OSSEC
有一个名为
OSSEC- logcollector
的监控新的事件日志文件的进程,并将其转发
给其他进程进行分析。
OSSEC- logcollector
的配置是在
/ var / ossec/ etc/
。
配置实例
配置要监视的日志文件很简单。只要提供要监视的文件的名称和格式:
配置要监控的日志文件很简单。仅需要提供要监控的文件的名称和格式:
监控
windows
事件日志的例子
要监控
Windows
事件日志,您需要提供的格式为“
eventlog
”并且位置是事件日志的名
称。示例
监控多个文件的例子
例如,要分析
/var/ log
目录下以
要检查多个文件,
OSSEC
支持
POSIX
正则表达式。
结尾的文件,使用以下配置:
18
Neo -----@------qq:276109493 4/26/2022
监控以日期命名的日志文件
对于日志文件,根据日期改变,你也可以指定
strftime
的格式,以取代日,月,年等。例
如监控日志
C
:
WINDOWS APP LOG-08-12 -15
日志,其中
08
是年,
12
是月份,
15
是
天(并且日期每天更新),
测试
OSSEC
的规则
/
解码器
当对
OSSEC
排除故障或试图写入新的规则和解码时,大多数人的第一个问题是如何对其进
行测试。在过去,这将需要手动重新启动
OSSEC
或创建一个测试安装。至
1.6
版止,有一
个工具来简化这一任务
使用测试工具 ossec-logtest
Ossec-logtest工具已经安装在/var/ossec/bin目录下。它将读取当前的规则和解码并接受
日志输入。
# /var/ossec/bin/ossec-logtest
2008/07/04 09:57:28 ossec-testrule: INFO: Started (pid: 12683).
ossec-testrule: Type one log per line.
Jul 4 09:42:16 enigma sshd[11990]: Accepted password for dcid from 192.168.2.10
port 35259 ssh2
**Phase 1: Completed pre-decoding.
full event: "Jul 4 09:42:16 enigma sshd[11990]: Accepted password for dcid from
192.168.2.10 port 35259 ssh2"
hostname: "enigma"
program_name: "sshd"
log: "accepted password for dcid from 192.168.2.10 port 35259 ssh2"
**Phase 2: Completed decoding.
decoder: ’sshd’
dstuser: ‘dcid’
srcip: ‘192.168.2.10′
**Phase 3: Completed filtering (rules).
Rule id: ‘10100′
19
Neo -----@------qq:276109493 4/26/2022
Level: ‘4′
Description: ‘First time user logged in.’
**Alert to be generated.
在上面的例子中,我们提供了一个验证成功日志,而且
OSSEC- logtest
向我们展示了如
何将解码,以及什么信息被提取和触发了哪条规则。在接下来的例子中,我们可以看到它将
如何从
Windows
中提取的一个用户登出消息:
# /var/ossec/bin/ossec-logtest
2008/07/04 09:57:28 ossec-testrule: INFO: Started (pid: 12683).
ossec-testrule: Type one log per line.
WinEvtLog: Security: AUDIT_SUCCESS(538): Security: lac: OSSEC-HM: OSSEC-HM: User
Logoff: User Name: lac Domain: OSSEC-HM Logon ID: (0×0,0xF784D5) Logon Type: 2
**Phase 1: Completed pre-decoding.
full event: ‘WinEvtLog: Security: AUDIT_SUCCESS(538): Security: lac: OSSEC-HM:
OSSEC-HM: User Logoff: User Name: lac Domain: OSSEC-HM Logon ID: (0×0,0xF784D5)
Logon Type: 2′
hostname: ‘enigma’
program_name: ‘(null)’
log: ‘WinEvtLog: Security: AUDIT_SUCCESS(538): Security: lac: OSSEC-HM:
OSSEC-HM: User Logoff: User Name: lac Domain: OSSEC-HM Logon ID: (0×0,0xF784D5)
Logon Type: 2′
**Phase 2: Completed decoding.
decoder: ‘windows’
status: ‘AUDIT_SUCCESS’
id: ‘538′
extra_data: ‘Security’
dstuser: ‘lac’
system_name: ‘OSSEC-HM’
**Phase 3: Completed filtering (rules).
Rule id: ‘18149′
Level: ‘3′
Description: ‘Windows User Logoff.’
**Alert to be generated.
除了上面的信息,
OSSEC-logtest –f
还可以用来追踪日志通过的规则路径。
20
Neo -----@------qq:276109493 4/26/2022
# /var/ossec/bin/ossec-logtest -f
2008/07/04 10:05:43 ossec-testrule: INFO: Started (pid: 23007).
ossec-testrule: Type one log per line.
Jul 4 10:05:30 enigma sshd[27588]: Failed password for invalid user test2 from
127.0.0.1 port 19130 ssh2
**Phase 1: Completed pre-decoding.
full event: ‘Jul 4 10:05:30 enigma sshd[27588]: Failed password for invalid user
test2 from 127.0.0.1 port 19130 ssh2′
hostname: ‘enigma’
program_name: ’sshd’
log: ‘Failed password for invalid user test2 from 127.0.0.1 port 19130 ssh2′
**Phase 2: Completed decoding.
decoder: ’sshd’
srcip: ‘127.0.0.1′
**Rule debugging:
Trying rule: 1 - Generic template for all syslog rules.
*Rule 1 matched.
*Trying child rules.
Trying rule: 5500 - Grouping of the pam_unix rules.
Trying rule: 5700 - SSHD messages grouped.
*Rule 5700 matched.
*Trying child rules.
Trying rule: 5709 - Useless SSHD message without an user/ip.
Trying rule: 5711 - Useless SSHD message without a user/ip.
Trying rule: 5707 - OpenSSH challenge-response exploit.
Trying rule: 5701 - Possible attack on the ssh server (or version gathering).
Trying rule: 5706 - SSH insecure connection attempt (scan).
Trying rule: 5713 - Corrupted bytes on SSHD.
Trying rule: 5702 - Reverse lookup error (bad ISP or attack).
Trying rule: 5710 - Attempt to login using a non-existent user
*Rule 5710 matched.
*Trying child rules.
Trying rule: 5712 - SSHD brute force trying to get access to the system.
21
Neo -----@------qq:276109493 4/26/2022
**Phase 3: Completed filtering (rules).
Rule id: ‘5710′
Level: ‘5′
Description: ‘Attempt to login using a non-existent user’
**Alert to be generated.
创建自定义的解码器和规则
OSSEC监控系统日志,检查rootkits和系统配置更改,并做了很好的工作让我们知道在我们的系统中发
生了什么。 OSSEC提供了一个有用的组件和常用的服务规则集,但当然,它不能解析我们自定义日志文
件,即使我们定制的规则已经设置。我想我会继续文档的写做,因为我很难找到一个全面的开始到结束的
教程(当我忘记了它以后,这个文档能帮助我。当然)。
在文件中加入你想要监控的日志文件。
打开/var/ossec/etc/这个文件,在文档的结尾部分(的前边)增
加如下:
每一行有一个条目的日志文件,在这里推荐使用“syslog””. Log_format 可用的值如下:
syslog, snort-full, snort-fast, squid, iis, eventlog (for Windows event logs), mysql_log,
postgresql_log, nmapg or apache。
如果你要监控文件名随日期而变的日志文件,OSSEC可以明白strftime变量,例如:你的日
志文件是/var/log/apache2/.2010-09-25, 你可以设置location 如下:
创建自定义解码器
OSSEC使用解码器分析日志文件。日志文件找到一个合适的解码器后,它将在
/var/ossec/etc/中分析出定义的字段。然后在规则文件中比较之些值,当规则文件中指定
的值和解释日志文件的值匹配时触发警报。如果启用了动态响应,这些值也可以传递给它。
看到如下的日志我想触发一个警报
2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on; enabled forcefield arbitrarily
打开/var/ossec/etc/local_文件(你也可以使用文件,但是使用local_文
件可以确保你更新ossec后这个文件不会重写。首先,我们要创那建一个解码器匹配日志条目的起始部分。使用
正值表达式提取日期的前几个字符。
在下面的解码器,我们在该行的开头以(
^
)开始,然后匹配数字
YYYY- MM - DD HH
:
MM
:
SS
日期和时间,我可以有几个不同的日志级别列表,
INFO,WARN,DFBUG
等,这里
仅仅匹配任何大于
0
字符(
W +
)。我们也希望用比较独特的东西结束,我知道这是一个
forcefield
警报并且警报将包含所有
forcefield
,所以我将使用下面的。
dddd-dd-dd dd:dd:dd w+ ForceField
咱们在这休息一会,看看是否能够触发警报。保存local_文件,然后运行、
var/ossec/bin/ossec-logtest.
当它运行以后,把你的日志粘贴进去。
22
Neo -----@------qq:276109493 4/26/2022
2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on;
enabled forcefield
**Phase 1: Completed pre-decoding.
full event: '2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x:
forcefield on; enabled forcefield arbitrarily!'
hostname: 'my_system'
program_name: '(null)'
log: '2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield
on; enabled forcefield arbitrarily!'
**Phase 2: Completed decoding.
decoder: 'forcefield'
您应该看到
forcefield
解码器。太棒了!现在,让我们的解析出我们关心的值。
重新打开
local_
文件并且在
forcefield
解码器的下方,创建一个新的解码器
(.*)
我们在这里做什么呢?
很明显:我们给它一个名字,并指定
forcefield-alert
是
forcefield
的一个子规则。每当日志和
forcefield
解码器匹配,然后使用
forcefield_aler
解码器提取数据字段并匹配。
现在有趣的是,我们设定分支“
after_parent
”“
prematch' -
这意味着
OSSEC
开始寻找匹配
后的东西(日期,时间,和力场),我们在
forcefield
内指定。
所以我们的日志行实际上看起来像这样:
2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on; enabled forcefield arbitrarily
提取前面匹配的数据以后,我们的日志行在ossec看来像这样。
IP:127.0.0.1@script_x: forcefield on; enabled forcefield arbitrarily!
那么,我们关心什么呢?我们想要再次测试什么字段呢?一个好的规则不但能够解码你想要
在规则内部匹配的任何数据,而且可以启动一个动态响应。
我下面用粗体设置这些项目:
IP:127.0.0.1@script_x: forcefield on; enabled forcefield arbitrarily!
OSSEC
只允许定义特定的字段。这些可以在
local_
文件的顶部找到。对于我们
日志文件的目的,我们想要的
IP
,脚本,系统会动态取得。
创建
OSSEC
的正则表达式时,我们提取括号内的所有数据,所以我们建立这样的正则表达
式:
23
Neo -----@------qq:276109493 4/26/2022
IP:(d+.d+.d+.d+)@(w+): (forcefield w+); (.*)
然后,指定括号中的正则表达式是哪个领域,在
使用可用字段,添加在
行:
保存local_文件并且用ossec_logtest再次运行我们的日志文件。
ossec-testrule: Type one log per line.
2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on;
enabled forcefield arbitrarily!
**Phase 1: Completed pre-decoding.
full event: '2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x:
forcefield on; enabled forcefield arbitrarily!'
hostname: 'my_system'
program_name: '(null)'
log: '2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on;
enabled forcefield arbitrarily!'
**Phase 2: Completed decoding.
decoder: 'forcefield'
srcip: '127.0.0.1'
url: 'script_x'
action: 'forcefield on'
extra_data: 'enabled forcefield arbitrarily!'
看起来不错!它发现我们的解码器并按我们希望的方式提取了字段。现在,我们已经准备好
写入本地规则
写入自定义规则
打开的
/ var / OSSEC/ local_
文件并添加规则。首先,我们创建了一个组,“
catch-all
”
规则会碰到
forcefield
解码器解码的任何日志。我们设置为
0
级,因为我们不希望它触发警
报:
接下来,我们添加触发依赖规则,如果在规则中指定的行动相匹配。
指定依赖
24
Neo -----@------qq:276109493 4/26/2022
保存local_文件,再一次测试
ossec-testrule: Type one log per line.
2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on; enabled
forcefield arbitrarily!
**Phase 1: Completed pre-decoding.
full event: '2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield
on; enabled forcefield arbitrarily!'
hostname: 'my_system'
program_name: '(null)'
log: '2010-09-25 15:28:42 WARN ForceField IP:127.0.0.1@script_x: forcefield on;
enabled forcefield arbitrarily!'
**Phase 2: Completed decoding.
decoder: 'forcefield'
srcip: '127.0.0.1'
url: 'script_x'
action: 'forcefield on'
extra_data: 'enabled forcefield arbitrarily!'
25
Neo -----@------qq:276109493 4/26/2022
**Phase 3: Completed filtering (rules).
Rule id: '700006'
Level: '12'
Description: 'Forcefield enabled!'
**Alert to be generated.
酷
-
现在我们已经准备好重新启动
OSSEC
和检查警报。在重新启动
OSSEC
时,重新启动
OSSEC
之前,
你会发现,您正在使用新的日志文件应该存在,如果它不存在,它会忽略它。此外,写自己的规则,在您
的
OSSEC
中部署具体的级别
-
例如,如果您启用了积极回应,并要触发它,确保您用解码器提取了
srcip
字段,并在
中设置与规则相匹配的积极响应命令的具体级别。
输出和报警选项
经由LOG发送报警
Syslog输出允许你发送OSSEC报警到一个或更多的SYSLOG服务器。
配置选项
这些配置选项需要有一个server和本地安装。
syslog_output
¶
server
¶
•
IP Address of the syslog server. 服务器的IP地址
•
Allowed: any valid IP address 允许有效的IP地址
port
¶
•
Port to forward alerts to.
•
Default 514
•
Allowed: Any valid port
转发报警的端口
任何有效端口
报警级别
level
¶
•
Alert level of the alerts to forward
•
Allowed: 1 - 16
format
¶
•
Format of alert output. The default format is “default”, or full syslog output.
•
Allowed default, cef
配置启用syslog输出
你可以配置OSSEC发送LOG到你选择的server, 在下面的例子中,报警级别大于等于10的发送到
10.1.1.1服务器,其它的发到192.168.4.1服务器
改变完成后,启用client-syslog进程。
26
Neo -----@------qq:276109493 4/26/2022
# /var/ossec/bin/ossec-control enable client-syslog
重启OSSEC进程
# /var/ossec/bin/ossec-control restart
ossec-csyslog应该与其他OSSEC进程一起开始
OSSEC HIDS v1.5.1 Stopped
Starting OSSEC HIDS v1.5.1 (by Third Brigade, Inc.)
..
And in the logs:
# tail -n 1000 /var/ossec/logs/ | grep csyslog
2008/07/25 12:55:16 ossec-csyslogd: INFO: Started (pid: 19412).
2008/07/25 12:55:16 ossec-csyslogd: INFO: Forwarding alerts via syslog to:
‘192.168.4.1:514′.
2008/07/25 12:55:16 ossec-csyslogd: INFO: Forwarding alerts via syslog to:
‘10.1.1.1:514′.
那一个syslog服务器应该接收 (every log separated by level, rule, location and the actual event that
generated it):
Jul 25 12:17:41 enigma ossec: Alert Level: 3; Rule: 5715 - SSHD authentication
success.; Location: (jul) 192.168.2.0->/var/log/messages;
srcip: 192.168.2.190; user: root; Jul 25 13:26:24 slacker sshd[20440]: Accepted
password for root from 192.168.2.190 port 49737 ssh2
发送报警到一个mail用户
为了发送报警给email用户,在文件中有三个选项需要设置。
在/var/ossec/etc/文件的
设置发送通知的报警级别。
最低报警级别可以在/var/ossec/etc/文件的
重启OSSEC使改变生效
# /var/ossec/bin/ossec-control restart
动态响应
27
Neo -----@------qq:276109493 4/26/2022
创建自定义的动态响应
OSSEC中默认带了几个动态响应脚本,如果你仍需要扩展它们,下面的内容将会有帮助。
通过例子来学习总是更快也更容易一些。我们将写一个简单的动态响应脚本(发报警到指定
的邮件地址)
首先我们要在配置文件中创建新的命令
由于我们的脚本不需要超时,所以我们不需要设置它。我们也不期待任何输入,所以我们
留”expect”标签为空。在”executable”标签,我们指定可执行脚本的名称(脚本必需放在
/var/ossec/active-response/bin/这个目录下)
配置动态响应
接下来,我们需要配置OSSEC运行动态响应。在这个例子中,我想在OSSEC服务器端运
行(因此我选择server位置),每次1002规则被激活(查看规则ID1002)。
创建动态响应脚本
动态响应脚本必需放在/var/ossec/active-response/bin目录下,并设置使其有执行权限。
传递给脚本的参数有那些?
1. action (delete or add)
2. user name (or - if not set)
3. src ip (or - if not set)
4. Alert id (uniq for every alert)
5. Rule id
6. Agent name/host/filename
#!/bin/sh
# E-mails an alert - copy at /var/ossec/active-response/bin/
# Change e-mail ADDRESSS
# Author: Daniel Cid
28
Neo -----@------qq:276109493 4/26/2022
MAILADDRESS="************"
ACTION=$1
USER=$2
IP=$3
ALERTID=$4
RULEID=$5
LOCAL=`dirname $0`;
cd $LOCAL
cd ../
PWD=`pwd`
# Logging the call
echo "`date` $0 $1 $2 $3 $4 $5 $6 $7 $8" >> ${PWD}/../logs/
# Getting alert time
ALERTTIME=`echo "$ALERTID" | cut -d "." -f 1`
# Getting end of alert
ALERTLAST=`echo "$ALERTID" | cut -d "." -f 2`
# Getting full alert
grep -A 10 "$ALERTTIME" ${PWD}/../logs/alerts/ | grep -v ".$ALERTLAST: " -A
10 | mail $MAILADDRESS -s "OSSEC Alert"
重启OSSEC并测试
配置完成后,你可以重启OSSEC并测试配置。我们运行Logger命令模拟一个分片错误消息。
# /var/ossec/bin/ossec-control restart
# logger "Segmentation Fault"
在/var/ossec/logs/文件你能得到如下LOG.
Fri Jul 27 23:48:31 BRT 2007 /var/ossec/active-response/bin/ add - -
1185590911.25916 1002 /var/log/messages
29
Neo -----@------qq:276109493 4/26/2022
And in your e-mail:
from:root<***********>
to:************
date: Jul 27,27 2007 11:48 PM
subject: OSSEC Alert
** Alert 1185590911.25661: mailsl - syslog,errors,
2007 Jul 27 23:48:31 xx->/var/log/messages
Rule: 1002 (level 7) -> 'Unknown problem somewhere in the system.'
Src IP: (none)
User: (none)
Jul 27 23:48:30 xx dcid: Segmentation Fault 123
30


发布评论