作者:知道創宇404實驗室
English version: http://www.bjnorthway.com/3028/
一.摘要
2023年5月份,ZoomEye團隊 [1] 發布了ZoomEyeGPT [2] ,它是一款基于 GPT 的 Chrome 瀏覽器擴展程序,旨在為 ZoomEye 的用戶帶來 AI 輔助搜索的體驗。
ZoomEyeGPT是GPT在ZoomEye搜索輸入側的應用。而本文會將GPT應用于ZoomEye結果輸出側,使用ChatGPT [3] 去輔助用戶解讀ZoomEye數據結果,提高用戶在實際業務場景下分析數據和理解數據的效率。
ChatGPT的普通知識容量是遠遠超過人類的,但在專業知識的儲備和運用方面是不及專業人員的。讓ChatGPT去判斷ZoomEye平臺搜索結果中某個IP地址是否具備漏洞,目前它是做不到的;但讓ChatGPT針對結果數據進行一些常規的分析和識別,它是可以做到的,且效率比人類更高。
首先,我們利用ChatGPT的優勢,在三個實際場景中,使用ChatGPT去輔助用戶解讀ZoomEye數據結果:
-
輔助用戶去分析測繪數據、識別軟硬件廠商、擴充指紋規則庫,可以有效提升分析效率。ChatGPT是一個稱職的指紋規則標注助理!
-
輔助用戶去分析SSL證書數據,判斷IP所屬組織機構及行業類型,結果是比較準確的。
然后,我們在實際業務場景案例中,將這些方法進行應用實踐。首先在ZoomEye平臺獲取并下載目標網段的資產測繪數據;然后利用ChatGPT的API接口,將測繪數據輸入給ChatGPT,請ChatGPT去分析解讀數據;通過ChatGPT的分析結果,我們知曉目標網段中存在一個IP地址使用了"Metabase "組件,其可能受"Metabase 遠程代碼執行(CVE-2023-38646)"漏洞影響,該IP地址所屬機構是"上海**健康科技有限公司"。
本文所講述ChatGPT在測繪數據分析方面的應用,算是拋磚引玉。用戶在使用ZoomEye平臺的過程中,實際業務場景會更加復雜更加多變,若能在業務場景中找到可以與ChatGPT優勢結合的點,將ChatGPT的能力為我所用,相信會起到事半功倍的效果。
二.概述
日常工作中有這樣一個業務場景:某網絡安全應急響應部門,獲取一批漏洞情報信息《創宇安全智腦 | Metabase 遠程代碼執行(CVE-2023-38646)等137個漏洞情報》 [4] 之后,想摸底管轄IP網段范圍內,是否有IP可能受到漏洞影響,可能受漏洞影響的IP地址屬于哪些組織機構。
正常的工作流程是:首先,獲取漏洞影響組件名稱,研究組件對應banner數據特征(又稱之為指紋規則);然后,根據組件指紋規則,獲取IP網段范圍內使用該組件的IP地址,即可能受到漏洞影響的IP地址;最后,判斷這些IP地址屬于哪些組織機構。若漏洞情報中漏洞數量較多,獲取這些漏洞影響組件的指紋規則,需要人為進行規則識別,比較耗時;在判斷IP地址屬于哪些組織機構的時候,需要人為進行判斷,也是件耗時的工作。
因此,我們試想將GPT應用于ZoomEye結果輸出側,使用ChatGPT 去輔助用戶解讀ZoomEye數據結果,從而提高工作效率。本文中,我們將結合該業務場景案例,嘗試將ChatGPT應用到實踐中。
三、 識別軟硬件指紋規則
熟悉網絡空間測繪領域的同學應該清楚:通過測繪獲取某個IP地址某個端口的banner數據之后,在數據的header頭部、body正文、ssl證書等字段中,若存在某些特定的字符串特征,我們便可以識別出該IP地址使用了某類設備或某款軟件。這里的字符串特征,叫做指紋規則(不同網絡空間搜索引擎平臺的叫法可能不一樣)。
網絡空間搜索引擎平臺預置了這些指紋規則之后,用戶就可以根據軟硬件廠商名稱來直接搜索某款軟硬件,而無需去記憶那些識別軟硬件的具體指紋規則。例如,在ZoomEye平臺上,用戶可以直接輸入 "app:wordpress "搜索使用WordPress軟件的IP地址,而無需知道WordPress軟件的具體指紋規則。
為了提升用戶搜索體驗,每家網絡空間搜索引擎平臺,都花費了巨大的人力財力去完善自家的指紋規則庫,但沒有哪家平臺的指紋規則庫可以100% 覆蓋全世界軟硬件廠商。
有這樣一個場景:用戶業務需求是測繪某特定區域的網絡空間,在平臺上獲取該區域測繪數據之后,對于那些沒有識別出軟硬件的結果數據,期望通過人工分析去盡可能的識別出軟硬件廠商;還有一個場景:網絡空間搜索引擎平臺自家的數據分析師,面對自家測繪結果中沒有識別出軟硬件的數據,盡可能擴充指紋規則庫,以識別出更多的軟硬件。
這兩種場景下,是否可以使用ChatGPT去輔助用戶解讀ZoomEye數據,從而提升分析數據的效率呢?本章節中,我們使用一些樣例去進行嘗試。
3.1 識別ASUS
首先,我們使用一段比較簡單的banner數據,配合事先準備好的問題話術,引導ChatGPT去分析數據并輸出我們想要的結果。從下面的截圖中,可以看出ChatGPT給出的答案是滿足要求的,識別出硬件廠商是"華碩(ASUS)",型號是"RT-ACRH13",甚至給出了額外信息:該設備的類型是"路由器"。

3.2 識別Fortinet
接下來,我們使用稍復雜的banner數據。從下面的截圖中,可以看出ChatGPT識別出硬件設備是"FortiGate",廠商是"Fortinet",同樣也給出了一個額外信息:這是一個"網絡安全設備"。

3.3 識別SonicWall
接下來,我們使用更加復雜些的banner數據。從下面截圖中,可以看出ChatGPT識別出廠商是"SonicWall"。出乎意料的是:ChatGPT還告訴我們,它是通過header頭部和title標題中的特征字符串進行識別的。這相當于它不僅給出了識別結果,還提供了具體的識別規則:告訴我們特征字符串是什么,特征字符串應該出現在banner的什么字段。

3.4 識別WatchGuard
之前幾個示例中,banner數據已經體現出了廠商名稱。接下來,我們測試難度更大的banner數據,其數據中沒有直接體現出廠商名稱。從下面截圖中,可以看出ChatGPT依然成功識別了這條banner數據,它根據header標題內容識別出廠商是"WatchGuard"。

3.5 識別Cisco
接下來,我們繼續使用一條比較復雜的banner數據。從下面的截圖中,可以看出ChatGPT成功識別出結果是"Cisco ASA"設備,并且提供了header頭部和html正文中的特征字符串,可以很好的幫助我們去添加該設備的指紋規則。

3.6 識別WordPress
接下來,我們嘗試一條軟件相關的banner數據。從下面截圖中,可以看出ChatGPT成功識別出結果是"WordPress內容管理系統(CMS)"軟件,同時提供了用于識別的特征字符串。

3.7 識別Cobalt Strike
最后,我們嘗試一條比較特殊的banner數據,數據中IP地址提供一個Cobalt Strike服務。ChatGPT依然成功識別,并且針對配置內容進行分析,輸出重要配置信息。

3.8 小結
通過本章節的嘗試,可以看出:ChatGPT不僅具備通過banner數據識別軟硬件廠商的能力,還可以識別硬件和軟件的類型。更讓人出乎意料的是:ChatGPT可以提供識別依據,根據banner數據中某個字段值的某個特征字符串進行判斷得到結果,這就相當于提供了具體的指紋識別規則。
因此,我們認為使用ChatGPT輔助用戶去分析測繪數據、識別軟硬件廠商、擴充指紋規則庫,可以有效提升分析效率。ChatGPT是一個稱職的指紋規則標注助理!
四.解讀SSL證書數據
4.1 存在的困惱
在ZoomEye平臺上查看搜索結果,部分字段數據可以被普通工程師直接理解,例如下圖中標識出的IP、端口、協議、國家、城市、測繪時間,一名普通IT工程師可以很直接的接收這些字段數據中包含的信息。

但是,有些字段數據的信息,普通工程師無法直接接收和轉換,例如:下圖中標識的證書字段。證書字段中數據內容很多,用戶需求不一樣的情況下,其關注內容就不一樣;通過證書字段中的數據,用戶未必能夠直接得到自己需求的結果,而是需要將證書數據進行二次轉換后得到自己需求的結果。

以上方截圖為示例,用戶需求是想知道這個IP地址所使用證書的持有者組織名稱。那么,用戶不關心證書字段的全部數據,而是只需要查看證書字段中的Subject數據;用戶查看到Subject數據為"CN=sylwzn.com",無法直接知道證書的持有者組織名稱,而是需要通過訪問"sylwzn.com"查看網頁,分析該域名對應的持有者,才可以知道該證書的持有者組織名稱。
4.2 ChatGPT輔助解讀
我們針對上一節中的困惱,使用ChatGPT去輔助用戶解讀ZoomEye數據,進而獲取IP地址所使用證書的持有者組織名稱,提高用戶的數據解讀效率。
首先,我們將ZoomEye搜索結果導出,"數據格式"選擇"json格式",“字段配置”僅選擇兩個字段:"ip"和"ssl"。

然后,在ChatGPT中輸入我們調教N次后確定的問題,用來引導ChatGPT按照我們的需求去接收數據、提取數據、分析數據、輸出數據。

在ChatGPT表示理解要求之后,輸入2條json數據提供給它,2條json數據如下所示:
{
"ip": "173.194.51.233",
"ssl": "\n\n\nSSL Certificate\n ...Subject:*CN=\.c.docs.google.com\n..."
}
{
"ip": "41.63.166.101",
"ssl": "\n\n\nSSL Certificate\n ...Subject: CN=FortiGate,O=Fortinet Ltd.\n..."
}

如上圖所示,ChatGPT給出的答案基本滿足要求。ChatGPT從輸入的SSL證書數據中提取了Subject字段信息,進而提取其中的O字段和CN字段信息,根據O字段和CN字段信息識別出證書持有者組織名稱。不僅如此,ChatGPT還回答出組織機構的行業類型和中文名稱,而機構的行業類型和中文名稱這2個信息,可以被普通技術工程師直接接收;在處理大量ZoomEye結果數據的場景下,可以有效提高用戶理解數據和分析數據的效率。
此外,注意看第一條json數據中,Subject字段信息中沒有包含O字段,只包含了CN字段。因此,ChatGPT根據CN字段的值去進行推斷,得到了證書組織機構的名稱,是比較智能的。
接下來,我們再輸入2條json數據,如下所示:
{
"ip": "104.90.119.209",
"ssl": "\n\n\nSSL Certificate\n ... Subject: C=US,CN=store.nba.com,L=New York,O=NBA Media Ventures, LLC,ST=New York\n ..."
}
{
"ip": "144.53.243.70",
"ssl": "\n\n\nSSL Certificate\n ... Subject: C=AU,CN=\*.abs.gov.au,L=Belconnen,O=Australian Bureau of Statistics,ST=Australian Capital Territory\n ..."
}

如上圖所示,ChatGPT給出的答案比較完美。特別是對于組織機構行業的判斷,是比較準確的,在實際應用中可以極大程度的輔助用戶去解讀數據。
五.應用實踐案例
本章節,我們在一個實際業務場景中,將上述章節中的方法進行應用實踐,使用ChatGPT去輔助用戶分析解讀ZoomEye數據結果。
5.1 應用場景
某網絡安全監管部門,獲取一批漏洞情報信息《創宇安全智腦 | Metabase 遠程代碼執行(CVE-2023-38646)等137個漏洞情報》 [3] 之后,想摸底管轄IP網段范圍內,是否有IP可能受到漏洞影響,可能受漏洞影響的IP地址屬于哪個組織機構。
5.2 應用示例
我們在管轄IP網段范圍內選取一個C段"212.129../24"作為實踐樣例,在漏洞情報信息中選取前三個漏洞"銳捷EG網關fileupload文件上傳"、"Cloudpanel 遠程代碼執行(CVE-2023-35885)"、"Metabase 遠程代碼執行(CVE-2023-38646)"作為實踐樣例。
首先,我們利用ZoomEye平臺獲取該C段的網絡資產測繪數據;然后,借助ChatGPT去分析解讀數據,判斷是否有IP地址使用了這三個漏洞所對應的組件,從而判斷是否有IP地址可能受到漏洞影響;最后,根據IP地址對應SSL證書信息,判斷IP地址屬于哪個組織機構。
- 獲取C段測繪數據
在ZoomEye平臺中,輸入以下關鍵詞,搜索指定C段IP地址、測繪時間在2023年8月1日之后的測繪數據。
cidr:"212.129.\*.*/24" +after:"2023-08-01" +before:"2024-01-01"

接下來,我們將搜索結果進行下載。在下載對話框中,我們選擇下載數據格式為"json格式",字段配置選擇"IP地址"、"端口號"、"Banner"、"ssl"這四個字段。將下載的json文件重命名為"zoomeye_data.json"。

- 分析解讀數據
選取的前三個漏洞"銳捷EG網關fileupload文件上傳"、"Cloudpanel 遠程代碼執行(CVE-2023-35885)"、"Metabase 遠程代碼執行(CVE-2023-38646)",其對應的組件分別是:"銳捷"、"Cloudpanel"、"Metabase "。
我們編寫Python代碼(代碼示例見下一小節),逐行讀取json文件中的測繪數據;利用ChatGPT的API接口,將測繪數據輸入給ChatGPT;請ChatGPT按照以下步驟解讀分析數據,判斷IP所使用的組件是否為"銳捷"、"Cloudpanel"、"Metabase "三個組件中任意一個,并根據SSL證書內容判斷IP所屬機構的機構名稱和機構行業。
每條json數據包含4個字段:
1.字段"ip",表示"IP地址"
2.字段"port",表示"端口"
3.字段"ssl",表示"IP地址對應的SSL證書內容"
4.字段"banner",表示"測繪banner數據"
請針對每條json數據,根據我的要求進行數據提取和數據分析工作:
1.根據字段"banner"和字段"ssl"的值,分析其中的header頭部、title標題等,識別其使用了什么系統或者工具,我稱之為"組件名稱"。
2.根據字段"ssl"值中SSL證書內容,提取用于標識證書的持有者或主題的"Subject字段"。
3."Subject字段"中的"CN"字段,用于標識證書持有者的通用名稱,通常是主機名(Hostname)或域名(Domain Name)。如果是域名的話,請你提取它的主域名,并認為該主域名所對應機構的名稱就是"證書機構"的機構名稱。
4."Subject字段"中的"O"字段,用于標識證書持有者(通常是個人、組織或實體)的組織名稱。我稱之為"證書機構"的機構名稱。
5.數據中并沒有體現機構的行業信息。請根據步驟3和步驟4獲取的"證書機構"的機構名稱,結合你自己的淵博知識,推斷出"證書機構"的機構行業。
6.若"ssl"值或者"Subject字段"為空,則"證書機構"的機構名稱為空。
7.最后,判斷"組件名稱"等于"銳捷"、"Cloudpanel"、"Metabase"其中之一。如果不等于,告訴我:"無法匹配"。如果等于,請將結果告訴我:"IP地址"、"端口"、"組件名稱"、證書機構"的機構名稱、"證書機構"的機構行業。
若某IP地址使用"銳捷"、"Cloudpanel"、"Metabase "三個組件中任意一個組件,則輸出該IP地址,及其端口、組件名稱、IP所屬機構的機構名稱和機構行業。
如下圖所示,紅框中的文字為ChatGPT的回答,其表示該C段中包含一個IP地址"212.129..",其開放端口是443,使用了"Metabase "組件,所屬機構是"上海**健康科技有限公司"。

注:ChatGPT判斷該組織機構的行業為醫療健康科技行業,這是不準確的,該組織機構實際為兒童體育培訓行業。我們推測ChatGPT其實并不了解該組織機構,是通過公司名稱判斷的機構行業;所以,ChatGPT在此處回答中的定語為"可能是"。
在這個應用實踐案例中,我們首先在ZoomEye平臺獲取并下載目標網段的資產測繪數據;然后利用ChatGPT的API接口,將測繪數據輸入給ChatGPT,請ChatGPT去分析解讀數據;通過ChatGPT的分析結果,我們知曉目標網段中存在一個IP地址使用了"Metabase "組件,其可能受"Metabase 遠程代碼執行(CVE-2023-38646)"漏洞影響,該IP地址所屬機構是"上海**健康科技有限公司",滿足了實際應用場景中的需求。
當然,ChatGPT的分析結果并非100%完全準確,存在誤報的可能性。但是我們用ChatGPT來做數據分析助理,輔助用戶處理數據,提高工作效率,它是完全稱職的。
5.3 代碼示例
本章節應用實踐所使用Python代碼示例,如下所示:
"""按照需求,使用ChatGPT進行工作.
version:
python3
openai 0.28.0
tiktoken 0.4.0
"""
import os
import json
import openai
import tiktoken
# 設置openai的apikey
openai.api_key = os.getenv("OPENAI_API_KEY")
class WorkWithChatGPT():
"""工作類."""
MODEL = "gpt-3.5-turbo"
MAXTOKENS = 4000
def __init__(self, data: dict):
"""初始化."""
self.data = data
self.ip = self.data.get("ip", "")
self.port = self.data.get("port", 0)
self.ssl = self.data.get("ssl", "")
self.banner = self.data.get("banner", "")
self.tiktoken_enc = tiktoken.encoding_for_model(WorkWithChatGPT.MODEL)
def work(self):
"""執行函數."""
self.prepare_data()
self.chat()
def prepare_data(self):
"""準備測繪數據."""
self.normalize_ssl()
self.normalize_banner()
def normalize_ssl(self):
"""規范化ssl字段數據."""
ssl = self.ssl.strip()
if not ssl:
return
pos_subject = ssl.find("Subject:")
pos_end = ssl.find("\n", pos_subject)
self.ssl = ssl[: pos_end]
self.data["ssl"] = self.ssl
def normalize_banner(self):
"""規范化banner字段數據."""
data_exist = {
"ip": self.ip,
"port": self.port,
"ssl": self.ssl,
"banner": ""
}
count_tokens_exist = self.calc_count_tokens(json.dumps(data_exist))
max_tokens_banner = WorkWithChatGPT.MAXTOKENS - count_tokens_exist
self.banner = self.banner[: max_tokens_banner]
self.data["banner"] = self.banner
def calc_count_tokens(self, string: str):
"""計算字符串token數量."""
return len(self.tiktoken_enc.encode(string))
def chat(self):
"""使用ChatGPT分析json數據."""
msg_system = "你是一位IT技術專家和網絡空間測繪數據分析師"
msg_user = """
每條json數據包含4個字段:
1.字段"ip",表示"IP地址";
2.字段"port",表示"端口";
3.字段"ssl",表示"IP地址對應的SSL證書內容";
4.字段"banner",表示"測繪banner數據"。
請針對每條json數據,根據我的要求進行數據提取和數據分析工作:
1.根據字段"banner"和字段"ssl"的值,分析其中的header頭部、title標題等,識別其使用了什么系統或者工具,我稱之為"組件名稱"。
2.根據字段"ssl"值中SSL證書內容,提取用于標識證書的持有者或主題的"Subject字段"。
3."Subject字段"中的"CN"字段,用于標識證書持有者的通用名稱,通常是主機名(Hostname)或域名(Domain Name)。如果是域名的話,請你提取它的主域名,并認為該主域名所對應機構的名稱就是"證書機構"的機構名稱。
4."Subject字段"中的"O"字段,用于標識證書持有者(通常是個人、組織或實體)的組織名稱。我稱之為"證書機構"的機構名稱。
5.數據中并沒有體現機構的行業信息。請根據步驟3和步驟4獲取的"證書機構"的機構名稱,結合你自己的淵博知識,推斷出"證書機構"的機構行業。
6.若"ssl"值或者"Subject字段"為空,則"證書機構"的機構名稱為空。
7.最后,判斷"組件名稱"等于"銳捷"、"Cloudpanel"、"Metabase"其中之一。如果不等于,告訴我:"無法匹配"。如果等于,請將結果告訴我:"IP地址"、"端口"、"組件名稱"、證書機構"的機構名稱、"證書機構"的機構行業。
在你確認理解我的意思后,我會提供一條json數據給你。
"""
msg_assistant = "理解了你的需求。請提供一條json數據。"
messages = [
{"role": "system", "content": msg_system},
{"role": "user", "content": msg_user},
{"role": "assistant", "content": msg_assistant},
{"role": "user", "content": str(self.data)}
]
completion = openai.ChatCompletion.create(
model=WorkWithChatGPT.MODEL,
messages=messages
)
answer = completion.choices[0].message["content"]
print("-" * 50)
if "無法匹配" in answer:
print(f"{self.ip}, {self.port}, 不受漏洞影響.")
else:
print(f"{self.ip}, {self.port}, 可能受漏洞影響.")
print(answer)
def work(filename):
"""按照需求進行工作."""
datas = list(map(json.loads, open(filename)))
for data in datas:
wwc = WorkWithChatGPT(data)
wwc.work()
if __name__ == "__main__":
work("zoomeye_data.json")
六.結語
本文在實際場景中,使用ChatGPT去輔助用戶解讀ZoomEye數據結果,實際效果是不錯的,可提高用戶分析數據和理解數據的效率。
我們認識到ChatGPT的普通知識容量是遠遠超過人類的,讓ChatGPT針對ZoomEye數據結果進行一些常規的分析和識別,它是可以做到的,且效率比人類更高。
用戶在使用ZoomEye平臺的過程中,實際業務場景會更加復雜更加多變。相信聰明的用戶,在業務場景中可以找到與ChatGPT優勢相結合的點,將ChatGPT運用起來,以提升數據分析效率。
七.參考鏈接
[1] ZoomEye 網絡空間搜索引擎: https://www.zoomeye.org
[2] ChatGPT (GPT-3.5): https://chat.openai.com
[3] 創宇安全智腦 | Metabase 遠程代碼執行(CVE-2023-38646)等137個漏洞可檢測: https://mp.weixin.qq.com/s/MPRqzwv9I8tOWr1Hdf9DCg
[4] 創宇安全智腦 | Metabase 遠程代碼執行(CVE-2023-38646)等137個漏洞可檢測 https://mp.weixin.qq.com/s/MPRqzwv9I8tOWr1Hdf9DCg
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/3026/
暫無評論