[toc]
Infoblox 提供獨特的技術稱為 **DNS 威脅分析(DNS Threat Analytics, TA)**,是一種可以**透過 DNS 分析來主動阻止資料外洩的技術**。該技術充分利用**流量分析**和**機器學習**檢測資料外洩,即時並阻止那些不當企圖的攻擊方法。DNS 威脅分析內建於即時檢測和阻隔的 Infoblox DNS 服務器內,並不需要額外的網路基礎設施或端點代理伺服器。
DNS 威脅分析模組能夠透過**自動化方式新增 C&C 目的地到黑名單**,並與 **DNS Firewall/RPZ 功能結合**,自動在網路上發送並更新到其他Infoblox設備端,在整個組織中實施擴展與阻絕資料外洩相關的目的地。此外,透過該相關解決方案還可以深入瞭解是被感染的設備或者有問題的員工在試圖竊取資料。
:::info
- 將所發現的網域目標新增到黑名單,並封鎖通訊,主動封鎖避免數據外洩。
- 原廠說明提到的 **Threat Insight** 為**產品名稱**,而 **Threat Analytics** 為**服務名稱**,在 GUI 管理介面則以 **Threat Analytics** 顯示。
:::
有興趣的可以到 Infoblox 官網查閱詳情 [[**Infoblox Threat Insight**]](https://docs.infoblox.com/space/nios90/280400743/Infoblox+Threat+Insight)。
:::warning
**注意** 可支援威脅分析服務的 Infoblox 設備型號。如果安裝不支援的設備型號,TA 服務功能頁有可能不會正常顯示。
- PT-1405, and PT-2205
- IB-4015, and IB-4030-10GE
- TE-1415, TE-1425, TE-2215, and TE-2225
- TE-V1415, TE-V1425, TE-V2215, TE-V2225, TE-V4010, and TE-V4015
:::
# 運作 Threat Insight 服務
- 必須在 Infoblox 網格(Grid)的**任何網格成員(Grid Member)** 中至少安裝一個 **RPZ(Response Policy Zone) 授權**。
- 必須**在運行 TA 服務的網格成員**上安裝 **ThreatAnalytics 授權**。
- 安裝 **ThreatAnalytics 授權**後,便可下載並更新**威脅分析模組(threat analytics module)** 和**白名單集(whitelist sets)**。
- 當**啟用威脅分析服務**時,NIOS 開始分析傳入的 DNS 資料並套用**演算法來偵測與已知資料具有相同或相似行為的安全威脅**。
- 一旦偵測到安全威脅,NIOS 會將這些**網域列入黑名單(blacklists)**,並將其轉移到**指定的緩解 RPZ(mitigation RPZ)** ,來自**違規網域(offending domain)的流量將會被阻擋**,在配置 RPZ 的網格成員同時也**不允許向這些網域進行 DNS 查詢**。
- 每次偵測到新列入黑名單的違規網域時,NIOS 裝置也可傳送 SNMP 陷阱(SNMP trap)。
# 設定任務
要成功啟用 Infoblox Threat Analytics(TA) 服務,必須要完成以下任務:
- 在 **Grid Wide** 中**指派有效的 RPZ 和 TA 授權**。
- 建立一組 **Local Response Policy Zone(RPZ)**。
- 在 **Grid TA Properties** 設定中,指定**黑名單網域(Blacklisted Domain)使用的 RPZ**,就是上面建立的 Local RPZ。
- 一切就緒,**啟用 TA 服務**。
:::info
- **啟用 TA 服務必須要先建立 Grid 系統**。
- 運行 TA 服務多少會影響系統效能,所以請評估 Grid 資源來啟用 TA 服務。

:::
## 指派 RPZ & TA 授權
在測試環境中,指派 RPZ & TA 授權可使用 Infoblox **temp_licenses**,就會提供 **60天完整授權**。
使用 SSH 連線至 NIOS 設備,在一般的測試環境當中,通常也都是 Grid Master 角色的虛擬機器。輸入 **`set temp_license`** 後,選擇以下授權,按照畫面完成授權安裝即可。
- **Add Reponse Policy Zones license**
- **Add Threat Analytics license**

因為裝置中已經安裝過 TA 授權,所以忽略其授權安裝程序。

由於 RPZ 和 TA 授權屬於 **grid-wide** 層級授權,所以使用 **`show license`** 不會顯示出來。請使用 **`show license gridwide`** 或 **`show license all`** 顯示相關授權資訊。

在 Grid Manager 介面上,請選擇 **Grid** > **License** > **Grid Wide** 進行確認。

另外選擇 **Grid** > **Grid Manager**,上方服務功能區有顯示 **Threat Analytics**。若沒有顯示,請重新登入或重整管理介面。

## 建立 Mitigation RPZ
Mitigation RPZ 屬於 **Local RPZ**,作為 TA 服務專屬使用,接收偵測列入黑名單的網域,並根據制定政策(Policy)執行安全管控。
選擇 **Data Management** > **DNS** > **Responese Policy Zones**,點擊 **+** 新增 RPZ。

- 選擇 **Add Local Response Policy Zone**,點選 **Next**。
<img width=560 src='https://hackmd.io/_uploads/SkNafloNa.png'><br>
- 輸入 **Name** 及適當的覆寫策略(Policy Override),點選 **Next**。
<img width=560 src='https://hackmd.io/_uploads/BJhQlQsEa.png'>
:::info
官方說明提供以下建議:
- 實際封鎖網域前欲監控威脅分析服務,請設定為 **Log Only(Disabled)**。
- 規劃進行阻絕違規網域時,請設定 **None (Given)**。
:::
- 加入指定的名稱解析主機。這裡設定為 Grid Master。
<img width=560 src='https://hackmd.io/_uploads/BJKc5-sNp.png'>
- 確認 RPZ 組態,並點擊上方 **Restart** 重啟服務以套用組態。
<img width=560 src='https://hackmd.io/_uploads/HkIWE7sNT.png'>
## 將 Mitigation RPZ 與 TA 服務連結
選擇 **Data Management** > **Threat Analytics**,點選右側工具欄 **Grid Threat Analytics Properties**。

點擊 **+** 將建立的 Mitigation RPZ 加入,選擇下方 **Save & Close**,完成 RPZ 與 TA 服務的關聯設定。

## 啟用 TA 服務
選擇 **Data Management** > **Threat Analytics** > **Members**,指定要執行 TA 服務的網格成員,在右側工具列,點擊 **Start** 啟用服務。彈跳視窗,選擇 **Yes** 確認執行。

點選上方 **Restart** 重啟服務並套用設定。

選擇 **Data Management** > **Threat Analytics** > **Members**,可以檢視 TA 服務是否正確啟用。

或是選擇 **Grid** > **Grid Manager** > **Threat Analytics** > **Services**,也可以檢視 TA 服務已正確啟用。

:::success
- 以上就是 TA 服務的設定與啟用流程。
- Threat Insight(Analytics) 沒有進一次可設定的參數,將會使用內建演算法來分析 DNS 統計數據,並根據分析的數據主動封鎖違規網域
:::
# 問題排除
- **無法刪除 Mitigation RPZ?**

> 無法直接刪除已經關聯至 TA 服務的 Mitigation RPZ,必須先將該 RPZ 與 TA 服務連結關係移除。
- **無法移除 Mitigation RPZ 與 TA 服務的連結關係?**

> 移除連結關係前,請先確認 TA 服務關閉。
- **如何調整 RPZ 順序?**

> RPZ 列表無法直接在顯示頁面上透過拖放動作改變順序。若想調整順序,請點選右側工具列 **Order Response Policy Zones** 開啟視窗,此時便可在此進行拖放調整順序。
# 附錄
看到上面這樣的操作,不至於太困難,但反覆操作滑鼠及輸入,多少還是會讓上了年紀的人感覺到不適。爬了一下 Infoblox NIOS 內建的 API 文件說明 [<font color=blue>`https://{{grid_master_ipaddr}}/wapidoc`</font>],根據先前提供的 [[**設定任務**]](#設定任務) 流程,簡單用 BASH 撰寫腳本以 API 的方式來完成 TA 服務的相關建立,**使用 Infoblox API 也可以快速完成設定!**
:::warning
- 指派 RPZ 和 TA 授權部份,在佈署前期階段應該就完成了,所以請先使用 SSH 連線,指派及確定 NIOS 設備所需的授權。
- 目前我還不知道如何用 API 方式指派授權,這應該**最主要的原因**。
- 在佈署測試環境時,可以透過 ovftool 工具帶入 temp_license 參數。但是<font color=red>目前不清楚 **Threat_Analytics** 和 **Reporting** 授權要如何引入</font>。
> 以 **ib_dns_temp_license="nios IB-V1415 enterprise dns dhcp rpz"** 為例,佈署 OVA 虛擬設備時,完成安裝後可直接指派以下臨時授權:
> - NIOS (IB-V1415)
> - Grid
> - DNS
> - DHCP
> - RPZ
:::
先看執行成果吧!

:::success
是不是輕鬆多了?!雖然測試環境很單純,但只要基本流程及架構不變,相同的腳本程式都是可以延續使用的。
:::
從 GUI 介面檢視透過 API 設定的結果。
- Mitigation RPZ

- Grid Threat Analytics Properties

- Data Management > Threat Analytics

- Grid > Grid Manager > Threat Analytics

## 範例腳本
### 環境參數
```bash=
grid_master=''
grid_master_user=''
grid_master_pass=''
grid_master_hostname='gm.infoblox.localdomain'
login="${grid_master_user}:${grid_master_pass}"
auth_token=$(echo -ne "${login}" | base64 --wrap 0)
api_version='v2.12.3'
api_baseurl="https://${grid_master}/wapi/${api_version}"
## mitigation rpz for TA service
ta_rpz_fqdn='ta-mitigation.rpz'
ta_rpz_comment='mitigation blacklist feed for TA service'
ta_rpz_policy='NXDOMAIN'
ta_rpz_severity='MAJOR'
```
### 取得 Grid-Wide 授權資訊
```bash=
#!/bin/bash
function get_gridwide_license () {
fields='expiration_status,type'
api="license:gridwide?_return_fields=${fields}"
curl -s -k -X GET -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}"
}
```

:::info
目前 Grid 已配置所需的 RPZ 和 TA 授權。
:::
### 檢視 TA 服務
```bash=
#!/bin/bash
function get_grid_node_ta_service () {
api="member:threatanalytics"
curl -s -k -X GET -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}"
}
```

:::info
目前 **"status": "INACTIVE"** 顯示 TA 服務未啟用。
:::
### 建立 Mitigation RPZ
```bash=
#!/bin/bash
function create_ta_rpz () {
data="{
\"fqdn\": \"${ta_rpz_fqdn}\",
\"comment\": \"${ta_rpz_comment}\",
\"grid_primary\": [
{
\"name\": \"${grid_master_hostname}\",
\"stealth\": false
}
],
\"rpz_policy\": \"${ta_rpz_policy}\",
\"rpz_severity\": \"${ta_rpz_severity}\"
}"
api='zone_rp'
curl -s -k -X POST -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${data}"
}
```
:::info
這也是建立 RPZ Feed 的 API 應用方式。
:::
### 重啟 Grid 服務
:::warning
變更服務設定後,記得將服務重啟套用設定。
:::
```bash=
#!/bin/bash
function restart_services () {
body="{
\"member_order\": \"SIMULTANEOUSLY\",
\"restart_option\": \"RESTART_IF_NEEDED\",
\"service_option\": \"ALL\",
\"user_name\": \"${grid_master_user}\"
}"
api="${grid_reference}?_function=restartservices"
curl -s -k -X POST -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${body}"
}
```

### RPZ 連結 TA 服務
```bash=
#!/bin/bash
function get_grid_ta_ref () {
api="grid:threatanalytics"
curl -s -k -X GET -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" | jq -r '.[]._ref'
}
function get_ta_rpz_ref () {
api="zone_rp"
curl -s -k -X GET -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" | jq -r '.[] | ._ref' | grep "${ta_rpz_fqdn}"
}
function link_mitigation_rpz_to_ta () {
data="{ \"dns_tunnel_black_list_rpz_zones\": [ \"${ta_rpz_ref}\" ] }"
api="${grid_ta_ref}"
curl -s -k -X PUT -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${data}" | jq -r
}
```


### 啟用 TA 服務
```bash=
#!/bin/bash
function get_ta_mitigation_rpz () {
api="grid:threatanalytics?_return_fields=dns_tunnel_black_list_rpz_zones"
curl -s -k -X GET -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" | jq -r '.[].dns_tunnel_black_list_rpz_zones'
}
function enable_ta_service () {
body="{
\"enable_service\": true
}"
api="${grid_node_ta_reference}"
curl -s -k -X PUT -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${body}" | jq -r
}
```

再次檢視 TA 服務狀態,**"status": "WORKING"** 顯示已經正常啟用!

:::success
- 透過 API 操作特定的功能,的確有其便利性。
- 但原廠並沒有完整詳細的使用手冊,讓門外漢都一直都只能站在門外!
:::
對了,使用相同的方式,也可以達成**關閉 TA 服務及移除 mitigation RPZ** 作業,對於要進行多次重複測試的環境也很值得利用。

### 取得 Mitigation RPZ 設定資訊 (補)
```bash=
#!/bin/bash
function get_ta_rpz_detail () {
zone_rp_return_fields='fqdn,comment,rpz_policy,rpz_severity,ns_group,rpz_priority,rpz_type,locked,external_primaries,external_secondaries,grid_primary,grid_secondaries,substitute_name,rpz_drop_ip_rule_enabled,log_rpz,primary_type'
api="${ta_rpz_ref}?_return_fields=${zone_rp_return_fields}"
curl -s -k -X GET -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" | jq
}
```

### 關閉/開啟 Mitigation RPZ (補)
```bash=
#!/bin/bash
function disable_rpz () {
data="{ \"disable\": true }"
api="${ta_rpz_ref}"
curl -s -k -X PUT -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${data}"
}
function enable_rpz () {
data="{ \"disable\": false }"
api="${ta_rpz_ref}"
curl -s -k -X PUT -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${data}"
```
- 關閉 RPZ 時顯示狀態。


- 重新開啟 RPZ 時顯示狀態。


### 啟用 log_rpz (補)
預設 Logging RPZ 功能並未開啟,使用 GUI 介面可按照下面步驟完成。

當然,只針對單一功能啟閉,使用 API 的效率較高。
```bash=
#!/bin/bash
function enable_logging_rpz () {
data="{
\"logging_categories\": { \"log_rpz\": true }
}"
api="${grid_dns_ref}"
curl -s -k -X PUT -L "${api_baseurl}/${api}" \
-H 'Content-Type: application/json' \
-H "Authorization: Basic ${auth_token}" \
--data "${data}"
}
```
:::info
要關閉的話,只要將 **`true`** 改為 **`false`** 重新執行就好囉!
:::
# 其他參考
- [資安人: DNS 成為惡意程式攻擊和資料洩漏的新途徑](https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=9858
- [DNS Security](https://www.cloudflare.com/zh-tw/learning/dns/dns-security/)
- [DNS over TLS](https://www.cloudflare.com/zh-tw/learning/dns/dns-over-tls/
- [DNS Fast Flux](https://www.cloudflare.com/zh-tw/learning/dns/dns-fast-flux/)