絡(luò)空間搜索引擎:從原理到實(shí)戰(zhàn)的資產(chǎn)發(fā)現(xiàn)與安全測繪指南)
1. 從“暗黑版谷歌”到網(wǎng)絡(luò)空間測繪儀Shodan到底是什么第一次聽說Shodan很多人都會(huì)被“暗黑版谷歌”、“黑客搜索引擎”這樣的標(biāo)簽嚇到覺得這玩意兒離自己很遠(yuǎn)甚至有點(diǎn)危險(xiǎn)。但作為一名在網(wǎng)絡(luò)安全和運(yùn)維領(lǐng)域摸爬滾打了十多年的從業(yè)者我必須說這種理解太片面了。Shodan本質(zhì)上是一個(gè)網(wǎng)絡(luò)空間搜索引擎或者更準(zhǔn)確地說是一個(gè)物聯(lián)網(wǎng)IoT和網(wǎng)絡(luò)設(shè)備搜索引擎。它和谷歌、百度的根本區(qū)別在于谷歌爬取和索引的是網(wǎng)頁內(nèi)容而Shodan爬取和索引的是互聯(lián)網(wǎng)上各種設(shè)備服務(wù)器、攝像頭、路由器、工控系統(tǒng)、智能家居設(shè)備等直接暴露的服務(wù)端口和橫幅Banner信息。你可以把它想象成一個(gè)給整個(gè)互聯(lián)網(wǎng)做“CT掃描”的儀器。它不關(guān)心網(wǎng)頁上寫了什么新聞它關(guān)心的是全球有多少臺(tái)設(shè)備的21端口FTP開著這些設(shè)備返回的登錄橫幅里有沒有泄露版本信息某個(gè)特定型號(hào)的網(wǎng)絡(luò)攝像頭在哪些IP段有暴露這才是Shodan的核心價(jià)值——網(wǎng)絡(luò)空間測繪與資產(chǎn)發(fā)現(xiàn)。對于安全研究人員、滲透測試工程師、網(wǎng)絡(luò)運(yùn)維人員甚至是一些好奇的技術(shù)愛好者來說Shodan是一個(gè)強(qiáng)大到令人驚嘆的工具。它可以幫助你外部威脅暴露面自查快速發(fā)現(xiàn)自家公司或客戶有哪些服務(wù)意外暴露在公網(wǎng)比如測試環(huán)境的數(shù)據(jù)庫、忘記關(guān)閉的遠(yuǎn)程管理端口。漏洞影響范圍評估當(dāng)爆出一個(gè)新的漏洞比如某個(gè)路由器固件的RCE漏洞你可以用Shodan搜索受影響的設(shè)備型號(hào)或服務(wù)版本快速評估其全球分布和數(shù)量。競品或行業(yè)分析了解某個(gè)行業(yè)如電力、交通普遍使用了哪些類型的網(wǎng)絡(luò)設(shè)備或工控系統(tǒng)。學(xué)術(shù)與研究進(jìn)行大規(guī)模的互聯(lián)網(wǎng)測量研究分析協(xié)議部署趨勢、設(shè)備地理分布等。所以別再被“暗黑”標(biāo)簽誤導(dǎo)了。Shodan是一個(gè)中立的工具刀本身沒有善惡關(guān)鍵在于握刀的人如何使用它。本教程的目的就是帶你安全、合法、高效地掌握這把“網(wǎng)絡(luò)空間測繪儀”的基本用法讓它成為你技術(shù)工具箱里的一件利器。2. 理解Shodan的核心搜索語法與過濾器Shodan的強(qiáng)大幾乎全部體現(xiàn)在其搜索語法上。它不像普通搜索引擎那樣用自然語言模糊匹配而是使用一套精確的“過濾器關(guān)鍵詞”組合拳。吃透這套語法你才算真正入門。2.1 基礎(chǔ)搜索從關(guān)鍵詞開始最基礎(chǔ)的用法就是在搜索框里直接輸入關(guān)鍵詞。這些關(guān)鍵詞會(huì)匹配設(shè)備服務(wù)返回的“橫幅”Banner信息。橫幅是設(shè)備在建立網(wǎng)絡(luò)連接時(shí)主動(dòng)發(fā)送的自我介紹信息通常包含軟件名稱、版本號(hào)、歡迎語等。搜索示例Apache意圖搜索所有在橫幅信息中包含“Apache”的服務(wù)器可能是Web服務(wù)器也可能是其他服務(wù)。返回結(jié)果你會(huì)看到成千上萬臺(tái)運(yùn)行Apache HTTP Server的設(shè)備結(jié)果會(huì)顯示IP、端口、地理位置以及完整的橫幅信息。直接關(guān)鍵詞搜索雖然簡單但結(jié)果往往過于龐雜。比如搜索Apache會(huì)混雜著不同版本、不同配置、不同重要性的服務(wù)器難以聚焦。2.2 核心過濾器精確制導(dǎo)的關(guān)鍵過濾器是Shodan的靈魂。格式為過濾器:值。多個(gè)過濾器可以用空格連接表示“與”的關(guān)系。以下是幾個(gè)最常用、最核心的過濾器net 按IP地址或CIDR網(wǎng)段搜索。net:8.8.8.8搜索這個(gè)特定IP。net:203.0.113.0/24搜索整個(gè)C類網(wǎng)段203.0.113.1 到 203.0.113.254。使用場景檢查自家或客戶指定的IP范圍有哪些服務(wù)暴露。port 按端口號(hào)搜索。port:22搜索所有開放22端口SSH的設(shè)備。port:80,443搜索開放80HTTP或443HTTPS端口的設(shè)備。port:21搜索開放21端口FTP的設(shè)備經(jīng)常能發(fā)現(xiàn)匿名FTP或配置不當(dāng)?shù)姆?wù)器。使用場景快速定位特定服務(wù)如查找所有開放的Redis服務(wù)port:6379或MongoDB服務(wù)port:27017。country 按國家代碼搜索。country:CN搜索位于中國的設(shè)備。country:US搜索位于美國的設(shè)備。使用場景進(jìn)行地域性的分析或排查。city 按城市名搜索。city:Shanghai搜索位于上海的網(wǎng)絡(luò)設(shè)備。注意城市名需用英文且大小寫敏感。org 按組織公司、機(jī)構(gòu)名稱搜索。org:Amazon.com搜索歸屬于亞馬遜公司的資產(chǎn)。org:China Telecom搜索中國電信旗下的IP資產(chǎn)。使用場景進(jìn)行企業(yè)級(jí)的暴露面梳理或競品分析。這個(gè)過濾器需要Shodan的會(huì)員權(quán)限才能獲得更準(zhǔn)確的結(jié)果。product 按產(chǎn)品名稱搜索。product:nginx搜索Nginx服務(wù)器。product:Apache httpd搜索Apache HTTP服務(wù)器。這個(gè)過濾器比直接搜關(guān)鍵詞更精確因?yàn)樗ヅ涞氖荢hodan從橫幅中解析出的標(biāo)準(zhǔn)化產(chǎn)品字段。version 按軟件版本號(hào)搜索。product:nginx version:1.18.0搜索特定版本的Nginx。這對于查找存在已知漏洞的舊版本設(shè)備極其有用。has_screenshot:true 篩選出Shodan已為其截取屏幕快照的設(shè)備主要是Web服務(wù)、VNC、遠(yuǎn)程桌面等。使用場景直觀地看到暴露的Web管理界面、未授權(quán)的監(jiān)控?cái)z像頭畫面等視覺沖擊力強(qiáng)常用于安全演示。ssl 搜索SSL/TLS證書信息。ssl:Lets Encrypt搜索使用了Let‘s Encrypt證書的設(shè)備。ssl.cert.subject.cn:*.example.com搜索證書主題通用名包含特定域名的設(shè)備。這是進(jìn)行子域名發(fā)現(xiàn)和資產(chǎn)關(guān)聯(lián)的強(qiáng)力手段。2.3 組合搜索構(gòu)建復(fù)雜查詢真正的威力在于組合使用過濾器。案例一查找上海地區(qū)開放22端口且使用OpenSSH的服務(wù)器port:22 product:OpenSSH city:Shanghai這個(gè)查詢能幫你精準(zhǔn)定位一個(gè)地區(qū)的SSH服務(wù)器資產(chǎn)。案例二查找美國某公司所有暴露的MySQL數(shù)據(jù)庫port:3306 product:MySQL org:Some Company Inc country:US這直接指向了核心數(shù)據(jù)庫資產(chǎn)的暴露風(fēng)險(xiǎn)。案例三查找所有使用了某特定版本、存在漏洞的Apache Struts框架的服務(wù)器product:Apache Struts version:2.3.34在漏洞爆發(fā)時(shí)這樣的搜索能瞬間評估影響面。重要提示使用Shodan進(jìn)行搜索時(shí)務(wù)必確保你的行為合法合規(guī)。僅搜索你擁有合法授權(quán)測試的資產(chǎn)如自己公司的IP段、客戶授權(quán)的范圍或用于廣義的學(xué)術(shù)研究。絕對禁止利用其信息進(jìn)行未授權(quán)的訪問、攻擊或破壞活動(dòng)。記住能力越大責(zé)任越大。3. 實(shí)戰(zhàn)演練從注冊到完成一次完整搜索光說不練假把式我們一步步來。3.1 賬戶注冊與API密鑰獲取訪問官網(wǎng)通過搜索引擎找到Shodan官網(wǎng)。網(wǎng)站有清晰的中文界面。注冊賬戶點(diǎn)擊注冊使用郵箱即可。免費(fèi)賬戶每月有一定的搜索積分限制對于學(xué)習(xí)和輕度使用完全足夠。獲取API密鑰登錄后在用戶儀表盤Dashboard頁面你的API密鑰API Key會(huì)顯示在顯眼位置。這個(gè)密鑰是你的身份憑證務(wù)必像保管密碼一樣保管它不要泄露到公開代碼或論壇中。高級(jí)功能如大量導(dǎo)出、使用某些過濾器、無頻率限制需要付費(fèi)會(huì)員。3.2 網(wǎng)頁端基礎(chǔ)搜索實(shí)操我們以一次真實(shí)的、合法的自查場景為例假設(shè)你想檢查一個(gè)你擁有管理權(quán)限的測試網(wǎng)段203.0.113.0/24這是一個(gè)RFC文檔中指定的測試網(wǎng)絡(luò)實(shí)際不存在用于示例。登錄Shodan在頂部搜索框輸入net:203.0.113.0/24查看結(jié)果概覽搜索結(jié)果頁面會(huì)顯示在這個(gè)網(wǎng)段內(nèi)發(fā)現(xiàn)的設(shè)備總數(shù)、常見的開放端口、頂部服務(wù)如HTTP、SSH、地理位置分布等統(tǒng)計(jì)信息。這給你一個(gè)宏觀的印象。點(diǎn)擊具體設(shè)備在設(shè)備列表中點(diǎn)擊任意一個(gè)IP地址。你會(huì)進(jìn)入該主機(jī)的詳細(xì)頁面這是信息最密集的地方基本信息IP、地理位置、ISP、最后在線時(shí)間。開放端口列表該主機(jī)所有被Shodan探測到的開放端口。端口詳情點(diǎn)擊某個(gè)端口如80會(huì)顯示該端口服務(wù)響應(yīng)的完整橫幅信息。對于HTTP服務(wù)還可能直接顯示網(wǎng)頁標(biāo)題和抓取到的部分HTML關(guān)鍵詞。歷史數(shù)據(jù)付費(fèi)功能可以查看該主機(jī)歷史掃描記錄觀察其端口變化。使用過濾器細(xì)化如果結(jié)果太多可以組合過濾器。例如你只關(guān)心這個(gè)網(wǎng)段里開放的Web服務(wù)net:203.0.113.0/24 port:80,443,80803.3 使用瀏覽器插件提升效率Shodan官方提供了瀏覽器插件如Chrome擴(kuò)展。安裝后當(dāng)你瀏覽網(wǎng)頁或查看IP時(shí)插件可以一鍵在Shodan中搜索當(dāng)前域名或IP極大提升工作效率。例如在某個(gè)技術(shù)文章里看到一個(gè)IP案例點(diǎn)一下插件圖標(biāo)就能立刻看到它在Shodan上的暴露情況。3.4 命令行工具CLI的威力對于高級(jí)用戶和自動(dòng)化場景Shodan命令行工具是必備神器。它基于Python使用你的API密鑰進(jìn)行操作。安裝pip install shodan初始化在終端輸入shodan init YOUR_API_KEY配置你的密鑰?;A(chǔ)命令搜索shodan search --fields ip_str,port,org net:203.0.113.0/24 port:22這個(gè)命令會(huì)搜索指定網(wǎng)段的22端口并只輸出IP、端口和組織字段格式簡潔。獲取主機(jī)詳情shodan host 8.8.8.8這會(huì)獲取谷歌DNS服務(wù)器的詳細(xì)Shodan信息等同于網(wǎng)頁端點(diǎn)擊該IP。統(tǒng)計(jì)信息shodan count product:nginx快速統(tǒng)計(jì)全球有多少設(shè)備被識(shí)別為Nginx而不需要下載具體數(shù)據(jù)節(jié)省積分。掃描器shodan scan submit 203.0.113.0/24這是一個(gè)請求Shodan對指定目標(biāo)進(jìn)行一次性掃描的命令。請注意免費(fèi)賬戶有使用限制且僅應(yīng)對你擁有權(quán)限的網(wǎng)絡(luò)發(fā)起掃描請求。濫用此功能可能導(dǎo)致賬戶被封禁。命令行工具的優(yōu)勢在于可以將結(jié)果通過管道 (|) 傳遞給其他工具如grep,jq進(jìn)行處理或者寫入腳本實(shí)現(xiàn)自動(dòng)化監(jiān)控。例如你可以寫一個(gè)定時(shí)腳本定期搜索公司IP段如果發(fā)現(xiàn)了新的、未登記的開放端口如3306就發(fā)送告警郵件。4. 高級(jí)技巧與典型應(yīng)用場景解析掌握了基礎(chǔ)操作我們來看看Shodan在一些典型場景下的高級(jí)用法。4.1 漏洞應(yīng)急響應(yīng)與影響面評估這是Shodan在安全領(lǐng)域的核心應(yīng)用之一。假設(shè)今天公開了一個(gè)影響Apache Solr 8.11.0的遠(yuǎn)程代碼執(zhí)行漏洞CVE-2023-XXXXX。構(gòu)建搜索語法我們需要找到所有運(yùn)行這個(gè)特定版本的Solr服務(wù)。語法可能是product:Apache Solr version:8.11.0執(zhí)行搜索在Shodan中執(zhí)行結(jié)果會(huì)顯示全球暴露的該版本實(shí)例數(shù)量及其IP、地理位置。進(jìn)一步分析使用country:過濾器查看漏洞在哪些國家分布最多。使用org:過濾器如果權(quán)限足夠查看哪些企業(yè)可能受影響。結(jié)合has_screenshot:true看看能否直接看到管理界面確認(rèn)漏洞利用條件。形成報(bào)告你可以快速生成一份數(shù)據(jù)報(bào)告“全球約有X臺(tái)Apache Solr 8.11.0實(shí)例暴露主要分布在A、B、C國家建議立即升級(jí)或?qū)嵤┚W(wǎng)絡(luò)隔離。” 這為應(yīng)急響應(yīng)提供了至關(guān)重要的數(shù)據(jù)支撐。4.2 企業(yè)外部攻擊面管理ASM對于安全團(tuán)隊(duì)定期使用Shodan自查是必修課。收集資產(chǎn)IP范圍整理公司所有對公網(wǎng)提供服務(wù)的IP段包括云服務(wù)商提供的。批量搜索使用CLI工具或編寫腳本對所有IP段執(zhí)行Shodan搜索。命令示例shodan search --fields ip_str,port,product net:YOUR_IP_BLOCK shodan_report.txt分析異常發(fā)現(xiàn)對比搜索結(jié)果與公司內(nèi)部的資產(chǎn)臺(tái)賬CMDB。發(fā)現(xiàn)未知服務(wù)例如臺(tái)賬里沒有記錄某個(gè)IP開放了8080端口但實(shí)際上運(yùn)行著一個(gè)Jenkinsproduct:Jenkins。這可能是某個(gè)團(tuán)隊(duì)私自搭建的測試環(huán)境構(gòu)成了安全缺口。發(fā)現(xiàn)危險(xiǎn)配置搜索port:6379 product:Redis可能會(huì)發(fā)現(xiàn)一些未設(shè)置密碼的Redis服務(wù)直接暴露在公網(wǎng)這是極高危的風(fēng)險(xiǎn)。發(fā)現(xiàn)過期版本搜索product:Microsoft IIS version:7.5發(fā)現(xiàn)仍在運(yùn)行已停止支持的老舊IIS版本。推動(dòng)整改將發(fā)現(xiàn)的問題整理成工單分發(fā)給相應(yīng)的系統(tǒng)負(fù)責(zé)人進(jìn)行修復(fù)如關(guān)閉不必要的端口、升級(jí)軟件、添加訪問控制。4.3 特定設(shè)備與工控系統(tǒng)ICS探索Shodan爬取了大量工控設(shè)備、網(wǎng)絡(luò)攝像頭、打印機(jī)等物聯(lián)網(wǎng)設(shè)備的信息這既是研究的寶庫也揭示了巨大的安全隱患。搜索網(wǎng)絡(luò)攝像頭嘗試product:webcam或Server: IP Webcam Server。結(jié)合country:和city:你會(huì)發(fā)現(xiàn)大量設(shè)備可能因默認(rèn)密碼或空密碼而暴露。請注意窺探他人設(shè)備是非法和不道德的此處僅為說明技術(shù)可能性。搜索工控協(xié)議搜索port:502Modbus協(xié)議、port:102Siemens S7comm協(xié)議。這些結(jié)果會(huì)讓你直觀感受到關(guān)鍵基礎(chǔ)設(shè)施組件在互聯(lián)網(wǎng)上的暴露程度令人觸目驚心。這主要用于學(xué)術(shù)研究和安全意識(shí)教育。4.4 利用證書信息進(jìn)行子域名發(fā)現(xiàn)這是一個(gè)非常巧妙的技巧。SSL證書的“主題備用名稱”SAN字段里通常會(huì)列出該證書適用的所有域名。搜索語法ssl.cert.subject.cn:*.yourcompany.com分析結(jié)果Shodan會(huì)返回所有證書中包含*.yourcompany.com的服務(wù)器IP。你可能會(huì)發(fā)現(xiàn)一些連內(nèi)部安全團(tuán)隊(duì)都不知道的、遺留在公網(wǎng)上的子域名如legacy-api.yourcompany.com,test-vpn.yourcompany.com這些往往是安全盲點(diǎn)。5. 常見問題、避坑指南與倫理邊界在實(shí)際使用中你會(huì)遇到各種問題下面是我總結(jié)的一些經(jīng)驗(yàn)和必須遵守的準(zhǔn)則。5.1 免費(fèi)賬戶的積分限制與策略免費(fèi)賬戶的搜索積分Search Credits每月刷新。執(zhí)行一次搜索無論結(jié)果多少扣除1積分查看主機(jī)詳情也扣除1積分。積分用完基礎(chǔ)搜索功能會(huì)被限制。避坑技巧善用count命令在網(wǎng)頁端或CLI使用count過濾器如搜索框輸入country:CN port:22 count:100是不扣積分預(yù)覽數(shù)量或在CLI用shodan count命令。先估算結(jié)果數(shù)量再?zèng)Q定是否進(jìn)行詳細(xì)搜索。精確構(gòu)建查詢盡量使用精確的過濾器和關(guān)鍵詞組合避免返回海量結(jié)果。你本來只想看Nginx搜nginx可能返回100萬條而product:nginx可能更精確數(shù)據(jù)量更可控。導(dǎo)出時(shí)謹(jǐn)慎選擇字段在網(wǎng)頁端導(dǎo)出數(shù)據(jù)時(shí)只選擇你真正需要的字段如IP、端口不要全選這會(huì)影響數(shù)據(jù)處理速度和積分消耗雖然導(dǎo)出本身也扣分??紤]付費(fèi)升級(jí)如果你是安全專業(yè)人員需要高頻次、大規(guī)模使用付費(fèi)會(huì)員是值得的投資。它提供無限制的搜索積分、更豐富的過濾器、歷史數(shù)據(jù)訪問和API更高的調(diào)用頻率。5.2 結(jié)果解讀的誤區(qū)“開放端口”不等于“可被攻擊”Shodan只告訴你端口是“開放”且“有響應(yīng)”的。該服務(wù)是否有認(rèn)證、是否存在漏洞Shodan在絕大多數(shù)情況下無法判斷。一個(gè)暴露的SSH端口如果強(qiáng)制使用密鑰登錄且防火墻做了IP限制其風(fēng)險(xiǎn)是可控的?!白詈蟾隆睍r(shí)間主機(jī)詳情中的“最后更新”時(shí)間是Shodan最后一次成功掃描到該主機(jī)的時(shí)間并非主機(jī)當(dāng)前的實(shí)時(shí)狀態(tài)?;ヂ?lián)網(wǎng)上的設(shè)備IP是動(dòng)態(tài)變化的今天掃描到的設(shè)備明天可能就下線或更換IP了。橫幅信息可能被修改聰明的管理員會(huì)修改服務(wù)的默認(rèn)橫幅以隱藏真實(shí)的軟件和版本信息這被稱為“Banner Grabbing”防御。因此Shodan的識(shí)別不是100%準(zhǔn)確。5.3 法律與倫理紅線什么絕對不能做這是最重要的一部分必須時(shí)刻牢記。未經(jīng)授權(quán)禁止掃描絕對不要使用Shodan的“Scan”功能或任何其他工具如nmap去主動(dòng)掃描你不擁有、未獲得明確書面授權(quán)的任何IP地址、域名或網(wǎng)絡(luò)。這等同于在別人的房子周圍嘗試推每一扇窗戶在很多司法管轄區(qū)屬于違法行為。禁止未授權(quán)訪問通過Shodan發(fā)現(xiàn)了一個(gè)暴露的、沒有密碼的管理界面如路由器、數(shù)據(jù)庫看看可以但千萬不要點(diǎn)擊登錄、輸入命令或進(jìn)行任何交互操作。未經(jīng)授權(quán)的訪問是明確的犯罪行為。尊重隱私與數(shù)據(jù)合規(guī)Shodan可能會(huì)索引到一些包含敏感信息的設(shè)備如家庭攝像頭、個(gè)人NAS。即使你能訪問也請立即離開并報(bào)告給相關(guān)平臺(tái)Shodan有報(bào)告功能。不要下載、傳播、利用這些私人數(shù)據(jù)。用于正當(dāng)目的將Shodan用于企業(yè)安全自查、授權(quán)滲透測試、學(xué)術(shù)研究、漏洞影響分析等合法合規(guī)的場景。你的技術(shù)能力應(yīng)該用來建設(shè)更安全的網(wǎng)絡(luò)環(huán)境而不是破壞它。5.4 提升搜索效率的獨(dú)家心得關(guān)注“熱門搜索”Shodan主頁和社區(qū)經(jīng)常會(huì)展示一些有趣的搜索語法比如title:DVR Login找攝像頭Authentication disabled RFB 003.008找無認(rèn)證的VNC。學(xué)習(xí)這些語法能快速打開思路。結(jié)合其他工具Shodan不是萬能的。將它與其他開源情報(bào)OSINT工具結(jié)合如censys.io另一個(gè)強(qiáng)大的網(wǎng)絡(luò)空間搜索引擎?zhèn)戎豑LS證書和協(xié)議、zoomeye.org知道創(chuàng)宇的鐘馗之眼可以互相驗(yàn)證和補(bǔ)充信息。自動(dòng)化監(jiān)控腳本對于核心資產(chǎn)可以編寫一個(gè)簡單的Python腳本定期調(diào)用Shodan API對比本次和上次的掃描結(jié)果自動(dòng)發(fā)現(xiàn)新增的開放端口或服務(wù)實(shí)現(xiàn)持續(xù)的外部攻擊面監(jiān)控。Shodan就像一副賦予你網(wǎng)絡(luò)空間“透視”能力的眼鏡。初次使用你可能會(huì)被互聯(lián)網(wǎng)表面之下如此龐大、直接、有時(shí)甚至是不設(shè)防的設(shè)備海洋所震撼。掌握它意味著你擁有了在數(shù)字化時(shí)代洞察“地形”的能力。但請永遠(yuǎn)記住這份能力伴隨著重大的責(zé)任。用它來守護(hù)邊界而非跨越雷池用它來消除隱患而非制造威脅。這才是我們學(xué)習(xí)和使用這類強(qiáng)大工具的終極意義。