開源EDR(OSSEC)基礎篇- 02 -部署環境與安裝方式
前言
上一篇介紹了OSSEC設計的定位以及產品輸出的能力,在對OSSEC安全功能有個大體印象的前提下,我們接著開始實踐OSSEC的安裝和部署,本篇重點的重點是幫助初次接觸或者對OSSEC不熟悉的同學,無痛安裝,並能夠用最短的時間在所服務的企業內部真正的使用起來。
1. 環境準備
1.1 拓撲圖
1.2 部署清單
1.3 工作流
- OSSEC-Server 部署Server端程式
- OSSEC-LinuxAgent和OSSEC-WinAgent分別部署Agent端程式
- OSSEC-Server 防火牆開啟開啟UDP(1514),接收Agent上報資料
- OSSEC-Server 編譯支援MySQL日誌儲存
- OSSEC-Server 開啟日誌輸出JSON,安裝ELK元件filebeat
- OSSEC-ELK 配置logstash服務接收filebeat來源日誌,並存入ElasticSearch
備註:
OSSEC-ELK 預設已經安裝有logstash、elasticsearch、Kibana
文件使用的ELK stack元件版本:
- Elasticserarch elasticsearch-6.0.0.tar.gz
- Logstash logstash-6.0.0.tar.gz
- Kibana kibana-6.0.0-linux-x86_64.tar.gz
- Filebeat
1.4 OSSEC-Server 安裝
Step 1
初始化環境安裝,分別安裝編譯庫,以及資料庫支援庫
# yum -y install make gcc
# yum -y install mysql-devel postgresql-devel
# yum -y install sqlite-devel
Step 2
下載OSSEC安裝包,並進行解壓,進入安裝目錄
# wget https://github.com/ossec/ossec-hids/archive/3.1.0.tar.gz # mv 3.1.0.tar.gz ossec-hids-3.1.0.tar.gz # tar xf ossec-hids-3.1.0.tar.gz # cd ossec-hids-3.1.0
Step 3
執行配置安裝選項指令碼
[email protected]:~/ossec-hids-3.1.0# ./install.sh
...此處省略...
您將開始 OSSEC HIDS 的安裝.
請確認在您的機器上已經正確安裝了 C 編譯器.
- 系統型別: Linux instance-8hwjg2ar 4.4.0-139-generic
- 使用者: root
- 主機: instance-8hwjg2ar
-- 按 ENTER 繼續或 Ctrl-C 退出. --
1- 您希望哪一種安裝 (server, agent, local or help)? server
- 選擇了 Server 型別的安裝.
2- 正在初始化安裝環境.
- 請選擇 OSSEC HIDS 的安裝路徑 [/var/ossec]:
- OSSEC HIDS 將安裝在 /var/ossec .
3- 正在配置 OSSEC HIDS.
3.1- 您希望收到e-mail告警嗎? (y/n) [y]:
- 請輸入您的 e-mail 地址? [email protected]
- 我們找到您的 SMTP 伺服器為: mx2.qq.com.
- 您希望使用它嗎? (y/n) [y]: y
--- 使用 SMTP 伺服器: mx2.qq.com.
3.2- 您希望執行系統完整性檢測模組嗎? (y/n) [y]: y
- 系統完整性檢測模組將被部署.
3.3- 您希望執行 rootkit檢測嗎? (y/n) [y]: y
- rootkit檢測將被部署.
3.4- 關聯響應允許您在分析已接收事件的基礎上執行一個
已定義的命令.
例如,你可以阻止某個IP地址的訪問或禁止某個使用者的訪問許可權.
更多的資訊,您可以訪問:
http://www.ossec.net/en/manual.html#active-response
- 您希望開啟聯動(active response)功能嗎? (y/n) [y]: y
- 關聯響應已開啟
- 預設情況下, 我們開啟了主機拒絕和防火牆拒絕兩種響應.
第一種情況將新增一個主機到 /etc/hosts.deny.
第二種情況將在iptables(linux)或ipfilter(Solaris,
FreeBSD 或 NetBSD)中拒絕該主機的訪問.
- 該功能可以用以阻止 SSHD 暴力攻擊, 埠掃描和其他
一些形式的攻擊. 同樣你也可以將他們新增到其他地方,
例如將他們新增為 snort 的事件.
- 您希望開啟防火牆聯動(firewall-drop)功能嗎? (y/n) [y]: n
- 防火牆聯動(firewall-drop)當事件級別 >= 6 時被啟動
- 聯動功能預設的白名單是:
- 192.168.0.3
- 192.168.0.2
- 您希望新增更多的IP到白名單嗎? (y/n)? [n]:
3.5- 您希望接收遠端機器syslog嗎 (port 514 udp)? (y/n) [y]: y
- 遠端機器syslog將被接收.
3.6- 設定配置檔案以分析一下日誌:
-- /var/log/auth.log
-- /var/log/syslog
-- /var/log/dpkg.log
-如果你希望監控其他檔案, 只需要在配置檔案ossec.conf中
新增新的一項.
任何關於配置的疑問您都可以在 http://www.ossec.net 找到答案.
--- 按 ENTER 以繼續 ---
選項說明
server - 安裝伺服器端
/var/ossec - 選擇安裝目錄,預設選項
y - 是否啟用郵件告警,預設啟用
y - 是否啟用系統完整性檢測模組Syscheck功能,預設啟用
y - 是否啟用後門檢測模組Rootcheck功能,預設啟用
y - 是否啟用主動響應模組active-response功能,預設啟用
n - 是否啟用防火牆聯動功能,預設啟用,此處為關閉
n - 是否新增聯動功能白名單,預設啟用,此處為關閉
y - 是否接受遠端主機發送的syslog日誌,預設啟用
備註
配置完安裝指令碼之後,按回車鍵就開始進行編譯安裝,如果需要改變OSSEC的配置,可以等安裝完成後,編輯ossec.conf配置檔案進行修改,並重啟ossec程序使其生效
安裝演示
1.5 OSSEC-LinuxAgent 安裝
Step 1
初始化環境安裝,安裝編譯庫
# yum -y install make gcc
Step 2
下載OSSEC安裝包,並進行解壓,進入安裝目錄
# wget https://github.com/ossec/ossec-hids/archive/3.1.0.tar.gz
# mv 3.1.0.tar.gz ossec-hids-3.1.0.tar.gz
# tar xf ossec-hids-3.1.0.tar.gz
# cd ossec-hids-3.1.0
Step 3
執行配置安裝選項指令碼
[email protected]:~/ossec-hids-3.1.0# ./install.sh
...此處省略...
OSSEC HIDS v3.1.0 安裝指令碼 - http://www.ossec.net
您將開始 OSSEC HIDS 的安裝.
請確認在您的機器上已經正確安裝了 C 編譯器.
- 系統型別: Linux instance-8hwjg2ar 4.4.0-139-generic
- 使用者: root
- 主機: instance-8hwjg2ar
-- 按 ENTER 繼續或 Ctrl-C 退出. --
1- 您希望哪一種安裝 (server, agent, local or help)? agent
- 選擇了 Agent(client) 型別的安裝.
2- 正在初始化安裝環境.
- 請選擇 OSSEC HIDS 的安裝路徑 [/var/ossec]:
- OSSEC HIDS 將安裝在 /var/ossec .
3- 正在配置 OSSEC HIDS.
3.1- 請輸入 OSSEC HIDS 伺服器的IP地址或主機名: 192.168.31.178
- 新增伺服器IP 192.168.31.178
3.2- 您希望執行系統完整性檢測模組嗎? (y/n) [y]:
- 系統完整性檢測模組將被部署.
3.3- 您希望執行 rootkit檢測嗎? (y/n) [y]:
- rootkit檢測將被部署.
3.4 - 您希望開啟聯動(active response)功能嗎? (y/n) [y]:
3.5- 設定配置檔案以分析一下日誌:
-- /var/log/auth.log
-- /var/log/syslog
-- /var/log/dpkg.log
-如果你希望監控其他檔案, 只需要在配置檔案ossec.conf中
新增新的一項.
任何關於配置的疑問您都可以在 http://www.ossec.net 找到答案.
--- 按 ENTER 以繼續 ---
選項說明
agent - 安裝客戶端
/var/ossec - 選擇安裝目錄,預設選項
192.168.31.178 - 輸入伺服器端IP地址
y - 是否啟用系統完整性檢測模組Syscheck功能,預設啟用
y - 是否啟用後門檢測模組Rootcheck功能,預設啟用
y - 是否啟用主動響應模組active-response功能,預設啟用
安裝演示
1.6 OSSEC-WinAgent 安裝
Step 1
下載並執行Agent安裝程式
https://updates.atomicorp.com/channels/atomic/windows/ossec-agent-win32-3.1.0-5696.exe
Step 2
輸入OSSEC-Server IP地址和通訊金鑰
安裝演示
備註:
生成金鑰,參考 1.7相關內容
1.7 OSSEC Server與Agent通訊
OSSEC Server和Agent之間建立通訊需要通過認證,在Server端為Agent生成通訊金鑰並匯入Agent後才能完成信任關係,以及Server端需要開放UDP 1514通訊埠,接收Agent上報的資訊
Step 1
Agent配置指向Server IP
[[email protected] ~]# cat /var/ossec/etc/ossec.conf
<ossec_config>
<client>
<server-ip>10.40.27.159</server-ip>
<config-profile></config-profile>
</client>
...
Step 2
Server為Agent生成通訊金鑰
[r[email protected] ~]# /var/ossec/bin/manage_agents
****************************************
* OSSEC HIDS v3.1.0 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
- Adding a new agent (use '\q' to return to the main menu).
Please provide the following:
* A name for the new agent: agent01
* The IP Address of the new agent: 10.40.27.121
* An ID for the new agent[001]:
Agent information:
ID:001
Name:agent01
IP Address:10.40.27.121
Confirm adding it?(y/n): y
Agent added.
****************************************
* OSSEC HIDS v3.1.0 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: E
Available agents:
ID: 001, Name: agent01, IP: 10.40.27.121
Provide the ID of the agent to extract the key (or '\q' to quit): 001
Agent key information for '001' is:
MDAxIGFnZW50MDEgMTAuNDAuMjcuMTIxIDMyMTk4MDAwOGI4ZWJkYmZlMTIyNDA3ZGYzZTA4MGI5MDAzMmUzNTVmNGVhODQ5NjE4ZDU0NWFjNzNhMmM4MTE=
** Press ENTER to return to the main menu.
選項說明
A - 新增Agent
agent01 - 設定Agent名稱
10.40.27.121 - 輸入Agent IP地址
y - 是否確認新增Agent
E - 為Agent生成通訊Key
001 - 輸入新增Agent的ID,顯示Key值
Step 3
拷貝Server生成的通訊金鑰,並匯入Agent
[[email protected] ~]# /var/ossec/bin/manage_agents
****************************************
* OSSEC HIDS v3.1.0 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): MDAxIGFnZW50MDEgMTAuNDAuMjcuMTIxIDMyMTk4MDAwOGI4ZWJkYmZlMTIyNDA3ZGYzZTA4MGI5MDAzMmUzNTVmNGVhODQ5NjE4ZDU0NWFjNzNhMmM4MTE=
Agent information:
ID:001
Name:agent01
IP Address:10.40.27.121
Confirm adding it?(y/n): y
Added.
** Press ENTER to return to the main menu.
選項說明
I - 新增Agent
MDAxIGFnZW50MDEgM=... - 輸入通訊key
y - 輸入Agent IP地址
Step 4
Server主機防火牆開放UDP(1514)服務埠
[[email protected] ~]# firewall-cmd --add-port=1514/udp --permanent
success
[[email protected] ~]# firewall-cmd --reload
success
Server上檢查Agent是否可以通訊
[[email protected] ~]# /var/ossec/bin/list_agents -c
agent01-10.40.27.121 is active.
備註:
可以通過 /var/ossec/bin/list_agents -h
查詢更多Agent的狀態資訊
1.8 OSSEC-Server MySQL儲存事件
OSSEC-Server編譯支援的資料庫有三種,它們分別是MySQL、Postgresql、SQLite,可以選擇把日誌告警等資訊儲存到這些資料庫中,使用標準SQL語法進行便捷的查詢和呼叫
Step 1
安裝MySQL、啟動MySQL並設定開機自啟動
[[email protected] ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[[email protected] ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
[[email protected] ~]# yum -y install mysql-server
[[email protected] ~]# systemctl start mysqld
[[email protected] ~]# systemctl enable mysqld
Step 2
MySQL初始化安全設定、更改root密碼
[[email protected] ~]# /usr/bin/mysql_secure_installation
Step 3
建立 ossec
資料庫、配置許可權使用者為 ossec
,密碼為 password
[[email protected] ~]# mysql -u root -p
mysql> create database ossec;
mysql> grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on ossec.* to [email protected];
mysql> set password for [email protected]=PASSWORD('password');
mysql> flush privileges;
Step 4
匯入OSSEC資料庫表結構 schema
檔案儲存在原始碼目錄
ossec-hids-3.1.0/src/os_dbd/mysql.schema
[[email protected] ~]# cd /root/ossec-hids-3.1.0/src/os_dbd
[[email protected] os_dbd]# ll
總用量 124
... 此處省略..
-rw-rw-r-- 1 root root 3040 10月 12 06:25 mysql.schema
-rw-rw-r-- 1 root root 3005 10月 12 06:25 postgresql.schema
[[email protected] os_dbd]# mysql -u root -p ossec < mysql.schema
Step 5
編譯支援MySQL儲存,並激活
[[email protected] ~]# cd /root/ossec-hids-3.1.0/src
[[email protected] src]# make TARGET=server DATABASE=mysql install
[[email protected] src]# make clean
[[email protected] src]# cd ..
[[email protected] ossec-hids-3.1.0]# DATABASE=mysql ./install.sh
[[email protected] ossec-hids-3.1.0]# /var/ossec/bin/ossec-control enable database
Step 6
最後主配置檔案 ossec.conf
增加MySQL資料庫配置,直接複製整段到配置檔案最後
<ossec_config>
<database_output>
<hostname>127.0.0.1</hostname>
<username>ossec</username>
<password>password</password>
<database>ossec</database>
<type>mysql</type>
</database_output>
</ossec_config>
Step 7
儲存配置,並重啟OSSEC程序
[[email protected] ~]# service ossec restart
資料常用查詢
Case 1 查詢最近發生的10條告警
mysql> SELECT id,server_id,rule_id,level,timestamp,location_id,src_ip,dst_ip,src_port,dst_port,alertid,user FROM alert limit 10;
+----+-----------+---------+-------+------------+-------------+----------------+--------+----------+----------+-------------------+--------+
| id | server_id | rule_id | level | timestamp | location_id | src_ip | dst_ip | src_port | dst_port | alertid | user |
+----+-----------+---------+-------+------------+-------------+----------------+--------+----------+----------+-------------------+--------+
| 1 | 1 | 5716 | 5 | 1545571731 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571730.513468 | root |
| 2 | 1 | 5716 | 5 | 1545571736 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571732.513773 | root |
| 3 | 1 | 502 | 3 | 1545571736 | 2 | (null) | (null) | 0 | 0 | 1545571733.514078 | (null) |
| 4 | 1 | 5716 | 5 | 1545571736 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571734.514235 | root |
| 5 | 1 | 5716 | 5 | 1545571741 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571736.514540 | root |
| 6 | 1 | 5716 | 5 | 1545571741 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571738.514845 | root |
| 7 | 1 | 2502 | 10 | 1545571741 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571738.515150 | root |
| 8 | 1 | 5503 | 5 | 1545571741 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571738.515533 | root |
| 9 | 1 | 5716 | 5 | 1545571741 | 1 | 182.100.67.15 | (null) | 0 | 0 | 1545571740.515882 | root |
| 10 | 1 | 5710 | 5 | 1545572031 | 1 | 24.192.159.138 | (null) | 0 | 0 | 1545572031.516188 | (null) |
+----+-----------+---------+-------+------------+-------------+----------------+--------+----------+----------+-------------------+--------+
10 rows in set (0.00 sec)
Case 2 查詢規則ID 1002
關聯的事件分類
mysql> SELECT rule_id, cat_name from category, signature_category_mapping WHERE rule_id = 1002 AND signature_category_mapping.cat_id = category.cat_id;
+---------+----------+
| rule_id | cat_name |
+---------+----------+
| 1002 | syslog |
| 1002 | errors |
+---------+----------+
2 rows in set (0.00 sec)
1.9 OSSEC-Server ELK日誌儲存
OSSEC產生的告警日誌,雖然可以儲存到MySQL等資料庫中,但日誌數量一旦線性增長,結構化資料庫就不滿足大量日誌儲存的需求了,這時就需要ELK技術棧出場了,主流的方式是使用filebeat實時讀取OSSEC輸出的json資料,通過logstash輸入到ElasticSearch,並通過Kibana查詢、聚合等資料處理操作
Step 1
OSSEC-Server上JSON資料配置輸出
<global>
<jsonout_output>yes</jsonout_output>
</global>
重啟OSSEC程序,生成 alerts.json
[[email protected] ~]# cd /var/ossec/logs/alerts
[[email protected] alerts]#ll
總用量 128
drwxr-x--- 3 ossec ossec 4096 12月 21 21:17 2018
-rw-r----- 2 ossec ossec 236 12月 25 16:10 alerts.json
-rw-r----- 2 ossec ossec 116628 12月 25 16:10 alerts.log
Step 2
OSSEC-Server上安裝filebeat
[[email protected] ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz
[[email protected] ~]# cp filebeat-6.5.4-linux-x86_64.tar.gz /opt
[[email protected] ~]# cd /opt
[[email protected] opt]# tar xf filebeat-6.5.4-linux-x86_64.tar.gz
[[email protected] opt]#mv filebeat-6.5.4-linux-x86_64 filebeat
[[email protected] opt]#cd filebeat
[[email protected] filebeat]# ls
data fields.yml filebeat filebeat.reference.yml filebeat.yml kibana LICENSE.txt module modules.d NOTICE.txt README.md
filebeat讀取 alerts.json
,傳送到logstash
[[email protected] filebeat]# vim filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/ossec/logs/alerts/alerts.json # 讀取告警json檔案
json.keys_under_root: true
json.overwrite_keys: true
fields:
log_type: osseclogs
output.logstash:
hosts: ["103.40.26.189:5044"] # 指定logstash伺服器
Step 3
OSSEC-ELK上配置logstash接收,並存入ES
[[email protected] logstash]# cat logstash_ossec.conf
input {
beats {
id => "ossec_test"
port => 5044
type => "ossec"
}
}
filter {
if([fields][log_type] == "osseclogs") {
mutate {
replace => {
"[type]" => "osseclogs"
}
}
}
}
output {
if([type] == "osseclogs") {
elasticsearch {
index => "ossec-%{+YYYY.MM.dd}"
}
}
}
Step 4 通過Kibana查詢OSSEC日誌
1.10 OSSEC 原始碼安裝解除安裝
OSSEC版本的升級或與OSSEC增強套件(Wazuh)之間的切換,需要進行手工解除安裝OSSEC操作
Step 1
停止OSSEC程序
# service ossec stop
Step 2
刪除初始化配置檔案
# rm -rf /etc/ossec-init.conf
Step 3
刪除安裝根目錄以及自啟動指令碼
# rm -rf /var/ossec && rm /etc/init.d/*ossec*
總結
通過上面的內容,我們瞭解了OSSEC部署結構、安裝方法、以及如何對安全日誌進行儲存(MySQL、ELK),由於在實際環境中,不可能一臺一臺的手動安裝Agent,在高階篇我們將介紹使用自動化工具實現批量安裝、更新、解除安裝agent,以適應各種生產環境。
下一篇,我們開始系統的介紹OSSEC配置檔案的每個功能點,對OSSEC的配置選項有個整體的瞭解。