DEF CON 33 Recon Village - Building Local Knowledge Graphs for OSINT - Donald Pellegrino
三句話摘要
在 Defcon Recon Village 上,Dr. Pellegrino 示範如何以本地知識圖譜(RDF)結合本地 LLM,建立可繞過 API 速率限制、同時維護 OPSEC 的離線 OSINT 調查框架。 透過 RDF 本地知識圖譜,將批量採集、SPARQL 查詢與本地 LLM 三者整合,OSINT 調查者既能繞過速率限制,又能在不洩露調查意圖的前提下,讓 AI 成為可重複、科學驗證的全流程分析夥伴。 速率限制本質上是 OPSEC 問題:每次向外部 API(含 LLM)發送查詢,等同於向服務商揭露你的調查興趣。解法是先批量收集遠大於目標範圍的資料存到本地,再於本地分析,讓外部服務無從推斷具體目標。
重點整理
重點- 1
速率限制本質上是 OPSEC 問題:每次向外部 API(含 LLM)發送查詢,等同於向服務商揭露你的調查興趣。解法是先批量收集遠大於目標範圍的資料存到本地,再於本地分析,讓外部服務無從推斷具體目標。
- 2
RDF 是多分析師協作的通用語言:不同來源、不同語言、不同格式的資料,透過資源描述框架(RDF)可統一表達為三元組(主詞-謂詞-受詞),讓多位分析師的成果直接可互操作,無需額外資料清洗工程。
- 3
Graph RAG 優於傳統 RAG:傳統檢索增強生成(RAG)以文字相似度搜尋文件,而圖譜 RAG(Graph RAG)以知識圖譜管理上下文窗口,能系統性地將大型資料集的關係結構導入 LLM,分析品質更可控。
- 4
本體論(Ontology)讓 LLM 輸出立即可用:使用 FOAF(Friend of a Friend)等既有本體,提示 LLM 將提取結果直接輸出為 RDF 格式並對齊標準資料模型,原本需數週微調的工作,可在一次提示中完成。
實用技巧與重點
乾貨- 工具與技術
- Rust 自訂爬蟲(專案稱 RD Client):比 wget/curl 取得更多資料,支援 JavaScript 動態內容
- Playwright + Chromium:處理需滾動或點擊才載入的 JavaScript 頁面
- RDF / Triple Store:W3C 標準,以三元組表達圖資料
- SPARQL(縮寫諧音 "Sparkle"):RDF 專用查詢語言
- FOAF 本體(Friend of a Friend Ontology):社交網路關係的標準資料模型
- Wikidata API:Wikipedia 的 RDF 形式重新發布端點,可直接取得結構化 RDF 資料
- Maltego:鏈路分析圖(Link Analysis)互動式介面工具
- LM Studio / Llama CPP / VLM:本地 LLM 執行框架
- Qwen 3(30B 參數模型):本次 VLM 測試使用,需 GPU
- Claude Code:本次投影片以 LaTeX 撰寫並存入同一 GitHub 專案,由 Claude 交叉比對程式碼與投影片內容
- 方法步驟
- 批量爬取(遠大於目標範圍的資料集)→ 隱藏調查意圖
- 本地 LLM 提取 HTML 中的實體(演講者、機構、角色)
- 輸出對齊 FOAF 本體的 RDF 三元組
- 匯入 Triple Store,以 SPARQL 跨資料集查詢
- Wikidata 補充公司資訊(成立年份、產業),以 RDF JOIN 連接
- 封裝為可攜帶的資料包,供其他分析師重用
- 案例數據
- 人工分析 Recon Village 網站演講者名單:遺漏 4 位演講者(因未滾動至 Schedule 標籤頁、未發現聯合演講者)
- LLM 在 2 秒內找到所有人工遺漏的演講者
- Wikidata 發現演講者來自:Tyson Foods(90 年歷史)、Microsoft、Fortinet、Palo Alto 等不同年齡公司
- OPSEC 風險提示
- Claude 拒絕「識別影響目標人物」的提示措辭,ChatGPT 回答中混入不屬於本次會議的來源
- 外部 LLM 供應商對可查詢內容有定性控制權,不僅是速率問題
- Chromium 爬取仍可能洩漏瀏覽器指紋(本講未深入探討)
結論
結論“透過 RDF 本地知識圖譜,將批量採集、SPARQL 查詢與本地 LLM 三者整合,OSINT 調查者既能繞過速率限制,又能在不洩露調查意圖的前提下,讓 AI 成為可重複、科學驗證的全流程分析夥伴。”
完整解析
詳細現代 OSINT 調查者面臨雙重困境:一方面,Google、Wikipedia、各類 API 及 LLM 服務都有速率限制,大量查詢會被封鎖;另一方面,每一次查詢本身就是一種信息洩露——搜尋引擎和 LLM 供應商都能記錄你的興趣所在,而「向誰查詢什麼」本身即是調查意圖的暴露。Dr. Pellegrino 的核心主張是:繞過速率限制的真正解法,同時也是維護操作安全的正確路徑,就是建立本地知識圖譜。
整個方法論圍繞四個步驟展開。第一步是批量收集。爬取時不只針對目標,而是下載遠大於調查範圍的資料集——例如不是只查詢感興趣的五家公司,而是把 Wikidata 上全部科技公司的 RDF 資料拉下來——目標就埋藏在更大的集合中,外部服務無法從查詢模式推斷出你真正想查誰。爬取工具選擇了自行開發的 Rust 爬蟲搭配 Playwright + Chromium,而非傳統 wget/curl,因為後者完全忽略 JavaScript 動態生成的內容,在現代網站上會大量遺漏資料。案例研究正好印證了這一點:Recon Village 網站的演講者名單分散在動態標籤頁與滾動加載的區塊中,人工蒐集直接遺漏了 4 位演講者。
第二步是以 RDF 提取並統一表達資訊。資源描述框架(RDF)是 W3C 標準,以「主詞-謂詞-受詞」三元組表達任何資料關係,可視為一種不受具體格式束縛的圖資料庫模式。其最大優勢在於互操作性:不同格式、不同語言、不同分析師的成果,只要對齊同一本體(如社交網路的 FOAF 本體),就能直接連接與查詢,無需額外的格式轉換工程。Dr. Pellegrino 特別展示了一個令他驚訝的結果:只需提示 30B 參數的 LLM,請它將提取到的演講者名單輸出為對齊 FOAF 本體的 RDF 格式,模型直接給出正確結果,省去了他原本預期需要數週的資料模型調整工作。
第三步是在 Triple Store 中以 SPARQL 查詢。將多個來源的 RDF 資料匯入後,調查者可跨資料集進行關聯分析:例如把 Recon Village 演講者所屬機構與 Wikidata 的公司成立年份做 JOIN,立即得出「這位演講者來自一家 90 年歷史的食品公司」的洞察,而這是單一資料來源無法提供的。Wikidata 的優勢在於它本身就是以 RDF 形式發布,幾乎是零成本的「速勝」整合。
第四步是以 Graph RAG 讓本地 LLM 系統性參與分析。傳統 RAG 以文字相似度搜尋片段送入 LLM,難以處理複雜關係;圖譜 RAG 則以知識圖譜的結構管理 LLM 的上下文窗口,讓分析師能明確控制「哪些子圖進入哪個提示」,使 LLM 成為圖譜上可重複執行的分析參與者,而非每次都要重新餵入原始文件的黑盒工具。整個工作流程最終打包成可攜帶的 RDF 資料包,其他分析師可以直接接手前人成果繼續深化,形成良性循環。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

