如果你是一位將軍,擁有三千萬大軍,被任命攻打一座城。你會從哪裡開始進攻?
1. 大門進攻
2. 側門進攻
3. 鑿牆挖出一條通路
這其實不該是一個選擇題,策略應該是多變的,但會有一個基本的 SOP。在做滲透網站的時候也有 SOP,滲透網站會做的第一件其實不是攻擊,是偵查(Recon,Reconnaissance)。
在攻打一座城的時候,我們也會先派偵察兵去探查敵情、偵查城池薄弱的地方、將軍的位置等等。接著會沙盤推演,評估攻擊、找出對自己傷害最少、對敵最有效果的攻擊等,才會真正進行進攻。
不管是在滲透測試(Penetration Testing)或是賞金獵人在挖掘漏洞賞金計畫(Bug Bounty Program),SOP 大致會是:
- 資訊收集(Information Gathering)
- 弱點評估(Vulnerability Assessment)
- 漏洞利用(Exploitation)
- 提升權限(Privilege Escalation)
- 維護連線(Maintaining Access)
第一個步驟都會是資訊收集,OWASP Testing Guide 測試項目列表第一個也是收集資訊。這篇文章將會以漏洞賞金計畫裡白帽駭客的視角,來探討攻打一個網站時,要如何「偵查」你的目標,以及如何運用工具收集資訊。
偵查(Recon)的目的
收集資訊是為了日後的滲透,而這些要找的資訊可以粗略分成兩種:管理範圍和目標資訊。
以攻城的例子來說,我們偵查會想知道該城的大小和兵力分佈(管理範圍)、城內佈局(目標資訊),藉此安排我們進攻的路徑。
而以參與漏洞賞金計畫的駭客來講,駭客不會只打一個網站,他會盡可以找出所有「屬於該公司主機」且「符合懸賞範圍」的網站或服務(管理範圍),對他們進行滲透。找出越多對外服務,越有機會可以找到漏洞。
並且會想要知道每個對外服務的特徵,像是這個網站的配置、程式語言、開放對外埠等等(目標資訊)。
而我們偵查時要注意有時可以發現一些「服務遺跡(Legacy Service)」,一些「看起來」沒什麼維護的服務和資訊。這些「邊緣主機」對駭客來說就像撿到寶,因為這些沒有維護的主機、服務資訊,通常年久失修,沒有上最新的安全更新、古老且有漏洞的程式寫法、老舊有缺陷的系統架構等等,從這些遺跡中找到漏洞的機率很高,甚至可以藉由打下這台主機,再往目標公司內網繼續延伸攻擊。
偵查資訊類型
依照管理範圍和目標資訊的方向,我們有幾種資訊類型需要收集。管理範圍需要收集「網路資訊」,而目標資訊需要收集「網站資訊」以及「架構資訊」,最後如果你是要進行社交工程相關的攻擊,也許你也會試著收集「社交資訊」。
我們大概來看一下這幾個類型:
- 網路資訊:盡可能收集出「主機列表和雲端資訊」。主機列表包含目標公司 IP 範圍、網域名列出的主機資訊、開放埠等等,常見的方式會先收集目標公司的子網域(Subdomain),也會收集他們是用哪個雲端供應商。
- 網站資訊:收集完列表後,如果要開始打列表中的主機,會發現網站所使用不同的程式語言有不同打法。所以要先收集網站的程式語言資訊、網站框架、伺服器版本、網站功能和網頁路徑命名方式等等。
- 架構資訊:如果是內部的滲透測試可以用白箱的方式來了解,而外部滲透的黑箱測試,一開始可能不容易了解整體系統架構。像是雲端服務彼此間互聯的方式、微服務(Microservice)、叢集架構、快取機制等等。
- 社交資訊:主要是跟「人」相關的資訊。管理員名字、郵件地址、電話等等,不過社交工程通常不在漏洞賞金計畫範圍內。比較會獲得賞金的資訊,通常像是員工清單外洩、員工使用的權杖(Token)或個人資訊外洩等等。
我們先來介紹網路資訊這個類型的資訊要怎麼收集。
網路資訊
目的是先列出主機列表,我們可以從網路上各種資源收集。
最簡單可以從「別人已經整理好的」資訊上面搜尋,像是 Github 已經有人先把一些大公司的子網域掃過一遍:Popular-Site-Subdomains。
不過我們需要當然是更多主機資訊,可以藉由一些工具像是 Sublist3r、subfinder 來幫助我們收集子網域名。
如果你是一個只會用工具的駭客,那可能還只是個腳本小子(Script Kiddie)。工具只是幫助我們省力去做反覆的動作,用工具前我們要先「了解工具」,了解它「做了什麼?」,並且去做那些工具無法做到的事情。
像工具裡面用到了 Google Hacking 的技巧,利用搜尋引擎的參數 site:{domain}
這樣的方式來掃更多子域名。除了搜尋引擎有機會找到子域名,我們也可以用 Censys 找到針對公司的 TLS 憑證,利用憑證上的資訊找到該公司擁有的子網域名。
主機清單有了以後,我們可以用 nmap 掃過一遍這些主機開了哪些埠,常見指令會是:
nmap -Pn -sT -sV -p0-65535 {target_ip}
掃目標主機的所有埠和嘗試獲取開放埠的服務版本。如果懶得自己掃,也可以直接搜尋 Shodan,它是一個可以查找目標主機上有哪些開放埠的搜尋引擎。
看似收集完了,但這些都是一般駭客都會做的事情:使用工具、使用現成搜尋引擎。你能想到更多「自己想到的」收集資訊的做法,就能比一般白帽駭客更容易獲得漏洞賞金。
舉個真實的例子
還記得我們有提到網路資訊包含「雲端資訊」和「服務遺跡」嗎?我們可以先確認目標的網站是使用哪個雲端供應商,並且利用目標的「歷史遺跡」來獲取資訊。
我們來舉一個真實在漏洞賞金計畫遇過的例子:就算網站有經過負載平衡器(Load Balancer),但因為歷史資訊殘留導致「洩漏主機真實 IP」。
如果我們目標是 www.example.com
,我們先來查這個網域的資訊:
$ dig www.example.com
;; ANSWER SECTION:
www.example.com. 599 IN A 104.28.31.80
www.example.com. 599 IN A 104.28.30.80
$ whois 104.28.31.80
...
NetName: CLOUDFLARENET
...
Organization: Cloudflare, Inc. (CLOUD14)
把 IP 丟到 WHOIS 查詢可以知道這個 IP 是屬於哪個供應商的。上面 whois 查詢可以發現它用了 CloudFlare 的保護,所以摸不到後面真正的主機 IP。到這裡我們也無從下手,先來看看其他子域名 a.example.com
的資訊:
$ dig a.example.com
;; ANSWER SECTION:
a.example.com. 599 IN A xx.xx.xx.xx
$ whois xx.xx.xx.xx
...
NetName: GOOGLE-CLOUD
...
Organization: Google LLC (GOOGL-2)
原來是 GCP(Google Cloud Platform)的機器。目前資訊收集大致就這樣了,但如果你猜想:「也許這間公司當初是先用 GCP 服務,之後才加上 CloudFlare?」,我們試著把 www.example.com
去問 GCP 上的 DNS 伺服器看看:
$ dig www.example.com @ns-cloud-b4.googledomains.com
;; ANSWER SECTION:
www.example.com. 599 IN A oo.oo.oo.oo # 主機真實 IP
BINGO!如果對方沒有把之前使用 GCP 上 Cloud DNS 服務裡面的網域紀錄刪除的話,依舊是可以查到 DNS 紀錄的。你就可以查詢到它「曾經指向哪個 IP」,就可以找到他後面真正的主機位址。
問題出在哪?
問題就出在他「保留了以前的 DNS 紀錄沒有刪除」,這樣的歷史遺跡看似無用,但一但被駭客找到,有機會可以直接繞過外部 CloudFlare 的保護,直接攻擊主機。
當然找出負載平衡器後面真正的 IP,其實還有其他招,之後我們可以慢慢介紹。
防禦
這樣的資訊洩漏通常都跟我們的配置有關,這也許也是為什麼 OWASP Testing Guide 的第二個測試項目會是「配置與部署管理測試」,並且「配置錯誤(Security Misconfiguration)」會進入 OWASP Top 10 榜上的原因。
我們可以用簡單幾點來提醒自己不要犯這樣的錯誤:
- 配置設定:確實參考官方文件,不要只看別人寫的簡易教學,好好做好配置。
- 清理設定:將歷史遺物刪除,清除不必要的設定檔。尤其大公司容易有這樣的問題,如果你是想留下來做紀錄,那也應該是記錄在 Tickets / Issues 上而不是真正產品上。
- 測試:試著用上面工具和方法掃自己看看吧!
這回,我們大致介紹了在滲透網站時,偵查(Recon)網站的資訊類型、以及要怎麼進行偵查。不論你是不是要成為白帽駭客,未來你在架設網站的時候,你都會需要知道這些攻擊方式並且做好預防。
目前只介紹了網路資訊的收集,還有網站資訊、架構資訊、社交資訊等等類型,很多收集資訊的手法也與「配置與部署」有關,我們將會一一為你介紹。如果你還想持續知道駭客更多攻擊手法,歡迎點擊下方 FB 粉專持續追蹤我們!