開源EDR(OSSEC)基礎篇- 02 -部署環境與安裝方式

weixin_34127717發表於2018-12-28

前言

上一篇介紹了OSSEC設計的定位以及產品輸出的能力,在對OSSEC安全功能有個大體印象的前提下,我們接著開始實踐OSSEC的安裝和部署,本篇重點的重點是幫助初次接觸或者對OSSEC不熟悉的同學,無痛安裝,並能夠用最短的時間在所服務的企業內部真正的使用起來。

1. 環境準備

1.1 拓撲圖

1.2 部署清單

1.3 工作流

  1. OSSEC-Server 部署Server端程式
  2. OSSEC-LinuxAgent和OSSEC-WinAgent分別部署Agent端程式
  3. OSSEC-Server 防火牆開啟開啟UDP(1514),接收Agent上報資料
  4. OSSEC-Server 編譯支援MySQL日誌儲存
  5. OSSEC-Server 開啟日誌輸出JSON,安裝ELK元件filebeat
  6. OSSEC-ELK 配置logstash服務接收filebeat來源日誌,並存入ElasticSearch

備註:

OSSEC-ELK 預設已經安裝有logstash、elasticsearch、Kibana

文件使用的ELK stack元件版本:

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

執行配置安裝選項指令碼

root@instance-8hwjg2ar:~/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 地址? 249994395@qq.com

   - 我們找到您的 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日誌,預設啟用

備註

配置完安裝指令碼之後,按Enter鍵就開始進行編譯安裝,如果需要改變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

執行配置安裝選項指令碼

root@instance-8hwjg2ar:~/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

[root@agent ~]# 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生成通訊金鑰

[root@server ~]# /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

[root@agent ~]# /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)服務埠

[root@server ~]# firewall-cmd --add-port=1514/udp --permanent
success
[root@server ~]# firewall-cmd --reload
success

Server上檢查Agent是否可以通訊

[root@server ~]# /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並設定開機自啟動

[root@server ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@server ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
[root@server ~]# yum -y install mysql-server
[root@server ~]# systemctl start mysqld
[root@server ~]# systemctl enable mysqld

Step 2

MySQL初始化安全設定、更改root密碼

[root@server ~]# /usr/bin/mysql_secure_installation

Step 3

建立 ossec 資料庫、配置許可權使用者為 ossec ,密碼為 password

[root@server ~]# mysql -u root -p

mysql> create database ossec;
mysql> grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on ossec.* to ossec@localhost;
mysql> set password for ossec@localhost=PASSWORD('password');
mysql> flush privileges;

Step 4

匯入OSSEC資料庫表結構 schema 檔案儲存在原始碼目錄

ossec-hids-3.1.0/src/os_dbd/mysql.schema

[root@server ~]# cd /root/ossec-hids-3.1.0/src/os_dbd
[root@server 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

[root@server os_dbd]# mysql -u root -p ossec < mysql.schema

Step 5

編譯支援MySQL儲存,並啟用

[root@server ~]# cd /root/ossec-hids-3.1.0/src
[root@server src]# make TARGET=server DATABASE=mysql install
[root@server src]# make clean
[root@server src]# cd ..
[root@server ossec-hids-3.1.0]# DATABASE=mysql ./install.sh
[root@server 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程式

[root@server ~]# 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

[root@server ~]# cd /var/ossec/logs/alerts
[root@server 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

[root@server ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz
[root@server ~]# cp filebeat-6.5.4-linux-x86_64.tar.gz /opt
[root@server ~]# cd /opt
[root@server opt]# tar xf filebeat-6.5.4-linux-x86_64.tar.gz
[root@server opt]#mv filebeat-6.5.4-linux-x86_64 filebeat
[root@server opt]#cd filebeat
[root@server 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

[root@server 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

[root@ELK 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的配置選項有個整體的瞭解。

相關文章