[toc] 設定 **Infoblox RPZ(Response Policy Zone)**,將會從**原廠情資中心定期更新資料庫,以執行網域黑名單阻絕保護**。完成相關組態並更新後,可透過匯出 RPZ Feed 提供的 Block Domain 清單,進行主動觸發驗證。 # 檢視 RPZ 清單配置狀態 可以從管理介面 Syslog 查詢並檢視 RPZ 清單配置狀態。 **Administation** > **Logs** > **Syslog**,在右側輸入 RPZ 名稱,可搭配上方 **Show Filter** 加速搜索效率。  在 RPZ 設定頁面,可以檢視最近更新時間。 **Data Management** > **DNS** > **Response Policy Zones**。  # 取得 RPZ Feed 資料內容 點擊有興趣的 RPZ Feed 名稱,會談跳出以下匯出視窗,點擊 **Start** 繼續。會將該 RPZ 資料內容匯出帶有分隔記號的 CSV 檔案。預設分隔記號為 **`comma`**,可根據需求調整,支援 **`semicolon`**, **`space`**, **`tab`**。 <img width=450 src='https://hackmd.io/_uploads/rJ3TVuyma.png'><br> 由於資料內容筆數不少,若出現以下視窗請等候完成下載檔案準備。 <img width=450 src='https://hackmd.io/_uploads/SkXOLd1ma.png'><br> # 檢視 CSV 檔案 將下載完成的 CSV 檔案開啟。大致上內容如下,我們最主要需要的是 **Name or Address** 欄位內容,**antimalware.rpz.infoblox.local** 為例,以我當時下載的版本,檔案內容該欄位總筆數為 **574,964 筆**,檔案大小約為 **30MB**。  # 提煉資料 我們需要想個辦法將**欄位 A 內容**取出使用。可參考以下 BASH 腳本範例 **`extract_blockdomain.sh`** 完成! ## extract_blockdomain.sh :::info - 執行命令 **`$ ./extract_blockdomain.sh antimalware.rpz.infoblox.local.csv`**。 - 執行結果會產生 **`antimalware_extract.csv`** 檔案。 ::: ```bash= #!/bin/bash # # edited by semigod # function extract () { echo -e "\n[TASK] Extract the block domain from \"${rpz_feed_file}\"" cat ${rpz_feed_file} | sed '1,4d' | awk -F ' , ' '{print $1}' \ | sed -e "s|[*']||g" -e 's|^.||' > ${rpz_extract_file} echo -e "\n[RESULT] Extract to \"${rpz_extract_file}\"" } rpz_feed_file="${1}" rpz_extract_file="${rpz_feed_file/.*/_extract.csv}" if [[ ! -f "${rpz_feed_file}" ]]; then echo -e "\n<!> Please provide the RPZ feed zone file" echo -e "[Usage] $0 <rpz_feed_file>" exit fi ## extract blockdomain from the rpz feed zone file. extract ``` ## 執行結果  提煉輸出的 CSV 檔案顯示如下。 <img width=450 src='https://hackmd.io/_uploads/B1lGAg5yma.png'> # DNS 查詢測試 ## 取用黑名單 使用提煉的網域黑名單資料,可以產生簡單的 DNS 查詢測試工具。我們先手動取用以下兩個 blockdomain 作為功能驗證範例。 - 0-finanzierung.com (antimalware.rpz.infoblox.local) - aaafxumgu.work (ransomware.rpz.infoblox.local) ### 啟用 RPZ Logging 在測試過程中發現,預設並沒有啟用 **RPZ Logging**,所以一直無法在 Syslog 紀錄中查詢出相關資料。請根據以下步驟在 Infoblox 管理介面完成 RPZ Logging 功能啟用。 先在上方點選 **Gid** > **Grid Manager** > **DNS** - **Services**,接著在右側 **Toolbar** 點擊 **Edit** 編輯 **Grid DNS Properties**。彈跳設定視窗,點擊左上方 **Toggle Basic Mode**,左側選單會另外顯示進階選項,點選 **Logging**,勾選 **rpz** 以啟用 RPZ Logging 功能。  ## 基本測試 接著使用 **`dig`** 或 **`nslookup`** 工具測試 RPZ 黑名單網域。 ```bash $ dig @{infobox_dns} {fqdn} +short ```  ```bash $ nslookup {fqdn} {infoblox_dns} ```  在 **Administration** > **Logs** > **Syslog** 檢視上述測試結果。若沒有出現可點擊左側 **Refresh** 圖示刷新訊息。以下是完成測試並成功顯示於 Syslog 頁面的結果。  相關訊息如下所示: > CEF:0|Infoblox|NIOS|9.0.1-49999-eb87c18471a7|RPZ-QNAME|NODATA|6|app=DNS dst=192.168.0.232 **src=10.7.1.112** spt=49503 view=_default qtype=AAAA msg="rpz QNAME NODATA rewrite **dns.aaafxumgu.work** [AAAA] via dns.aaafxumgu.work.**ransomware.rpz.infoblox.local**" **CAT=RPZ** 透過 **Reporting** > **Apps: Infoblox Reporting & Analytics** > **Search**,完成以下條件輸入和調整,點擊右上方放大鏡圖示進行檢索,也可查詢相關資料。 - **`"dns.0-finanzierung.com" OR "dns.aaafxumgu.work"`** - **Last 24 hours**  ## 撰寫測試腳本工具 根據環境撰寫一個基礎測試腳本,使用 RPZ Feed 的 Block Domain 產生 10 次的查詢測試。 ```bash= dns='192.168.0.232' domain='0-finanzierung.com' for count in $(seq 1 10); do for host in www mail dns shopping news; do dig @${dns} ${host}.${domain}t +short +noanswer 2>/dev/null done done ``` 執行腳本後,在 Syslog 可顯示多筆紀錄。  從 Reporting 頁面,以其中一組 `shopping.0-finanzierung.com` 搜索查詢為例,執行查詢次數為 10 次。  ### blockdomain_query.sh 根據以下條件撰寫範例腳本。 :::info - 執行命令 **`blockdomain_query.sh <infoblox_dns_ip_address>`**。 - 從 RPZ Feed 提煉出的網域黑名單,每次查詢對象將任取其中的 **999** 組。 - 這裡提取了兩組 RPZ Feed **`antimalware`** 和 **`ransomware`** 的數據資料,目前共有 **974,775** 組。提煉方式請參考 [[**提煉資料**]](#提煉資料)。 - 調整參數值: **`domain_count`**。 - 任取 **1-100** 之間數字作為執行每個黑名單網域 DNS 的查詢次數。 - 調整參數值: **`lookup_max`**。 ::: ```bash= #!/bin/bash function lookup_blackdomain () { echo -e "\n > Count: ${lookup_count}\t, Query [${fqdn}]" for j in $(seq 1 ${lookup_count}); do echo -n "#" dig @${dns} ${fqdn} +short +noanswer 2>/dev/null done } function select_domain () { blackdomain=($(cat ${rpz_extract_files})) domain=($(printf "%s\n" "${blackdomain[@]}" | shuf -n ${domain_count})) } function dns_query () { select_domain for ((i=0;i<${domain_count};i++)); do host_name="host${RANDOM}" fqdn="${host_name}.${domain[$i]}" lookup_count=$(shuf -i 1-${lookup_max} -n 1) ## dig blackdomain lookup_blackdomain done } dns="${1}" if [[ -z "${dns}" ]]; then echo -e "\n<!> Please provide DNS IP Address" echo -e "[Usage] $0 <dns_ip_address>" echo exit fi rpz_extract_files='antimalware_extract.csv ransomware_extract.csv' lookup_max=100 domain_count=999 dns_query ``` ## 執行結果 執行時顯示每次查詢 FQDN 及執行次數。  從 Reporting 可以查詢對應執行的結果。  以上。 # 結論 :::info - 可下載 Infoblox 官方整理的 Block Domain 紀錄進行 RPZ 功能測試。 - 透過簡單的腳本程式,輕鬆執行 DNS 查詢達成主動觸發驗證。 - 檢視 Syslog 及 Reporting 紀錄,可協助確認 RPZ 功能阻擋成功! ::: :::warning - RPZ Feed 清單內容是否可以**自動下載**並整理備用? - Reporting 採用 Splunk,深入查詢技巧應可了解進一步**安全資訊**? - 以下相關**資料來源**尚待探索? > source="ib:dns:query:top_nxdomain_query" sourcetype="ib:dns:reserved" :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up