随着國家對網絡安全的重視,國内各個企業也開始在安全方面增加投入,我們公司也不例外。作為防守方,實時了解主機狀态(主機檔案是否被修改?是否有被入侵?等等)以及實時擷取告警資訊,是很重要的。及時反制入侵行為、及時修複系統,将入侵扼殺在搖籃階段。于是引入了HIDS(主機入侵檢測系統),網上關于HIDS的文章比較少、内容也不盡完善,下面是我自己在搭建HIDS時的記錄。
常用的主機入侵檢測系統
AIDE(Advanced Intrusion Detection Environment):進階入侵檢測環境,CIS
OSSEC:開源的、跨平台的主機入侵檢測系統,官網:https://www.ossec.net/
等等
OSSEC
功能
1、檔案完整性檢查即檔案篡改檢查(syscheck)
2、日志監控
3、rootkit檢測
4、主動響應:主動反制,比對到規則後主動采取措施,如:檢測到sshd日志存在多次失敗登入後,将登入的源位址加入黑名單。
5、告警:通過配置實作郵件等方式的告警
安裝
1、local:本地安裝,隻在一台裝置安裝,檢測本台裝置
2、server-agent:服務+代理模式安裝
server安裝在一台裝置,agent安裝在其他裝置,agent收集各個裝置的資訊,然後發送給server,server統一進行分析、告警、主動響應、統一管理各個agent。
# 在server和agent上安裝依賴 及 yum 遠端庫
yum install zlib-devel pcre2-devel make gcc zlib-devel pcre2-devel sqlite-devel openssl-devel libevent-devel
yum install mysql-devel
wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
# Server
sudo yum install ossec-hids-server
# Agent
sudo yum install ossec-hids-agent
3、agentless:無代理
和server-agent的方式類似,但是隻有server沒有agent即不需要在裝置上安裝agent,server通過ssh去進行監控和掃描各個裝置。
本次實踐,使用server-agent方式
元件
1、server
# 各個程序
ossec-maild # 郵件告警
ossec-execd # 應該是執行主動響應及各種自定義的指令(猜的)
ossec-analysisd # 日志分析服務
ossec-logcollector # 日志收集
ossec-remoted # server和agent通信
ossec-syscheckd # 完整性檢測包括rootkit
ossec-monitord # agent監控
2、agent
# 各個程序
ossec-logcollector # 日志收集器
ossec-syscheckd # 完整性檢測包括rootkit
ossec-agentd # agent用戶端
ossec-execd # 應該是執行主動響應及各種自定義的指令(猜的)
詳解
配置
首先說一下配置,在使用過程中,可能發現配置檔案好多,裡面内容也很類似。
日志監控/分析
日志監控/分析由OSSEC中 logcollector和analysisd程序來完成的。首先,日志收集器手機日志,然後分析程序分析(解碼、過濾、分離)事件。日志監控和分析時實時進行的。
重點:
1、實時監控
2、在server上進行日志分析
3、存儲時間由使用者配置
配置
在每個代理的ossec.conf或共享的agent.conf中配置。
如:
<localfile>
<log_format>syslog</log_format>
<location>/var/log/messages</location>
</localfile>
# 在<localfile>元素内部,可以使用下面的選項
<location> #指定讀取的日志位置,strftime格式可用于日志檔案名。例如,file.log-2011-01-22可以使用引用名為的日志檔案file.log-%Y-%m-%d。通配符可以在非Windows系統上使用。使用通配符時,日志檔案在ossec-logcollector啟動時必須存在。它不會自動開始監視新的日志檔案。strftime和通配符不能用于同一條目。
<log_format> #日志格式,預設是syslog。可選:snort-full、eventlog、mysql_log、apache、command等
日志監控之rules配置
rules 比對順序:先比對0級的,如果0級 沒有比對到,将所有規則按照level 降序的順序排列(level相同的,按照rules 加載順序排列),開始從最進階往下比對,知道比對到。
如果我們需要在已比對到的規則的基礎上,繼續比對,則可以用:<if_sid><if_sid>
日志檢測規則,測試程式:/var/ossec/bin/ossec-logtest
先輸入要進行測試的日志内容
phase 1 、2 是解碼器解碼(将日志進行解釋、進行處理)階段,3是比對rules階段
syscheck-完整性檢測
syscheck是OSSEC中完整性檢查過程的名字。屬于OSSEC的一部分。syscheck定期運作,來檢查是否有檔案被修改。
syscheck通過關鍵檔案的 MD5/SHA1 校驗值是否改變來判斷是否完整。
agent每幾個小時(使用者自己配置)掃描一次系統并且将校驗值發送給server。server存儲校驗值并且對比校驗值,如果校驗值發生改變則發出告警。
資料存儲位置:/var/ossec/queue/syscheck
ossec-syscheckd 提供了幾乎實時地檢查檔案完整性。linux 上需要安裝 inotify-tools
配置
所有的配置都可以在agent的etc/ossec.conf中進行配置,除了auto_ignore和alert_new_file,它們适用于管理器和本地安裝。ignore如果在管理器上指定,則适用于所有的agent。
<directories></directories> 監控目錄,目錄中的檔案和子目錄也将監控
# 預設
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
# 屬性
realtime=yes #這樣啟用在Linux(使用inotify系統調用)和windows上的實時/連續監控,實時監測隻适用于目錄
report_changes=yes # 報告檔案更改的差異,僅限于文本檔案,隻适用于類unix系統
check_all=yes #除了顯式指明為no的屬性,其他 check_* 的屬性都是yes
check_sum=yes #檢查檔案的md5 和 sha1 哈希值 等價于 check_sha1sum ="yes"和check_md5sum ="yes"
check_sha1sum=yes #僅檢查sha1哈希值
check_md5sum=yes #僅檢查md5哈希值
check_size=yes #檢查檔案的大小
check_owner=yes #檢查檔案所有者
check_group=yes #檢查檔案所屬組
check_perm=yes #檢查檔案或目錄的權限
restrict=string #限制檢查檔案或目錄名包含該字元串的檔案
no_recurse=no #不要遞歸到定義的目錄
server和agent通信
預設server和agent之間以安全模式在端口 1514/udp上進行。還可以使用系統自帶的syslog服務(514/udp)進行通信。
通信由 ossec-remoted實作
通信配置:
vim etc/ossec.conf
<ossec_config>
<remote>
<conection>secure</connection> # 指定連接配接類型:secure:1514端口通信,syslog:514端口通信
<allowed-ips>10.251.1.0/24</allowed-ips> # 設定允許連接配接server的ip。其他配置參考:https://www.ossec.net/docs/docs/syntax/head_ossec_config.remote.html
</remote>
</ossec_config>
集中管理agent配置
在server建立agent配置
vim etc/shared/agent.conf
server緩存了共享的agent.conf每幾個小時會重新讀取。是以修改了共享檔案後,如果要立即生效,則需要重新開機server
如果agent同步了server共享的agent.conf,則會在Client version 字段中 表明配置檔案的md5值
給特定agent進行特殊配置
<agent_config name="agent1">
<localfile>
<location>/var/log/my.log</location>
<log_format>syslog</log_format>
</localfile>
</agent_config>
# 可以通過指明agent name的方法對agent1進行獨特的配置,此配置隻在agent1 生效,當然還有其他辦法,可以檢視官方文檔
告警配置
郵箱告警
預設情況下,ossec的郵箱配置是關閉的。郵件告警由 ossec-maild 這個程序實作的,隻有配置了郵件告警,啟動ossec-server時才會啟動這個程序
vim etc/ossec.conf
郵件告警隻需要在server端進行設定即可。
由于ossec-server設定郵件告警的smtp伺服器時,沒有提供設定使用者名和密碼的地方,是以使用的smtp必須是不需要認證的smtp伺服器,一般直接使用centos自帶的postfix即可
<ossec_config>
<global>
<email_notification>yes</email_notification> # 開啟郵件告警
<smtp_server>localhost</smtp_server> # 設定smtp伺服器,由于ossec未提供使用者名和密碼配置,是以隻能使用沒有認證的smtp,是以隻能用自定義的smtp,一般使用主機自帶的
<email_to>[email protected]</email_to> # 設定收件人
<email_from>[email protected]</email_from> #設定發件郵箱,沒有實質用處,隻是在收件人郵箱中展示發件人資訊
</global>
<alerts>
<log_alert_level>1</log_alert_level> # 設定往alert.log 中記錄的告警最低等級
<email_alert_level>1</email_alert_level> #設定郵件告警的最低告警級别
</alerts>
上面設定了将告警郵件發送到[email protected] 這個本機的郵箱,如果我們想發送到外網郵箱:
vim /etc/aliases
ossecm: [email protected] # 設定smtp 将發送到ossecm的郵件,轉發到 [email protected] 需要重新開機smtp即postfix
當然還有其他很多告警方式,如:将告警資料存到資料庫,為自定義的告警程式提供資料
将告警資料存到資料庫
#安裝依賴
yum install -y mysql-devel
#啟用資料庫
bin/ossec-control enable database