馬程
[摘要]伴隨著大數據的廣泛應用,網絡安全已不再是一個信息孤島。從第一個莫里斯病毒的傳播,到今天互聯網隨處可見的APT攻擊,網絡攻擊與防御的博弈已經從單邊的代碼漏洞發展到了大數據對抗階段。為此,論文以國外著名的Shodan搜索引擎為例,通過結合日常攻防實踐、傳統搜索引擎原理和Shodan搜索引擎的特征,深度剖析以Shodan為代表的網絡空間搜索引擎的工作原理,并提出其在網絡攻防方面的實戰應用。進而為網絡安全從業和研究人員,在網絡安全研究及該類平臺的建設中,提供有價值的參考和建議。
[關鍵詞]網絡空間搜索引擎;Shodan;原理研究;網絡攻防實戰
1 引言
傳統搜索引擎對我們來說并不陌生,像Google、百度、Bing等,只要我們打開網頁幾乎就會用到。對于傳統搜索引擎的理論研究,從上世紀末就已經開始。雖然到目前為止,Google和百度等搜索引擎廠商,仍未公布其核心算法,但是學界已經有一定的研究成果,并且形成了相對成熟的理論體系。
相比于傳統搜索引擎,網絡空間搜索引擎作為一個新穎的概念,它的誕生和研究則要滯后很多。以Shodan搜索引擎為例,Shodan是在2009年由著名安全專家JohnMatherly所創建的,是全球第一個全網設備搜索引擎。而不同于傳統搜索引擎的以網頁內容索引為主,Shodan的搜索目標集中在全球的IP地址上。即搜索范圍在1.1.1.1-255.255.255.255的所有設備及服務上。這樣的搜索結果對于普通網民來說可能沒有意義,但對于網絡安全研究人員來說,這就是一個“聚寶盆”。相比國外來說,“網絡空間搜索引擎”這個概念,據考證,是知道創宇安全公司于2013年首次在國內提出的,從定義的角度來說,還是比較合理地描述了Shodan等的功能特性。因此,本文在做分析時,采用了這個概念。據此,知道創宇也在國內建立了第一個網絡空間搜索引擎——ZoomEye,ZoomEye與Shodan在掃描原理上大同小異,在指紋識別的重點上略有差異。本文在重點分析Shodan搜索引擎原理的同時,也會結合分析部分ZoomEye的優點和特性。
客觀來說。不管作為理論研究還是應用研究,目前學界對網絡空間搜索引擎的研究非常少,還沒有形成一個清晰的定義和完善的理論體系。部分文章中也只是提到對Shodan等搜索引擎的簡單使用,未涉及到深層次的原理分析。本文通過結合攻防實踐、傳統搜索引擎原理以及Shodan搜索引擎的特診,深度剖析以Shodan為代表的網絡空間搜索引擎的原理模型和功能模塊,并提出相應的實戰應用方法,以期為網絡安全從業及研究人員。在之后的網絡空間搜索引擎平臺建設和攻防實戰中,提供相應的參考和依據。
2 網絡空間搜索引擎原理及功能分析
根據Shodan官網描述,Shodan能不間斷地對全球40億IP地址進行掃描及指紋識別,并提供快速、準確的結果搜索,每個月至少更新4億的裝置數據。本文對Shodan原理及功能的分析方法,主要是依據傳統搜索引擎的原理,結合Shodan搜索引擎的特征,盡可能在理論上還原Shodan的工作模式,并在此基礎上提出本文對搭建一個網絡空間搜索引擎的幾點可能的方案,以供安全人員參考和借鑒。圖1是Shodan的應用截圖。
2.1 框架模型分析
網絡空間搜索引擎來源于傳統搜索引擎,因此在對前者框架模型進行分析時,我們可以借用相對比較成熟的傳統搜索引擎模型,這樣更符合實際。
傳統搜索引擎的基礎技術主要包括四個重要環節:網絡爬蟲、建立索引、內容檢索和鏈接分析。網絡空間搜索引擎因處理的對象不同,故模塊的重點也與傳統搜索引擎有所不同,相比而言,前者技術上更容易實現。據此,本文根據傳統搜索引擎及Shodan的功能特性,繪制出了簡單的Shodan框架模型圖,如圖2所示。
在圖2中。我們將Shodan的框架模型分為五個部分:掃描和指紋識別、分布存儲、索引、UI界面以及調度程序,其中數據在前三個部分之間的傳輸都是雙向的,調度程序則保證整個流程的運行。這個模型不難理解,是一個比較通用的搜索引擎框架,遵循了數據輸入——數據處理——數據輸出的基本原則。
2.2 功能模塊分析
在上文中,分析了Shodan框架包含的五個構成部分,其中Web UI、調度程序和索引都是我們日常比較熟悉的。所以本節中將重點分析掃描和指紋識別、存儲這兩個網絡空間搜索引擎的核心功能模塊。
2.2.1 掃描模塊
在對Shodan進行分析時,有一個疑問:究竟Shodan是怎么進行快速掃描的?全球從1.1.1.1到255.255.255.255,一共42億個IP地址,除去局域網IP地址,大概還有約40億個IP地址。Shodan又是怎么保證快速更新IP掃描結果的?這個問題對于傳統搜索引擎來說,它是不會考慮的,因為蜘蛛的工作方式是爬行網頁鏈接,沒有就不爬了,但是IP的掃描不同。對IP進行掃描時,既要掃描存活又要識別服務。
對于上述的疑問,基于現有的掃描知識,本文提出了幾點可能的方法:(1)使用分布式的Nmap進行掃描:服務識別準確度高,掃描速度慢;(2)使用自己開發的分布式掃描腳本:準確度有待確定,速度可控;(3)使用分布式Zmap掃描開放端口,Nmap做服務識別:速度快,準確度也有保證。
經過對比,以上第三種方法無疑是比較理想的,用Zmap掃描端口,用Nmap做服務識別。Nmap應該是網絡安全研究人員的老朋友了,因為它優秀的掃描功能,所以一直是網絡掃描的首選。Zmap是2015年由美國密歇根大學研究人員組成的一個團隊開發的,因為它使用“無狀態”方式掃描,所以掃描速度非常快。圖3是Zmap掃描2萬個主機873端口開放情況的掃描結果,僅用8s時間。因此,使用Zmap可以完美解答之前提出的疑問:使用分布式Zmap對全球IP進行不間斷的循環掃描,發現IP信息變化,則在數據庫將原IP信息進行更新。
2.2.2 指紋識別模塊
在圖1的Shodan使用截圖中,我們不難發現Shodan強大的功能。當我們搜索873端口時(Port:873),Shodan不但列出了所有開放873端口的主機,同時還對其進行了安全測試。因為873端口的開放服務是Sync(Linux下的數據鏡像備份服務),Sync的默認配置是不需要密碼就能訪問的,這樣帶來的安全隱患是不僅有可能造成源代碼等敏感信息泄露。同時攻擊者可直接通過此通道修改源代碼。圖4是我們對Shodan搜索出來的IP地址103.27.208.227的驗證情況,結果證明Shodan確實利用了sync的漏洞對該IP地址進行了安全測試。
通過搜索結果繼續分析。Shodan內部的指紋識別應該使用了多重識別機制,按照不同的端口采取了不同的的識別辦法,主要包含三個部分。
(1)常規端口識別。Shodan內置了常規端口的識別庫,比如21(FTP服務)、22(Ssh服務)、873(Sync服務)、6379(Redis服務)、11211(Memcached服務)等端口。同時,Shodan還為這些端口提供了相應的漏洞庫,一經識別該端口開放,便可直接調用相應漏洞進行安全測試。
(2)非常規端口識別。首先使用Nmap內置的腳本進行非常規端口識別,比如“nmap-sV”命令即可:如果仍無法識別,使用返回Banner進行云識別。
(3)Web指紋識別。目前Shodan在Web服務識別上面,使用的是HTTP響應頭識別的方式,一般主要看響應頭的“X-Powered-By”標簽。當然這種方式的識別結果,不是特別完整,這與Shodan主要做網絡設備有關系。相比之下,在Web服務識別方面,國內的ZoomEye提供的識別服務是比較準確的,它的識別方式很多,包括各種CMS系統的標簽、特征值、特殊文件等等。
2.2.3 數據存儲模塊
從圖1的搜索結果中可以看出,Shodan采集的條目主要包含幾個數據:(1)IP、端口信息;(2)地理位置信息,包括國家、城市;(3)操作系統、組件信息;(4)Web服務信息,包括Title、HTTP響應信息;(5)更新時間信息。
不同于傳統搜索引擎的頁面緩存,Shodan需要存儲的數據量并不是非常大,因此可能采用分布式性能較好的Mongodb數據庫,或直接采用ElasticSearch做存儲加索引,這樣的搭配方式不僅解決了分布式的困擾,也降低了數據存儲的運營難度。
3 網絡攻防方面的應用
本文在上一節以Shodan為例,分析了網絡空間搜索引擎的框架和功能模塊,旨在幫助安全研究人員更深刻地理解其工作原理。網絡安全的研究離不開網絡攻防實戰,只有在攻擊與防御的博弈中,才能發現更多的安全問題和提出更適合的修補措施,才能將網絡安全的研究推向新的高度。作為一個安全搜索引擎,網絡空間搜索引擎的建設初衷就是為網絡攻防提供服務,其在攻防實戰中優秀的表現也讓安全研究人員更重視、更青睞。因此,學會在實踐中熟練地使用網絡空間搜索引擎,不僅能大大減少工作量,還能為研究人員帶來想象不到的收獲和樂趣。
目前網絡上存在的空間搜索引擎,在原理和工作模式上大同小異,故本文在做實戰應用示例時,還是以Shodan平臺為主,其他搜索引擎平臺方法基本通用。
3.1 基礎用法
基礎用法主要提供常用的幾種網絡空間搜索引擎的檢索方法和語句,以下用法并不涵蓋所有,具體可參考Shodan官網提供的說明。
(1)多關鍵詞檢索:“keyword1 keyword2”。
(2)指定國家或城市檢索:“keyword”“country:”cn”或“keywords”city:“beijing”。
(3)指定開放端口檢索:“port:873”。
(4)指定IP地址或IP范圍檢索:“1.2.3.4”或“net:1.2.3.0/24”。
(5)指定操作系統或域名檢索:“keyword”os:”linux”或“keyword”hosmame:”.org”。
(6)指定日期范圍檢索:“keyword”before[after]:01/01/2016。
3.2 API接口的使用
當前主流的網絡空間搜索引擎為了方便安全人員開展工作,都提供了相應的API接口,使用這些API接口,我們可以在自己的腳本代碼里輕松的獲取和利用搜索結果。尤其是在進行批量安全測試時,API接口能發揮事半功倍的作用。以下是利用Python編寫的一段簡單的Shodan API利用代碼,代碼的作用是打印API接口的所有屬性和方法,并利用該API接口搜索“NetScreen”,最后將搜索結果總數打印出來。
圖5是上述代碼的執行結果,從圖中我們可以發現,Shodan API接口提供了20多個屬性和方法供我們使用,上述代碼中我們使用的就是其中的一個方法:search()。搜索結果共包含兩個鍵值:Matches和Total,其中Matches是搜索結果的明細,Total是搜索結果的總數。從圖中我們看到,Shodan對“NetScreen”的搜索結果一共是24828個。因為搜索結果太多,在這里我們就不展示詳細搜索信息了。
下面我們從搜索結果中選出一個IP地址:1.36.17.49(美國)進行驗證。“NetScreen”是Juniper的一款高端防火墻和VPN產品,2013年被曝出存在Root權限的后門漏洞,默認后門登錄密碼:<<<%s un='%s')=%u。我們將簡單測試一下該IP是否開了NetScreen服務,并且是否存在后門密碼。
在圖6中我們使用了NetScreen后門密碼,成功登錄了1.36.17.49。圖中顯示NetScreen的版本是6.3.or18.0,這個版本也是明確存在后門漏洞的。
3.3 其他利用方法
像Shodan這樣的網絡空間搜索引擎,不僅提供上述兩種使用方法,它還提供了其他更方便、快捷的方法。比如在Metasploit(一種滲透測試框架)中。我們可以利用Shodan模塊“auxiliary/gather/Shodansearch”進行搜索。
同時,互聯網上也有以命令行版本的,支持Python、Ruby.Perl、.Net等多種編程語言比如Shodan-Python等,支持不同的執行環境,用起來非常方便,在Github等公開的互聯網上就可以下載到。
4 結束語
網絡空間搜索引擎是一個較新的研究領域,目前安全人員對其研究較少。本文通過以Shodan為例,全面分析了網絡空間搜索引擎的框架模型和工作原理,并就該原理提出了可能的平臺搭建方案。同時,通過結合作者日常攻防實戰案例,為網絡安全從業及研究人員,提供了三種不同的網絡空間搜索引擎使用方法。