ossec主要功能介紹
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>