1. 程式人生 > >ossec主要功能介紹

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>