1. 程式人生 > 實用技巧 >wazhu之agent功能詳解

wazhu之agent功能詳解

一、日誌資料收集

日誌資料收集是從伺服器或裝置生成的記錄中收集的實時過程。此元件可以通過文字檔案或Windows事件日誌接收日誌。它還可以通過遠端syslog直接接收日誌,這對防火牆和其他此類裝置非常有用。

此過程的目的是識別應用程式或系統程式錯誤,配置錯誤,入侵威脅,觸發策略或安全問題。

Wazuh aegnt 的記憶體和CPU要求是,因為它的非常低的,主要作用是將事件轉發給管理器。但是,在Wazuh管理器上,CPU和記憶體消耗可能會迅速增加,具體取決於管理器每秒事件數分析數量(EPS)。

1.處理流程

下圖說明了事件的處理流程:

2.日誌收集

2.1 日誌檔案

可以將日誌分析引擎配置為監控伺服器上的特定檔案

示例配置:

Linux:

<localfile>
    <location>/var/log/example.log</location>
    <log_format>syslog</log_format>
</localfile>

windows:

<localfile>
    <location>C:\myapp\example.log</location>
    <log_format>syslog</log_format>
</localfile>

2.2Windows事件日誌

Wazuh可以監控典型的Windows事件日誌以及較新的Windows事件通道

示例配置:

事件日誌:

<localfile>
  <location>Security</location>
  <log_format>eventlog</log_format>
</localfile>

事件通道:

<localfile>
  <location>Microsoft-Windows-PrintService/Operational</location>
  <log_format>eventchannel</log_format>
</localfile>

2.3 遠端系統日誌

例如,在其他裝置(如防火牆)上,可以將代理日誌分析元件配置為通過syslog接收日誌事件。

示例配置:

<ossec_config>
  <remote>
    <connection>syslog</connection>
    <allowed-ips>192.168.2.0/24</allowed-ips>
  </remote>
<ossec_config>

<connection>syslog</connection>表示管理器將接受來自網路的傳入的系統日誌資訊,<allowed-ips>192.168.2.0/24</allowed-ips>表示定義將接受系統日誌資訊的網路範圍。

記錄示例:

2016-03-15T15:22:10.078830+01:00 tron su:pam_unix(su-l:auth):authentication failure;logname=tm uid=500 euid=0 tty=pts/0 ruser=tm rhost= user=root
1265939281.764 1 172.16.167.228 TCP_DENIED /403 734 POST http://lbcore1.metacafe.com/test/SystemInfoManager.php - NONE/- text/html
[Sun Mar 06 08:52:16 2016] [error] [client 187.172.181.57] Invalid URI in request GET: index.php HTTP/1.0

3.分析

3.1 預解碼

在分析的預解碼階段,來自大多數靜態資訊的欄位都是從日誌中提取的。

Feb1412:19:04localhostsshd[25474]:Acceptedpasswordforrromerofrom192.168.1.133port49765ssh2
提取的資訊:
  • 主機名:'localhost'
  • 應用名:'sshd'

3.2 解碼

在解碼階段,評估日誌資訊以識別它是什麼型別的日誌,然後提取該特定日誌型別的已知欄位。

示例日誌及其提取的資訊:

Feb 14 12:19:04 localhost sshd[25474]: Accepted password for rromero from 192.168.1.133 port 49765 ssh2
提取的資訊:
  • 應用名:sshd
  • 關鍵字:rromero
  • 源IP:192.168.1.133

3.3 規則匹配

在下一階段,將提取的日誌資訊與規則集進行比較以查詢匹配項:

對於前面的示例,規則5715匹配:

<rule id="5715" level="3">
  <if_sid>5700</if_sid>
  <match>^Accepted|authenticated.$</match>
  <description>sshd: authentication success.</description>
  <group>authentication_success,pci_dss_10.2.5,</group>
</rule>

注意:有關更多資訊,請參閱Wazuh規則集

3.4 告警

匹配規則後,管理器將建立如下告警:

** Alert 1487103546.21448: - syslog,sshd,authentication_success,pci_dss_10.2.5,
2017 Feb 14 12:19:06 localhost->/var/log/secure
Rule: 5715 (level 3) -> 'sshd: authentication success.'
Src IP: 192.168.1.133
User: rromero
Feb 14 12:19:04 localhost sshd[25474]: Accepted password for rromero from 192.168.1.133 port 49765 ssh2

預設情況下,將在重要或安全相關的事件上生成告警。要儲存所有事件,即使它們與規則不匹配,請啟用該<log_all>選項。

告警將儲存在/var/ossec/logs/alerts/alerts.(json|log)和事件儲存在/var/ossec/logs/archives/archives.(json|log)。系統會自動為每個月和每年建立單個目錄。

注意:預設情況下,不會自動刪除儲存日誌。您可以根據自己的當地法律和法規要求選擇何時手動或自動(例如cron計劃任務自動刪除)刪除日誌。

4.配置

4.1基本用法

日誌資料收集主要對ossec.conf檔案中的localfileremoteglobal進行配置。還可以在agent.conf檔案中完成日誌資料收集的配置,以將這些設定的集中分發到相關代理上。

與此基本用法示例一樣,需要提供要監控的檔名稱和格式:

<localfile>
    <location>/var/log/messages</location>
    <log_format>syslog</log_format>
</localfile>

4.2 使用檔名的正則表示式監控日誌

Wazuh支援posix正則表示式。例如,要分析以/var/log目錄中的.log結尾的每個檔案,請使用以下配置:

<localfile>
    <location>/var/log/*.log</location>
    <log_format>syslog</log_format>
</localfile>

4.3 基於日期的日誌監控

對於根據日期更改的日誌檔案,您還可以指定strftime格式來自定義日,月,年等。例如,要監控日誌檔案,例如C:\Windows\app\log-08-12-15.log,其中08是年份,12是月份,15是當月天數(並且每天自動增加),配置如下:

<localfile>
    <location>C:\Windows\app\log-%y-%m-%d.log</location>
    <log_format>syslog</log_format>
</localfile>

4.4 從Windows事件日誌中讀取日誌

要監控Windows事件日誌,您需要提供格式為“eventlog”,並將location引數作為事件日誌的名稱

<localfile>
    <location>Security</location>
    <log_format>eventlog</log_format>
</localfile>

4.5 從Windows事件通道中讀取事件

您還可以監控特定的Windows事件通道。該location是事件通道的名稱。這是監控應用程式和服務日誌的唯一方法。如果檔名包含“%”,請將其替換為“/”:

<localfile>
    <location>Microsoft-Windows-PrintService/Operational</location>
    <log_format>eventchannel</log_format>
</localfile>

通過event channel新的事件資料處理,Wazuh v3.8.0增強了日誌格式,保留了舊的功能和配置。它允許監控任何Windows代理生成的每個事件,以JSON格式顯示每個通道的資訊。作為舊的event channel,使用此log_format可以查詢通道,按事件ID,程序,登入型別或生成的事件中包含的任何其他欄位進行過濾,從而可以檢索所需的事件。

這個新功能使用JSON解碼器處理事件欄位,確保比以前更容易新增新方法的規則。Wazuh規則集中包含的預設通道是應用程式,安全性,系統,Microsoft-Windows-Sysmon / Operational,Microsoft反惡意軟體(Microsoft Security Essentials),Microsoft-Windows-Windows Defender / Operational和Microsoft-Windows-Eventlog。

Windows事件通道中的一些示例事件顯示如下:

下圖顯示了每個頻道的事件數,按時間進行過濾agent:

4.6 使用查詢過濾Windows事件通道中的事件

Windows事件通道中的事件可以按如下方式過濾:

<localfile>
  <location>System</location>
  <log_format>eventchannel</log_format>
  <query>Event/System[EventID=7040]</query>
</localfile>

4.7 使用環境變數

像環境變數一樣%WinDir%可以在location中使用。以下是從IIS伺服器讀取日誌的示例:

<localfile>
    <location>%WinDir%\System32\LogFiles\W3SVC3\ex%y%m%d.log</location>
    <log_format>iis</log_format>
</localfile>

4.8 使用多個輸出

預設情況下,日誌資料通過agent socket傳送,但也可以將其他agent socket指定為輸出。ossec-logcollector使用UNIX型別socket 進行通訊,允許TCP或UDP協議。要新增新的outputsocket,我們需要使用<socket>標記來指定,如下示例配置:

<socket>
    <name>custom_socket</name>
    <location>/var/run/custom.sock</location>
    <mode>tcp</mode>
    <prefix>custom_syslog: </prefix>
</socket>

<socket>
    <name>test_socket</name>
    <location>/var/run/test.sock</location>
</socket>

注意:有關定義socket的更多資訊::socket

定義socket後,可以為每個location新增目標socket:

<localfile>
    <log_format>syslog</log_format>
    <location>/var/log/messages</location>
    <target>agent,test_socket</target>
</localfile>

<localfile>
    <log_format>syslog</log_format>
    <location>/var/log/messages</location>
    <target>custom_socket,test_socket</target>
</localfile>

注意:要將輸出保持為預設socket,我們需要使用“agent”作為目標來指定它。否則,輸出將僅重定向到指定的目標。

5.常規問題

5.1 是否有必要在每個代理上分析日誌?

不,管理器從所有代理獲取日誌,然後分析資訊。

管理器多久監控一次日誌?

管理器實時監控日誌。

日誌儲存在伺服器上多長時間?

預設情況下,不會自動刪除儲存日誌。但是,您可以根據當地的法律和法規要求選擇何時手動或自動(例如cron計劃任務自動刪除)刪除日誌。

這如何幫助進行合規性?

日誌分析符合標準:PCI DSS合規性,HIPAA合規性,FISMA合規性和SOX合規性。

代理上的CPU使用率是多少?

Wazuh代理的記憶體和CPU要求是非常低的,因為它的主要職責是將事件轉發給管理器。但是,在Wazuh管理器上,CPU和記憶體消耗可能會迅速增加,具體取決於管理器每秒出來實際的數量(EPS)。

Wazuh從哪裡可以獲得日誌資訊?

Wazuh可以從文字日誌檔案,Windows事件日誌和事件通道以及遠端syslog中讀取日誌訊息。日誌實時監控。

可以向Wazuh傳送防火牆,VPN,身份驗證日誌嗎?

可以。Wazuh能夠從使用syslog協議傳送日誌的裝置接收和處理日誌。您可以為特定裝置的日誌建立自定義解碼器和規則。

Wazuh可以從日誌中提取哪些資訊?

這取決於您的需求。一旦瞭解了應用程式日誌的格式和典型事件,就可以為它們建立解碼器和規則。

我可以忽略那些不重要的事件?

您可以配置規則以忽略您認為不重要的某些事件。有關更多資訊,請參閱:自定義規則

二、檔案完整性監控

Wazuh的檔案完整性監控(FIM)系統所選檔案,在修改這些檔案時觸發告警。負責此任務的元件稱為syscheck。此元件儲存加密校驗以及已知正常檔案或Windows登錄檔項的修改監控,並定期將其與系統使用的當前檔案進行比較,以檢視更改。

1.處理流程

  1. Wazuh代理掃描系統並將對監視檔案和Windows登錄檔項的校驗和以及屬性發送給Wazuh管理器。以下選項是可配置的:
  • 頻率:預設情況下,syscheck每12小時執行一次。
  • 實時監控:Wazuh支援在執行Windows或Linux的伺服器上進行實時檔案完整性監控(Solaris不支援Inotify,因此不適用於此系統)。請注意,實時選項只能用於目錄而不能用於單個檔案。
  • Whodata:此功能與實時功能類似,另外還提供有關誰觸發事件的資訊。
2.Wazuh管理器儲存受監視檔案的校驗和以及屬性,並通過將新值與舊值進行比較來查詢修改。 3.只要在受監視的檔案或登錄檔項中檢測到修改,就會生成告警。可以使用ignore配置選項或通過建立列出要從FIM告警中排除的檔案的規則來解決誤報。 由FIM生成告警示例:
** Alert 1540815355.847397: - ossec,syscheck,pci_dss_11.5,gpg13_4.11,gdpr_II_5.1.f,
2018 Oct 29 13:15:55 (ubuntu) 10.0.0.144->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
File '/test/hello' checksum changed.
Old md5sum was: '2a4732b1de5db823e94d662d207b8fb2'
New md5sum is : '146c07ef2479cedcd54c7c2af5cf3a80'
Old sha1sum was: 'b89f4786dcf00fb1c4ddc6ad282ca0feb3e18e1b'
New sha1sum is : 'e1efc99729beb17560e02d1f5c15a42a985fe42c'
Old sha256sum was: 'a8a3ea3ddbea6b521e4c0e8f2cca8405e75c042b2a7ed848baaa03e867355bc2'
New sha256sum is : 'a7998f247bd965694ff227fa325c81169a07471a8b6808d3e002a486c4e65975'
Old modification time was: 'Mon Oct 29 13:15:19 2018', now it is 'Mon Oct 29 13:15:54 2018'
(Audit) User: 'root (0)'
(Audit) Login user: 'test (1000)'
(Audit) Effective user: 'root (0)'
(Audit) Group: 'root (0)'
(Audit) Process id: '26089'
(Audit) Process name: '/bin/nano'

Attributes:
- Size: 4
- Permissions: 100644
- Date: Mon Oct 29 13:15:54 2018
- Inode: 537259
- User: root (0)
- Group: root (0)
- MD5: 146c07ef2479cedcd54c7c2af5cf3a80
- SHA1: e1efc99729beb17560e02d1f5c15a42a985fe42c
- SHA256: a7998f247bd965694ff227fa325c81169a07471a8b6808d3e002a486c4e65975

2.配置

2.1 基本用法

Syscheckossec.conf檔案中配置。通常,此配置使用以下部分設定:

有關詳細的配置選項,請轉至Syscheck

要配置syscheck,必須標識指定檔案和目錄列表。該check_all選項檢查檔案大小,許可權,所有者,上次修改日期,inode和所有雜湊值(MD5,SHA1和SHA256)。

注意:如果目錄路徑相同,則從集中配置推送的目錄將覆蓋ossec.conf檔案。

<syscheck>
  <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
  <directories check_all="yes">/root/users.txt,/bsd,/root/db.html</directories>
</syscheck>

2.2 配置預定掃描

Syscheck可以選擇配置frequency系統掃描。在此示例中,syscheck配置為每10小時執行一次。

<syscheck>
  <frequency>36000</frequency>
  <directories>/etc,/usr/bin,/usr/sbin</directories>
  <directories>/bin,/sbin</directories>
</syscheck>

2.3 配置實時監控

使用realtime選項配置實時監控。此選項僅適用於目錄而不適用於單個檔案。在定期syscheck掃描期間暫停實時更改檢測,並在這些掃描完成後立即重新啟用。

<syscheck>
  <directories check_all="yes" realtime="yes">c:/tmp</directories>
</syscheck>

2.4 配置who-data監控

版本3.4.0中的新功能。

使用whodata選項配置who-data監控。此選項代替了realtime選項,這意味著whodata進行實時監控,但添加了who-data資訊。此功能使用Linux Audit子系統和Microsoft Windows SACL,因此可能需要其他配置。檢查稽核who-data以獲取更多資訊。

<syscheck>
  <directories check_all="yes" whodata="yes">/etc</directories>
</syscheck>

2.5 配置報告更改

使用report_changes選項,我們可以看到文字檔案中的具體更改。 請注意您設定為report_changes的資料夾,因為為了執行此操作,Wazuh會將您要監視的每個檔案複製到私有位置。

<syscheck>
  <directories check_all="yes" realtime="yes" report_changes="yes">/test</directories>
</syscheck>

2.6 配置忽略檔案

使用ignore選項(Windows登錄檔項的registry_ignore)可以忽略檔案和目錄。為了避免誤報,可以將syscheck配置為忽略某些不需要監視的檔案。

<syscheck>
  <ignore>/etc/random-seed</ignore>
  <ignore>/root/dir</ignore>
  <ignore type="sregex">.log$|.tmp</ignore>
</syscheck>

2.7 配置允許最大等級級別

版本3.6.0中的新功能。

通過設定recursion_level選項,可以配置特定目錄允許的最大等級級別。此選項必須是0到320之間的整數。使用示例:

<syscheck>
  <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
  <directories check_all="yes">/root/users.txt,/bsd,/root/db.html</directories>
  <directories check_all="yes" recursion_level="3">folder_test</directories>
</syscheck>

使用以下目錄結構和recursion_level="3"

folder_test├──file_0.txt└──level_1├──file_1.txt└──level_2├──file_2.txt└──level_3├──file_3.txt└──level_4├──file_4.txt└──level_5└──file_5.txt

我們將收到所有檔案的告警(folder_test/level_1/level_2/level_3/),但我們不會從其他目錄中收到level_3警報

如果我們不想要任何遞等級(只是從受監視資料夾中的檔案獲取警報),我們必須設定recursion_level為0。

注意:如果recursion_level未指定,則它會被設定為自定義的預設值,syscheck.default_max_depth中內部選配置檔案。

2.8 通過規則忽略檔案

也可以使用規則忽略檔案,如下例所示:

<rule id="100345" level="0">
  <if_group>syscheck</if_group>
  <match>/var/www/htdocs</match>
  <description>Ignore changes to /var/www/htdocs</description>
</rule>

2.9 更改重要性

使用自定義規則,可以在檢測到對特定檔案或檔案格式的更改觸發警告的等級級別

<rule id="100345" level="12">
  <if_group>syscheck</if_group>
  <match>/var/www/htdocs</match>
  <description>Changes to /var/www/htdocs - Critical file!</description>
</rule>

3.常規問題

3.1syscheck多久執行一次?

預設情況下,Syscheck每12小時執行一次,但掃描之間的間隔可以通過頻率選項由使用者定義。

3.2 代理上的CPU使用率是多少?

Syscheck掃描旨在緩慢執行以避免過多的CPU或記憶體使用。

3.3 所有校驗和儲存在哪裡?

FIM守護程式收集的資料將傳送給Analysisd,以分析是否應傳送告警。Analysisd向Wazuh-db傳送查詢並從該檔案中收集舊資料。當收到響應時,會將校驗和與代理髮送的字串進行比較,如果校驗和發生更改,我們會發送警報。

對於Wazuh 3.7.0,FIM解碼器與Wazuh-DB通訊並將所有資料儲存在SQL資料庫中。為每個代理建立一個DB,用於儲存與其相關的資訊。在每個資料庫上,我們都可以找到fim_entry包含FIM記錄的表。

3.4 可以忽略目錄中的檔案嗎?

是的,您可以使用ignore選項來避免誤報。通過單擊ignore-false-positives檢視此配置的示例

3.5 Wazuh能否顯示文字檔案內容的變化?

是的,監控目錄時可以這樣做。使用該report_changes選項可以在受監視目錄中的文字檔案中提供已更改的準確內容。選擇使用資料夾report_changes監控,因為這需要syscheck將您要監視的每個檔案複製report_changes內進行比較。

單擊報告更改,檢視此配置的示例

3.6 Wazuh如何驗證檔案的完整性?

Wazuh管理器儲存並查詢對從受監視檔案的代理程式接收的所有校驗和和檔案屬性的修改。然後,它將新的校驗和和屬性與儲存的校驗和和屬性進行比較,在檢測到更改時生成警報。

3.7 Wazuh預設監控任何目錄嗎?

是。預設情況下Wazuh 監控類似於Unix系統的/etc/usr,/bin/usr,/sbin/bin目/sbin目錄以及Windows系統下的C:\Windows\System32目錄

3.8 可以強制立即進行syscheck掃描嗎?

是的,您可以強制代理執行系統完整性檢查:

/var/ossec/bin/agent_control -r -a
/var/ossec/bin/agent_control -r -u <agent_id>

有關更多資訊,請參見Ossec控制部分

3.9 當Wazuh執行時,Syscheck會立刻檢查?

預設情況下,syscheck會在Wazuh啟動時進行掃描,但是,可以使用scan_on_start選項更改此行為

3.10 Wazuh在建立新檔案時會發出警報嗎?

Wazuh可以在建立新檔案時傳送警報,但是,此配置選項需要由使用者設定。對此配置使用alert_new_files選項

3.11 FIM如何管理其資料庫中的歷史記錄?

從Wazuh 3.7.0開始,FIM從資料庫中刪除歷史記錄。每個不再受監控的記錄都被編為歷史記錄。出於安全原因,在代理重新啟動3次後,將刪除資料庫。

3.12 如何將舊的DB資訊遷移到新的SQLite資料庫?

我們提供了一個將所有登錄檔遷移到新資料庫的工具。您可以在fim升級工具部分中檢視

三、稽核who-data

版本3.4.0中的新功能。

從版本3.4.0開始,Wazuh集成了一項新功能,可從受監控檔案中獲取who-data資訊。

此資訊包含對受監視檔案進行更改的使用者以及用於執行更改的程式名稱或過程。

1.稽核Linux中的who-data

1.1 工作原理

who-data監視功能使用Linux Audit子系統獲取有關在受監視目錄中進行更改的相關人的資訊。這些更改會生成由syscheck處理並報告給管理器的稽核事件。

1.2 配置

首先,我們需要檢查我們系統中是否安裝了Audit守護程式。

在基於RedHat的系統中,預設情況下通常安裝Auditd。如果沒有安裝,我們需要使用以下命令安裝它:

# yum install audit

對於基於Debian的系統,請使用以下命令:

# apt install auditd

下一步是配置syscheck,在ossec.conf檔案中的配置以啟用who-data監控:

<syscheck>
  <directories check_all="yes" whodata="yes">/etc</directories>
</syscheck>

新增此配置後,我們需要重新啟動Wazuh以應用更改。我們可以檢查是否應用了用於監視所選資料夾的稽核規則。要檢查這一點,我們需要執行以下命令

# auditctl -l | grep wazuh_fim

並檢查是否添加了規則

-w /etc -p wa -k wazuh_fim

當代理程式停止時,我們可以使用相同的命令檢查新增的規則是否已成功刪除。

1.3 告警欄位

啟用who-data時,FIM警報中會收到以下欄位:

(Audit) User 包括啟動修改受監視檔案的程序的使用者的標識和名稱。

audit.user.id

audit.user.name

(Audit) Login user 包括稽核使用者標識和名稱,即登入uid和登入名。此ID在登入時分配給使用者,即使使用者的身份發生更改,也會被每個程序繼承。

audit.login_user.id

audit.login_user.name

(Audit) Effective user 包括啟動修改受監視檔案的程序使用者的有效使用者標識和名稱。

audit.effective_user.id

audit.effective_user.name

(Audit) Group 包括啟動修改受監視檔案程序使用者的組ID和組名。

audit.group.id

audit.group.name

(Audit) Process id

(Audit) Process name

包括用於修改受監視檔案程序的ID和名稱。

audit.process.id

audit.process.name

audit.process.ppid 包括用於修改受監視檔案程序的父程序ID。

1.4 告警示例

在下面的示例中,我們可以看到使用者Smith如何(/etc/hosts.allow)使用帶有sudo許可權並通過nano編輯器向檔案新增新IP:

以日誌格式提醒:

** Alert 1531224328.2834462: - ossec,syscheck,pci_dss_11.5,gpg13_4.11,gdpr_II_5.1.f,
2018 Jul 10 14:05:28 (vpc-agent-debian) any->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: '/etc/hosts.allow'
Size changed from '421' to '433'
Old md5sum was: '4b8ee210c257bc59f2b1d4fa0cbbc3da'
New md5sum is : 'acb2289fba96e77cee0a2c3889b49643'
Old sha1sum was: 'd3452e66d5cfd3bcb5fc79fbcf583e8dec736cfd'
New sha1sum is : 'b87a0e558ca67073573861b26e3265fa0ab35d20'
Old sha256sum was: '6504e867b41a6d1b87e225cfafaef3779a3ee9558b2aeae6baa610ec884e2a81'
New sha256sum is : 'bfa1c0ec3ebfaac71378cb62101135577521eb200c64d6ee8650efe75160978c'
(Audit) User: 'root (0)'
(Audit) Login user: 'smith (1000)'
(Audit) Effective user: 'root (0)'
(Audit) Group: 'root (0)'
(Audit) Process id: '82845'
(Audit) Process name: '/bin/nano'
What changed:
10a11,12
> 10.0.12.34
Attributes:
 - Size: 433
 - Permissions: 100644
 - Date: Tue Jul 10 14:05:28 2018
 - Inode: 268234
 - User: root (0)
 - Group: root (0)
 - MD5: acb2289fba96e77cee0a2c3889b49643
 - SHA1: b87a0e558ca67073573861b26e3265fa0ab35d20
 - SHA256: bfa1c0ec3ebfaac71378cb62101135577521eb200c64d6ee8650efe75160978c

以JSON格式提醒:

{
  "timestamp":"2018-07-10T14:05:28.452-0800",
  "rule":{
      "level":7,
      "description":"Integrity checksum changed.",
      "id":"550",
      "firedtimes":10,
      "mail":false,
      "groups":[
          "ossec",
          "syscheck"
      ],
      "pci_dss":[
          "11.5"
      ],
      "gpg13":[
          "4.11"
      ],
      "gdpr":[
          "II_5.1.f"
      ]
  },
  "agent":{
      "id":"058",
      "ip": "10.0.0.121",
      "name":"vpc-agent-debian"
  },
  "manager":{
      "name":"vpc-wazuh-manager"
  },
  "id":"1531224328.283446",
  "syscheck":{
      "path":"/etc/hosts.allow",
      "size_before":"421",
      "size_after":"433",
      "perm_after":"100644",
      "uid_after":"0",
      "gid_after":"0",
      "md5_before":"4b8ee210c257bc59f2b1d4fa0cbbc3da",
      "md5_after":"acb2289fba96e77cee0a2c3889b49643",
      "sha1_before":"d3452e66d5cfd3bcb5fc79fbcf583e8dec736cfd",
      "sha1_after":"b87a0e558ca67073573861b26e3265fa0ab35d20",
      "sha256_before":"6504e867b41a6d1b87e225cfafaef3779a3ee9558b2aeae6baa610ec884e2a81",
      "sha256_after":"bfa1c0ec3ebfaac71378cb62101135577521eb200c64d6ee8650efe75160978c",
      "uname_after":"root",
      "gname_after":"root",
      "mtime_before":"2018-07-10T14:04:25",
      "mtime_after":"2018-07-10T14:05:28",
      "inode_after":268234,
      "diff":"10a11,12\n> 10.0.12.34\n",
      "event":"modified",
      "audit":{
          "user":{
              "id":"0",
              "name":"root"
          },
          "group":{
              "id":"0",
              "name":"root"
          },
          "process":{
              "id":"82845",
              "name":"/bin/nano",
              "ppid":"3195"
          },
          "login_user":{
              "id":"1000",
              "name":"smith"
          },
          "effective_user":{
              "id":"0",
              "name":"root"
          }
      }
  },
  "decoder":{
      "name":"syscheck_integrity_changed"
  },
  "location":"syscheck"
}

2.稽核Windows中的who-data

2.1 工作原理

who-data監視功能使用Microsoft Windows審計系統來獲取有關在受監視目錄中進行更改的相關人的資訊。這些更改會生成由syscheck處理並報告給管理器的稽核事件。與Windows Vista以上的系統相容。

2.2 配置

要以who-data模式開始監視,必須正確配置要監視目錄的SACL。當在ossec.conf檔案配置whodata="yes"為指定目錄時,Wazuh會自動執行此任務

<syscheck>
  <directories check_all="yes" whodata="yes">C:\Windows\System32\drivers\etc</directories>
</syscheck>

系統稽核策略也需要正確配置。對於大多數受支援Windows的系統,此部分也會自動完成。如果您的系統高於Windows Vista,但稽核策略無法自行配置,請參閱配置本地稽核策略的指南

2.3 警告欄位

啟用who-data時,會在警告中收到以下欄位:

(Audit) User 包括啟動修改受監視檔案程序使用者的使用者標識和名稱。

audit.user.id

audit.user.name

(Audit) Process id

(Audit) Process name

包括用於修改受監視檔案程序的ID和名稱。

audit.process.id

audit.process.name

2.4 警告示例

以日誌格式提醒:

** Alert 1531323832.10357533: - ossec,syscheck,pci_dss_11.5,gpg13_4.11,gdpr_II_5.1.f,
2018 Jul 11 17:43:52 (vpc-agent-win) any->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: 'C:\Windows\System32\drivers\etc\hosts'
Size changed from '825' to '857'
Old md5sum was: '76eae1f63f77154db8c9dd884a47e994'
New md5sum is : 'e71b0c5cf0e3a8d1848312f1394e448f'
Old sha1sum was: '9c2abeed447447d072aec2128f296e6d3f1ad21a'
New sha1sum is : '0f89ca73534037c5cf23193d032c93cbf0fc4af4'
Old sha256sum was: 'f8d35672114862f660424d8436d621261279703a65bc8ac3146016d5b023520b'
New sha256sum is : 'b9cc339e89fc5d8890cfb8a47249b3b515f5982d8a7348e2e5eb104aec232c9f'
(Audit) User: 'Administrator (S-1-5-21-3292556202-24657078-706277677-500)'
(Audit) Process id: '1736'
(Audit) Process name: 'C:\Windows\System32\notepad.exe'
What changed:
***** QUEUE\DIFF\LOCAL\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS\state.1531323769
***** QUEUE\DIFF\LOCAL\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS\LAST-ENTRY
        10.0.0.211      dns_server
*****
Attributes:
 - Size: 857
 - Date: Wed Jul 11 17:43:39 2018
 - User: SYSTEM (S-1-5-18)
 - MD5: e71b0c5cf0e3a8d1848312f1394e448f
 - SHA1: 0f89ca73534037c5cf23193d032c93cbf0fc4af4
 - SHA256: b9cc339e89fc5d8890cfb8a47249b3b515f5982d8a7348e2e5eb104aec232c9f
 - File attributes: ARCHIVE, COMPRESSED, HIDDEN, NOT_CONTENT_INDEXED
 - Permissions:
   standar_user  (DENIED) - FILE_READ_DATA, FILE_WRITE_DATA, FILE_APPEND_DATA, FILE_READ_EA
   SYSTEM  (ALLOWED) - FILE_READ_DATA, FILE_WRITE_DATA, FILE_APPEND_DATA, FILE_READ_EA, FILE_WRITE_EA, FILE_EXECUTE, FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES, FILE_DELETE, DELETE, READ_CONTROL, WRITE_DAC, WRITE_OWNER, SYNCHRONIZE

以JSON格式提醒:

{
    "timestamp":"2018-07-11T17:43:52.914+0200",
    "rule":{
        "level":7,
        "description":"Integrity checksum changed.",
        "id":"550",
        "firedtimes":24,
        "mail":false,
        "groups":[
            "ossec",
            "syscheck"
        ],
        "pci_dss":[
            "11.5"
        ],
        "gpg13":[
            "4.11"
        ],
        "gdpr":[
            "II_5.1.f"
        ]
    },
    "agent":{
        "id":"005",
        "name":"vpc-agent-win"
    },
    "manager":{
        "name":"vpc-wazuh-manager"
    },
    "id":"1531323832.103575",
    "syscheck":{
        "path":"C:\\Windows\\System32\\drivers\\etc\\hosts",
        "size_before":"825",
        "size_after":"857",
        "win_perm_after":[
            {
                "name":"standar_user",
                "denied":[
                    "FILE_READ_DATA",
                    "FILE_WRITE_DATA",
                    "FILE_APPEND_DATA",
                    "FILE_READ_EA"
                ]
            },
            {
                "name":"SYSTEM",
                "allowed":[
                    "FILE_READ_DATA",
                    "FILE_WRITE_DATA",
                    "FILE_APPEND_DATA",
                    "FILE_READ_EA",
                    "FILE_WRITE_EA",
                    "FILE_EXECUTE",
                    "FILE_READ_ATTRIBUTES",
                    "FILE_WRITE_ATTRIBUTES",
                    "FILE_DELETE",
                    "DELETE",
                    "READ_CONTROL",
                    "WRITE_DAC",
                    "WRITE_OWNER",
                    "SYNCHRONIZE"
                ]
            }
        ],
        "uid_after":"S-1-5-18",
        "md5_before":"76eae1f63f77154db8c9dd884a47e994",
        "md5_after":"e71b0c5cf0e3a8d1848312f1394e448f",
        "sha1_before":"9c2abeed447447d072aec2128f296e6d3f1ad21a",
        "sha1_after":"0f89ca73534037c5cf23193d032c93cbf0fc4af4",
        "sha256_before":"f8d35672114862f660424d8436d621261279703a65bc8ac3146016d5b023520b",
        "sha256_after":"b9cc339e89fc5d8890cfb8a47249b3b515f5982d8a7348e2e5eb104aec232c9f",
        "attrs_after":[
            "ARCHIVE",
            "COMPRESSED",
            "HIDDEN",
            "NOT_CONTENT_INDEXED"
        ],
        "uname_after":"SYSTEM",
        "mtime_before":"2018-07-11T17:42:29",
        "mtime_after":"2018-07-11T17:43:39",
        "diff":"What changed:\n***** QUEUE\\DIFF\\LOCAL\\WINDOWS\\SYSTEM32\\DRIVERS\\ETC\\HOSTS\\state.1531323769\r\n***** QUEUE\\DIFF\\LOCAL\\WINDOWS\\SYSTEM32\\DRIVERS\\ETC\\HOSTS\\LAST-ENTRY\r\n        10.0.0.211      dns_server   \r\n*****\r\n\r\n",
        "event":"modified",
        "audit":{
            "user":{
                "id":"S-1-5-21-3292556202-24657078-706277677-500",
                "name":"Administrator"
            },
            "process":{
                "id":"1736",
                "name":"C:\\Windows\\System32\\notepad.exe"
            }
        }
    },
    "decoder":{
        "name":"syscheck_integrity_changed"
    },
    "location":"syscheck"
}

3.在Windows中手動配置本地稽核策略

要手動配置執行Syscheck的who-data模式所需的稽核策略,必須啟用成功事件。您可以使用以下命令從本地組策略編輯器執行此操作:

gpedit.msc

3.1 高階稽核策略配置部分方法

建議的配置策略選項。您必須啟用以下選項:

  1. 物件訪問 - >檔案系統
  2. 物件訪問 - >處理操作(Handle Manipulation)

3.2 稽核策略部分方法

如果由於您的主機是Windows Vista或Windows Server 2008而無法遵循安裝上面的方法設定,則僅建議使用此選項。為此,請編輯以下策略:

安全設定 - >本地策略 - >稽核策略 - >稽核物件訪問


四、異常和惡意軟體檢測

異常檢測是指在系統中查詢與預期行為不匹配的模式的動作。一旦在系統上安裝了惡意軟體(例如rootkit),它就會修改系統以將其自身隱藏起來。儘管惡意軟體使用各種技術來實現這一目標,但Wazuh使廣範的方法來查詢攻擊者的特殊入侵模式。

負責此任務的主要元件是rootcheck,但是Syscheck也扮演著重要的角色。

1.處理流程

以下顯示了Wazuh為查詢入侵者或惡意軟體導致的異常而執行的處理流程圖:

1.1檔案完整性監控

惡意軟體可以替換其主機系統上的檔案,目錄和命令。對系統的主目錄執行檔案j進行完整性檢查。更多資訊:檔案完整性監控部分

** Alert 1460948255.25442: mail  - ossec,syscheck,pci_dss_11.5,
2016 Apr 17 19:57:35 (ubuntu) 10.0.0.144->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: '/test/hello'
Size changed from '12' to '17'
Old md5sum was: 'e59ff97941044f85df5297e1c302d260'
New md5sum is : '7947eba5d9cc58d440fb06912e302949'
Old sha1sum was: '648a6a6ffffdaa0badb23b8baf90b6168dd16b3a'
New sha1sum is : '379b74ac9b2d2b09ff6ad7fa876c79f914a755e1'

1.2檢查執行程序

惡意程序可以防止在系統的程序列表顯示自己的真實程序(ps命令的木馬版本,這裡替換了系統命令)。Rootcheck檢查所有程序ID(PID),查詢不同系統呼叫的差異(getsid,getpgid)。

Diamorphine是一個核心模式的rootkit,能夠隱藏自己和ps命令的其他程序。如果我們安裝此軟體包並隱藏程序,我們將收到如下警告:

** Alert 1460225922.841535: mail  - ossec,rootcheck
2017 Feb 15 10:00:42 (localhost) 192.168.1.240->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
Process '495' hidden from /proc. Possible kernel level rootkit.

1.3 檢查隱藏的埠

惡意軟體可以使用隱藏埠與攻擊者通訊。Rootcheck使用bind()函式來檢查系統中的每個埠。如果它無法繫結到埠並且該埠不在netstat輸出中,則可能存在惡意軟體。

1.4 檢查異常檔案和許可權

Wazuh掃描整個檔案系統,尋找不正常的檔案和許可權。擁有root許可權的檔案以及其他使用者(如suid檔案,隱藏目錄和檔案)的寫許可權都將被檢查。

1.5 使用系統呼叫檢查隱藏檔案

當使用fopen+read呼叫時,Wazuh掃描整個系統並比較統計大小和檔案大小之間的差異。每個目錄中的節點數也與opendir+readdir的輸出進行比較。如果所有結果都不匹配,則可能存在惡意軟體。

** Alert 1460225922.51190: mail  - ossec,rootcheck
2017 Feb 15 10:30:42 (localhost) 192.168.1.240->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
Files hidden inside directory '/etc'. Link count does not match number of files (128,129)

1.6 掃描dev目錄

在dev目錄應該只包含裝置的特殊檔案。應檢該目錄的其他檔案,因為惡意軟體使用此分割槽來隱藏檔案。

如果您建立一個隱藏檔案/dev,Wazuh應該發出警報,因為目錄中有一個隱藏檔案,該檔案應該只包括特殊的裝置檔案。以下是該案例中生成的警報:

** Alert 1487182293.37491: - ossec,rootcheck,
2017 Feb 15 10:11:33 localhost->rootcheck
Rule: 510 (level 7) -> 'Host-based anomaly detection event (rootcheck).'
File '/dev/.hiddenfile' present on /dev. Possible hidden file.
title: File present on /dev.
file: /dev/.hiddenfile

1.7 掃描網路介面

Wazuh掃描系統上啟用了混雜模式的網路介面。如果該介面處於混雜模式,則ifconfig命令的輸出將可以顯示出來。這可能是惡意軟體存在的特點。

1.8 Rootkit檢查

Rootcheck使用自己的rootkit簽名資料庫執行多項檢查:rootkit_files.txtrootkit_trojans.txtwin_malware_rcl.txt。可是,這些簽名已過時了。

2.配置

2.1 基本的例子

要配置syscheck和rootcheck的選項,請轉到ossec.conf。如果您想了解有關可用準確的配置選項的更多資訊,請轉到Syscheck部分Rootcheck部分。另請參閱以下部分:frequencyrootkit_filesrootkit_trojans

以下是如何為rootkit(檔案和特洛伊木馬)配置資料庫的基本示例:

<rootcheck>
  <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
  <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
</rootcheck>

2.3 忽略誤報

<rule id="100100" level="0">
    <if_group>rootcheck</if_group>
    <match>/dev/.blkid.tab</match>
    <description>Ignore false positive for /dev/.blkid.tab</description>
</rule>

3.常規問題

3.1 rootcheck多久執行一次?

該rootcheck掃描頻率是可配置的頻率。預設情況下,它每2小時執行一次。

3.2 rootcheck如何知道要查詢的rootkit檔案?

rootcheck引擎具有rootkit簽名的資料庫:rootkit_files.txtrootkit_trojans.txtwin_malware_rcl.txt。可是,簽名已經過時了。

3.3 rootcheck是否檢查正在執行的程序?

是的,rootcheck檢查所有正在執行的程序,查詢不同系統呼叫的變化。

3.4 隱藏檔案怎麼樣?

rootcheck引擎掃描整個系統,當使用fopen+read呼叫時,Wazuh掃描整個系統並比較統計大小和檔案大小之間的差異。每個目錄中的節點數也與opendir+readdir的輸出進行比較。如果所有結果都不匹配,則可能存在惡意軟體。

五、監控安全策略

策略監視是驗證所有系統是否符合有關配置設定和已規定的應用程式使用的一組預定義規則的過程。

Wazuh使用三個元件來執行此任務:RootcheckOpenSCAPCIS-CAT

1.Rootcheck

Wazuh監控配置檔案以確保符合您的安全策略,標準,代理執行定期掃描以檢測已知易受攻擊點,未修補,配置錯誤的應用程式。

1.1 處理流程

Rootcheck允許定義策略以檢查代理是否滿足指定的要求。

rootcheck引擎可以進行檢查程序是否正在執行:

  • 檢查檔案是否存在
  • 檢查檔案的內容是否包含模式,或者Windows登錄檔項是否包含特殊字串是否存在。

使用這些檢查,已經有如下策略:

策略描述
cis_debian_linux_rcl.txt 基於CIS Benchmark for Debian Linux v1.0
cis_rhel5_linux_rcl.txt 基於CIS Benchmark for Red Hat Enterprise Linux 5 v2.1.0
cis_rhel6_linux_rcl.txt 基於CIS Benchmark for Red Hat Enterprise Linux 6 v1.3.0
cis_rhel7_linux_rcl.txt 基於CIS Benchmark for Red Hat Enterprise Linux 7 v1.1.0
cis_rhel_linux_rcl.txt 基於CIS Benchmark for Red Hat Enterprise Linux v1.0.5
cis_sles11_linux_rcl.txt 基於CIS Benchmark for SUSE Linux Enterprise Server 11 v1.1.0
cis_sles12_linux_rcl.txt 基於CIS Benchmark for SUSE Linux Enterprise Server 12 v1.0.0
system_audit_rcl.txt Web漏洞和漏洞利用
win_audit_rcl.txt 檢查登錄檔值
system_audit_ssh.txt SSH檢查
win_applications_rcl.txt 檢查是否安裝了惡意應用程式

與策略監測相關的告警:

  • 512:Windows稽核
  • 514:Windows應用程式
  • 516:Unix審計

策略和合規性監視資料庫通常在管理器上維護,管理器將它們分發給所有代理。

現有策略規則的示例:

# PermitRootLogin not allowed
# PermitRootLogin indicates if the root user can log in via ssh.
$sshd_file=/etc/ssh/sshd_config;

[SSH Configuration - 1: Root can log in] [any] [1]
f:$sshd_file -> !r:^# && r:PermitRootLogin\.+yes;
f:$sshd_file -> r:^#\s*PermitRootLogin

告警示例:

** Alert 1487185712.51190: - ossec,rootcheck,
2017 Feb 15 11:08:32 localhost->rootcheck
Rule: 516 (level 3) -> 'System Audit event.'
System Audit: CIS - RHEL7 - 6.2.9 - SSH Configuration - Empty passwords permitted {CIS: 6.2.9 RHEL7} {PCI_DSS: 4.1}. File: /etc/ssh/sshd_config. Reference: https://benchmarks.cisecurity.org/tools2/linux/CIS_Red_Hat_Enterprise_Linux_7_Benchmark_v1.1.0.pdf .
title: CIS - RHEL7 - 6.2.9 - SSH Configuration - Empty passwords permitted
file: /etc/ssh/sshd_config

1.2 配置

1.2.1 基本用法

要配置rootcheck的選項,進入Rootcheckossec.conf。最常見的配置選項是:頻率系統審計

配置審計策略的基本示例:

<rootcheck>
  <system_audit>./db/system_audit_rcl.txt</system_audit>
  <system_audit>./db/cis_debian_linux_rcl.txt</system_audit>
  <system_audit>./db/cis_rhel_linux_rcl.txt</system_audit>
</rootcheck>

1.2.2 配置定期掃描

這是每10小時執行一次掃描的基本配置:

<rootcheck>
   <frequency>36000</frequency>
   <system_audit>/var/ossec/etc/shared/system_audit_rcl.txt</system_audit>
   <system_audit>/var/ossec/etc/shared/cis_debian_linux_rcl.txt</system_audit>
   <system_audit>/var/ossec/etc/shared/cis_rhel_linux_rcl.txt</system_audit>
   <system_audit>/var/ossec/etc/shared/cis_rhel5_linux_rcl.txt</system_audit>
 </rootcheck>

1.2.3 Root訪問SSH

1.首先,您需要建立自定義審計檔案(audit_test.txt):

# PermitRootLogin not allowed
# PermitRootLogin indicates if the root user can log in by ssh.
$sshd_file=/etc/ssh/sshd_config;

[SSH Configuration - 1: Root can log in] [any] [1]
f:$sshd_file -> !r:^# && r:PermitRootLogin\.+yes;
f:$sshd_file -> r:^#\s*PermitRootLogin;

2.在rootcheck選項中引用我們的新檔案:

<rootcheck>
   <system_audit>/var/ossec/etc/shared/audit_test.txt</system_audit>
</rootcheck>

1.3 常規問題

我可以指定自己的審計檔案進行策略監控嗎?

是的,您可以使用system_audit選項。示例SSH規則

2.OpenSCAP

OpenSCAP wodle是OpenSCAP與Wazuh HIDS的整合,可提供執行配置的功能。它主要用於:

  • 驗證安全合規性:OpenSCAP策略定義組織中所有系統必須滿足的要求,以符合適用的安全策略安全基線
  • 執行漏洞評估:OpenSCAP可識別系統中的漏洞並對其進行分類。
  • 執行專門的評估:OpenSCAP可以執行特定的自定義系統檢查(即檢查可疑檔名和可疑檔案位置)

2.1 工作原理

安全內容自動化協議(SCAP)是用於以標準化方式表達和操縱安全資料的規範。SCAP使用幾種規格,以自動連續監測,漏洞管理和報告安全合規性掃描的結果。

安全合規性評估過程的組成部分:

  • SCAP掃描程式:這是一個讀取SCAP策略並檢查系統是否符合它的應用程式。 有許多工具可以根據SCAP策略掃描您的系統。 此Wodle與NIST認證的OpenSCAP整合掃描程式。
  • 安全策略(SCAP內容):這些決定了系統必須如何設定以及檢查的內容。 這些策略包含系統將要遵循的主機可讀描述規則
  • 配置檔案:每個安全策略都可以包含多個配置檔案,這些配置檔案提供符合特定安全基準的規則和值集。 您可以將配置檔案視為策略中特定的規則子集; 配置檔案確定實際使用的策略中定義的規則以及評估期間將使用的值。
  • 評估(掃描):這是OpenSCAP掃描程式根據特定安全策略和配置檔案在代理上執行的過程。通常只需幾分鐘,具體取決於配置檔案中選擇的規則數量。

2.1.1 要求

此wodle程式在代理上執行,因此每個代理必須滿足以下要求:

OpenSCAP為了執行SCAP評估,我們需要掃描。如上所述,我們使用OpenSCAP。您可以使用以下命令安裝它:

對於基於RPM的發行版:

# yum install openscap-scanner

對於基於Debian的發行版:

# apt-get install libopenscap8 xsltproc

Python 2.6+ Python是這個問題的核心部分。目前所有Linux發行版都附帶python。

2.1.2 預設策略

這些是Wazuh預設包含的安全策略:

SOVersionFile nameMain profilesVulnerability assessment
CentOS 6 ssg-centos-6-ds.xml Server, PCI N/A
7 ssg-centos-7-ds.xml Common, PCI N/A
RedHat 6 ssg-rhel-6-ds.xml Server, PCI N/A
cve-redhat-6-ds.xml N/A Y
7 ssg-rhel-7-ds.xml Common , PCI N/A
cve-redhat-7-ds.xml N/A Y
Debian 8 ssg-debian-8-ds.xml Common N/A
Ubuntu xenial ssg-ubuntu-1604-ds.xml Common N/A
trusty cve-debian-oval.xml N/A Y
precise cve-debian-oval.xml N/A Y
Fedora 24 ssg-fedora-ds.xml Common N/A

每個代理都必須有自己的策略(/var/ossec/wodles/oscap/content)

Wodle處理流程

代理將根據配置定期執行openscap-scanner。掃描的每個結果都將傳送到Manager,如果掃描結果的狀態是失敗,它將生成警報。可以調整規則以傳送傳輸結果。

{
    "timestamp": "2017-03-20T15:59:43-0700",
    "rule": {
      "level": 7,
      "description": "OpenSCAP: Set Lockout Time For Failed Password Attempts (not passed)",
      "id": "81530",
      "firedtimes": 5,
      "groups": [
        "oscap",
        "oscap-result"
      ],
      "pci_dss": [
        "2.2"
      ]
    },
    "agent": {
      "id": "1040",
      "name": "ip-10-0-0-76",
      "ip": "10.0.0.76"
    },
    "manager": {
      "name": "vpc-ossec-manager"
    },
    "full_log": "oscap: msg: \"xccdf-result\", scan-id: \"10401490050781\", content: \"ssg-centos-7-ds.xml\", title: \"Set Lockout Time For Failed Password Attempts\", id: \"xccdf_org.ssgproject.content_rule_accounts_passwords_pam_faillock_unlock_time\", result: \"fail\", severity: \"medium\", description: \"To configure the system to lock out accounts after a number of incorrect login attempts and require an administrator to unlock the account using pam_faillock.so, modify the content of both /etc/pam.d/system-auth and /etc/pam.d/password-auth as follows: add the following line immediately before the pam_unix.so statement in the AUTH section: auth required pam_faillock.so preauth silent deny= unlock_time= fail_interval= add the following line immediately after the pam_unix.so statement in the AUTH section: auth [default=die] pam_faillock.so authfail deny= unlock_time= fail_interval= add the following line immediately before the pam_unix.so statement in the ACCOUNT section: account required pam_faillock.so\", rationale: \"Locking out user accounts after a number of incorrect attempts prevents direct password guessing attacks. Ensuring that an administrator is involved in unlocking locked accounts draws appropriate attention to such situations.\" references: \"AC-7(b) (http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r4.pdf), 47 (http://iase.disa.mil/stigs/cci/Pages/index.aspx)\", identifiers: \"CCE-26884-7 (http://cce.mitre.org)\", oval-id: \"oval:ssg:def:166\", benchmark-id: \"xccdf_org.ssgproject.content_benchmark_RHEL-7\", profile-id: \"xccdf_org.ssgproject.content_profile_pci-dss\", profile-title: \"PCI-DSS v3 Control Baseline for CentOS Linux 7\".",
    "oscap": {
      "scan": {
        "id": "10401490050781",
        "content": "ssg-centos-7-ds.xml",
        "benchmark": {
          "id": "xccdf_org.ssgproject.content_benchmark_RHEL-7"
        },
        "profile": {
          "id": "xccdf_org.ssgproject.content_profile_pci-dss",
          "title": "PCI-DSS v3 Control Baseline for CentOS Linux 7"
        }
      },
      "check": {
        "title": "Set Lockout Time For Failed Password Attempts",
        "id": "xccdf_org.ssgproject.content_rule_accounts_passwords_pam_faillock_unlock_time",
        "result": "fail",
        "severity": "medium",
        "description": "To configure the system to lock out accounts after a number of incorrect login attempts and require an administrator to unlock the account using pam_faillock.so, modify the content of both /etc/pam.d/system-auth and /etc/pam.d/password-auth as follows: add the following line immediately before the pam_unix.so statement in the AUTH section: auth required pam_faillock.so preauth silent deny= unlock_time= fail_interval= add the following line immediately after the pam_unix.so statement in the AUTH section: auth [default=die] pam_faillock.so authfail deny= unlock_time= fail_interval= add the following line immediately before the pam_unix.so statement in the ACCOUNT section: account required pam_faillock.so",
        "rationale": "Locking out user accounts after a number of incorrect attempts prevents direct password guessing attacks. Ensuring that an administrator is involved in unlocking locked accounts draws appropriate attention to such situations.",
        "references": "AC-7(b) (http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r4.pdf), 47 (http://iase.disa.mil/stigs/cci/Pages/index.aspx)",
        "identifiers": "CCE-26884-7 (http://cce.mitre.org)",
        "oval": {
          "id": "oval:ssg:def:166"
        }
      }
    },
    "decoder": {
      "parent": "oscap",
      "name": "oscap"
    },
    "location": "wodle_open-scap"
}

掃描完成後,將傳送告警事件,生成警報:

{
    "timestamp": "2017-03-20T15:59:43-0700",
    "rule": {
      "level": 5,
      "description": "OpenSCAP Report overview: Score less than 80",
      "id": "81542",
      "firedtimes": 2,
      "groups": [
        "oscap",
        "oscap-report"
      ],
      "pci_dss": [
        "2.2"
      ]
    },
    "agent": {
      "id": "1040",
      "name": "ip-10-0-0-76",
      "ip": "10.0.0.76"
    },
    "manager": {
      "name": "vpc-ossec-manager"
    },
    "full_log": "oscap: msg: \"xccdf-overview\", scan-id: \"10401490050797\", content: \"ssg-centos-7-ds.xml\", benchmark-id: \"xccdf_org.ssgproject.content_benchmark_RHEL-7\", profile-id: \"xccdf_org.ssgproject.content_profile_common\", profile-title: \"Common Profile for General-Purpose Systems\", score: \"75.000000\".",
    "oscap": {
      "scan": {
        "id": "10401490050797",
        "content": "ssg-centos-7-ds.xml",
        "benchmark": {
          "id": "xccdf_org.ssgproject.content_benchmark_RHEL-7"
        },
        "profile": {
          "id": "xccdf_org.ssgproject.content_profile_common",
          "title": "Common Profile for General-Purpose Systems"
        },
        "score": "75.000000"
      }
    },
    "decoder": {
      "parent": "oscap",
      "name": "oscap"
    },
    "location": "wodle_open-scap"
}

2.2 配置

2.2.1 基本用法

要配置OpenSCAP的選項,請轉到ossec.conf,或有關特定選項的更多詳細資訊,請參閱OpenSCAP部分

在此示例中,我們將Wazuh配置為每天執行OpenSCAP,超時時間為30分鐘

<wodle name="open-scap">
  <disabled>no</disabled>
  <timeout>1800</timeout>
  <interval>1d</interval>
  <scan-on-start>yes</scan-on-start>

  <content type="xccdf" path="ssg-centos-7-ds.xml">
    <profile>xccdf_org.ssgproject.content_profile_pci-dss</profile>
    <profile>xccdf_org.ssgproject.content_profile_common</profile>
  </content>
</wodle>

2.2.2 評估RHEL7上的PCI-DSS合規性

本節介紹如何評估Red Hat Enterprise Linux 7代理上的金融支付行業資料安全標準(PCI-DSS)合規性。

第1步:配置代理

必須正確識別每個代理,以便知道要執行的策略和配置檔案。

agent:ossec.conf

<client>
  <server>
    <address>10.0.1.4</address>
    <port>1514</port>
    <protocol>tcp</protocol>
  </server>
  <config-profile>redhat7</config-profile>
</client>

第2步:配置管理器

我們只想在Red Hat 7伺服器上執行SSG RH7策略的PCI-DSS配置檔案。

manage:/var/ossec/etc/shared/default/agent.conf(假設代理在default組中):

<agent_config profile="redhat7">

  <wodle name="open-scap">
    <content type="xccdf" path="ssg-rhel7-ds.xml">
      <profile>xccdf_org.ssgproject.content_profile_pci-dss</profile>
    </content>
  </wodle>

</agent_config>

第3步:重新啟動管理器和代理

要應用新配置,請重新啟動管理器:

  1. 對於Systemd:
# systemctl restart wazuh-manager
  1. 對於SysV Init:
# service wazuh-manager restart

現在,重新啟動所有代理:

# /var/ossec/bin/agent_control -R -a

如果您願意,可以使用選項-u <id>重新啟動特定代理,其中id是代理的ID號.

第4步:檢視警報

評估完成後,您將看到結果為OSSEC警報:

/var/ossec/logs/alerts/alerts.log

** Alert 1463752181.32768: - oscap,rule-result,pci_dss_2.2,
2016 May 20 13:49:41 (RH_Agent) 10.0.1.7->wodle_open-scap
Rule: 81529 (level 5) -> 'OpenSCAP rule failed (severity low).'
oscap: msg: "rule-result", id: "47T7_Qd08gm4y8TSoD53", policy: "ssg-rhel7-ds.xml", profile: "xccdf_org.ssgproject.content_profile_pci-dss", rule_id: "xccdf_org.ssgproject.content_rule_sshd_set_idle_timeout", result: "fail", title: "Set SSH Idle Timeout Interval", ident: "CCE-26611-4", severity: "low".
**Alert1463752181.33254:-oscap,report-overview,pci_dss_2.2,2016May2013:49:41(RH_Agent)10.0.1.7->wodle_open-scapRule:81542(level4)->'OpenSCAP Report overview: Score less than 80'oscap:msg:"report-overview",id:"47T7_Qd08gm4y8TSoD53",policy:"ssg-rhel7-ds.xml",profile:"xccdf_org.ssgproject.content_profile_pci-dss",score:"56.835060"/"100.000000",severityoffailedrules:"high":"1","medium":"9","low":"34","n/a":"0".

請注意,提取每個欄位以便於搜尋和分析。

第5步:儀表圖

最後,您可以使用Kibana的OpenSCAP顯示結果:

2.2.3 審計red hat產品的安全漏洞

紅帽安全響應小組為影響紅帽企業Linux 3,4,5,6和7的所有漏洞(由CVE名稱標識)提供OVAL定義。這使使用者能夠執行漏洞掃描並診斷系統是否易受攻擊。

第1步:配置代理

必須正確識別每個代理,以便知道要執行的策略和配置檔案。

agent ossec.conf

<client>
  <server-ip>10.0.1.4</server-ip>
  <config-profile>redhat7</config-profile>
</client>

第2步:配置管理器

我們只想在Red Hat 7伺服器上執行RedHat安全策略。

manager shared/agent.conf

<agent_config profile="redhat7">

  <wodle name="open-scap">
    <content type="xccdf" path="com.redhat.rhsa-RHEL7.ds.xml"/>
  </wodle>

</agent_config>

第3步:重新啟動管理器和代理

要應用新配置,請重新啟動管理器:

  1. 對於Systemd:
# systemctl restart wazuh-manager
  1. 對於SysV Init:
# service wazuh-manager restart

現在,重新啟動所有代理:

# /var/ossec/bin/agent_control -R -a

如果您願意,可以使用選項-u <id>重新啟動特定代理,其中id是代理的ID號.

第4步:檢視警報

評估完成後,您將看到結果為OSSEC警報:

/var/ossec/logs/alerts/alerts.log

** Alert 1463757700.70731: mail  - oscap,rule-result,pci_dss_2.2,
2016 May 20 15:21:40 (RH_Agent) 10.0.1.7->wodle_open-scap
Rule: 81531 (level 9) -> 'OpenSCAP rule failed (severity high).'
oscap: msg: "rule-result", id: "I0iLEGFi4iTkxjnL9LWQ", policy: "com.redhat.rhsa-RHEL7.ds.xml", profile: "no-profiles", rule_id: "xccdf_com.redhat.rhsa_rule_oval-com.redhat.rhsa-def-20160722", result: "fail", title: "RHSA-2016:0722: openssl security update (Important)", ident: "RHSA-2016-0722, CVE-2016-0799, CVE-2016-2105, CVE-2016-2106, CVE-2016-2107, CVE-2016-2108, CVE-2016-2109, CVE-2016-2842", severity: "high".
** Alert 1463757700.71339: - oscap,report-overview,pci_dss_2.2,
2016 May 20 15:21:40 (RH_Agent) 10.0.1.7->wodle_open-scap
Rule: 81540 (level 1) -> 'OpenSCAP Report overview.'
oscap: msg: "report-overview", id: "I0iLEGFi4iTkxjnL9LWQ", policy: "com.redhat.rhsa-RHEL7.ds.xml", profile: "no-profiles", score: "92.617447" / "100.000000", severity of failed rules: "high": "8", "medium": "14", "low": "0", "n/a": "0".

請注意,提取每個欄位以便於搜尋和分析。

第5步:儀表板

最後,您可以使用Kibana的OpenSCAP顯示結果:

2.2.4 覆蓋超時

可以覆蓋特定評估的超時:

<wodle name="open-scap">

    <timeout>1800</timeout>

    <content type="xccdf" path="ssg-centos-7-ds.xml">
        <timeout>120</timeout>
    </content>

    <content type="xccdf" path="ssg-centos-6-ds.xml"/>

</wodle>

2.2.5 使用配置檔案

我們可以將評估僅限於策略的特定配置檔案:

<wodle name="open-scap">

    <content type="xccdf" path="ssg-centos-7-ds.xml">
        <profile>xccdf_org.ssgproject.content_profile_standard</profile>
        <profile>xccdf_org.ssgproject.content_profile_pci-dss</profile>
    </content>

    <content type="xccdf" path="ssg-centos-6-ds.xml"/>

</wodle>

2.2.6 使用CPE字典

您還可以選擇指定CPE字典檔案,該檔案用於確定哪些檢查與特定平臺相關。

<wodle name="open-scap">

    <content type="xccdf" path=policy="ssg-centos-7-ds.xml">
        <cpe>file.xml</cpe>
    </content>

    <content type="xccdf" path="ssg-centos-6-ds.xml" />

</wodle>

2.2.7 使用ID

您可以選擇資料流檔案的特定ID:

<wodle name="open-scap">

    <content type="xccdf" path="ssg-centos-7-ds.xml">
        <datastream-id>id</datastream-id>
        <xccdf-id>id</xccdf-id>
    </content>

    <content type="xccdf" path="ssg-centos-6-ds.xml" />

</wodle>

2.3 常規問題

2.3.1 在代理上啟用OpenSCAP wodle時是否會產生明顯的效能影響?

OpenSCAP wodle設計非常高效,但效能取決於oscap的速度。根據所選策略,oscap可能會消耗大量資源。我們建議您在將測試代理部署到生產系統之前在測試代理上測試策略。

2.3.2 評估是否並行執行?

不,每個評估都是按順序執行的。此外,評估的每個簡介依次執行。這使掃描需要更長的時間,但也減少了由這些掃描引起的代理負載量。

2.3.3 interval如何工作?

interval是代理上後續OpenSCAP掃描開始之間的預期時間量。如果掃描時間超過配置的間隔時間,將寫入“間隔超時”日誌訊息到/var/ossec/log/ossec.log檔案中,掃描完成後立即重新開始掃描。

2.3.4 OSSEC啟動時是否評估了策略?

是的,預設情況下,會在wodle啟動時評估策略。您可以通過將<scan-on-start>設定為“no”來更改此設定。在這種情況下,將在指定的間隔之後執行下一次評估。當OSSEC停止時,儲存Wodle狀態。

2.3.5 政策在哪裡?

每個agent都必須有自己的策略(/var/ossec/wodles/oscap/content)

2.4 CIS-CAT整合

3.1.0版中的新功能。

CIS-CAT wodle開發是為了將CIS基準評估納入Wazu agent中。

2.4.1 什麼是CIS-CAT

CIS(網際網路安全中心)是一個致力於保護私人和公共組織免受網路威脅的組織。該組織提供CIS基準指南,這是一個公認的全球標準和保護IT系統和資料免受網路攻擊的最佳的指南。

此外,CIS-CAT Pro是一個“跨平臺Java應用程式”工具,用於掃描目標系統並將系統設定與CIS基準進行比較後生成的報告。有超過80個涵蓋幾乎所有作業系統的CIS基準測試,根據具體需要提供不同的配置檔案。

2.4.2 如何執行

注意:這種整合需要CIS-CAT Pro,它是專有軟體。您可以在CIS官方網站上瞭解有關此工具以及如何下載該工具的更多資訊。

CIS-CAT Wazuh模組將CIS基準評估整合到Wazuh代理中,並以警報的形式報告每次掃描的結果。

CIS-CAT Pro是用Java編寫的,因此需要Java Runtime Environment才能執行它。目前,CIS-CAT支援的JRE版本是JRE 6,7,8。按照以下步驟安裝OpenJDK平臺:

對於CentOS / RHEL / Fedora:

# yum install java-1.8.0-openjdk
對於Debian / Ubuntu:
# apt-get update && apt-get install openjdk-8-jre

注意:如果Java Runtime Environment的版本8不適用於該程式執行,請改用版本7或6。

要執行此整合,CIS-CAT工具必須駐留在執行掃描的本地代理上。但是,JRE可以位於可移動磁碟或網路驅動器上,以便在多個代理之間共享。

此外,在Unix系統中,可能需要為CIS-CAT指令碼授予執行許可權。為此,請從CIS-CAT目錄執行以下命令:

# chmod +x CIS-CAT.sh

一旦有了執行CIS評估的要求,就可以配置wodle以按您選擇的時間間隔檢查特定的基線。這些檢查的掃描結果將傳送給管理器,並在管理中以視覺化顯示結果:

2.4.3 典型案例:執行CIS評估

以下是如何部署CIS-CAT整合的示例:

在配置檔案中ossec.conf,設定如下部分:

如果您使用的是UNIX環境:

<wodle  name = “cis-cat” >

  <disabled>
no
</ disabled> 
  <timeout>
1800
</ timeout> 
  <interval>
1d
</ interval> 
  <scan-on-start>
yes
</ scan-on-start>

  <java_path>
/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/bin
</ java_path> 
  <ciscat_path>
wodles / ciscat
</ ciscat_path>

  <content  type = “xccdf”  path = “benchmarks / CIS_Ubuntu_Linux_16.04_LTS_Benchmark_v1.0.0-xccdf.xml” > 
    <profile>
xccdf_org.cisecurity.benchmarks_profile_Level_2 _-_ Server
</ profile> 
  </ content>

</ wodle>

如果您使用的是Windows環境:

<wodle  name = “cis-cat” > 
  <disabled>
no
</ disabled> 
  <timeout>
1800
</ timeout> 
  <interval>
1d
</ interval> 
  <scan-on-start>
yes
</ scan-on-start>

  <java_path>
\\ server \ jre \ bin
</ java_path> 
  <ciscat_path>
C:\ cis-cat
</ ciscat_path>

  <content  type = “xccdf”  path = “benchmarks \ your_windows_benchmark_file_xccdf.xml” > 
    <profile>
xccdf_org.cisecurity.benchmarks_profile_Level_2 _-_ Server
</ profile> 
  </ content>

</ wodle>

確保對於Java和CIS-CAT工具的位置路徑是否正確。對於這兩種情況,您可以指定Wazuh安裝資料夾的完整路徑或相對路徑。另外,在配置content部分時請考慮以下提示:

  • 所選基線檔案的位置必須由完整路徑或CIS-CAT安裝資料夾的相對路徑。
  • 如果未指定配置檔案,則將選擇通常最許可的第一個配置檔案。
  • 重新啟動Wazuh代理後,將按指定的時間間隔執行基線檢查,觸發警報,如下所示。

有關已執行掃描和報告概述的資訊

** Alert 1518119251.42536: - ciscat,
2018 Feb 08 11:47:31 ubuntu->wodle_cis-cat
Rule: 87411 (level 5) -> 'CIS-CAT Report overview: Score less than 80% (53%)'
{"type":"scan_info","scan_id":1701467600,"cis":{"benchmark":"CIS Ubuntu Linux 16.04 LTS Benchmark","profile":"xccdf_org.cisecurity.benchmarks_profile_Level_2_-_Server","hostname":"ubuntu","timestamp":"2018-02-08T11:47:28.066-08:00","pass":98,"fail":85,"error":0,"unknown":1,"notchecked":36,"score":"53%"}}
type: scan_info
scan_id: 1701467600
cis.benchmark: CIS Ubuntu Linux 16.04 LTS Benchmark
cis.profile: xccdf_org.cisecurity.benchmarks_profile_Level_2_-_Server
cis.hostname: ubuntu
cis.timestamp: 2018-02-08T11:47:28.066-08:00
cis.pass: 98
cis.fail: 85
cis.error: 0
cis.unknown: 1
cis.notchecked: 36
cis.score: 53%

自Wazuh v3.5.0起,報告摘要儲存在代理DB中,目的是通過API進行查詢。這允許每次使用者想要知道最後一次掃描的結果。

有關特定結果的資訊

** Alert 1518119251.125999: - ciscat,
2018 Feb 08 11:47:31 ubuntu->wodle_cis-cat
Rule: 87409 (level 7) -> 'CIS-CAT: Ensure login and logout events are collected (failed)'
{"type":"scan_result","scan_id":1701467600,"cis":{"rule_id":"4.1.8","rule_title":"Ensure login and logout events are collected","group":"Logging and Auditing","description":"Monitor login and logout events. The parameters below track changes to files associated with login/logout events. The file /var/log/faillog tracks failed events from login. The file /var/log/lastlog maintain records of the last time a user successfully logged in. The file /var/log/tallylog maintains records of failures via the pam_tally2 module","rationale":"Monitoring login/logout events could provide a system administrator with information associated with brute force attacks against user logins.","remediation":"Add the following lines to the /etc/audit/audit.rules file: -w /var/log/faillog -p wa -k logins-w /var/log/lastlog -p wa -k logins-w /var/log/tallylog -p wa -k logins","result":"fail"}}
type: scan_result
scan_id: 1701467600
cis.rule_id: 4.1.8
cis.rule_title: Ensure login and logout events are collected
cis.group: Logging and Auditing
cis.description: Monitor login and logout events. The parameters below track changes to files associated with login/logout events. The file /var/log/faillog tracks failed events from login. The file /var/log/lastlog maintain records of the last time a user successfully logged in. The file /var/log/tallylog maintains records of failures via the pam_tally2 module
cis.rationale: Monitoring login/logout events could provide a system administrator with information associated with brute force attacks against user logins.
cis.remediation: Add the following lines to the /etc/audit/audit.rules file: -w /var/log/faillog -p wa -k logins-w /var/log/lastlog -p wa -k logins-w /var/log/tallylog -p wa -k logins
cis.result: fail

2.4.4 典型案例:CIS-CAT計劃執行

版本3.5.0中的新功能。

為CIS-CAT模組添加了新的計劃選項,允許使用者確定何時在每個代理中啟動CIS掃描。

正如參考文件的CIS-CAT部分所描述的那樣,我們可以使用一些新選項來預期的結果。

wodle配置的以下示例顯示了在模組啟動時可能性的計劃。所有這些選項都與scan-on-start選項無關,該選項始終在服務啟動時執行掃描。

從服務啟動開始按間隔計劃執行

<!-- Every 5 minutes from start -->
<interval>5m</interval>

按時間計劃執行

<!-- 18:00 every day -->
<time>18:00</time>
<!-- 5:00 every four days -->
<time>5:00</time>
<interval>4d</interval>

按星期計劃執行

<!-- 00:00 every monday -->
<wday>monday</wday>
<!-- 18:00 every monday -->
<wday>monday</monday>
<time>18:00</time>
<!-- 18:00 every monday with three weeks of frequency -->
<wday>monday</monday>
<time>18:00</time>
<interval>3w</interval>

按月的日期安排執行

<!-- 00:00 every 20th of the month -->
<day>20</day>
<!-- 18:00 every 20th of the month -->
<day>20</day>
<time>18:00</time>
<!-- 18:00,  20th every two months-->
<day>20</day>
<time>18:00</time>
<interval>2M</interval>

六、監控系統呼叫

Linux Audit系統提供了一種跟蹤計算機上安全相關資訊的方法。 根據預先配置的規則,Audit可以詳細記錄有關係統上發生的事件的實時日誌。 此資訊對於計劃任務關鍵型系統至關重要,可確定安全策略的違規者及其執行的操作。

1.如何執行

注意:本指南基於官方審計指南

Audit使用一組規則來定義日誌檔案中要捕獲的內容。可以指定三種類型的稽核規則:

  • 控制規則允許修改審計系統的行為及其某些配置。
  • 檔案系統規則(也稱為檔案監視)允許稽核對特定檔案或目錄的訪問。
  • 系統呼叫規則允許記錄指定程式所進行的系統呼叫。

可以使用auditctl命令列實用程式以互動方式指定審計規則,但要使更改保持不變,請編輯/etc/audit/audit.rules

注意:與Audit服務和稽核日誌檔案互動的所有命令都需要root許可權,因此您需要root或使用sudo來執行這些命令。

1.1 控制規則

一些示例說明了如何修改Audit系統的規則:

auditctl -b 設定核心中現有審計緩衝區的最大數量
auditctl -e 啟用/禁用稽核系統或鎖定其配置
auditctl -s 顯示審計系統的狀態
auditctl -l 列出所有當前載入的稽核規則
auditctl -D 刪除所有當前載入的稽核規則

1.2 檔案系統規則

要定義檔案系統規則,請使用以下語法:

-w <path> -p <permissions> -k <key_name>

-w <path> 使用<path>指定要稽核的檔案或目錄
-p <permissions> <permissions>是要稽核的許可權,包括以下內容:
r 對檔案或目錄的讀取訪問許可權
w 對檔案或目錄的寫入許可權
x 對檔案或目錄的的執行許可權
a 更改檔案或目錄的屬性許可權
-k <key_name>

<key_name>是一個可選字串,用於標識哪些規則/規則集生成特定日誌行

Wazuh需要這個設定才能更準確地分析日誌

例如,要定義記錄/etc/passwd檔案的所有寫訪問權以及每個屬性更改的規則,請執行以下命令:

# auditctl -w /etc/passwd -p wa -k passwd_changes

1.3 系統呼叫規則

要定義系統呼叫規則,請使用以下語法::

-a action,filter -S system_call -F field=value -k key_name
-a <action>,<filter>

告訴核心的規則匹配引擎在規則列表的末尾附加規則;

我們必須指定要將其附加到哪個規則列表以及觸發時要採取的操作.

<action> always 讀取對檔案或目錄的訪問許可權
never 寫訪問檔案或目錄
<filter>值指定將哪個核心規則匹配過濾器應用於事件
<filter> task

只有審計事件fork或clone syscalls,這在實際中很少使用

exit 將評估所有系統呼叫和檔案系統審計請求。
user

這用於刪除來自使用者空間的一些事件;預設情況下,允許所有來自使用者空間的事件

exclude

這用於排除某些事件被記錄;msgtype用於告訴核心要過濾掉哪條訊息

要更精細地控制要稽核的事件:使用使用者推出過濾器

-S <system_call>

這指定要稽核的system_call;可以在單個規則中指定多個系統呼叫。可以使用該命令找到所有系統呼叫的列表

ausyscall--dump

-F <field = value>

使用field = value指定其他值來縮小要稽核的事件,具體取決於:

架構,組ID,程序ID等...,

多個-F選項可用於單個規則。

-k <key_name>

<key_name>是一個可選字串,用於標識哪些規則/規則集生成特定日誌行。

Wazuh需要這個引數才能更準確地分析日誌

例如,要定義每次由ID為500或許可權更高的系統使用者刪除或重新命名檔案時建立日誌條目的規則,請使用以下命令。請注意,-F auid!= 4294967295選項用於排除未設定登入UID的使用者。

# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

還可以使用系統呼叫規則語法定義檔案系統規則。以下命令為系統呼叫建立一個類似於-w/etc/shadow -Fperm=wa檔案系統的規則:

# auditctl -a always,exit -F path=/etc/shadow -F perm=wa

2.配置

2.1 基本用法

管理器

Audit會生成大量事件,使用Wazuh解碼器和規則很難區分這些事件是否可寫許可權讀許可權執行許可權屬性更改系統呼叫規則相對應。這就是我們在審計規則中使用關鍵引數來提高Wazuh處理事件的原因。如上文所述,每個稽核規則都可以選擇新增描述性鍵值,以標識生成特定稽核日誌條目的規則。我們將使用CDB列表來確定有fire的審計規則的型別。此列表將具有以下語法:

key_name:value

  • Key_name是您在檔案系統規則呼叫系統規則的引數-k 的值
  • 值有以下之一
  • write:具有-p w引數的檔案系統規則
  • read:具有-pr 引數的檔案系統規則。
  • execute::具有-px 引數的檔案系統規則。
  • attribute:具有-pa引數的檔案系統規則
  • command:系統呼叫規則

預設情況下,OSSEC包含以下鍵值的CDB列表:

# cat /var/ossec/etc/lists/audit-keys

audit-wazuh-w:write
audit-wazuh-r:read
audit-wazuh-a:attribute
audit-wazuh-x:execute
audit-wazuh-c:command

您可以將自己的引數及其值新增到列表中,如下所示:

# echo "my_key_write_type:write" >> /var/ossec/etc/lists/audit-keys

每次修改CDB列表時,都必須編譯它:

# /var/ossec/bin/ossec-makelists

代理

安裝稽核

要使用審計系統,必須在系統上安裝審計軟體。如果未安裝此此軟體,請以root使用者身份執行以下命令進行安裝。

Red Hat, CentOS and Fedora:

# yum install audit

基於Debian和Ubuntu的Linux發行版:

# apt-get install auditd

編輯ossec.conf

Wazuh必須知道要審計檢測到的事件。因此,需要將其配置為讀取稽核日誌檔案:

<localfile>
  <log_format>audit</log_format>
  <location>/var/log/audit/audit.log</location>
</localfile>

重新啟動Wazuh

最後,我們必須重新啟動Wazuh代理才能應用更改:

  1. 對於Systemd:
# systemctl restart wazuh-agent
  1. 對於SysV Init:
# service wazuh-agent restart

現在一切都準備好處理審計事件了。您只需要建立適當的稽核規則(通過auditctl/etc/audit/audit.rules

2.2 監視對目錄的訪問

在此示例中,我們將監視//home目錄下訪問:

auditctl -w /home -p w -k audit-wazuh-w
auditctl -w /home -p a -k audit-wazuh-a
auditctl -w /home -p r -k audit-wazuh-r
auditctl -w /home -p x -k audit-wazuh-x

現在我們開始根據新的稽核規則來接收警報:

** Alert 1487891035.24299: - audit,audit_configuration,
2017 Feb 23 15:03:55 localhost->/var/log/audit/audit.log
Rule: 80705 (level 3) -> 'Auditd: Configuration changed'
type=CONFIG_CHANGE msg=audit(1487891033.538:2936): auid=1000 ses=346 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op="add_rule" key="audit-wazuh-w" list=4 res=1
audit.type: CONFIG_CHANGE
audit.id: 2936
audit.key: audit
audit.list: 4
audit.res: 1

** Alert 1487891043.24730: - audit,audit_configuration,
2017 Feb 23 15:04:03 localhost->/var/log/audit/audit.log
Rule: 80705 (level 3) -> 'Auditd: Configuration changed'
type=CONFIG_CHANGE msg=audit(1487891041.427:2937): auid=1000 ses=346 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op="add_rule" key="audit-wazuh-a" list=4 res=1
audit.type: CONFIG_CHANGE
audit.id: 2937
audit.key: audit
audit.list: 4
audit.res: 1

** Alert 1487891047.25161: - audit,audit_configuration,
2017 Feb 23 15:04:07 localhost->/var/log/audit/audit.log
Rule: 80705 (level 3) -> 'Auditd: Configuration changed'
type=CONFIG_CHANGE msg=audit(1487891045.481:2938): auid=1000 ses=346 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op="add_rule" key="audit-wazuh-r" list=4 res=1
audit.type: CONFIG_CHANGE
audit.id: 2938
audit.key: audit
audit.list: 4
audit.res: 1

** Alert 1487891049.25592: - audit,audit_configuration,
2017 Feb 23 15:04:09 localhost->/var/log/audit/audit.log
Rule: 80705 (level 3) -> 'Auditd: Configuration changed'
type=CONFIG_CHANGE msg=audit(1487891049.144:2939): auid=1000 ses=346 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op="add_rule" key="audit-wazuh-x" list=4 res=1
audit.type: CONFIG_CHANGE
audit.id: 2939
audit.key: audit
audit.list: 4
audit.res: 1

注意:雖然可以將先前的規則定義為指定-p warx的單個規則,但我們有意將它們分開,因此每個規則都有自己唯一的金鑰值,這對於分析很重要。

讓我們看看執行以下命令時會發生什麼:

新建:
 # touch /home/malware.py

  ** Alert 1487891161.28457: - audit,audit_watch_write,audit_watch_create,
  2017 Feb 23 15:06:01 localhost->/var/log/audit/audit.log
  Rule: 80790 (level 3) -> 'Audit: Created: /home/malware.py'
  type=SYSCALL msg=audit(1487891161.190:2942): arch=c000003e syscall=2 success=yes exit=3 a0=7ffce677b7b7
  a1=941 a2=1b6 a3=7ffce6779690 items=2 ppid=60621 pid=60761 auid=1000 uid=0 gid=0 euid=0 suid=0
  fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=346 comm="touch" exe="/usr/bin/touch"
  subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-w" type=CWD
  msg=audit(1487891161.190:2942):  cwd="/" type=PATH msg=audit(1487891161.190:2942): item=0
  name="/home/" inode=16777403 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00
  obj=system_u:object_r:home_root_t:s0 objtype=PARENT type=PATH msg=audit(1487891161.190:2942):item=1
  name="/home/malware.py" inode=18369115 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00
  obj=unconfined_u:object_r:home_root_t:s0 objtype=CREATE
  audit.type: SYSCALL
  audit.id: 2942
  audit.syscall: 2
  audit.success: yes
  audit.exit: 3
  audit.ppid: 60621
  audit.pid: 60761
  audit.auid: 1000
  audit.uid: 0
  audit.gid: 0
  audit.euid: 0
  audit.suid: 0
  audit.fsuid: 0
  audit.egid: 0
  audit.sgid: 0
  audit.fsgid: 0
  audit.tty: pts0
  audit.session: 346
  audit.command: touch
  audit.exe: /usr/bin/touch
  audit.key: audit-wazuh-w
  audit.cwd: /
  audit.directory.name: /home/
  audit.directory.inode: 16777403
  audit.directory.mode: 040755
  audit.file.name: /home/malware.py
  audit.file.inode: 18369115
  audit.file.mode: 0100644
寫入:
# nano /home/malware.py

Alert:

** Alert 1487891353.48010: - audit,audit_watch_write,
2017 Feb 23 15:09:13 localhost->/var/log/audit/audit.log
Rule: 80781 (level 3) -> 'Audit: Watch - Write access: /home/malware.py'
type=SYSCALL msg=audit(1487891353.291:2956): arch=c000003e syscall=2 success=yes exit=3 a0=9e2e80
a1=441 a2=1b6 a3=63 items=2 ppid=60621 pid=60819 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0
sgid=0 fsgid=0 tty=pts0 ses=346 comm="nano" exe="/usr/bin/nano"
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-w"
type=CWD msg=audit(1487891353.291:2956):  cwd="/" type=PATH msg=audit(1487891353.291:2956): item=0
name="/home/" inode=16777403 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00
obj=system_u:object_r:home_root_t:s0 objtype=PARENT type=PATH msg=audit(1487891353.291:2956): item=1
name="/home/malware.py" inode=18369115 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00
obj=unconfined_u:object_r:home_root_t:s0 objtype=NORMAL
audit.type: SYSCALL
audit.id: 2956
audit.syscall: 2
audit.success: yes
audit.exit: 3
audit.ppid: 60621
audit.pid: 60819
audit.auid: 1000
audit.uid: 0
audit.gid: 0
audit.euid: 0
audit.suid: 0
audit.fsuid: 0
audit.egid: 0
audit.sgid: 0
audit.fsgid: 0
audit.tty: pts0
audit.session: 346
audit.command: nano
audit.exe: /usr/bin/nano
audit.key: audit-wazuh-w
audit.cwd: /
audit.directory.name: /home/
audit.directory.inode: 16777403
audit.directory.mode: 040755
audit.file.name: /home/malware.py
audit.file.inode: 18369115
audit.file.mode: 0100644
更改許可權
  # chmod u+x /home/malware.py

Alert::

  ** Alert 1487891409.49498: - audit,audit_watch_attribute,
  2017 Feb 23 15:10:09 localhost->/var/log/audit/audit.log
  Rule: 80787 (level 3) -> 'Audit: Watch - Change attribute: /home/malware.py'
  type=SYSCALL msg=audit(1487891408.563:2957): arch=c000003e syscall=268 success=yes exit=0 a0=ffffffffffffff9c
  a1=22f50f0 a2=1e4 a3=7fffe879a7d0 items=1 ppid=60621 pid=60820 auid=1000 uid=0 gid=0 euid=0
  suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=346 comm="chmod" exe="/usr/bin/chmod"
  subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-a" type=CWD
  msg=audit(1487891408.563:2957):  cwd="/" type=PATH msg=audit(1487891408.563:2957): item=0
  name="/home/malware.py" inode=18369115 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00
  obj=unconfined_u:object_r:home_root_t:s0 objtype=NORMAL
  audit.type: SYSCALL
  audit.id: 2957
  audit.syscall: 268
  audit.success: yes
  audit.exit: 0
  audit.ppid: 60621
  audit.pid: 60820
  audit.auid: 1000
  audit.uid: 0
  audit.gid: 0
  audit.euid: 0
  audit.suid: 0
  audit.fsuid: 0
  audit.egid: 0
  audit.sgid: 0
  audit.fsgid: 0
  audit.tty: pts0
  audit.session: 346
  audit.command: chmod
  audit.exe: /usr/bin/chmod
  audit.key: audit-wazuh-a
  audit.cwd: /
  audit.file.name: /home/malware.py
  audit.file.inode: 18369115
  audit.file.mode: 0100644
讀取許可權

#/home/malware.py

Alert:

**Alert1487891459.53222:-audit,audit_watch_read,2017Feb2315:10:59localhost->/var/log/audit/audit.logRule:80784(level3)->'Audit: Watch - Read access: /home/malware.py'type=SYSCALLmsg=audit(1487891458.283:2960):arch=c000003esyscall=2success=yesexit=3a0=14d1e20a1=0a2=ffffffffffffff80a3=7ffdd01083d0items=1ppid=60621pid=60821auid=1000uid=0gid=0euid=0suid=0fsuid=0egid=0sgid=0fsgid=0tty=pts0ses=346comm="bash"exe="/usr/bin/bash"subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023key="audit-wazuh-r"type=CWDmsg=audit(1487891458.283:2960):cwd="/"type=PATHmsg=audit(1487891458.283:2960):item=0name="/home/malware.py"inode=18369115dev=fd:00mode=0100744ouid=0ogid=0rdev=00:00obj=unconfined_u:object_r:home_root_t:s0objtype=NORMALaudit.type:SYSCALLaudit.id:2960audit.syscall:2audit.success:yesaudit.exit:3audit.ppid:60621audit.pid:60821audit.auid:1000audit.uid:0audit.gid:0audit.euid:0audit.suid:0audit.fsuid:0audit.egid:0audit.sgid:0audit.fsgid:0audit.tty:pts0audit.session:346audit.command:bashaudit.exe:/usr/bin/bashaudit.key:audit-wazuh-raudit.cwd:/audit.file.name:/home/malware.pyaudit.file.inode:18369115audit.file.mode:0100744
刪除檔案
# rm /home/malware.py

Alert:

** Alert 1487891497.54463: - audit,audit_watch_write,audit_watch_delete,
2017 Feb 23 15:11:37 localhost->/var/log/audit/audit.log
Rule: 80791 (level 3) -> 'Audit: Deleted: /home/malware.py'
type=SYSCALL msg=audit(1487891496.026:2961): arch=c000003e syscall=263 success=yes exit=0
a0=ffffffffffffff9c a1=13b00c0 a2=0 a3=7ffe1b582dc0 items=2 ppid=60621 pid=60824 auid=1000
uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=346 comm="rm" exe="/usr/bin/rm"
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-w"
type=CWD msg=audit(1487891496.026:2961):  cwd="/" type=PATH msg=audit(1487891496.026:2961): item=0
name="/home/" inode=16777403 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00
obj=system_u:object_r:home_root_t:s0 objtype=PARENT type=PATH msg=audit(1487891496.026:2961): item=1
name="/home/malware.py" inode=18369115 dev=fd:00 mode=0100744 ouid=0 ogid=0 rdev=00:00
obj=unconfined_u:object_r:home_root_t:s0 objtype=DELETE
audit.type: SYSCALL
audit.id: 2961
audit.syscall: 263
audit.success: yes
audit.exit: 0
audit.ppid: 60621
audit.pid: 60824
audit.auid: 1000
audit.uid: 0
audit.gid: 0
audit.euid: 0
audit.suid: 0
audit.fsuid: 0
audit.egid: 0
audit.sgid: 0
audit.fsgid: 0
audit.tty: pts0
audit.session: 346
audit.command: rm
audit.exe: /usr/bin/rm
audit.key: audit-wazuh-w
audit.cwd: /
audit.directory.name: /home/
audit.directory.inode: 16777403
audit.directory.mode: 040755
audit.file.name: /home/malware.py
audit.file.inode: 18369115
audit.file.mode: 0100744

2.3 監控使用者操作

在這裡,我們選擇稽核具有管理員許可權的使用者執行的所有命令。審計配置非常簡單:

# auditctl -a exit,always -F euid=0 -F arch=b64 -S execve -k audit-wazuh-c
# auditctl -a exit,always -F euid=0 -F arch=b32 -S execve -k audit-wazuh-c

如果root使用者執行nano,則警報將如下所示:

* Alert 1487892032.56406: - audit,audit_command,
2017 Feb 23 15:20:32 localhost->/var/log/audit/audit.log
Rule: 80792 (level 3) -> 'Audit: Command: /usr/bin/nano'
type=SYSCALL msg=audit(1487892031.893:2963): arch=c000003e syscall=59 success=yes exit=0 a0=14e4990
a1=14e4a30 a2=14d4ef0 a3=7ffdd01083d0 items=2 ppid=60621 pid=60840 auid=1000 uid=0 gid=0 euid=0
suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=346 comm="nano" exe="/usr/bin/nano"
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-c" type=EXECVE
msg=audit(1487892031.893:2963): argc=1 a0="nano" type=CWD msg=audit(1487892031.893:2963):
cwd="/" type=PATH msg=audit(1487892031.893:2963): item=0 name="/bin/nano" inode=18372489 dev=fd:00
mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL type=PATH
msg=audit(1487892031.893:2963): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=33595530 dev=fd:00
mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
audit.type: SYSCALL
audit.id: 2963
audit.syscall: 59
audit.success: yes
audit.exit: 0
audit.ppid: 60621
audit.pid: 60840
audit.auid: 1000
audit.uid: 0
audit.gid: 0
audit.euid: 0
audit.suid: 0
audit.fsuid: 0
audit.egid: 0
audit.sgid: 0
audit.fsgid: 0
audit.tty: pts0
audit.session: 346
audit.command: nano
audit.exe: /usr/bin/nano
audit.key: audit-wazuh-c
audit.cwd: /
audit.file.name: /bin/nano
audit.file.inode: 18372489
audit.file.mode: 0100755

2.4 特權升級

預設情況下,Wazuh能夠通過分析/var/log/auth.log中的相應日誌來檢測許可權提升。以下示例顯示以home的使用者執行了root許可權的操作。

# homer@springfield:/# sudo ls /var/ossec/etc

Wazuh檢測到該動作,在其他欄位中提取srcuserdstusercommand

** Alert 1487892460.79075: - syslog,sudo,pci_dss_10.2.5,pci_dss_10.2.2,
2017 Feb 23 15:27:40 localhost->/var/log/secure
Rule: 5402 (level 3) -> 'Successful sudo to ROOT executed'
User: root
Feb 23 15:27:40 localhost sudo:    rromero : TTY=pts/0 ; PWD=/home/rromero ; USER=root ; COMMAND=/bin/ls /var/ossec/etc
tty: pts/0
pwd: /home/rromero
command: /bin/ls

但是,您可能會發現此級別的詳細資訊不足,在這種情況下您可以使用稽核。如果您建立了一個規則來監視root操作,就像在前一個用例中一樣,將記錄每個帶有sudo的操作,但是auid欄位將不會顯示實際的提權使用者的賬號資訊。您通常想知道最初發起命令的人,無論是否提權。為了在sudo之後保持使用者的跟蹤,有必要配置PAM

注意:對PAM配置要非常小心,因為錯誤的配置可能會使您的系統無法訪問。

將以下行新增到需要它的每個PAM服務:

session required        pam_loginuid.so

常見配置應包括:logincommon-sessioncronsshd

# grep -R "pam_loginuid.so" /etc/pam.d/

/etc/pam.d/login:session    required     pam_loginuid.so
/etc/pam.d/common-session:session required        pam_loginuid.so
/etc/pam.d/cron:session    required     pam_loginuid.so
/etc/pam.d/sshd:session    required     pam_loginuid.so

在配置PAM之後,如果我們使用home的使用者執行上一個命令,我們將看到欄位auid是1004,即用home使用者的id。

** Alert 1487892803.121460: - audit,audit_command,
2017 Feb 23 15:33:23 localhost->/var/log/audit/audit.log
Rule: 80792 (level 3) -> 'Audit: Command: /usr/bin/ls'
type=SYSCALL msg=audit(1487892802.652:3054): arch=c000003e syscall=59 success=yes exit=0 a0=7f711f7d4ef8
a1=7f711f7d6358 a2=7f711f7df2e0 a3=7 items=2 ppid=60910 pid=60911 auid=1000 uid=0 gid=0 euid=0 suid=0
fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=346 comm="ls" exe="/usr/bin/ls"
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="audit-wazuh-c" type=EXECVE
msg=audit(1487892802.652:3054): argc=2 a0="ls" a1="/var/ossec/etc" type=CWD msg=audit(1487892802.652:3054):
cwd="/home/rromero" type=PATH msg=audit(1487892802.652:3054): item=0 name="/bin/ls" inode=16912203 dev=fd:00
mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL type=PATH
msg=audit(1487892802.652:3054): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=33595530 dev=fd:00
mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
audit.type: SYSCALL
audit.id: 3054
audit.syscall: 59
audit.success: yes
audit.exit: 0
audit.ppid: 60910
audit.pid: 60911
audit.auid: 1000
audit.uid: 0
audit.gid: 0
audit.euid: 0
audit.suid: 0
audit.fsuid: 0
audit.egid: 0
audit.sgid: 0
audit.fsgid: 0
audit.tty: pts0
audit.session: 346
audit.command: ls
audit.exe: /usr/bin/ls
audit.key: audit-wazuh-c
audit.cwd: /home/rromero
audit.file.name: /bin/ls
audit.file.inode: 16912203

七、命令監控

有時您可能想要監控日誌中沒有內容。為了解決這個問題,Wazuh結合了監控特定命令輸出的功能,並將輸出視為日誌檔案內容。

1.執行流程

在代理上設定特定命令輸出的監控需要以下內容配置:

1.1 配置Wazuh代理以接受來自管理器的遠端命令

代理能夠執行從管理器推送的命令(通過目錄中的shared檔案)。但是,在使用此功能之前,必須明確配置代理以接受遠端命令。這可以通過在每個代理上的檔案中設定logcollector.remote_commands來完成,local_internal_options.conf如下所示:

# Logcollector - Whether or not to accept remote commands from the manager
logcollector.remote_commands=1

1.2 配置要監控的命令

可以在各個代理程式的本地ossec.conf檔案中配置要執行和監視的命令,但是,此配置的理想位置位於管理器上的agent.conf檔案的相應配置中。

<localfile>
     <log_format>full_command</log_format>
     <command>.....</command>
     <frequency>120</frequency>
</localfile>

1.3 處理輸出

在配置系統以監視命令的輸出(就像它是日誌資料)之後,可以建立自定義規則,例如用於日誌分析,以便處理輸出並在滿足警報條件時觸發警報。

2.配置

2.1基本用法

命令監視在ossec.conflocalfile section配置。它也可以在agent.conf中集中配置。

2.2 監視執行Windows程序

假設您希望監視正在執行的程序,並在重要程序未執行時發出警報。

使用notepad.exe作為監視的重要過程的示例:

1.在代理程式的local_internal_options.conf檔案中配置代理程式以接受來自管理器的遠端命令。

# Logcollector - Whether or not to accept remote commands from the manager
logcollector.remote_commands=1

2.在manager的agent.conf檔案中定義命令以列出正在執行的程序。

<localfile>
     <log_format>full_command</log_format>
     <command>tasklist</command>
     <frequency>120</frequency>
 </localfile>

<frequency>標籤定義命令將在幾秒鐘內執行。

3.定義規則

<rule id="100010" level="6">
  <if_sid>530</if_sid>
  <match>^ossec: output: 'tasklist'</match>
  <description>Important process not running.</description>
  <group>process_monitor,</group>
</rule>
<rule id="100011" level="0">
  <if_sid>100010</if_sid>
  <match>notepad.exe</match>
  <description>Processes running as expected</description>
  <group>process_monitor,</group>
</rule>

第一個規則(100010)將生成警報(“重要程序未執行”),除非它被其子命令(100011)覆蓋,該子規則與命令輸出中的notepad.exe匹配。您可以根據需要新增任意數量的子規則,以列舉您要監視的所有重要程序。您還可以通過<command>標籤新增tasklist列出程序的Linux命令來調整此示例以監視Linux程序,例如命令:ps-auxw

2.3 磁碟空間利用率

df可以在管理器的agent.conf檔案或代理的ossec.conf檔案中配置該命令:

<localfile>
    <log_format>command</log_format>
    <command>df -P</command>
</localfile>

Wazuh已經有規則來監控這個:

<rule id="531" level="7" ignore="7200">
  <if_sid>530</if_sid>
  <match>ossec: output: 'df -P': /dev/</match>
  <regex>100%</regex>
  <description>Partition usage reached 100% (disk space monitor).</description>
  <group>low_diskspace,pci_dss_10.6.1,</group>
</rule>

一旦任何分割槽上的磁碟空間使用率達到100%,系統將發出警報。

2.5 檢查輸出是否更改

在這種情況下,Linux“netstat”命令與check_diff選項一起用於監視偵聽tcp sockets 的更改。

這可以在agent.conf檔案或ossec.conf檔案中配置:

<localfile>
  <log_format>full_command</log_format>
  <command>netstat -tan |grep LISTEN|grep -v 127.0.0.1</command>
</localfile>

Wazuh已經有規則來監控這個:

<rule id="533" level="7">
  <if_sid>530</if_sid>
  <match>ossec: output: 'netstat -tan</match>
  <check_diff />
  <description>Listened ports status (netstat) changed (new port opened or closed).</description>
  <group>pci_dss_10.2.7,pci_dss_10.6.1,</group>
</rule>

如果輸出發生更改,系統將生成一個警報,指示網路偵聽器已取消或已出現新的警報。這可能表示某些內容已損壞或已安裝了後門

2.6 負載均衡值

Wazuh可以配置為監視Linux,uptime命令並在高於給定閾值時發出警報,例如本例中的2

這可以在agent.conf檔案或ossec.conf檔案中配置:

<localfile>
    <log_format>command</log_format>
    <command>uptime</command>
</localfile>

當“正常執行時間”高於2倍時,自定義規則會發出警報:

<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>

2.7 檢測USB儲存

Wazuh可配置為在連線USB儲存裝置時發出警報。此示例適用於Windows代理。

通過將以下內容新增到管理器來配置代理以監視USBSTOR登錄檔項agent.conf

<agent_config os="Windows">
  <localfile>
      <log_format>full_command</log_format>
      <command>reg QUERY HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR</command>
  </localfile>
</agent_config>

接下來建立自定義規則:

<rule id="140125" level="7">
    <if_sid>530</if_sid>
    <match>ossec: output: 'reg QUERY</match>
    <check_diff />
    <description>New USB device connected</description>
</rule>

3.常規問題

3.1 可以在Linux和Windows上監控命令嗎?

是。您可以在Linux和Windows系統上監視命令輸出。

3.2 什麼是命令監控功能?

這些功能主要包括監視磁碟空間利用率,負載均衡值,網路偵聽器的更改以及執行程序以確保所有重要程序都在執行。

3.3 我可以檢查應用程式是否在代理上執行嗎?

是的,可以監控正在執行的應用程式:示例



八、主動響應

主動響應執行各種策略以解決受到的主動威脅,例如在滿足某些規則時阻止從威脅源訪問代理。

主動響應執行指令碼以應答基於警報級別或規則組觸發的特定警報。可以應答觸發器啟動任意數量的指令碼,但是,應仔細考慮這些應答。規則和應答的執行不力可能會增加系統的危險性。

1.處理流程

1.1觸發主動響應

主動響應是配置在特定警報,警報級別或規則組已被觸發執行指令碼。主動響應是有狀態響應或無狀態響應。狀態響應配置為在指定的時間段後撤消操作,而無狀態響應配置為一次性操作。

1.2 執行主動響應

每個主動響應指定將執行其關聯命令的位置包括:在觸發警報的代理上,在管理器上,在另一個指定代理上或在還包括管理器的所有代理上。

1.3 主動響應配置

通過修改管理器中ossec.conf檔案配置主動響應,如下所示:

  1. 建立一個命令

    為了配置主動響應,必須定義一個命令,該命令將啟動某個指令碼以應答觸發器。

    要配置主動響應,請使用下面的模式定義命令的名稱,然後引用要啟動的指令碼。接下來,定義將傳遞給指令碼的資料型別。

    能夠從命令列接收引數的自定義指令碼也可用於主動響應

    例如:

    <command>
      <name>host-deny</name>
      <executable>host-deny.sh</executable>
      <expect>srcip</expect>
      <timeout_allowed>yes</timeout_allowed>
    </command>

    在此示例中,將呼叫該命令名(host-deny)並啟動指令碼(host-deny.sh)。資料型別定義為srcip。此命令配置為允許在指定的時間段內超時,使其成為有狀態響應。

    注意:有關在此處建立命令的更多資訊和選項:command

  • 定義主動響應

    主動響應配置定義命令將在何時何處執行。當具有特定id,嚴重性級別或來源的特定規則與主動響應條件匹配時,將觸發命令。此配置將進一步定義命令的操作將在何處啟動,這意味著在執行位置:代理,管理器,本地或任何地方。

    <active-response>
      <command>host-deny</command>
      <location>local</location>
      <level>7</level>
      <timeout>600</timeout>
    </active-response>

    在此示例中,主動響應配置為執行上一步中定義的命令。 操作的位置定義為本地主機,當定義為規則的級別高於6的時任何時間時。命令配置中允許的超時也在上面的示例中定義。

注意:有主動響應選項的更多資訊:主動響應

可以在以下位置檢視主動響應日誌:/var/ossec/logs/active-response.log

1.4 預設主動響應指令碼

Wazuh預先配置了以下Linux指令碼:

指令碼名稱描述
disable-account.sh 通過設定禁用帳戶passwd-l
firewall-drop.sh 將IP新增到iptables拒絕列表中
firewalld-drop.sh 將IP新增到firewalld下拉列表中
host-deny.sh 將IP新增到/etc/hosts.deny檔案中
ip-customblock.sh 自定義OSSEC,可輕鬆修改以進行自定義響應
ipfw_mac.sh Mac OS建立的防火牆被刪除的響應指令碼
ipfw.sh ipfw建立的防火牆被斷開的響應指令碼
npf.sh npf建立的防火牆被刪除的響應指令碼
ossec-slack.sh 在Slack上釋出修改
ossec-tweeter.sh 在Twitter上釋出修改
pf.sh pf建立的防火牆被刪除的響應指令碼
restart-ossec.sh 更改ossec.conf時自動重啟Wazuh
route-null.sh 將IP新增到空路由

以下預配置指令碼適用於Windows:

指令碼名稱描述
netsh.cmd 使用netsh阻止ip
restart-ossec.cmd 重新啟動ossec代理
route-null.cmd 將IP新增到空路由

2.配置

2.1 基本用法

Active ResponseCommand部分的ossec.conf檔案中配置了主動響應

在此示例中,restart-ossec命令配置為使用不帶資料型別的restart-ossec.sh指令碼。 主動響應配置為在ID為10005的規則觸發時在本地主機上啟動restart-ossec命令。 這是一個無狀態響應,因為沒有定義超時引數。

命令:

<command>
  <name>restart-ossec</name>
  <executable>restart-ossec.sh</executable>
  <expect></expect>
</command>

無狀態主動響應:

<active-response>
  <command>restart-ossec</command>
  <location>local</location>
  <rules_id>10005</rules_id>
</active-response>

2.2 Windows自動修復

在此示例中,該win_rout-null命令配置為指令碼route-null.cmd,資料型別為指令碼srcip。主動響應名稱配置為win_rout-null,在規則等級高於7的警報級別時,將會在本地主機上啟動該指令碼命令。這是狀態響應,超時設定為900秒。

命令:

<command>
  <name>win_route-null</name>
  <executable>route-null.cmd</executable>
  <expect>srcip</expect>
  <timeout_allowed>yes</timeout_allowed>
</command>

狀態主動響應:

<active-response>
  <command>win_route-null</command>
  <location>local</location>
  <level>8</level>
  <timeout>900</timeout>
</active-response>

2.3 使用PF阻止IP

在此示例中,該pf-block命令配置為指令碼pf.sh,資料型別為指令碼scrip,主動響應名稱配置為pf-block“authentication_failed”“authentication_failures”規則組中的規則觸發時,主動響應被配置為在agent001上啟動j指令碼命令。這是一個無狀態響應,因為沒有定義超時引數。

命令:

<command>
  <name>pf-block</name>
  <executable>pf.sh</executable>
  <expect>srcip</expect>
</command>

無狀態主動響應:

<active-response>
  <command>pf-block</command>
  <location>defined-agent</location>
  <agent_id>001</agent_id>
  <rules_group>authentication_failed,authentication_failures</rules_group>
</active-response>

2.4 將IP新增到iptables列表

在此示例中,firewall-drop命令配置為使用firewall-drop.sh指令碼執行。 主動響應配置為在“authentication_failed”或“authentication_failures”規則組中的規則觸發時,將在所有系統上啟動firewall-drop.sh指令碼命令。 這是狀態響應,超時為700秒。 <repeated_offenders>標記通過特定IP地址增加每個後續攻擊的超時時間。

注意:此引數以分鐘而不是秒指定。

命令:

<command>
  <name>firewall-drop</command>
  <executable>firewall-drop.sh</executable>
  <expect>srcip</expect>
</command>

狀態主動響應:

<active-response>
  <command>firewall-drop</command>
  <location>all</location>
  <rules_group>authentication_failed,authentication_failures</rules_group>
  <timeout>700</timeout>
  <repeated_offenders>30,60,120</repeated_offenders>
</active-response>

2.5在指定時間段內的主動響應

有狀態響應的操作將持續指定的時間段。

在本例中,host-deny命令配置為使用資料型別scrip的host-deny.sh指令碼。啟用響應配置為在觸發警報等級高於6的規則時將會在本地主機上啟動host-deny.sh命令。

命令:

<command>
  <name>host-deny</name>
  <executable>host-deny.sh</executable>
  <expect>srcip</expect>
  <timeout_allowed>yes</timeout_allowed>
</command>

狀態主動響應:

<active-response>
  <command>host-deny</command>
  <location>local</location>
  <level>7</level>
  <timeout>600</timeout>
</active-response>

更多資訊:命令

6.不會撤消的主動響應

無狀態命令的動作是一次性動作,不會被撤消。

在本例中,mail-test命令被配置為使用不帶資料元素的mail-test.sh指令碼。活動響應配置為在ID為1002的規則觸發時在伺服器上啟動郵件測試命令。

命令:

<command>
  <name>mail-test</name>
  <executable>mail-test.sh</executable>
  <timeout_allowed>no</timeout_allowed>
  <expect></expect>
</command>

不撤銷的主動響應:

<active-response>
    <command>mail-test</command>
    <location>server</location>
    <rules_id>1002</rules_id>
 </active-response>

3.常問問題

3.1 我可以使用自定義指令碼進行主動響應嗎?

是。您可以建立自己的指令碼並配置命令和主動響應以引用它。請記住,AR在執行指令碼時應遵循特定的引數語法。引數按此順序插入:

<SCRIPT-NAME> <ACTION> <USER> <IP> <ALERT-ID> <RULE-ID> <AGENT> <FILENAME>

一些標記說明:

  • <SCRIPT-NAME>要執行的指令碼檔案的名稱
  • <ACTION>可以刪除新增
  • <USER>使用者名稱,如果沒有被設定,也可以進行設定
  • <IP>是源IP。如果沒有被設定,也可以進行設定
  • <ALERT-ID>警報ID(每個警報都是唯一的)。
  • <RULE-ID> 規則ID。
  • <AGENT> 代理ID或主機名。
  • <FILENAME>觸發警報的日誌的源路徑檔案(如果存在)。

3.2 我是否可以僅為一臺主機配置主動響應?

是的,配置其選項。更多資訊:Active Response選項

3.3 一段時間後,主動響應是否可以刪除該操作?

是的,使用<timeout_allowed>命令上的<timeout>標記和主動響應上的標記。更多資訊:示例


九、無代理監控

無代理監控允許您通過SSH監控沒有agent的裝置或系統,例如路由器,防火牆,交換機和linux/bsd系統。這允許具有軟體安裝限制的使用者滿足安全性和合規性要求。

當輸出上的校驗和發生變化時,將觸發警報,並顯示校驗和或更改的真實的差異輸出。

1.處理流程

1.1 連線

使用無代理監視的第一步是使用以下命令啟用它:

# /var/ossec/bin/ossec-control enable agentless

要使用SSH身份驗證將管理器連線到裝置,應該使用register_host.sh指令碼。此指令碼位於/var/ossec/agentless/目錄中,有兩個選項:listadd

使用該list選項將列出已包含的所有主機。

# /var/ossec/agentless/register_host.sh list

使用該add選項將指定要新增到管理器的新裝置。NOPASS可以使用公鑰認證而不輸入密碼。對於Cisco裝置(如路由器或防火牆),enablepass應使用它來指定啟用密碼。

# /var/ossec/agentless/register_host.sh add root@example_address.com example_password [enablepass]

公鑰認證可以與以下命令一起使用:

# sudo -u ossec ssh-keygen

建立後,必須將公鑰複製到遠端裝置中。

1.2 監控

將裝置新增到列表後,必須將管理器配置為監視。要檢視該ossec.conf檔案的其他配置選項,請參閱無代理

1.2.1 BSD完整性檢查

對於BSD系統,請將型別設定為ssh_integrity_check_bsd,如下所述。 可以使用<arguments>標記在配置部分中引用以空格分隔的目錄列表。 使用此配置,Wazuh將對遠端控制端進行完整性檢查。

<agentless>
  <type>ssh_integrity_check_bsd</type>
  <frequency>20000</frequency>
  <host>root@test.com</host>
  <state>periodic</state>
  <arguments>/bin /var/</arguments>
</agentless>

Linux完整性檢查

對於Linux系統,請將型別設定為ssh_integrity_check_linux,如下所述。 可以使用<arguments>標記在配置部分中引用以空格分隔的目錄列表。 使用此配置,Wazuh將對遠端控制端進行完整性檢查。

<agentless>
  <type>ssh_integrity_check_linux</type>
  <frequency>36000</frequency>
  <host>root@test.com</host>
  <state>periodic</state>
  <arguments>/bin /etc/ /sbin</arguments>
</agentless>

通用差異

還可以將一組命令配置為在遠端裝置上執行。 如果這些命令的輸出發生變化,Wazuh會發送警告給你。 要使用此選項,請將型別設定為ssh_generic_diff,如下所示

<agentless>
  <type>ssh_generic_diff</type>
  <frequency>20000</frequency>
  <host>root@test.com</host>
  <state>periodic_diff</state>
  <arguments>ls -la /etc; cat /etc/passwd</arguments>
</agentless>

注意:要在命令中使用su作為引數,必須在主機名之前設定use_su。 在前面的示例中,這將顯示為:<host> use_su root@example_address.com </ host>

Pix配置

如果Cisco PIX 或路由器配置發生變化,此選項將發出警報。 將型別設定為ssh_pixconfig_diff,如下所示。

<agentless>
  <type>ssh_pixconfig_diff</type>
  <frequency>36000</frequency>
  <host>pix@pix.fw.local</host>
  <state>periodic_diff</state>
</agentless>

1.3 檢查設定

最後,管理expect程式中必須包含此程式包才能使用此功能。

expect程式包存在且Wazuh重新啟動時,/var/ossec/logs/ossec.log檔案中會顯示以下內容:

ossec-agentlessd: INFO: Test passed for 'ssh_integrity_check_linux'

當Wazuh連線到遠端裝置時,以下內容將顯示在同一日誌檔案中:

ossec-agentlessd: INFO: ssh_integrity_check_linux: root@example_adress.com: Starting.
ossec-agentlessd: INFO: ssh_integrity_check_linux: root@example_adress.com: Finished.

1.4 警報

完成上述配置後,當目錄中發生更改時,將觸發Wazuh警報:

示例警報如下:

完整性檢查BSD/Linux示例警報:

** Alert 1486811998.93230: - ossec,syscheck,pci_dss_11.5,
2017 Feb 11 03:19:58 ubuntu->(ssh_integrity_check_linux) root@192.168.1.3->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: '/etc/.hidden'
Size changed from '0' to '10'
Old md5sum was: 'd41d8cd98f00b204e9800998ecf8427e'
New md5sum is : 'cc7bd56aba1122d0d5f9c7ef7f96de23'
Old sha1sum was: 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
New sha1sum is : 'b570fbdf7d6ad1d1e95ef57b74877926e2cdf196'

File: /etc/.hidden
Old size: 0
New size: 10
New permissions:   1204
New user: 0
New group: 0
Old MD5: d41d8cd98f00b204e9800998ecf8427e
New MD5: cc7bd56aba1122d0d5f9c7ef7f96de23
Old SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709
New SHA1: b570fbdf7d6ad1d1e95ef57b74877926e2cdf196

通用差異樣本警報:

** Alert 1486811190.88243: - ossec,syscheck,agentless,pci_dss_11.5,pci_dss_10.6.1,
2017 Feb 11 03:06:30 ubuntu->(ssh_generic_diff) root@192.168.1.3->agentless
Rule: 555 (level 7) -> 'Integrity checksum for agentless device changed.'
ossec: agentless: Change detected:
3c3
< drwxr-xr-x. 77 root root    8192 Feb 27 10:44 .
---
> drwxr-xr-x. 77 root root    8192 Feb 27 10:47 .
176a177
> -rw-r--r--.  1 root root       0 Feb 27 10:47 test

2.配置

無代理監視在無代理程式部分的ossec.conf檔案中配置。

2.1 完整性檢查

此示例配置將監視/bin/var目錄:

<agentless>
  <type>ssh_integrity_check_bsd</type>
  <frequency>20000</frequency>
  <host>root@test.com</host>
  <state>periodic</state>
  <arguments>/bin /var/</arguments>
</agentless>

請注意,<arguments>標記中可能包含多個目錄,並以空格分隔。

2.2 完整性檢查Linux

對於Linux系統,請將型別設定為ssh_integrity_check_linux,如下所述。 在這裡,可以使用<arguments>標記在配置部分中引用以空格分隔的目錄列表。 使用此配置,Wazuh將對遠端控制端進行完整性檢查。

示例配置將監視/bin,/etc/sbin目錄

<agentless>
  <type>ssh_integrity_check_linux</type>
  <frequency>36000</frequency>
  <host>root@test.com</host>
  <state>periodic</state>
  <arguments>/bin /etc /sbin</arguments>
</agentless>

2.3 通用差異

在此配置中,ls -la 和cat / etc / passwd命令將每20000秒執行一次。 如果命令的輸出發生變化,將觸發警報。

<agentless>
  <type>ssh_generic_diff</type>
  <frequency>20000</frequency>
  <host>[email protected]</host>
  <state>periodic_diff</state>
  <arguments>ls -la /etc; cat /etc/passwd</arguments>
</agentless>

請注意,可以包含<arguments>標記中的多個條目,用“;”分隔。

2.4 Pix配置

在此配置中,Cisco PIX或路由器配置更改時將觸發警報

<agentless>
  <type>ssh_pixconfig_diff</type>
  <frequency>36000</frequency>
  <host>[email protected]</host>
  <state>periodic_diff</state>
</agentless>

3.常問問題

3.1 是否可以監視遠端裝置上命令的輸出?

是的,使用ssh_generic_diff選項:示例

3.2 可以監控遠端系統上的目錄嗎?

是的,使用ssh_integrity_check_bsdssh_integrity_check_linux選項。

十、反flooding機制

此機制旨在防止代理上的大量突發事件對網路或管理器產生負面影響。 它使用漏桶佇列來收集所有生成的事件,並以低於指定事件每秒閾值的速率將它們傳送給管理器。 這有助於避免Wazuh元件斷開的事件或意外事件行為。。

此外,代理模組可以配置為限制其事件生成速率,從而降低漏桶緩衝區飽和的風險。

1.為什麼需要反flooding機制

在Wazuh架構中,Wazuh代理從日誌檔案,命令輸出,不同型別的掃描等收集資訊。然後,他們將所有收集的資訊傳送給他們的管理器,生成單獨的事件。 如果沒有任何擁塞機制,代理可能會以系統物理上能夠傳輸的速率傳送事件,這可能是每秒數百或數千個事件。

由於這一事實,代理中的不正確配置可能會生成足夠的事件來使網路或其管理器飽和。以下是一些可能導致此問題的錯誤配置方案:

  • 包含不斷更改的檔案的目錄的實時FIM(Syscheck):

每次受Syscheck監控的目錄下的檔案發生更改時,都會生成事件。如果Syscheck監視一個不斷變化的目錄,它將生成大量事件。此外,如果受監視的目錄包含Wazuh在生成事件時寫入的任何檔案,例如/var/ossec/queue/,它將導致無限迴圈。

  • Windows過濾平臺:

每次允許出站網路連線時,都會生成Windows防火牆事件(ID 5156)。在Windows中啟用此事件,並且Wazuh配置為監視所有Windows安全日誌事件時,結果是無限迴圈。當代理連線其管理器時,它會生成Windows防火牆事件,從而導致代理再次連線到其管理器。

  • 沒有速率限制的情況下重試錯誤的應用程式:

當某些應用程式遇到錯誤時,例如磁碟已滿,可能會生成一條錯誤日誌資訊,並在每秒一遍又一遍地重試該任務數百次,從而產生大量事件。

這些場景中的每一個都可能產生如此高的事件率,使得代理,網路或管理器的功能可能受到明顯的阻塞。

為了更好地處理這些情況,已部署以下控制元件:

  • 代理到管理器反flooding機制:

這提供了具有代理端漏桶佇列的事件擁塞控制,以防止代理對網路或管理器的進行阻塞。

  • 內部代理防flooding控制:

此機制在代理的不同元件中使用內部控制,控制它們生成事件的速率。

2.漏桶工作原理

如上所述,漏桶是一個位於代理中的擁塞控制,重點是代理到管理器的通訊。它將在代理上生成的事件收集到指定大小的緩衝區中(預設5000個事件),並以不高於指定的每秒事件數(預設500個eps)的速率將它們傳送給管理器。這些值需要考慮到特定代理、管理器和網路環境的需要。下圖顯示了漏桶工作原理。


漏桶有幾個控制級別,目的是瞭解緩衝狀態,並能夠預測和解決潛在的flooding攻擊情況。

  • 完全警報:當緩衝區的佔用容量達到某個閾值時,第一個控制元件將觸發管理器上的警報。 預設情況下,它設定為90%。
  • 泛洪警報:在第一個控制元件之後,如果緩衝區被填滿,管理器將觸發另一個警報。此新警報比警告警報更嚴重,因為漏桶將丟棄傳入事件。
  • 正常警報:生成此警報以通知先前已觸發警告警報或更高警報緩衝級別已恢復正常(預設情況下<= 70%)。

漏桶完全可配置,以適應任何環境,並使用以下配置選項:

2.1 測量配置

本地配置<client_buffer>部分中,可以禁用緩衝區,配置緩衝區的大小(事件數),並配置以EPS或每秒事件數測量的吞吐量限制。

  • 禁用緩衝區:此引數禁用漏桶的使用,從而不會限制代理向管理器傳輸的事件的速率。這就是代理的早期版本的設定方式。
  • 佇列大小:佇列大小是一次可以在漏桶中儲存的最大事件數。應根據代理可能生成事件的預期速率進行配置。預設情況下,此值設定為5000個事件,這對於大多數環境來說是一個很大的緩衝區大小。
  • 每秒事件數:這是事件從代理緩衝區中提取並傳輸到其管理器的最大速率。預設值是500 EPS,但應考慮網路容量和一個管理器正在服務的代理的數量來設定。

此配置也可在集中配置中使用,這意味著可以在agent.conf中設定它,目的是從管理器端配置代理的bucke選項。 當agent.conf配置代理程式時,該配置將覆蓋其自己的本地配置。為了允許代理最終決定允許傳輸的EPS的最小數量,不管在管理器級別通過agent.conf配置的EPS限制如何,可以在代理的內部配置中設定另一個名為agent.min_eps的變數。

2.2 閾值配置

內部配置中,有更多與緩衝操作相關的高階選項。具體而言,可以配置警告和正常水平閾值,以及觸發洪水警報的容差時間。

3.漏桶使用案例

在本節中,將展示當遇到極端情況時,漏桶是如何工作的。為此,下圖顯示了緩衝區在接收到比預期更多的事件時使用的不同階段。以及它如何逐步處理情況。

3.1 正常狀態(綠色區域)

如左圖所示,緩衝區正常工作,接收和傳送事件。 在這種情況下,管理器不會觸發緩衝區警報。 但是,大量事件可能會導致緩衝區使用量增加,導致其達到警告級別,此處設定為90%。

3.2 警告狀態(橙色區域)

一旦達到警告級別,管理器端就會觸發如下警報:

** Alert 1501604235.59814: - wazuh,agent_flooding,
2017 Aug 01 18:17:15 (fedora) any->ossec-agent
Rule: 202 (level 7) -> 'Agent buffer queue is 90% full.'
wazuh: Agent buffer: '90%'.
level: 90%

儘管有此警報,由於緩衝區中仍有可用空間,因此未刪除任何事件

3.3 達到100%(淺紅色區域)

當緩衝區繼續接收比移除事件更快的事件時,它最終將達到其容量的100%,從而觸發管理器上的另一個警報:

** Alert 1501604236.60027: - wazuh,agent_flooding,
2017 Aug 01 18:17:16 (fedora) any->ossec-agent
Rule: 203 (level 9) -> 'Agent event queue is full. Events may be lost.'
wazuh: Agent buffer: 'full'.
level: full

重要的是要了解當緩衝區已滿時,所有新到達的事件都將被丟棄,直到緩衝區中的可用空間開啟。例如,如果在一秒鐘內,1000個事件到達滿容量限制為500 EPS的完整緩衝區,則將儲存500個這樣的事件,其他500個將被丟棄

當緩衝區100%滿時,啟動一個計時器,將其與internal_options.conf中設定的容差時間進行比較。

在這一點上,可能會發生兩件事:

  1. 在計時器達到容差時間之前,緩衝區的使用降低到警告級別以下。 如果發生這種情況,管理員不會顯示有關泛洪的警報。此圖說明了這種情況。
2.緩衝區的使用保持在警告級別之上,直到指定的容差時間結束。 現在,似乎緩衝區本身可能無法恢復到正常狀態。 因此,在管理器上觸發更嚴重的Flooding狀態警報。

3.4 flooding狀態(紅色區域)

如果滿足上述數字2中的條件,緩衝區將超出定義的容差時間和警告級別,則會觸發Flooding狀態警報。

此警報具有以下狀態:

** Alert 1501604250.60248: mail  - wazuh,agent_flooding,
2017 Aug 01 18:17:30 (fedora) any->ossec-agent
Rule: 204 (level 12) -> 'Agent event queue is flooded. Check the agent configuration.'
wazuh: Agent buffer: 'flooded'.
level: flooded

注意:警報描述警告使用者檢查代理,因為它很可能不會自動恢復到正常狀態。請記住,泛洪代理正在丟棄事件

3.5 恢復正常狀態

圖形的右側區域顯示緩衝區在達到100%後恢復到正常狀態的方式。這可能是因為模組因某些事情已經完成或者因違規模組被手動關閉而停止生成過多事件。

為了讓管理員知道代理何時再次正常工作,當使用maxed-out緩衝區減少到低於正常水平(預設為70%)時,會觸發另一個警報。 警報看起來像這樣:

** Alert 1501604257.60486: - wazuh,agent_flooding,
2017 Aug 01 18:17:37 (fedora) any->ossec-agent
Rule: 205 (level 3) -> 'Agent event queue is back to normal load.'
wazuh: Agent buffer: 'normal'.
level: normal

當儲存桶處於此狀態時,不會丟棄任何事件

4.代理模組中的反flooding

為了避免代理緩衝區飽和,然後事件丟失,可能導致此飽和的Wazuh代理守護程式的事件生成率受到限制。

  • Logcollector:如果日誌檔案的寫入速度比日誌收集器能夠讀取的快,這會對代理的正常執行產生負面影響。出於這個原因,代理將限制自己在每個讀取週期內從同一個檔案讀取的最多可配置行數。
  • OpenSCAP Wodle:此模組以前在掃描完成後立即傳送整個掃描結果集。現在它將掃描資訊以規定的速度傳送給管理器,以減少緩衝區最大化的可能性。
這些是位於內部配置的高階配置。 為此目的定義的變數稱為logcollector.max_lines和wazuh_modules.max_eps,在更改這些值時應特別小心。



十一 agent標籤

此功能允許使用者自定義來自agent的警報資訊,以包括與生成警報的agent相關的特定資訊。這在處理或檢視警報時很有用。此外,在大型環境中,此功能可用於通過任何常見特徵(如時區)來識別代理組.

1.工作原理

配置將包含在警報中的標籤是一個簡單的過程。它可以使用簡單的XML格式來完成,該格式將資訊新增到警報中。標籤可以通過將“關鍵”詞分隔來巢狀,以包含在JSON格式的警報中。有關如何配置標籤的資訊可以在ossec.conf的Labels模組中找到。

代理標籤也可以使用agent.conf檔案進行集中管理,以便可以在管理器設定為特定代理標籤。 當預先存在的標籤與使用者在ossec.conf或agent.conf中定義的標籤相同時,第二個標籤將覆蓋第一個標籤。有關如何集中代理配置的詳細資訊,請參閱“集中配置”部分。內部配置部分提供了新增配置資訊。這包括有關analyzed.label_cache_maxage和analyzed.show_hidden_labels的資訊。

2.用例

下面是一個使用標籤可能會有幫助的案例

讓我們假設在Amazon Web Service(AWS)中部署了一個大型環境並由Wazuh監控。在這種情況下,我們希望管理員在觸發警報時獲得有關每個代理的以下資訊:

  • AWS例項ID
  • AWS安全組
  • 網路IP地址
  • 網路MAC
  • 安裝日期(隱藏)

要在來自特定代理的警報中包含這些標籤,必須將以下配置插入到ossec.conf檔案中:

<labels>
  <label key="aws.instance-id">i-052a1838c</label>
  <label key="aws.sec-group">sg-1103</label>
  <label key="network.ip">172.17.0.0</label>
  <label key="network.mac">02:42:ac:11:00:02</label>
  <label key="installation" hidden="yes">January 1st, 2017</label>
</labels>

要在管理器級別設定標籤,將在agent.conf檔案中新增以下配置:

<agent_config name="92603de31548">
  <labels>
    <label key="aws.instance-id">i-052a1838c</label>
    <label key="aws.sec-group">sg-1103</label>
    <label key="network.ip">172.17.0.0</label>
    <label key="network.mac">02:42:ac:11:00:02</label>
    <label key="installation" hidden="yes">January 1st, 2017</label>
  </labels>
</agent_config>

當從管理器應用上述配置的代理觸發警報時,定義的標籤將向警報新增資訊,如下所示:

 ** Alert 1488922301.778562: mail  - ossec,syscheck,pci_dss_11.5,
 2017 Jun 07 13:31:43 (92603de31548) 192.168.66.1->syscheck
 aws.instance-id: i-052a1838c
 aws.sec-group: sg-1103
 network.ip: 172.17.0.0
 network.mac: 02:42:ac:11:00:02
 Rule: 550 (level 7) -> 'Integrity checksum changed.'
 Integrity checksum changed for: '/var/ossec/etc/ossec.conf'
 Size changed from '3663' to '3664'
 Old md5sum was: '98b351df146410f174a967d726f9965e'
 New md5sum is : '7f4f5846dcaa0013a91bd6d3ac4a1915'
 Old sha1sum was: 'c6368b866a835b15baf20976ae5ea7ea2788a30e'
 New sha1sum is : 'c959321244bdcec824ff0a32cad6d4f1246f53e9'

JSON格式的相同警報顯示了使用巢狀標籤的優勢:

{
  "timestamp": "2017-03-07T13:31:41-0800",
  "rule": {
    "level": 7,
    "description": "Integrity checksum changed.",
    "id": "550",
    "firedtimes": 1,
    "groups": [
      "ossec",
      "syscheck"
    ],
    "pci_dss": [
      "11.5"
    ]
  },
  "agent": {
    "id": "001",
    "name": "92603de31548",
    "ip": "192.168.66.1",
    "labels": {
      "aws": {
        "instance-id": "i-052a1838c",
        "sec-group": "sg-1103"
      },
      "network": {
        "ip": "172.17.0.0",
        "mac": "02:42:ac:11:00:02"
      }
    }
  },
  "manager": {
    "name": "ubuntu"
  },
  "full_log": "Integrity checksum changed for: '/var/ossec/etc/ossec.conf' Size changed from '3663' to '3664' Old md5sum was: '98b351df146410f174a967d726f9965e' New md5sum is : '7f4f5846dcaa0013a91bd6d3ac4a1915' Old sha1sum was: 'c6368b866a835b15baf20976ae5ea7ea2788a30e' New sha1sum is : 'c959321244bdcec824ff0a32cad6d4f1246f53e9'",
  "syscheck": {
    "path": "/var/ossec/etc/ossec.conf",
    "size_before": "3663",
    "size_after": "3664",
    "perm_after": "100640",
    "uid_after": "0",
    "gid_after": "999",
    "md5_before": "98b351df146410f174a967d726f9965e",
    "md5_after": "7f4f5846dcaa0013a91bd6d3ac4a1915",
    "sha1_before": "c6368b866a835b15baf20976ae5ea7ea2788a30e",
    "sha1_after": "c959321244bdcec824ff0a32cad6d4f1246f53e9",
    "event": "modified"
  },
  "decoder": {
    "name": "syscheck_integrity_changed"
  },
  "location": "syscheck"
}

如果已啟用電子郵件報告,則會收到以下電子郵件通知:

Wazuh Notification.
2017 Mar 07 13:31:41

Received From: (92603de31548) 192.168.66.1->syscheck
Rule: 550 fired (level 7) -> "Integrity checksum changed."
Portion of the log(s):

aws.instance-id: i-052a1838c
aws.sec-group: sg-1103
network.ip: 172.17.0.0
network.mac: 02:42:ac:11:00:02
Integrity checksum changed for: '/var/ossec/etc/ossec.conf'
Old md5sum was: '98b351df146410f174a967d726f9965e'
New md5sum is : '7f4f5846dcaa0013a91bd6d3ac4a1915'
Old sha1sum was: 'c6368b866a835b15baf20976ae5ea7ea2788a30e'
New sha1sum is : 'c959321244bdcec824ff0a32cad6d4f1246f53e

十二、系統清單

Wazuh代理能夠收集有趣的系統資訊並將其儲存到管理器端的每個代理的SQLite資料庫中。該Syscollector模組負責此項任務的。

1.工作原理

如上所述,該模組的主要目的是從受監控系統中收集相關的資訊。

代理啟動後,Syscollector會定期掃描已定義的目標(硬體,作業系統,軟體包等),將新收集的資料轉發給管理器,管理器會更新資料庫的相應表。

代理的清單是針對不同的目標而收集的。 通過查詢API以從DB檢索資料,可以在每個代理的Wazuh APP的清單選項卡中找到整個清單。 此外,還提供了開發工具選項卡,通過此功能,可以直接查詢API,以瞭解能夠按任何所需欄位過濾的不同掃描。

此外,包清單用作漏洞檢測器模組的訂閱源。

此外,軟體包清單用作漏洞檢測器模組的的訂閱源。

2.可用掃描

來自Wazuh代理的收集資訊儲存在不同的SQLite表中。這裡描述了每個可用表的內容。

目前,該模組適用於Linux,Windows,MacOS,OpenBS和FreeBSD。有關更多資訊,請參閱相容性選項。

2.1 硬體

版本3.2.0中的新功能。

檢索有關係統硬體元件的基本資訊。

名稱描述引數平臺
SCAN_ID 掃描識別符號 573872577 所有
SCAN_TIME 掃描日期 2018/07/31 15:31:26 所有
board_serial 主機板序列號 XDR840TUGM65E03171 所有
cpu_name CPU名稱 Intel(R)Core(TM)i7-7700HQ CPU @ 2.80GHz 所有
cpu_cores CPU的核心數 4 所有
cpu_mhz 當前處理器頻率 900.106 所有
ram_total 總RAM(KB) 16374572 所有
ram_free 剩餘RAM(KB) 2111928 所有
ram_usage 正在使用的RAM百分比 87 所有

2.2 作業系統

版本3.2.0中的新功能。

檢索有關作業系統的基本資訊。

名稱描述引數平臺
SCAN_ID 掃描識別符號 468455719 所有
SCAN_TIME 掃描日期 2018/07/31 15:31:26 所有
hostname 機器主機名 AG-的ubuntu-16 所有
architecture OS arquitecture x86_64的 所有
OS_NAME 作業系統名稱 Ubuntu的 所有
OS_VERSION 作業系統版本 16.04.5 LTS(Xenial Xerus) 所有
os_codename 作業系統版本代號 Xenial Xerus 所有
os_major 主要釋出版本 16 所有
os_minor 次要釋出版本 04 所有
os_build 可選的特殊監聽 14393 windows
os_platform 系統平臺 Ubuntu的 所有
sysname 系統名稱 Linux Linux
release 釋出名稱 4.15.0-29-generic Linux
version 釋出版本 #31~16.04.1-Ubuntu SMP Wed Jul 18 08:54:04 UTC 2018 所有

2.3 包

版本3.2.0中的新功能。

每個Wazuh代理商的當前包裝清單。在Linux系統上,檢索到的包可以是DEB或RPM型別。

名稱描述引數平臺
SCAN_ID 掃描識別符號 1454946158 所有
SCAN_TIME 掃描日期 2018/07/27 07:27:14 所有
format 包格式 DEB 所有
name 包名稱 linux-headers-generic 所有
priority 優先包 可選的 DEB
section 包部分 kernel deb/rpm/pkg
size 已安裝包的大小(以位元組為單位) 14 deb/rpm
vendor 供應商名稱 Ubuntu Kernel Team deb/rpm/win
install_time 安裝軟體包日期 2018/02/08 18:45:48 rpm/win
version 包版本 4.4.0.130.136 所有
architecture 包架構 AMD64 所有
multiarch 多體系結構支援 same DEB
source 包來源 linux-meta deb/rpm/pkg
description 包描述 Generic Linux kernel headers deb/rpm/pkg
location 包位置 C:\Program Files\VMware\VMware Tools\ win/pkg

2.4 網路介面

版本3.5.0中的新功能。

網路介面掃描檢索系統現有網路介面(上下介面)及其路由配置的資訊,它由三個表組成,以確保資訊儘可能結構化。

  • sys_netiface
名稱描述引數平臺
ID ID 1 所有
SCAN_ID 掃描識別符號 160615720 所有
SCAN_TIME 掃描日期 2018/07/31 16:46:20 所有
name 介面名稱 為eth0 所有
adapter 物理介面卡名稱 英特爾(R)PRO / 1000 MT桌上型電腦介面卡 Windows
type 網路介面卡 乙太網絡 所有
state 介面狀態 向上 所有
MTU 最大傳輸單位 1500 所有
mac MAC地址 08:00:27:C0:14:A5 所有
tx_packets 傳輸的資料包 30279 所有
rx_packets 收到包 12754 所有
tx_bytes 傳輸的位元組數 10034626 所有
rx_bytes 收到的位元組數 1111175 所有
tx_errors 傳輸錯誤 0 所有
rx_errors 接收錯誤 0 所有
tx_dropped 丟棄傳輸包 0 所有
rx_dropped 丟棄接收資料包 0 所有

引用sys_netiface表中描述的介面,此表顯示與該介面關聯的IPv4和IPv6地址

名稱描述引數平臺
ID sys_netiface中引用的id 1 所有
SCAN_ID 掃描識別符號 160615720 所有
proto 協議名稱 IPv4的 所有
address IPv4 / IPv6地址 192.168.1.87 所有
netmask 網路掩碼地址 255.255.255.0 所有
broadcast 廣播地址 192.168.1.255 所有
  • sys_netproto

引用sys_netiface表中描述的介面,該表顯示了每個介面的路由配置。

名稱描述引數平臺
ID sys_netiface中引用的id 1 所有
SCAN_ID 掃描識別符號 160615720 所有
iface 介面名稱 eth0 所有
type 介面資料的協議 IPv4 所有
gateway 預設閘道器 192.168.1.1 Linux / Windows
DHCP DHCP狀態 enabled Linux / Windows

2.5 埠

版本3.5.0中的新功能。

列出系統的已開放埠。

名稱描述引數平臺
SCAN_ID 掃描識別符號 1618114744 所有
SCAN_TIME 掃描日期 2018/07/27 07:27:15 所有
protocol 埠協議 TCP 所有
local_ip 本地IP 0.0.0.0 所有
LOCAL_PORT 本地埠 22 所有
remote_ip 遠端IP 0.0.0.0 所有
REMOTE_PORT 遠端埠 0 所有
tx_queue 待傳輸的資料包 0 Linux
rx_queue 接收佇列中的資料包 0 Linux
inode 埠的節點 16974 Linux
state 埠的狀態 listening 所有
PID 已開放埠的所有程序 4 Windows
process 程序的名稱 System Windows

2.6 流程

版本3.5.0中的新功能。

列出系統主機中執行的當前程序。

名稱描述引數平臺
SCAN_ID 掃描識別符號 215303769 所有
SCAN_TIME 掃描日期 2018/08/03 12:57:58 所有
PID 程序PID 603 所有
name 流程名稱 rsyslogd 所有
stae 程序狀況 s Linux
PPID PPID值 1 所有
UTIME 執行使用者程式碼所花費的時間 157 Linux
STIME 執行系統程式碼所花費的時間 221 所有
CMD 命令已執行 /usr/sbin/rsyslogd 所有
argvs 過程的引數 -n Linux
EUSER 有效的使用者 root Linux
RUSER 真實的使用者 root Linux
suser 已儲存的使用者 root Linux
egroup 有效的組 root Linux
rgroup 真實的組 root linux
sgroup 儲存組 root Linux
FGROUP 檔案系統組名稱 root Linux
priority 核心排程優先順序 20 所有
nice 良好的程序值 0 Linux
size 程序的大小 53030 所有
vm_size 總VM大小(KB) 212120 所有
resident Residen的程序大小(以位元組為單位) 902 Linux
share 共享記憶體 814 Linux
start_time 程序開始的時間 1893 Linux
PGRP 流程序組 603 Linux
session 會議程序 603 所有
NLWP 輕量級程序的數量 3 所有
TGID 執行緒組ID 603 Linux
TTY 程序的TTY數 0 Linux
processor 處理器的編號 0 Linux

3. 相容性模組

下表顯示了此模組當前支援的作業系統。

作業系統 Syscollector掃描
硬體 系統 網路 流程
windows
Linux
mac
FreeBSD
OpenBSD

4. 使用案例:在Wazuh應用程式中視覺化系統清單

預設情況下,Syscollector模組在所有相容系統中啟用,包括所有可用掃描。在這裡我們可以看到預設配置塊:

<!-- System inventory -->
<wodle name="syscollector">
  <disabled>no</disabled>
  <interval>1h</interval>
  <scan_on_start>yes</scan_on_start>
  <hardware>yes</hardware>
  <os>yes</os>
  <network>yes</network>
  <packages>yes</packages>
  <ports all="no">yes</ports>
  <processes>yes</processes>
</wodle>

一旦模組啟動,它將定期執行掃描並以JSON事件格式將新資料傳送到管理器,在那裡它將被解碼並存儲到每個代理的特定資料庫中。

可以通過不同方式查詢當前清單。讓我們看一個查詢Debian代理中特定包的示例:

  • 直接在位於管理器端查詢資料庫:$install_directory/queue/db/:agent_id.db
# sqlite3 /var/ossec/queue/db/003.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from sys_programs where name="wazuh-agent";
696614220|2018/08/06 02:07:30|deb|wazuh-agent|extra|admin|105546|Wazuh, Inc <[email protected]>||3.5.0-1|amd64|||Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring||0
  • 通過查詢API,它以JSON格式檢索巢狀資料。
# curl -u foo:bar -X GET "http://localhost:55000/syscollector/003/packages?pretty&name=wazuh-agent"
{
 "error": 0,
 "data": {
    "totalItems": 1,
    "items": [
       {
          "vendor": "Wazuh, Inc <[email protected]>",
          "description": "Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring",
          "scan": {
             "id": 696614220,
             "time": "2018/08/06 02:07:30"
          },
          "section": "admin",
          "format": "deb",
          "name": "wazuh-agent",
          "priority": "extra",
          "version": "3.5.0-1",
          "architecture": "amd64",
          "size": 105546
       }
    ]
 }
}

此外,可以在Wazuh應用程式中查閱相同的資訊,其中包括每個代理的“清單選項卡。目前,此選項卡上有可用的作業系統,硬體和軟體包清單,如下面的螢幕截圖所示:

開發工具選項卡也可直接從Wazuh應用查詢API,如下所示:

您可以在Syscollector配置參考中找到有關如何配置此功能的更多資訊。

十二、漏洞檢測

版本3.2.0中的新功能。

此功能可用於檢測已知易受攻擊的應用程式(受CVE影響)。

1.工作原理

為了能夠檢測漏洞,現在代理能夠本地收集已安裝應用程式的列表,並定期將其傳送給管理器(其儲存在本地sqlite資料庫中,每個代理一個數據庫)。此外,管理器使用公共OVAL CVE庫構建全域性漏洞資料庫,然後使用它將此資訊與代理的應用程式清單資料進行關聯。

全域性漏洞資料庫是自動建立的,目前從以下庫中提取資料:

可以將此資料庫配置為定期更新,以確保解決方案將檢查最新的CVE。

建立全域性漏洞資料庫(使用CVE)後,檢測過程將在清單資料庫中查詢易受攻擊的軟體包(每個代理的哦程式唯一)。當CVE(常見漏洞和披露)影響已知安裝在其中一個受監視伺服器中的程式包時,將生成警報。

2.相容性模組

下表顯示了漏洞檢測程式當前支援的作業系統(我們正在支援新的作業系統)以及每個分發所需的OVAL配置:

系統版本配置Feed
Red Hat & CentOS 5 紅帽安全資料庫
6
7
Ubuntu 12 Ubuntu 12 OVAL
14 Ubuntu 14 OVAL
16 Ubuntu 16 OVAL
18 Ubuntu 18 OVAL
Debian 7 Debian 7 OVAL
8 Debian 8 OVAL
9 Debian 9 OVAL
Amazon Linux 1 紅帽安全資料庫
2

3.執行漏洞掃描使用案例

以下示例顯示如何配置執行漏洞檢測過程所需的元件。

  1. 啟用用於在受監視系統上收集已安裝軟體包的代理模組。 您可以這樣做,將以下設定塊新增到您的管理器配置檔案中:
<wodle  name = “syscollector” > 
  <disabled>
no
</ disabled> 
  <interval>
1h
</ interval> 
  <packages>
yes
</ packages> 
</ wodle>

檢查Syscollector設定以獲取更多詳細資訊。

2.啟用用於檢測漏洞的管理器模組。 您可以這樣做,將以下設定塊新增到管理器配置檔案中:

<wodle  name = “vulnerability-detector” > 
  <disabled>
no
</ disabled> 
  <interval>
5m
</ interval> 
  <run_on_start>
yes
</ run_on_start> 
  <feed  name = “ubuntu-18” > 
    <disabled>
no
</ disabled> 
    <update_interval>
1h
</ update_interval> 
  </ feed> 
</ wodle>

請記住重新啟動管理器以應用更改:

a.For Systemd:

# systemctl restart wazuh-manager

b.For SysV Init:

# service wazuh-manager restart

檢查漏洞檢測器設定以獲取更多詳細資訊。

每個警報都會捕獲以下欄位:

  • CVE:相應漏洞的CVE識別符號。
  • 標題:漏洞影響的簡單描述。
  • 嚴重性:它指定漏洞在安全性方面的影響。
  • 釋出:漏洞被包含在官方資料庫中的日期。
  • 參考:官方資料庫網站的URL以及該漏洞的額外資訊。
  • 理由:該漏洞的廣泛描述。
  • 狀態:此欄位通知是否存在漏洞(已修復)或其狀態的補丁。

請參閱下面的警報示例:

** Alert 1532935655.161547: - vulnerability-detector,gdpr_IV_35.7.d,
2018 Jul 30 09:27:35 manager->vulnerability-detector
Rule: 23505 (level 10) -> 'CVE-2018-3693 on Ubuntu 18.04 LTS (bionic) - high.'
{"vulnerability":{"cve":"CVE-2018-3693","title":"CVE-2018-3693 on Ubuntu 18.04 LTS (bionic) - high.","severity":"High","published":"2018-07-10","updated":"2018-07-10","reference":"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3693","state":"Pending confirmation","package":{"name":"firefox","version":"61.0.1+build1-0ubuntu0.18.04.1"}}}
vulnerability.cve: CVE-2018-3693
vulnerability.title: CVE-2018-3693 on Ubuntu 18.04 LTS (bionic) - high.
vulnerability.severity: High
vulnerability.published: 2018-07-10
vulnerability.updated: 2018-07-10
vulnerability.reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3693
vulnerability.state: Pending confirmation
vulnerability.package.name: firefox
vulnerability.package.version: 61.0.1+build1-0ubuntu0.18.04.1

下圖顯示了Kibana上的漏洞警報:


十三、VirusTotal整合

3.0.0版中的新功能。

Wazuh可以掃描受監控檔案中的惡意內容。通過與VirusTotal整合,可以實現此解決方案,VirusTotal是一個功能強大的平臺,可聚合多個防病毒產品以及線上掃描引擎。將此工具與我們的FIM引擎相結合,可以提供一種簡單的方法來掃描受監視的檔案,以檢查它們是否存在惡意內容。

1.關於VirusTotal

VirusTotal是一種線上服務,可使用防病毒引擎和網站掃描程式分析檔案和URL,以檢測病毒,蠕蟲,特洛伊木馬和其他型別的惡意內容。它還具有檢測誤報的能力。

VirusTotal是一項免費服務,具有眾多實用功能。為了我們的目的,我們將強調以下內容:

  • VirusTotal儲存它執行的所有分析,允許搜尋特定檔案的雜湊值。通過將雜湊傳送到VirusTotal引擎,可以知道VirusTotal是否已掃描該特定檔案並分析其報告。
  • Virustotal還提供了一個API,允許訪問Virustotal生成的資訊,而無需使用HTML網站介面。此API受其服務條款的約束,這些條款將在下面的章節中進行簡要討論。

1.1服務條款

VirusTotal的服務條款指定了VirusTotal API的兩種使用方式:

1.2公共API

此方法使用具有許多VirusTotal功能的免費API,但是,它有一些重要的限制,例如:

  • 請求率限制為每分鐘不超過四個請求
  • 此API為VirusTotal引擎執行的請求的低優先順序訪問。

VirusTotal文件指出,執行honeyclient,honeypot或任何其他為VirusTotal提供資源的自動化的使用者在執行API呼叫時會獲得更高的請求率配額和特權。

1.3 私有API

VirusTotal還提供高階私有API,其中請求率和允許的查詢總數僅受使用者的服務條款限制。除此之外,它還為請求提供高優先順序訪問,以及其他優勢。

要了解有關VirusTotal,其服務條款及其API的更多資訊,請訪問他們的網站

2.工作原理

此整合利用VirusTotal API檢測由此整合利用VirusTotal API檢測由檔案完整性檢查的監控檔案中的惡意內容。 此整合的功能如下所述:

  1. FIM會查詢受監視資料夾上的任何檔案新增,更改或刪除。此模組儲存此檔案的雜湊值,並在進行任何更改時觸發警報。
  2. 啟用VirusTotal整合後,會在發生FIM警報時觸發它。從該警報中,模組提取檔案的雜湊欄位。
  3. 模組使用VirusTotal API向VirusTotal資料庫發出HTTP POST請求,以便在提取的雜湊值與資料庫中包含的資訊之間進行比較。
  4. 接收JSON響應後,該響應是此搜尋的結果,將觸發以下警報之一:
    • 錯誤:已達到公共API請求頻率限制。
    • 錯誤:檢查憑據。
    • 警報:VirusTotal資料庫中沒有記錄。
    • 警報:未發現未知的攻擊
    • 警報:X引擎檢測到此檔案。

觸發的警報記錄在integration.log檔案中,並存儲在alerts.log檔案中,包含所有其他警報。

在下面的VirusTotal整合警報部分中查詢這些警報的示例。

3.掃描檔案使用案例

3.1 入門

按照與外部API整合中的說明啟用Integrator守護程式,安裝requests程式包並配置VirusTotal整合。

這是在ossec.conf檔案中新增的示例配置:

<integration>
  <name>virustotal</name>
  <api_key>API_KEY</api_key> <!-- Replace with your VirusTotal API key -->
  <group>syscheck</group>
  <alert_format>json</alert_format>
</integration>

3.2 使用FIM監視目錄

對於此用例,我們將展示如何使用代理監視資料夾/media/user/software

  1. 必須將以下內容新增到配置檔案的<syscheck>部分中:
<syscheck>
...
  <directories check_all="yes" realtime="yes">/media/user/software</directories>
...
</syscheck>
2.應用配置後,您必須重新啟動Wazuh管理器:
對於Systemd:
#systemctl restart wazuh-manager
對於SysV Init:
#service wazuh-manager restart

重新啟動後,FIM將應用新配置,並將實時監控指定的資料夾。將檔案新增到受監視目錄時,將顯示以下警報:

** Alert 1510684983.55139: - ossec,syscheck,pci_dss_11.5,gpg13_4.11,
2017 Nov 14 18:43:03 PC->syscheck
Rule: 554 (level 5) -> 'File added to the system.'
New file '/media/user/software/suspicious-file.exe' added to the file system.
File: /media/user/software/suspicious-file.exe
New size: 1568509
New permissions: 100777
New user: user (1000)
New group: user (1000)
New MD5: 9519135089d69ad7ae6b00a78480bb2b
New SHA1: 68b92d885317929e5b283395400ec3322bc9db5e
New date: Tue Nov 14 18:42:41 2017
New inode: 104062

從此警報中,整合器守護程式提取雜湊欄位,將請求傳送到VirusTotal進行比較。

注意:有關如何在其手冊中使用檔案完整性監控進行常規或實時目錄掃描的詳細資訊。

3.3 VirusTotal整合警報

當integrator 器模組傳送對VirusTotal的請求時,如上所述,將根據情況觸發不同的警報。以下是這些警報的示例和說明:

API認證不正確:

** Alert 1510676062.9653: - virustotal,
2017 Nov 14 16:14:22 PC->virustotal
Rule: 87102 (level 3) -> 'VirusTotal: Error: Check credentials'
{"virustotal": {"description": "Error: Check credentials", "error": 403}, "integration": "virustotal"}
virustotal.description: Error: Check credentials
virustotal.error: 403
integration: virustotal

此錯誤表示配置中設定的API金鑰無效。

API已達到設定的頻率限制:

** Alert 1510684990.60518: - virustotal,
2017 Nov 14 18:43:10 PC->virustotal
Rule: 87101 (level 3) -> 'VirusTotal: Error: Public API request rate limit reached'
{"virustotal": {"description": "Error: Public API request rate limit reached", "error": 204}, "integration": "virustotal"}
virustotal.description: Error: Public API request rate limit reached
virustotal.error: 204
integration: virustotal

達到VirusTotal設定的請求頻率限制時會觸發此錯誤。有關此限制的更多資訊,請參閱服務條款

雖然之前的兩個警報表示可能發生的錯誤,但以下是成功請求返回的警報示例:

當VirusTotal資料庫中沒有記錄時收到的警報:

** Alert 1510684376.32386: - virustotal,
2017 Nov 14 18:32:56 PC->virustotal
Rule: 87103 (level 3) -> 'VirusTotal: Alert - No records in VirusTotal database'
{"virustotal": {"found": 0, "malicious": 0, "source": {"alert_id": "1510684374.31421", "sha1": "e4450be2f9a1a97cf0c71ce3efc802cea274fe9a", "file": "/media/user/software/my-clean-program.exe", "agent": {"id": "006", "name": "agent_centos"}, "md5": "9c8a83c9f4c39e8200661c33e188e79b"}}, "integration": "virustotal"}
virustotal.found: 0
virustotal.malicious: 0
virustotal.source.alert_id: 1510684374.31421
virustotal.source.sha1: e4450be2f9a1a97cf0c71ce3efc802cea274fe9a
virustotal.source.file: /media/user/software/my-clean-program.exe
virustotal.source.agent.id: 006
virustotal.source.agent.name: agent_centos
virustotal.source.md5: 9c8a83c9f4c39e8200661c33e188e79b
integration: virustotal

發現掃描檔案並由資料庫識別為惡意軟體時收到的警報:

** Alert 1510684984.55826: mail  - virustotal,
2017 Nov 14 18:43:04 PC->virustotal
Rule: 87105 (level 12) -> 'VirusTotal: Alert - /media/user/software/suspicious-file.exe - 7 engines detected this file'
{"virustotal": {"permalink": "https://www.virustotal.com/file/8604adffc091a760deb4f4d599ab07540c300a0ccb5581de437162e940663a1e/analysis/1510680277/", "sha1": "68b92d885317929e5b283395400ec3322bc9db5e", "malicious": 1, "source": {"alert_id": "1510684983.55139", "sha1": "68b92d885317929e5b283395400ec3322bc9db5e", "file": "/media/user/software/suspicious-file.exe", "agent": {"id": "006", "name": "agent_centos"}, "md5": "9519135089d69ad7ae6b00a78480bb2b"}, "positives": 7, "found": 1, "total": 67, "scan_date": "2017-11-14 17:24:37"}, "integration": "virustotal"}
virustotal.permalink: https://www.virustotal.com/file/8604adffc091a760deb4f4d599ab07540c300a0ccb5581de437162e940663a1e/analysis/1510680277/
virustotal.sha1: 68b92d885317929e5b283395400ec3322bc9db5e
virustotal.malicious: 1
virustotal.source.alert_id: 1510684983.55139
virustotal.source.sha1: 68b92d885317929e5b283395400ec3322bc9db5e
virustotal.source.file: /media/user/software/suspicious-file.exe
virustotal.source.agent.id: 006
virustotal.source.agent.name: agent_centos
virustotal.source.md5: 9519135089d69ad7ae6b00a78480bb2b
virustotal.positives: 7
virustotal.found: 1
virustotal.total: 67
virustotal.scan_date: 2017-11-14 17:24:37
integration: virustotal

十四、Osquery

版本3.5.0中的新功能。

Wazuh模組,允許從Wazuh代理管理Osquery工具,能夠設定Osquery配置,並收集Osquery生成的資訊以將其傳送給管理器,並在必要時生成相應的警報。

1.工作原理

Osquery可用於將作業系統公開為高效能關係資料庫。 這允許您編寫基於SQL的查詢來搜尋作業系統資料。

您可以在下面看到一些可以進行查詢的示例:

列出本機的所有本地使用者

SELECT * FROM users;

獲取程序名稱,埠和PID,以獲取在所有介面上偵聽程序

SELECT DISTINCT processes.name, listening_ports.port, processes.pid
FROM listening_ports JOIN processes USING (pid)
WHERE listening_ports.address = '0.0.0.0';

檢查具有已刪除可執行檔案的程序

SELECT * FROM processes WHERE on_disk = 0;

可在此處找到所有可用表的完整列表。

2.配置

您需要在系統中安裝有效的Osquery。有關詳情,請參閱下載頁面

Red Hat, CentOS and Fedora:

# curl -L https://pkg.osquery.io/rpm/GPG | tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery
# yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo
# yum-config-manager --enable osquery-s3-rpm
# yum install osquery

Debian and Ubuntu based Linux distributions:

# export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY
# add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
# apt-get update
# apt-get install osquery

安裝後,您將需要一個用於osquery的配置檔案。如果沒有,可以使用osquery提供的以下內容:

# cp /usr/share/osquery/osquery.example.conf /etc/osquery/osquery.conf

或者您可以在/etc/osquery/osquery.conf中複製我們的自定義配置:

{
    "options": {
        "config_plugin": "filesystem",
        "logger_plugin": "filesystem",
        "utc": "true"
    },

    "schedule": {
        "system_info": {
        "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
        "interval": 3600
        },
        "high_load_average": {
        "query": "SELECT period, average, '70%' AS 'threshold' FROM load_average WHERE period = '15m' AND average > '0.7';",
        "interval": 900,
        "description": "Report if load charge is over 70 percent."
        },
        "low_free_memory": {
        "query": "SELECT memory_total, memory_free, CAST(memory_free AS real) / memory_total AS memory_free_perc, '10%' AS threshold FROM memory_info WHERE memory_free_perc < 0.1;",
        "interval": 1800,
        "description": "Free RAM is under 10%."
        }
    },

    "packs": {
        "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
        "incident-response": "/usr/share/osquery/packs/incident-response.conf",
        "it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
        "vuln-management": "/usr/share/osquery/packs/vuln-management.conf",
        "hardware-monitoring": "/usr/share/osquery/packs/hardware-monitoring.conf",
        "ossec-rootkit": "/usr/share/osquery/packs/ossec-rootkit.conf"
    }
}

正如您在此示例配置中看到的那樣,system_info,high_load_average和low_free_memory查詢將每小時執行一次。

此外,此配置使用一些預設包,例如osquery-monitoringhardware-monitoringossec-rootkit其他。您可以定義自己的包並使用此wodle。

3.告警示例

日誌格式的示例警報:

** Alert 1532958886.437707: - osquery,
    2018 Jul 30 13:54:46 manager->osquery
    Rule: 24010 (level 3) -> 'osquery data grouped'
    {"name":"system_info","hostIdentifier":"manager","calendarTime":"Mon Jul 30 13:54:45 2018 UTC","unixTime":1532958885,"epoch":0,"counter":461,"columns":{"cgroup_namespace":"4026531835","cmdline":"","cwd":"/","disk_bytes_read":"0","disk_bytes_written":"0","egid":"0","euid":"0","gid":"0","ipc_namespace":"4026531839","mnt_namespace":"4026531840","name":"migration/0","net_namespace":"4026531957","nice":"0","on_disk":"-1","parent":"2","path":"","pgroup":"0","pid":"9","pid_namespace":"4026531836","resident_size":"","root":"/","sgid":"0","start_time":"0","state":"S","suid":"0","system_time":"2","threads":"1","total_size":"","uid":"0","user_namespace":"4026531837","user_time":"0","uts_namespace":"4026531838","wired_size":"0"},"action":"added"}
    name: system_info
    hostIdentifier: manager
    calendarTime: Mon Jul 30 13:54:45 2018 UTC
    unixTime: 1532958885
    epoch: 0
    counter: 461
    columns.cgroup_namespace: 4026531835
    columns.cmdline:
    columns.cwd: /
    columns.disk_bytes_read: 0
    columns.disk_bytes_written: 0
    columns.egid: 0
    columns.euid: 0
    columns.gid: 0
    columns.ipc_namespace: 4026531839
    columns.mnt_namespace: 4026531840
    columns.name: migration/0
    columns.net_namespace: 4026531957
    columns.nice: 0
    columns.on_disk: -1
    columns.parent: 2
    columns.path:
    columns.pgroup: 0
    columns.pid: 9
    columns.pid_namespace: 4026531836
    columns.resident_size:
    columns.root: /
    columns.sgid: 0
    columns.start_time: 0
    columns.state: S
    columns.suid: 0
    columns.system_time: 2
    columns.threads: 1
    columns.total_size:
    columns.uid: 0
    columns.user_namespace: 4026531837
    columns.user_time: 0
    columns.uts_namespace: 4026531838
    columns.wired_size: 0

JSON格式相同的警報:

{
"timestamp": "2018-07-30T13:54:46.476+0000",
"rule": {
    "level": 3,
    "description": "osquery data grouped",
    "id": "24010",
    "firedtimes": 207,
    "mail": false,
    "groups": [
    "osquery"
    ]
},
"agent": {
    "id": "000",
    "name": "manager"
},
"manager": {
    "name": "manager"
},
"id": "1532958886.437707",
"full_log": "{\"name\":\"system_info\",\"hostIdentifier\":\"manager\",\"calendarTime\":\"Mon Jul 30 13:54:45 2018 UTC\",\"unixTime\":1532958885,\"epoch\":0,\"counter\":461,\"columns\":{\"cgroup_namespace\":\"4026531835\",\"cmdline\":\"\",\"cwd\":\"/\",\"disk_bytes_read\":\"0\",\"disk_bytes_written\":\"0\",\"egid\":\"0\",\"euid\":\"0\",\"gid\":\"0\",\"ipc_namespace\":\"4026531839\",\"mnt_namespace\":\"4026531840\",\"name\":\"migration/0\",\"net_namespace\":\"4026531957\",\"nice\":\"0\",\"on_disk\":\"-1\",\"parent\":\"2\",\"path\":\"\",\"pgroup\":\"0\",\"pid\":\"9\",\"pid_namespace\":\"4026531836\",\"resident_size\":\"\",\"root\":\"/\",\"sgid\":\"0\",\"start_time\":\"0\",\"state\":\"S\",\"suid\":\"0\",\"system_time\":\"2\",\"threads\":\"1\",\"total_size\":\"\",\"uid\":\"0\",\"user_namespace\":\"4026531837\",\"user_time\":\"0\",\"uts_namespace\":\"4026531838\",\"wired_size\":\"0\"},\"action\":\"added\"}",
"decoder": {
    "name": "json"
},
"data": {
    "action": "added",
    "name": "system_info",
    "hostIdentifier": "manager",
    "calendarTime": "Mon Jul 30 13:54:45 2018 UTC",
    "unixTime": "1532958885",
    "epoch": "0",
    "counter": "461",
    "columns": {
        "cgroup_namespace": "4026531835",
        "cmdline": "",
        "cwd": "/",
        "disk_bytes_read": "0",
        "disk_bytes_written": "0",
        "egid": "0",
        "euid": "0",
        "gid": "0",
        "ipc_namespace": "4026531839",
        "mnt_namespace": "4026531840",
        "name": "migration/0",
        "net_namespace": "4026531957",
        "nice": "0",
        "on_disk": "-1",
        "parent": "2",
        "path": "",
        "pgroup": "0",
        "pid": "9",
        "pid_namespace": "4026531836",
        "resident_size": "",
        "root": "/",
        "sgid": "0",
        "start_time": "0",
        "state": "S",
        "suid": "0",
        "system_time": "2",
        "threads": "1",
        "total_size": "",
        "uid": "0",
        "user_namespace": "4026531837",
        "user_time": "0",
        "uts_namespace": "4026531838",
        "wired_size": "0"
    }
},
"predecoder": {
    "hostname": "manager"
},
"location": "osquery"
}

注意:如果收到多個具有相同內容的報告,則第一次僅生成一個警報。其餘的將被丟棄。



十五、Agent key輪詢

版本3.8.0中的新功能。

Wazuh模組,允許獲取儲存在外部資料庫中的金鑰。

1.工作原理

此模組允許從外部資料庫(如MySQL或任何資料庫引擎)檢索代理資訊,以將其註冊到client.keys檔案中。

為此,必須使用可以整合到資料庫引擎中的任何語言建立二進位制檔案或指令碼,從而請求代理的資訊。該ossec-authd守護程式必須執行。

您可以在下面看到流程圖:

2.輸入

如果socket未在配置塊中指定標記,則金鑰輪詢模組將使用以下引數呼叫可執行檔案,具體取決於輪詢型別:

  • Poll agent by ID
  • Poll agent by IP

按Poll agent by ID時,管理器將通過查詢其ID來檢索代理金鑰,因此程式將接收的輸入引數例如:

./agent_key_pull.py id 001

通過Poll agent by IP時,管理器將通過查詢其IP地址來檢索代理金鑰,因此程式將接收的輸入引數例如:

./agent_key_pull.py ip 192.168.1.100

注意:請記住,上面的例子代表Wazuh將如何呼叫您的程式。

socket指定標籤模組將通過指定的套接字傳送引數和讀取響應。如上所述,執行程式的效能改進很重要。

程式將接收資料的格式是option:value,選項可以是idip取決於輪詢型別。

必須允許空輸入。 代理金鑰輪詢模組在啟動時執行套接字執行狀況檢查。 如果連線成功建立,則立即關閉。

注意:如果指定了套接字選項,並且套接字不可用,則在指定的情況下將呼叫必須開啟的程式。

3.Output

指令碼的輸出必須是標準輸出中的JSON物件。

成功的例子:

{
    "error": 0,
    "data": {
        "id": "001",
        "name": "my_agent",
        "ip": "192.168.1.100",
        "key": "ac575526e8bbcddf6654e5aa0a39fa60a0020e5d34ed1370916368bdaf5f0c71"
    }
}
error:錯誤識別號碼
允許的字元 僅限數字
Allowed size 1位數
Unique value yes,必須是0
data:具有以下欄位的json格式的資料
允許的欄位 id,name,ip,key
ID:代理識別碼
允許的字元 僅限數字
Allowed size 3到8位數
Unique value yes
name:代理名稱
允許的字元 字母數字字元-_.
Allowed size 最多128個位元組
Unique value yes
address:允許的源地址範圍採用CIDR格式。如果指定,則管理器僅在其源IP與此地址匹配時才接受代理。
格式 CIDR。網路掩碼是可選的。
Unique value yes
Reserved values nothing
Aliases any = 0.0.0.0/0
key:將參與外部郵件加密的字串
允許的字元 可列印的字元
Allowed size 最多128個位元組
Unique value No

錯誤示例:

{
    "error": 1,
    "message": "Your error message"
}
error:錯誤識別號碼
允許的字元 特殊字元
Unique value yes
資訊:將顯示訊息錯誤的字串
允許的字元 可列印的字元
Unique value NO

4.示例指令碼

假設您的資料庫中有一個名為agent的表,其結構如下:

型別 引數值
ID VARCHAR(8)
name VARCHAR(128)
IP VARCHAR(19)
agent_key VARCHAR(128)

注意:如果您的可執行檔案是不包含shebang的指令碼,則必須將其 interpreter包含在配置的sexec_path引數中。

下面的python指令碼顯示了從資料庫(MySQL)檢索代理金鑰的示例。

import sys
import json
import mysql.connector
from mysql.connector import Error

def main():

    if len(sys.argv) < 3:
        print json.dumps({"error": 1, "message": "Too few arguments"})
        return

    try:
        conn = mysql.connector.connect(host='localhost',
                                    database='your_database',
                                    user='user',
                                    password='secret')
    except Error as e:
        print json.dumps({"error": 2, "message": str(e)})
        return

    cursor = conn.cursor()
    data = sys.argv[2]

    if sys.argv[1] == "id":
        cursor.execute("SELECT id,name,ip,`agent_key` FROM agent WHERE id = '{}'".format(data))
    elif sys.argv[1] == "ip":
        cursor.execute("SELECT id,name,ip,`agent_key` FROM agent WHERE ip = '{}'".format(data))
    else:
        print json.dumps({"error": 3, "message": "Bad arguments given"})
        return

    row = cursor.fetchone()

    if row:
        print json.dumps({"error": 0, "data": {"id" : row[0], "name": row[1], "ip": row[2], "key": row[3]}},sort_keys=False)
    else:
        print json.dumps({"error": 4, "message": "No agent key found"},sort_keys=False)


if __name__ == '__main__':
    main()

下面的php指令碼顯示了從資料庫(MySQL)中檢索代理金鑰的示例。

<?php
    $servername = "localhost";
    $username = "user";
    $password = "secret";
    $dbname = "your_database";

    if($argc < 3){
        echo json_encode(array('error' => 1, 'message' => 'To few arguments'));
        exit;
    }

    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        echo json_encode(array('error' => 2, 'message' => 'Could not connect to database'));
        exit;
    }

    $data = $argv[2];

    if($argv[1] == "id"){
        $sql = "SELECT id,name,ip,`agent_key` FROM agent WHERE id = '$data'";
    } else if ($argv[1] == "ip") {
        $sql = "SELECT id,name,ip,`agent_key` FROM agent WHERE ip = '$data'";
    } else {
        echo json_encode(array('error' => 3, 'message' => 'Bad arguments given'));
        exit;
    }

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        echo json_encode(array('error' => 0, 'data' => array( "id" => $row["id"], "ip" => $row["ip"],"key" => $row["agent_key"],"name" => $row["name"])));
    } else {
        echo json_encode(array('error' => 4, 'message' => 'No agent key found'));
    }
    $conn->close();
?>

下面的perl指令碼顯示了從資料庫(MySQL)檢索代理金鑰的示例

use strict;
use warnings;
use DBI;

my $num_args = $#ARGV + 1;

if ($num_args < 2) {
    print "{\"error\": 1, \"message\": \"Too few arguments\"}\n";
    exit;
}

my $data = $ARGV[1];
my $dbh = DBI->connect("DBI:mysql:database=your_database;host=localhost",
                    "user", "secret",
                    {'RaiseError' => 1});

my $sql = "";

if ($ARGV[0] eq "id") {
    $sql = "SELECT * FROM agent WHERE id = '$data'";
} elsif ($ARGV[0] eq "ip") {
    $sql = "SELECT * FROM agent WHERE ip = '$data'";
}

my $sth = $dbh->prepare($sql);
$sth->execute();
my $rows = $sth->rows;

if ($rows) {
    my $row = $sth->fetchrow_hashref();
    print "{\"error\": 0, \"data\": {\"id\" : \"$row->{'id'}\", \"name\": \"$row->{'name'}\", \"ip\": \"$row->{'ip'}\", \"key\": \"$row->{'agent_key'}\"}}\n";
} else{
    print "{\"error\": 4, \"message\": \"No agent key found\"}\n";
}

$sth->finish();
$dbh->disconnect();

注意:請記住使用引數過濾來保護指令碼或二進位制檔案免受SQL注入的影響。

轉載:https://www.cnblogs.com/backlion/p/10329601.html