代理端
OSSEC有兩種代理端:可安裝的代理端和啞代理端(免安裝)。可安裝的代理端被安裝在主機上,通過OSSEC的加密協議將主機的信息發送到OSSEC服務器。亞代理端則不需在遠端主機進行安裝。他作為OSSEC管理端的進程存在,通過RPC(ssh或rdp、wmi)的方式收集遠端系統的信息。
代理端的管理
通過manage_agents命令可增加一個新的代理端。步驟如下:
1、在OSSEC服務器上運行manage_agents
2、增加一個代理端
3、提取代理端的key值
4、復制key到代理端;
5、在代理端運行manage_agent
6、從服務器導入key值;
7、重啟管理端ossec進程;
8、啟動代理端
OSSEC服務器上的manage_agents
服務器上的manage_agents提供以下功能:
l 添加一個OSSEC代理端到服務器;
l 提取已添加的代理端的key
l 從服務器移除一個代理端
l 列出服務器上已添加的全部代理端
運行Manage_agents交互界面
Manage_agent需要使用必要的權限運行(如root)
運行Manage_agents:
# /var/ossec/bin/manage_agents
Manage_agents菜單:
****************************************
* 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:
輸入字母,然后敲擊回車即可觸發對應的功能。
添加一個代理端
在選擇時,輸入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
然后,需要輸入agent的IP地址。可以是單一的ip地址(如192.168.1.25),或者是一個ip范圍(192.168.2.0/24),或是其他。當ip會不斷變化(DHCP)或很多系統使用同一ip(NAT)時,輸入ip范圍是個不錯的選擇。
* The IP Address of the new agent: 192.168.2.0/24
警告:當使用單一ip時,必須是唯一的。重復的ip將導致問題。但多系統使用同一ip范圍。
最后一個配置項是為代理端設置一個ID。Manage_agents將提供一個ID的建議值。這個值是當前系統中可用的ID最小值。ID000被分配給了OSSEC server。如果接受建議,簡單敲擊回車即可。如果選擇其他值,輸入后敲擊回車即可。
* An ID for the new agent[001]:
最后,你還需要對輸入的信息做最終的確認。
Agent information:
ID:002
Name:agent1
IP Address:192.168.2.0/24
Confirm adding it?(y/n): y
Agent added.
然后,Manage_agents將代理端的信息存入/var/ossec/etc/client.keys,然后退出安裝界面。
警告:如果這是添加的第一個代理端,需重啟OSSEC服務器進程。
/var/ossec/bin/ossec-control restart.
提取代理端key值
添加代理端后,會生成一個key值。需要將它復制到代理端。提取key值,可以通過Manage_agents命令獲得。在服務器提供的代理端列表中,輸入需要提取的代理端ID即可。需要注意的是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
Agent key information for '001' is:
MDAyIGFnZW50MSAxOTIuMTY4LjIuMC8yNCBlNmY3N2RiMTdmMTJjZGRmZjg5YzA4ZDk5m
** Press ENTER to return to the main menu.
Key以字符串的形式進行編碼。本例中為MDAyIGFnZW50MSAxOTIuMTY4LjIuMC8yNCBlNmY3N2RiMTdmMTJjZGRmZjg5YzA4ZDk5Mm,字符串中含有客戶端的信息。Key值可通過代理端的manage_agents命令添加入代理端。
移除代理端
如果想從服務器移除一個代理端,使用Manage_agents的r選項。然后從列表中選擇需要移除的代理端ID,輸入,然后回車即可。注意ID需要輸入全部數字。
Choose your action: A,E,L,R or Q: r
Available agents:
ID: 001, Name: agent1, IP: 192.168.2.0/24
Provide the ID of the agent to be removed (or '\q' to quit): 001
Confirm deleting it?(y/n): y
Agent '001' removed.
Manage_agents將核實 /var/ossec/etc/client.keys中的代理端信息。文件中存有ID和驗證信息,從而避免添加代理端時產生沖突。刪除的代理端將不再與OSSEC服務器產生交互。
OSSEC代理端上的Manage_agents
代理端上的Manage_agents提供倒入認證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.
為使配置起作用,需要重啟服務端,然后啟動代理端。
代理端綁定NAT或使用動態IP(DHCP)
如果代理端IP不斷變化或在NAT設備后面,那么需要通過CIDR地址或者使用any IP地址來配置代理端。
DHCP例子
為接收代理端的IP在192.168.2.0/24范圍內的變化,只需在設置代理端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服務器來說,NAT后面的代理IP地址是相同對。
例如,你的系統192.168.1.2, 192.168.1.3 還有192.168.1.4在一個NAT服務器的后面,需要連接10.1.1.0/24網絡的OSSEC服務器。
這時,你需要配置代理端為10.1.1.0/24端的任意ip(而不是它原始ip)。也可適用any來替代ip或ip范圍,允許代理端從任意ip發起連接。
在Manage_agents工具上,使用如下方法添加代理端。
Please provide the following:
* A name for the new agent: agent-1
* The IP Address of the new agent: 10.1.1.0/24
Please provide the following:
* A name for the new agent: agent-2
* The IP Address of the new agent: any
注意:每個代理端必須使用不同的key值。
通過ossec-authd添加代理端
Ossec-authd
Ossec-authd在服務器上安裝用於添加代理端以及分發認證key
警告:由於當前暫無認證機制,任何主機都可以連接ossec-authd的監聽端口來獲取一個OSSEC代理端key。因此,推薦使用ossec管理端防火牆來限制連接請求。
運行ossec-authd,監聽1515端口。
/var/ossec/bin/ossec-authd -p 1515
Agent-auth
Agent-auth用於連接ossec-authd實例以獲取並安裝一個代理端key。
運行agent-auth連接192.168.1.12管理端的1515端口
/var/ossec/bin/agent-auth -m 192.168.1.12 -p 1515
集中化代理端配置
如果你打算遠程配置你的代理端,恭喜你從2.1版本之后ossec開始支撐此項功能。集中配置包括完整性檢測(syscheckd)、rootkit檢測(rootcheck)、日志分析三項功能。
下面說一下怎樣使用。
創建代理端配置
首先,創建文件/var/ossec/etc/shared/agent.conf。
在文件中,你可以像在ossec.conf中一樣對代理端進行配置。
<agent_config>
<localfile>
<location>/var/log/my.log</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
但是除此之外需要做一些額外的配置,可以通過代理名稱、操作系統、配置文件等限定配置適用范圍。
<agent_config name="agent1">
<localfile>
<location>/var/log/my.log</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
<agent_config os="Linux">
<localfile>
<location>/var/log/my.log2</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
<agent_config os="Windows">
<localfile>
<location>C:\myapp\my.log</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
並且只有匹配上的代理端可以讀取該配置。這給了我們細粒度配置代理端提供了可能。
配置保存后,管理端將推送配置文件到代理端。但這需要一點時間(因為管理端需要將共享文件讀入緩存,並每隔一段時間才會重讀一次)。如果重啟管理端,推送配置文件的速度將加快。
重啟代理端
推送配置文件后,可以通過運行agent_control來查看代理接收配置的情況並遠程重啟代理端。
# md5sum /var/ossec/etc/shared/agent.conf
MD5 (/var/ossec/etc/shared/agent.conf) = ee1882236893df851bd9e4842007e7e7
# /var/ossec/bin/agent_control -i 200
OSSEC HIDS agent_control. Agent information:
Agent ID: 200
Agent Name: ourhome
IP address: 192.168.0.0/16
Status: Active
Operating system: Linux ourhome 2.6.24-23-generic #1 SMP Mon Jan 26 00..
Client version: OSSEC HIDS v2.1 / ee1882236893df851bd9e4842007e7e7
Last keep alive: Tue Jun 30 08:29:17 2009
Syscheck last started at: Tue Jun 30 04:29:32 2009
Rootcheck last started at: Tue Jun 30 06:03:08 2009
當代理端接收到配置后,Client Version部分會看到agent.conf文件的md5sum值。
注意:Linux系統通常使用md5sum,但其他系統會使用md5來計算文件的哈希。
重啟代理端:
# /var/ossec/bin/agent_control -R 200 (where 200 is the agent id)
OSSEC HIDS agent_control: Restarting agent: 200
啞代理
啞代理監控
啞代理監控可以在沒有安裝代理的情況下為你提供系統的完整性檢測(包括路由、防火牆、交換機、Linux\BSD系統)。他可以像我們正常的文件完整性檢測一樣工作(對checksum的變化做告警)或者做差異對比,明確列出哪里有不同。
啞終端配置項
Agentless用以配置啞終端相關配置項
Frequency表示運行的時間間隔
Host定義用戶名和啞終端主機
示例:
<host>root@linux.server.example.com</host>
State定義檢查是取周期值還是周期差值
Periodic:由OSSEC進程運行產生周期數值;
Periodic_diff:由腳本輸出值與前期運行值比較產生。
Arguments:定義傳遞給script的參數值
開始使用啞終端:
安裝OSSEC之后,需要設置啞終端監控模式:
# /var/ossec/bin/ossec-control enable agentless
然后在需要在接入的主機上配置ssh認證信息。對於思科設備(PIX、路由等)來說,你需要添加額外的參數增加密碼。當需要支撐su時,也需要這樣做。舉例來說,我想增加一個Linux主機(example.net)和一個PIX防火牆(pix.fw.local):
# /var/ossec/agentless/register_host.sh add root@example.net mypass1
*Host root@example.netl added.
# /var/ossec/agentless/register_host.sh add pix@pix.fw.local pixpass enablepass
*Host pix@pix.fw.local added.
# /var/ossec/agentless/register_host.sh list
*Available hosts:
pix@pix.fw.local
root@example.net
注意:register_host.sh是一個shell腳本,shell腳本無法識別的特殊字符需要提前注釋掉。
如果想用公鑰而不用密碼來認證,需要提供NOPASS作為密碼,並創建公鑰:
產生的公鑰會放在/var/ossec/.ssh目錄下。之后,使用scp命令復制公鑰到遠端主機,這樣,你得無密碼連接操作就完成了。
配置啞終端
全部添加完你的系統后,需要配置OSSEC來監控他們了。默認情況下,有四種啞終端供選用(稍后我們會增加其他類型):
l ssh_integrity_check_bsd
l ssh_integrity_check_linux
l ssh_generic_diff
l ssh_pixconfig_diff
對於前兩個來說,需要在配置文件中給出路徑清單,OSSEC則在遠端設備上完成完整性檢測工作。對於ssh_generic_diff來說,還需要在遠端設備上配置一些命令才行,OSSEC將在輸出結果變化時,進行告警。Ssh_pixconfig_diff則在思科PIX/路由配置變化時產生告警。
對於我們第一個系統(root@example.net),我將每10個小時/bin,/etc,/sbin目錄(如果我使用ssh_integrity_check_bsd,也需要提供目錄參數):
<agentless>
<type>ssh_integrity_check_linux</type>
<frequency>36000</frequency>
<host>root@example.net</host>
<state>periodic</state>
<arguments>/bin /etc/ /sbin</arguments>
</agentless>
對於PIX系統,配置是這樣的:
<agentless>
<type>ssh_pixconfig_diff</type>
<frequency>36000</frequency>
<host>pix@pix.fw.local</host>
<state>periodic_diff</state>
</agentless>
為了舉一個ssh_generic_diff的例子,我在root@example.net上增加了ls –la /etc;cat /etc/passwd的監控項;如果需要監控任何網絡防火牆或交換機,需要使用ssh_generic_diff選項,並在參數部分列明指令即可。需要使用su命令時,需要在hostname(<host>root@example.net</host>)前面設置use_su參數即可。
<agentless>
<type>ssh_generic_diff</type>
<frequency>36000</frequency>
<host>root@example.net</host>
<state>periodic_diff</state>
<arguments>ls -la /etc; cat /etc/passwd</arguments>
</agentless>
運行完整的安裝進程
配置完成后,需要重啟OSSEC進程。這時會在看到“Started ossec-agentlessd”的輸出。在每個啞終端啟動前,OSSEC會檢測一下配置清單,以確保所有配置項沒有錯誤。通過/var/ossec/logs/ossec.log文件可以查看所有的錯誤。如果看到:
2008/12/12 15:20:06 ossec-agentlessd: ERROR: Expect command not found (or bad arguments) for 'ssh_integrity_check_bsd'.
2008/12/12 15:20:06 ossec-agentlessd: ERROR: Test failed for 'ssh_integrity_check_bsd' (127). Ignoring.'
意味着服務器上缺少一個expect庫文件(在啞代理端無需安裝任何文件)。在Ubuntu上,需要按下述步驟安裝
# apt-get install expect
安裝expect之后,需要重啟OSSEC進程。這時可以看到,
2008/12/12 15:25:19 ossec-agentlessd: INFO: ssh_integrity_check_bsd: root@example.net: Starting.
2008/12/12 15:25:46 ossec-agentlessd: INFO: ssh_integrity_check_bsd: root@example.net: Finished.
告警
你可能看到的一些告警:
對於ssh_generic_diff來說:
OSSEC HIDS Notification.
2008 Dec 12 01:58:30
Received From: (ssh_generic_diff) root@example.net->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 hosts.deny
--
> -rw-r-r- 1 root wheel 34 Dec 11 18:23 hosts.deny
-END OF NOTIFICATION
對於PIX來說:
OSSEC HIDS Notification.
2008 Dec 01 15:48:03
Received From: (ssh_pixconfig_diff) pix@pix.fw.local->agentless
Rule: 555 fired (level 7) -> "Integrity checksum for agentless device changed."
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