Wazuh Agent 透過 Wazuh API 來註冊於 Wazuh Server
參考連結
前言
會想要做這一篇的需求是因為,當有受接管的裝置時,我們為了讓服務得知請求從哪一個裝置發送的,所以我們會在每一個裝置上安裝 Wazuh Agent和自己的用來做裝置綁定的Agent。裝置綁定的Agent負責在請求內放裝置資訊,並透過數位簽章進行認證,這個裝置綁定的Agent是透過ASP.net去撰寫,而Wazuh Agent則是可以協助我們對裝置的狀態進行監控。
我們希望自己製作的Agent自動化的方式來安裝 Wazuh Agent,這時候我們需要透過 Wazuh API 來達成這個需求。然後可以滿足以下要求:
- 可以自動註冊
- 並且取得agent id
Wazuh API Enrollment
The Wazuh manager API allows users to make an agent enrollment request to the Wazuh manager. This request returns a unique key for the agent, which must be manually imported to the agent.
簡單來說,如果透過wazuh manager API 來進行註冊,他會回傳一個唯一的key,這個key必須要手動的匯入到agent裡面。
sequenceDiagram participant U as User participant A as Device Agent participant M as Manager Manager A->>+M: API request to enroll M-->>-A: Return authorization token A->>+M: API request with the authorization token M-->>-A: Return agent key U->>A: Import agent key, config the wazuh manager ip. U->>A: Restart the agent.
0. 允許自簽憑證
使用管理權限打開 PowerShell。如果管理器 API 通過 HTTPS 運行並且使用自簽名證書,則必須在 PowerShell 中執行以下函數。請注意,上面的函數僅存在於執行它的 PowerShell 實例中。
1 | # 寫function 允許自簽憑證 |
1. 取得auth token
使用裝置管理員打開 powershell ,輸入以下指令,來產生跟 wazuh 進行請求時所需要的 Basic Auth Token,這邊如果沒有修改wazuh的帳號密碼,預設是 wazuh/wazuh
1 | # powershell 輸入以下指令 |
上面指令的請求curl的版本長這樣
1 | curl -X POST -u "wazuh:wazuh" https://<wazuh-manager-ip>:55000/security/user/authenticate |
2. 取得 agent id 和 key
取得 Auth Token 後,我們就可以透過 Auth Token 來取得 agent-id 跟 key
1 | # 把剛剛取得的 token 存到環境變數 |
上面指令的請求curl的版本長這樣(json body的key是name)
1 | curl -X POST \ |
3. 編輯 agent config
以下步驟可指導如何將密鑰導入 Windows 代理: Wazuh 代理安裝目錄取決於主機的體系結構:
- 如果你是 64 位元系統,則設定檔位於
C:\Program Files (x86)\ossec-agent
- 如果你是 32 位元系統,則設定檔位於
C:\Program Files\ossec-agent
使用裝置管理員打開 CMD 或 PowerShell 作為管理員,並導入金鑰。下面的執行檔會把Agent的資訊,放進去 client.keys 裡面
1 | # 使用 & 運算子告訴 PowerShell 不要將該指令視為 PowerShell cmdlet 或函式 |
編輯 C:\Program Files (x86)\ossec-agent\ossec.conf
,並且wazuh manager ip 帶入。
1 | <client> |
4. 重啟 agent
重新啟動
1 | # powershell |
Wazuh PowerShell Enrollment
可以透過kibana的介面去產指令,或是透過powershell執行以下指令,也可以自動進行註冊,但是你不會知道agent id,除非去讀取 .agent_info
檔案裡面才會填寫 agent id。
1 | # 分別填入 |
總結
如果你想要取得 agent id 並且儲存 agent id 於自己的服務中,在不同的enrollment要注意以下流程。
如果你想透過 API 並且取得 agentID:
- 先取得 auth token
- 自定義 name,透過 token 開始註冊,取得 agent id, agent key
- 這時候可以取得 agent id
- 把 key 載入本地
- 修改 conf 設定 wazuh ip
- 重新啟動
- 去讀取
.agent_info
並且取得agent id
如果你想透過 shell 註冊:
- 執行註冊指令
- 重新啟動
- 去讀取
.agent_info
並且取得agent id
跟註冊agent的整合
sequenceDiagram participant U as User participant A as Device Agent participant D as Device Register Server participant M as Wazuh Manager U->>A: execute device agent A->>M: request for Enrollment M-->>A: response agent id and key A->>A: start the wazuh Agent A->M: check the agent is active or not M-->>A: response active A->>D: regist device with agent id D->>D: save the agent id into database D-->>A: response success