Ossec 主要功能
OSSEC是一個開源的入侵檢測系統,它可以執行LOG分析,完整性檢測
,windows註冊表監控,rootkit檢測,實時報警及動態響影。
完整性檢測
Syscheck是OSSEC內部完整性檢測進程的名稱。它週期性檢查是否有任何配置文件(或者windows註冊表)發生改變。
在網絡中有許多類型的攻擊和攻擊載體,說起這些攻擊,有一種攻擊是很特別的,他們留下一個跟蹤程序,並總是想盡方法改變這個系統。它們用病毒修改一些文件,並破壞系統的完整性。
完整性檢查是入侵檢測系統的一個重要組成部分。當系統的完整性被改變時它能夠通過比較文件的MD5校驗各發現。
它的工作方法是:“代理每幾個小時掃描一次系統,併發送所有的校驗和到
server端。Server端存儲這些校驗和文件並查找他們的不同。如果發現任何改變將會發送報警。
- 多長時間運行一次
默認每6小時運行一次,但是這個頻率可以自己設定。 - 數據存放位置
在server端的/var/ossec/queue/syscheck - CPU使用情況
慢慢地進行掃描,以避免使用過多的CPU /內存。 - 如何處理誤報
文件能夠通過手工指定配置文件或使用規則到忽略不記,默認一個文件修改超過3次會自動忽略。
配置文件位於 /var/ossec/etc/ossec.conf。
使用這個選項增加或者移除被監控的目錄(目錄這間用逗號分開)所有的文件和子目錄也會被監控。沒有目錄的驅動器字母是無效的。至少“。”應包括(D:.)。
默認:/etc,/sur/bin,/usr/sbin,/bin,/sbin
Attributes: 屬性
- realtime: Value=yes (啓用實時、連續的監控)
- report_changes: Value=yes (文件改變比較報告,只能用文本文件)
- check_all: Value=yes(所有下面的check_*選項共同起作用)
- check_sum: Value=yes (通過檢查文件的md5哈希值和SHA1安全算法來檢查文件的完整性)
- check_sha1sum: Value=yes (通過SHA1安全算法檢查文件的完整性)
- check_md5sum: Value=yes (通過檢查文件的md5哈希值檢查文件的完整性)
- check_size: Value=yes (檢查文件大小)
- check_owner: Value=yes (文件所有者檢查)
- check_group: Value=yes (文件和目錄所屬的用戶組檢查)
- check_perm: Value=yes (文件和目錄權限檢查)
- restrict: Value=string (文件內容中包含文件名的字符串將限制檢查。)
- ignore (列出的文件和目錄將不被檢查)
- frequency (syscheck多長時間執行一次,默認是21600秒,也就是6個小時)
- scan_time (掃描系統的時間格式)
- scan_day (在每週的那一天執行掃描)
- auto_ignore (指定忽略頻繁改變的文件)
- alert_new_files (指定新文件被創建時是否報警)
- scan_on_start (syscheck啓動後是否立即做第一次掃描。)
- windows_registry (註冊表監控)
- registry_ignore (不監控列出的註冊表條目)
例子
提供一個要被監控的目錄和文件列表,check_all 選項會檢查文件的md5, sha1,owner,和權限。例如:
<syscheck>
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/root/users.txt,/bsd,/root/db.html</directories>
</syscheck>
如果不想監控某些文件和目錄,可以用ignore選項(或者 registry_ignore 爲windows註冊表輸入)
<syscheck>
<ignore>/etc/random-seed</ignore>
<ignore>/root/dir</ignore>
<ignore type="sregex">.log$|.tmp</ignore>
</syscheck>
在ignore選項,這個類型屬性可以設置sregex指定一個正則表達式語法。
<syscheck>
<ignore type="sregex">^/opt/application/log</ignore>
</syscheck>
一個本地規則可以更嚴格的修改你想要更改的指定文件和目錄。
<rule id="100345" level="12">
<if_matched_group>syscheck</if_matched_group>
<match>/var/www/htdocs</match>
<description>Changes to /var/www/htdocs - Critical file!</description>
</rule>
在上邊的例子中,當htdocs directory目錄中的文件有改變時將會產生一個高嚴重級別的報警。
實時監控:
在linux 和windows中OSSEC支持實時監控文件完整性檢查(linux內核2.6.13以上板本支持)
配置很簡單,在directories選項那裏你可以指定要監控那些文件和目錄,增加realtime=”yes”到啓用。
<syscheck>
<directories realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/bin,/sbin</directories>
</syscheck>
在這個例子中,目錄/etc, /usr/bin and /usr/sbin會被實時監控,同樣的方法也實用與windows。
提示:實時監控並不會立即開始。首先ossec-syscheckd需要掃描文件系統並添加每一個了目錄到實時隊列。要完成這些工作需要30分鐘時間。
等待log文件出現如下信息:
“ossec-syscheckd: INFO: Starting real time file monitoring”
註解:實時監控僅對目錄有效,所以你可以監控 /etc 或者c:\program files 目錄,但不能是個別的文件,像/etc/file.txt。
比較不同並生成報告:
在linux 和unix系統比較所後的改變生成一個文本文件,OSSEC支持發送比較報告,
配置syscheck顯示文件比較的不同很簡單,添加report_changes=”yse”到directories選項。
<syscheck>
<directories report_changes="yes" check_all="yes">/etc</directories>
<directories check_all="yes">/bin,/sbin</directories>
</syscheck>
怎樣使syscheck立即開始掃描系統?
運行代理控制工具使其立即開始完整性掃描(-a 選項使所有代理開始運行,-u選項可以指定某個代理ID。
# /var/ossec/bin/agent_control -r -a
# /var/ossec/bin/agent_control -r -u <agent_id>
代理控制參數選項:
-h 顯示幫助消息
-l 列出所有可能的代理
-lc 列出活動的代理
-i <agent_id> 獲取代理的相關信息 agent_id
-r 運行代理中的integrity/rootcheck檢查,要和-u或-a 一起使用。
-a 對所有代理起做用
-u <agent_id> <agent_id>預先指定代理ID號
當啓動ossec時,告訴syscheck不要對系統進行掃描:
在ossec.conf中指定 選項爲“no”。
怎麼從syscheck中排除一個頻繁更改的文件?
在選項設定要排除的目錄文件,或者創建一個簡單的本地規則。
下面的這個例子將從mswin1和ubuntu-dns代理中排除etc/a , /etc/b 和一個目錄 /etc/dir。
<rule id="100345" level="0" >
<if_group>syscheck</if_group>
<description>Changes ignored.</description>
<match>/etc/a|/etc/b|/etc/dir</match>
<hostname>mswin1|ubuntu-dns</hostname>
</rule>
在檢測到數據據改變後怎麼獲取詳細的報告?
Syscheck_control工具
Syscheck_control提供了一個管理和查看數據庫的接口。
Syscheck_control參數選項
-h 顯示幫助消息
-l 列出可用的代理
-lc 列出當前活動的代理
-u <agent_id> 更新(清除)指定代理的數據庫,
-u all 更新(清除)所有代理的數據庫,
-i <agent_id> 列出指定代理的數據庫
-r –i 列出windows代理 中註冊表改變的數據
-f <file> 用 –i 參數, 列印一個關與修改文件的信息。
-z
-d 用 –f 參數,忽略該文件
-s 輸出到CVS
Rootcheck
OSSEC HIDS會在每個安裝了代理的系統運行rootkit檢測。Rootkit發現引擎每過120分鐘會去探測任何可能已經安裝的rootkit.. 和log分析及安全性檢測一起使用,OSSEC HIDS將是一個強有力的監控解決方案。
讀這個rootkit_files.txt文件,其中包含了常被它們使的用文件和rootkits的基本數據。它將統計每一個指定的文件。我們使用所有這些系統調用中,有一些kernel_level級別的rootkits從系統調用隱藏了一些文件。我們償試更多的系統調用到更好的發現。這種方法更像需要不斷更新的返病毒規則。誤報的機會是非常的小,但是可以通過修改rootkits生成假的否定。
讀這個rootkit_trojans.tst文件,內含了一個用特洛伊文件簽名的基本數據。這種用特洛伊板本
修改二進制的技術過去常常被流行的tootkits使用。
掃描/dev目錄查找異常。這個目錄應該只有設備文件和makedev 腳本。很多rootkits使用這個目錄隱藏文件,這和技術能發現非公有的rootkits。
掃描整個系統文件查找不正常的文件和權限問題。Root用戶擁有文件的寫權限,給其它人是非常危險的。Rootkit發現會查找它們,隱藏的文件和目錄出會被檢查。
查找存在的隱藏進程,我們使用獲取SID並殺死SID檢查,是否有任何PID被使用。如果PID被使用,但PS不能看到它,說明它是kernel-level級別的rootkit或者是特洛伊板本的PS.我們也會驗證獲取的SID和kill輸出的是否相同。
查找隱藏的端口。我們使用綁定端口的方式檢查在系統中的每一個TCP、UDP端口。如果我們不能綁定這個端口,但是netstat不能顯示它,很可能系統中裝了roottkit。
掃描在系統中的所有接口,找出啓用雜亂模式的接口,如果IFCONFIG輸出不能顯示它, 很可能系統中裝了roottkit。
配置選項
這些配置選項可以在每個代理的ossec.conf文件中指定。除去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_files.txt
Rootkit_trojans (這個選項可以更改tootkit trojans數據庫文件的位置。)
Allowed: 帶有TROJANS簽名的一個文件
Default:/etc/shared/rootkit_trojans.txt
scanall (告訴 rootcheck 掃描整個系統 (可能會誤報)。)
Default: no
Allowed: yes/no
frequency (多長時間運行一次)
Defaults: 36000 (10 hours)
Allowed: Time (in seconds)
disabled (禁用rootcheck執行)
Default: no
Allowed: yes/no
日誌監控、分析
在OSSEC內部有log收集和log分析進程,日誌分析過程中,首先要收集log,然後對日誌進行分析(解碼,過慮,分類)。
一有事件寫入OSSEC立即會處理它們。OSSEC能讀內部日誌文件,windows日誌事件,和直接通過遠程系統接收的日誌。
程序監控
系統LOG是個好東西,在OSSEC中,我們把需要監控的目標當成一個日誌來看,並用適當的規則分析它。然而,有一些信息在日誌文件中沒有,但是我們還是想監控它。要解決這個缺陷,我們需要在OSSEC中增加監控命令輸出的功能,並且處理這些命令輸出的。 它們像log文件一樣。
配置實例:
監控磁盤空間利用率的一個例子
如果想要監控磁盤空間利用率,你需要設置一個crom任務,使命令df –h 的輸出保存到一個log文件(/var/log/df.log)並且配置OSSEC查看它。
至OSSEC 2.3版本起,你可以在OSSEC中直接監控命令。配置如下:
<localfile>
<log_format>command</log_format>
<command>df -h</command>
</localfile>
在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)."
Src IP: (none)
User: (none)
ossec: output: "df -h": /dev/sdb1 24G 12G 11G 100% /var/backup
C中我們已經有了一個規則樣本(爲處理df –h 輸出),當任何分區達到100%你將能看到下面的輸出。
監控平均負載的一個例子。
如果你想要監控系統的平均負載,你可以配置OSSEC監控“update”命令,並當值高於2時報警。
<localfile>
<log_format>command</log_format>
<command>uptime</command>
</localfile>
增加一個規則
<rule id="100101" level="7" ignore="7200">
<if_sid>530</if_sid>
<match>ossec: output: "uptime": </match>
<regex>load averages: 2.</regex>
<description>Load average reached 2..</description>
</rule>
當一個命令的輸出改變時報警
如果你想要在一個命令的輸出發生改變時報警,在OSSEC規則中查看(check_diff)選項。 用一個例子來說明:當我們的server在監聽模式有一個新的端口被打開,創建一個規則使其報警。
首先,在ossec.conf文件中,我們配置OSSEC運行netstat -tan |grep LISTEN命令。
<localfile>
<log_format>full_command</log_format>
<command>netstat -tan |grep LISTEN|grep -v 127.0.0.1</command>
</localfile>
而後,增加一個規則,當輸出改變的時候報警。
<rule id="140123" level="7">
<if_sid>530</if_sid>
<match>ossec: output: 'netstat -tan |grep LISTEN</match>
<check_diff />
<description>Listened ports have changed.</description>
</rule>
注意我們使用的check_diff選項,第一次收到信息將存儲在內部數據庫。每次收到相同的數據,都和先前存儲的數據進行比較,如果輸出改變生成報警信息。
在這個例子中,我們用netcat工具連接23456端口,我們能得到如下報警信息。
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/ossec.conf。 配置實例
配置要監視的日誌文件很簡單。只要提供要監視的文件的名稱和格式:
配置要監控的日誌文件很簡單。僅需要提供要監控的文件的名稱和格式:
<localfile>
<location>/var/log/messages</location>
<log_format>syslog</log_format>
</localfile>
監控windows 事件日誌的例子
要監控Windows事件日誌,您需要提供的格式爲“eventlog”並且位置是事件日誌的名稱。示例:
<localfile>
<location>Security</location>
<log_format>eventlog</log_format>
</localfile>
監控多個文件的例子
要檢查多個文件,OSSEC支持POSIX正則表達式。
例如,要分析/var/ log目錄下以a.log結尾的文件,使用以下配置:
<localfile>
<location>/var/log/*.log</location>
<log_format>syslog</log_format>
</localfile>
監控以日期命名的日誌文件
對於日誌文件,根據日期改變,你也可以指定strftime的格式,以取代日,月,年等。例如監控日誌C:\ WINDOWS\ APP\ LOG-08-12 -15日誌,其中08是年,12是月份,15是天(並且日期每天更新)
<localfile>
<location>C:\Windows\app\log-%y-%m-%d.log</location>
<log_format>syslog</log_format>
</localfile>
ossec主要功能暫且介紹這麼多,更多請參照:http://www.ossec.net/doc/