到實(shí)戰(zhàn):過(guò)濾器、TCP分析與安全體檢)
不少剛開(kāi)始接觸Wireshark抓包的朋友第一天的體驗(yàn)基本都一樣軟件裝好了興奮地選中網(wǎng)卡點(diǎn)下開(kāi)始按鈕眼睜睜看著數(shù)據(jù)包像水龍頭一樣嘩嘩滾動(dòng)然后腦子一片空白。這不是因?yàn)槟惚慷沁€沒(méi)建立起“先有疑問(wèn)再抓包最后看證據(jù)”的習(xí)慣。這篇我就從Wireshark抓包的安裝開(kāi)始把從基礎(chǔ)操作到實(shí)戰(zhàn)分析的完整路徑都捋一遍重點(diǎn)放在那些真正決定你能不能抓到東西、能不能看懂東西的細(xì)節(jié)上。文章適合剛?cè)腴T(mén)的網(wǎng)絡(luò)安全學(xué)習(xí)者也適合正在做接口調(diào)試、網(wǎng)絡(luò)排障的運(yùn)維開(kāi)發(fā)同學(xué)很多課堂上和教程里容易跳過(guò)的坑我都會(huì)直接點(diǎn)出來(lái)。1. 裝對(duì)、裝好Wireshark第一次抓包前的三件準(zhǔn)備工作很多人以為抓包遇到的第一道坎是命令記不住其實(shí)不是第一道坎永遠(yuǎn)是環(huán)境問(wèn)題。我見(jiàn)過(guò)太多新手倒在了安裝階段所以這部分寧可講細(xì)一點(diǎn)。1.1 驅(qū)動(dòng)、權(quán)限和安裝包里的坑先說(shuō)一個(gè)很多人壓根沒(méi)注意過(guò)的概念Wireshark自己其實(shí)不會(huì)“抓包”——真正負(fù)責(zé)從網(wǎng)卡上把數(shù)據(jù)讀出來(lái)的是底層的抓包驅(qū)動(dòng)。Windows環(huán)境下這個(gè)驅(qū)動(dòng)叫npcapmacOS用的是系統(tǒng)自帶BPF機(jī)制Linux則是標(biāo)準(zhǔn)的內(nèi)核包接口。Windows用戶(hù)安裝Wireshark 4.x時(shí)安裝向?qū)?huì)彈出來(lái)讓你裝npcap一定要勾選并讓它正常安裝。如果之前系統(tǒng)里殘留過(guò)老舊的WinPcap或者npcap安裝失敗最常見(jiàn)的現(xiàn)象就是抓包按鈕是亮的但點(diǎn)了開(kāi)始之后列表里一個(gè)包都不出現(xiàn)。我在新裝系統(tǒng)的機(jī)器上遇到過(guò)兩次解決方法很直接去控制面板卸載掉殘留的WinPcap然后重新以管理員身份運(yùn)行一次Wireshark安裝包修復(fù)npcap再重啟電腦。macOS用戶(hù)雖然沒(méi)有驅(qū)動(dòng)安裝問(wèn)題但也要注意系統(tǒng)權(quán)限。打開(kāi)Wireshark后如果提示抓不到接口多半是“系統(tǒng)偏好設(shè)置→隱私與安全性”里沒(méi)有允許網(wǎng)絡(luò)捕獲或者需要重新安裝Wireshark自帶的ChmodBPF服務(wù)腳本。具體的選項(xiàng)位置不同版本略有差異但思路一致不要用sudo強(qiáng)行跑Wireshark先把系統(tǒng)權(quán)限授權(quán)給應(yīng)用本身。Linux用戶(hù)用apt裝完Wireshark后大概率會(huì)遇到這個(gè)問(wèn)題普通用戶(hù)打開(kāi)軟件能看見(jiàn)接口但點(diǎn)擊開(kāi)始后提示權(quán)限不足。解法是把自己加入wireshark用戶(hù)組然后注銷(xiāo)重登sudo usermod -aG wireshark $USER最后強(qiáng)調(diào)一點(diǎn)安裝來(lái)源一定要去官網(wǎng)下載安裝包不要在奇怪的第三方下載站點(diǎn)“高速下載”。Wireshark本身是免費(fèi)開(kāi)源軟件官網(wǎng)安裝包體積不大但在第三方站下載很容易被連環(huán)套路輕則捆綁一堆流氓軟件重則直接裝個(gè)帶后門(mén)的假Wireshark這個(gè)問(wèn)題在安全圈里每年都有中招的案例。1.2 選網(wǎng)卡看三個(gè)信息IP網(wǎng)段、連接方式、混雜模式環(huán)境裝好之后第一次打開(kāi)Wireshark你會(huì)看到一堆網(wǎng)卡接口名。選哪個(gè)判斷依據(jù)就三個(gè)本機(jī)正在用的IP、網(wǎng)卡類(lèi)型、連接方式。先把本機(jī)IP查出來(lái)Windows用ipconfigmacOS和Linux用ifconfig或者ip addr。比如結(jié)果是192.168.1.105那就回Wireshark主界面找同樣IP段的那個(gè)網(wǎng)卡而不是看名字帶“WLAN”就選。很多筆記本用戶(hù)抓不到包純粹是因?yàn)椴逯W(wǎng)線但選了無(wú)線網(wǎng)卡兩者看到的網(wǎng)絡(luò)根本不是同一條鏈路。再說(shuō)混雜模式。默認(rèn)情況下網(wǎng)卡只會(huì)把發(fā)給本機(jī)的數(shù)據(jù)包傳給上層應(yīng)用局域網(wǎng)里別人的包你是看不到的。勾選混雜模式后網(wǎng)卡才會(huì)把共享鏈路上經(jīng)過(guò)的數(shù)據(jù)也交上來(lái)。這個(gè)選項(xiàng)在Wireshark的捕獲選項(xiàng)里英文叫Promiscuous Mode建議默認(rèn)勾上。有一個(gè)容易誤導(dǎo)的說(shuō)法是“抓包時(shí)不要開(kāi)混雜模式”那是針對(duì)極少數(shù)特定分析場(chǎng)景的對(duì)剛?cè)腴T(mén)的人來(lái)說(shuō)不開(kāi)混雜模式只會(huì)讓你丟掉一大截?cái)?shù)據(jù)。對(duì)于虛擬機(jī)環(huán)境還得額外注意虛擬機(jī)里的流量會(huì)經(jīng)過(guò)虛擬網(wǎng)卡如果是NAT模式主機(jī)上抓到的可能是地址轉(zhuǎn)換后的包路徑不直觀。做實(shí)驗(yàn)時(shí)建議先把虛擬機(jī)網(wǎng)絡(luò)調(diào)到橋接模式或者直接在宿主機(jī)上抓這樣看到的是真實(shí)IP路徑。1.3 第一次抓包實(shí)操驗(yàn)證證明你的環(huán)境真的通了選好網(wǎng)卡后不需要急著面對(duì)恐怖的全流量。我的建議是先做一個(gè)最小驗(yàn)證步驟不超過(guò)三分鐘在Wireshark選中目標(biāo)網(wǎng)卡點(diǎn)開(kāi)始。打開(kāi)命令行ping一下你所在網(wǎng)段的路由器比如ping 192.168.1.1。等ping跑完幾條結(jié)果回Wireshark停止抓包。在顯示過(guò)濾器里輸入icmp此時(shí)應(yīng)該能看到一組“請(qǐng)求”和“回應(yīng)”的ICMP包。如果能看到說(shuō)明你的Wireshark環(huán)境已經(jīng)通了后面學(xué)什么都順。然后把Wireshark主界面的四個(gè)區(qū)域認(rèn)一遍最上面是顯示過(guò)濾器欄下面是包列表Packet List再往下左邊是協(xié)議詳情Packet Details最下面是原始字節(jié)Packet Bytes。入門(mén)階段主要盯包列表里的Time、Source、Destination、Protocol、Length、Info這幾列其他暫時(shí)不用管。這個(gè)最小驗(yàn)證比我見(jiàn)過(guò)很多直接“抓一把全流量”的教學(xué)要實(shí)用得多因?yàn)樽ト髁慨a(chǎn)生的幾百M(fèi)B文件分析欲望能直接給你澆滅一半。2. 不同抓包場(chǎng)景各有“脾氣”回環(huán)、遠(yuǎn)程、無(wú)線網(wǎng)卡Wireshark看起來(lái)是個(gè)窗口但它面對(duì)的抓包場(chǎng)景差異很大。不同場(chǎng)景下你該選哪個(gè)接口、能不能抓到、抓到了代表什么這層邏輯不搞清楚后面遇到問(wèn)題就會(huì)亂。2.1 本機(jī)訪問(wèn)本機(jī)回環(huán)流量為什么要選Loopback接口本機(jī)瀏覽器訪問(wèn)本機(jī)的服務(wù)比如訪問(wèn)127.0.0.1上的Nginx流量根本沒(méi)經(jīng)過(guò)物理網(wǎng)卡只會(huì)走回環(huán)接口再繞回協(xié)議棧內(nèi)部。如果你盯著以太網(wǎng)卡或Wi-Fi網(wǎng)卡抓一個(gè)包都看不見(jiàn)這就成了“抓包失敗”第一大原因。正確做法是在Wireshark接口列表里選名字里帶Loopback或lo的那個(gè)接口。驗(yàn)證方法也很簡(jiǎn)單起一個(gè)本地Web服務(wù)然后在瀏覽器或命令行里訪問(wèn)127.0.0.1回到Wireshark過(guò)濾tcp.port 80你就能看到一條完整的TCP三次握手加HTTP請(qǐng)求。要注意回環(huán)接口上所有流量都是127.0.0.1沒(méi)有硬件地址信息寫(xiě)過(guò)濾器時(shí)用ip.addr 127.0.0.1才好使。2.2 遠(yuǎn)程服務(wù)器沒(méi)圖形界面tcpdump加本地Wireshark的組合線上服務(wù)器是不可能有Wireshark圖形界面的但排障經(jīng)常需要在服務(wù)器上看流量。標(biāo)準(zhǔn)做法是先用tcpdump在服務(wù)器上落一個(gè)pcap文件再把文件拷回本地用Wireshark慢慢分析。基本命令很簡(jiǎn)單sudo tcpdump -i eth0 -w /tmp/cap.pcap -s 0如果需要縮小范圍可以提前加過(guò)濾條件避免文件太大sudo tcpdump -i eth0 -w /tmp/cap.pcap -s 0 host 192.168.1.10 and port 80抓完用scp把文件拉回本地scp userserver:/tmp/cap.pcap .這里有幾個(gè)參數(shù)要提醒-s 0表示完整捕獲每一個(gè)包不截?cái)鄤e為了省空間把Payload砍掉否則分析時(shí)發(fā)現(xiàn)內(nèi)容斷了一半那才是最頭疼的。抓包時(shí)長(zhǎng)也要控制建議先在本地確認(rèn)問(wèn)題大概率發(fā)生的窗口比如5分鐘或10分鐘然后用timeout工具限制時(shí)長(zhǎng)timeout 300 tcpdump -i eth0 -w /tmp/cap.pcap -s 0 host 1.2.3.4這樣就算你忘了停止它也會(huì)自動(dòng)收工不會(huì)把服務(wù)器磁盤(pán)塞爆。每次遇到“Wireshark怎么抓包”這個(gè)問(wèn)題我都建議服務(wù)器場(chǎng)景先學(xué)tcpdump因?yàn)樗鼔蚩?、夠省資源而且和Wireshark無(wú)縫銜接。2.3 Wi-Fi、USB和手機(jī)App的抓取邊界Wi-Fi環(huán)境是新手最容易產(chǎn)生誤解的地方。普通筆記本無(wú)線網(wǎng)卡工作在Managed模式只能捕獲本機(jī)和當(dāng)前連接Access Point之間收發(fā)的數(shù)據(jù)幀并不能把整個(gè)Wi-Fi網(wǎng)絡(luò)里其他設(shè)備的流量都收進(jìn)來(lái)。想實(shí)現(xiàn)后者必須網(wǎng)卡硬件支持并手動(dòng)開(kāi)啟Monitor模式。很多網(wǎng)傳的“用Wireshark抓Wi-Fi內(nèi)別人的包”是硬件都不支持的操作技術(shù)上就站不住腳。如果你確實(shí)需要做無(wú)線安全分析應(yīng)該在授權(quán)范圍內(nèi)找一張支持Monnitor模式的USB網(wǎng)卡來(lái)實(shí)驗(yàn)。Windows下想抓USB流量Wireshark默認(rèn)不帶這個(gè)能力需要在安裝時(shí)額外勾選USBPcap組件之后會(huì)多出一個(gè)USBPcap接口。日常抓手機(jī)App的包則更推薦代理方案讓手機(jī)連接電腦所在網(wǎng)絡(luò)然后在手機(jī)上把HTTP代理指向電腦IP電腦上用Wireshark對(duì)著對(duì)應(yīng)網(wǎng)卡抓包即可。這里有人會(huì)拿Wireshark和Fiddler、Charles對(duì)比簡(jiǎn)單說(shuō)兩句后兩者在HTTP/HTTPS調(diào)試上確實(shí)方便但Wireshark覆蓋面更寬、更貼近底層網(wǎng)絡(luò)協(xié)議兩者定位不同不存在絕對(duì)替代關(guān)系。3. 過(guò)濾器用得好不好直接決定你是“看包”還是“煩包”如果說(shuō)抓包是門(mén)檻那么過(guò)濾器就是分水嶺。同一份pcap文件會(huì)過(guò)濾的人三分鐘能鎖定目標(biāo)包不會(huì)過(guò)濾的人對(duì)著上萬(wàn)個(gè)包翻到懷疑人生。這一章是全文的實(shí)操核心建議動(dòng)手跟著做。3.1 捕獲過(guò)濾器與顯示過(guò)濾器兩種語(yǔ)法千萬(wàn)別搞混Wireshark里有兩套過(guò)濾體系很多人記不住表達(dá)式就是因?yàn)榘褍烧呋煸谝黄鹣搿2东@過(guò)濾器是在開(kāi)始抓包之前設(shè)置的決定“哪些包要被錄進(jìn)文件”使用BPF語(yǔ)法寫(xiě)法很短。比如host 192.168.1.10 tcp port 80 or tcp port 443 not broadcast and not multicast顯示過(guò)濾器是在抓包結(jié)束之后對(duì)現(xiàn)有數(shù)據(jù)做篩選的用Wireshark自己的字段語(yǔ)法功能豐富很多。比如同樣的需求顯示過(guò)濾器長(zhǎng)這樣ip.addr 192.168.1.10 tcp.port in {80, 443}實(shí)戰(zhàn)中我更推薦一個(gè)策略抓包時(shí)用盡量寬松的捕獲過(guò)濾器甚至干脆不設(shè)讓W(xué)ireshark把流量全部記錄下來(lái)分析時(shí)再用顯示過(guò)濾器層層縮小范圍。原因很簡(jiǎn)單捕獲過(guò)濾器一旦在錄制階段把流量濾掉那些沒(méi)有被記錄的包就永遠(yuǎn)消失了后面想找任何線索都沒(méi)有機(jī)會(huì)。只要磁盤(pán)和性能扛得住寬錄窄查才是保底思路。3.2 高頻顯示過(guò)濾器速查表與組合邏輯下面這張表就是我在日常分析里最常敲的表達(dá)式建議直接收藏過(guò)濾表達(dá)式作用適用場(chǎng)景ip.addr 192.168.1.100顯示與某個(gè)IP相關(guān)的雙向流量定位某臺(tái)設(shè)備的所有通信ip.src 1.2.3.4只看來(lái)源為某IP的包聚焦某個(gè)特定來(lái)源的流量tcp.port 443只看TCP端口443流量排查HTTPS連接udp.port 53只看DNS請(qǐng)求和響應(yīng)排查域名解析http顯示所有HTTP請(qǐng)求/響應(yīng)調(diào)試本地Web或明文網(wǎng)絡(luò)服務(wù)dns.qname contains example.com顯示包含特定域名的DNS查詢(xún)追蹤某個(gè)域名何時(shí)被訪問(wèn)frame contains password在原始數(shù)據(jù)幀里搜關(guān)鍵字查找明文敏感信息出現(xiàn)在哪些會(huì)話里tcp.flags.syn 1 tcp.flags.ack 0只看SYN包識(shí)別掃描行為tcp.analysis.flags顯示被Wireshark標(biāo)記為異常的TCP包疑似丟包、重傳、亂序問(wèn)題tcp.analysis.ack_rtt顯示TCP往返時(shí)間可以排序定位高延遲的TCP連接這些表達(dá)式可以自由組合布爾邏輯用and、or、not加括號(hào)。比如“某個(gè)IP在非80端口上的HTTP流量”就寫(xiě)成http ip.addr 192.168.1.100 tcp.port 8080新手最容易犯的錯(cuò)誤是手敲字段名時(shí)大小寫(xiě)弄錯(cuò)。Wireshark字段名絕大部分是小寫(xiě)比如ip.addr不能寫(xiě)成IP.Addr。不想記也行最省事的方式是右鍵點(diǎn)擊包列表里的任意字段選擇“作為過(guò)濾器應(yīng)用”或“準(zhǔn)備過(guò)濾器”Wireshark會(huì)自動(dòng)把嚴(yán)謹(jǐn)?shù)谋磉_(dá)式填好你只需要在后面追加邏輯條件。3.3 好用的不止過(guò)濾器著色規(guī)則、專(zhuān)家信息和統(tǒng)計(jì)視圖過(guò)濾器能幫你快速縮范圍但如果你連“這堆包整體上是否異?!倍疾恢乐苯油镌炊实汀pB(yǎng)成三個(gè)習(xí)慣很有用。第一看包列表的顏色。Wireshark默認(rèn)有一套著色規(guī)則TCP握手相關(guān)包是淺藍(lán)色HTTP是綠色TCP異常比如RST是黑色帶紅字看到成片的黑色或大面積的TCP重傳先警惕。第二打開(kāi)“分析→專(zhuān)家信息”。這個(gè)窗口會(huì)把所有包按錯(cuò)誤、警告、注意、聊天分組匯總。排障時(shí)我第一個(gè)看這里如果有大量“TCP RST”“重復(fù)ACK”“Out-of-Order”之類(lèi)的告警基本問(wèn)題就在那里不需要自己人工翻半天。第三用“統(tǒng)計(jì)→協(xié)議分級(jí)”和“統(tǒng)計(jì)→會(huì)話”快速建立全局概念。協(xié)議分級(jí)會(huì)按協(xié)議類(lèi)型給出流量占比平時(shí)一個(gè)辦公網(wǎng)絡(luò)里TCP、UDP、DNS的占比大致有規(guī)律突然冒出一個(gè)你不認(rèn)識(shí)的未知協(xié)議占了大頭多半有蹊蹺。會(huì)話窗口則會(huì)按IP對(duì)顯示雙方交換的數(shù)據(jù)量一臺(tái)內(nèi)網(wǎng)機(jī)子和一個(gè)你從沒(méi)見(jiàn)過(guò)的外網(wǎng)IP交換了數(shù)百M(fèi)B優(yōu)先級(jí)立刻提上來(lái)。4. 實(shí)戰(zhàn)一抓包分析HTTP接口把“為什么慢”問(wèn)到底光會(huì)看包列表還不夠抓包分析真正值錢(qián)的地方在于能回答“某個(gè)接口為什么慢”“某個(gè)請(qǐng)求為什么一直失敗”這類(lèi)問(wèn)題。這里我用一個(gè)最經(jīng)典的HTTP排障場(chǎng)景完整走一遍。4.1 用追蹤TCP流還原一次完整請(qǐng)求先在顯示過(guò)濾器里輸入http然后在包列表里找到任意一個(gè)HTTP包右鍵選擇“追蹤流→TCP流”英文是Follow TCP Stream。Wireshark直接把整個(gè)TCP連接里的請(qǐng)求和響應(yīng)拼接顯示出來(lái)從請(qǐng)求行到響應(yīng)頭從Cookie到響應(yīng)體一屏看全。我有個(gè)朋友排查“瀏覽器訪問(wèn)頁(yè)面要等10秒”的問(wèn)題一開(kāi)始懷疑后端代碼寫(xiě)差了但在TCP流里看了不到半分鐘就發(fā)現(xiàn)接口本身的200響應(yīng)很快慢的是后面加載的一個(gè)圖片資源服務(wù)端處理該圖片時(shí)遲遲不返回字節(jié)。這就是看流的價(jià)值——把宏觀“太慢”落實(shí)成具體哪個(gè)請(qǐng)求、哪個(gè)階段慢。如果流內(nèi)容出現(xiàn)亂碼一般是因?yàn)閭鬏攦?nèi)容經(jīng)過(guò)了gzip壓縮或本身就是二進(jìn)制文件。這時(shí)候不用糾結(jié)可視化改看響應(yīng)頭字段比如Content-Encoding是不是gzipContent-Length的大小是否符合預(yù)期往往也能定位問(wèn)題。4.2 用三個(gè)時(shí)間段拆分一次請(qǐng)求的耗時(shí)一次普通的HTTP訪問(wèn)可以拆成三個(gè)階段分別對(duì)應(yīng)不同的耗時(shí)邏輯DNS解析時(shí)間從DNS請(qǐng)求發(fā)出到收到DNS響應(yīng)的時(shí)間差。TCP握手時(shí)間從SYN發(fā)出到收到對(duì)端SYN-ACK的時(shí)間差這基本等于網(wǎng)絡(luò)往返時(shí)延。數(shù)據(jù)響應(yīng)時(shí)間從握手完成到收到首個(gè)HTTP響應(yīng)數(shù)據(jù)的時(shí)間近似等于服務(wù)端處理時(shí)間。在實(shí)際操作中選中兩個(gè)包看時(shí)間列差值就行或者用“統(tǒng)計(jì)→流量圖”把整條流程畫(huà)出來(lái)階段之間的關(guān)系一目了然。把慢請(qǐng)求按這三段一拆問(wèn)題責(zé)任方立刻清晰現(xiàn)象原因方向DNS解析耗時(shí)超過(guò)幾百毫秒本地DNS服務(wù)器慢、緩存失效、遞歸查詢(xún)異常SYN發(fā)出后遲遲等不到SYN-ACK中間鏈路延遲大、防火墻丟包、對(duì)端負(fù)載過(guò)高SYN多次重傳后才收到SYN-ACK中間鏈路丟包嚴(yán)重可能存在線路擁塞TCP握手很快但響應(yīng)數(shù)據(jù)遲遲不來(lái)服務(wù)端應(yīng)用處理慢問(wèn)題在應(yīng)用層這個(gè)方法不僅適用于HTTPMySQL連接、RPC調(diào)用、WebSocket建連統(tǒng)統(tǒng)可以套用。調(diào)研一個(gè)遠(yuǎn)程調(diào)用慢的問(wèn)題只要把兩端的抓包時(shí)間戳對(duì)上到底慢在網(wǎng)絡(luò)的哪個(gè)環(huán)節(jié)一秒就能定性。4.3 HTTPS流量一片密文SSLKEYLOGFILE的調(diào)試玩法現(xiàn)在明文HTTP越來(lái)越少抓包看到的全是TLS層密文展開(kāi)來(lái)看全是“Application Data”這種數(shù)值。這不是抓包沒(méi)用而是你需要一個(gè)合法的調(diào)試手段。如果你只是想查看自己瀏覽器發(fā)出的HTTPS內(nèi)容可以用環(huán)境變量SSLKEYLOGFILE讓瀏覽器把TLS握手過(guò)程中的會(huì)話密鑰寫(xiě)到一個(gè)日志文件Wireshark讀到這份日志后就能在TLS層“解密”展示HTTP明文。具體步驟在系統(tǒng)環(huán)境變量里新建一個(gè)變量變量名SSLKEYLOGFILE變量值指向你計(jì)劃保存的日志路徑比如C:\tmp\sslkey.log。徹底關(guān)閉并重新啟動(dòng)Firefox或Chrome。在Wireshark里打開(kāi)“編輯→首選項(xiàng)→協(xié)議→TLS”在“(Pre)-Master-Secret log filename”里填同一個(gè)路徑。重新抓包TLS下面的HTTP內(nèi)容就能看到了。這個(gè)方法的邊界要清楚它只能解密你自己瀏覽器產(chǎn)生的流量而且日志文件一旦丟失那批抓包文件里的密文就再也解不開(kāi)了。另外該文件里包含敏感密鑰不要把抓包文件和密鑰日志一起外傳生產(chǎn)環(huán)境千萬(wàn)不要隨便開(kāi)這個(gè)變量調(diào)試自己的開(kāi)發(fā)環(huán)境就好。5. 實(shí)戰(zhàn)二用Wireshark給內(nèi)網(wǎng)做一次基礎(chǔ)流量安全體檢既然是“網(wǎng)絡(luò)安全入門(mén)必學(xué)”光會(huì)排障還不夠還得學(xué)會(huì)用Wireshark發(fā)現(xiàn)網(wǎng)絡(luò)里的異常。這里分享三個(gè)入門(mén)級(jí)的檢查方向全部可以在自己搭建的測(cè)試環(huán)境里復(fù)現(xiàn)。5.1 ARP這一層同一個(gè)IP怎么會(huì)有兩個(gè)MAC地址ARP是局域網(wǎng)里最容易做手腳的一個(gè)協(xié)議但它也特別適合用Wireshark做基礎(chǔ)體檢。原理很簡(jiǎn)單測(cè)試環(huán)境里一臺(tái)主機(jī)A發(fā)出廣播“誰(shuí)有192.168.1.1的MAC”正常情況下只有網(wǎng)關(guān)來(lái)應(yīng)答。如果有一臺(tái)主機(jī)也在冒充網(wǎng)關(guān)并回復(fù)自己的MAC地址那么你的抓包里就會(huì)出現(xiàn)一個(gè)很扎眼的現(xiàn)象同一個(gè)IP地址對(duì)應(yīng)了多個(gè)不同的MAC地址。定位操作顯示過(guò)濾器輸入arp然后在包列表里加一列“源MAC”字段觀察來(lái)自同一個(gè)IP的ARP響應(yīng)是不是對(duì)應(yīng)著不同MAC。想更自動(dòng)化一點(diǎn)可以用“統(tǒng)計(jì)→端點(diǎn)”里的MAC標(biāo)簽頁(yè)查看一個(gè)IP關(guān)聯(lián)哪些MAC。還有一種情況是ARP請(qǐng)求風(fēng)暴。正常網(wǎng)絡(luò)的ARP請(qǐng)求頻率很低如果你在抓包里看到每秒幾百上千條ARP請(qǐng)求/響應(yīng)說(shuō)明有人在跑掃描工具或者在做ARP泛洪。遇到這種情況先斷開(kāi)可疑主機(jī)的網(wǎng)絡(luò)再根據(jù)MAC對(duì)照交換機(jī)端口表定位物理位置。5.2 從DNS流量里嗅出不對(duì)勁的域名DNS是大多數(shù)惡意通信繞不開(kāi)的入口所以分析DNS流量是安全入門(mén)的重要內(nèi)容。顯示過(guò)濾器輸入dnsWireshark會(huì)把所有DNS請(qǐng)求和響應(yīng)列出來(lái)重點(diǎn)看查詢(xún)名qname那一列。有幾種DNS特征值得警惕域名是隨機(jī)字母數(shù)字拼接、子域名長(zhǎng)到異常、短時(shí)間內(nèi)對(duì)同一個(gè)域名發(fā)起大量形式不同的查詢(xún)、大量DNS響應(yīng)狀態(tài)是No such name即域名不存在。正常用戶(hù)的DNS查詢(xún)很規(guī)整突然冒出一堆機(jī)選風(fēng)格域名不是廣告SDK在搞怪就是有程序在試探域名解析甚至可能在搭建DNS隱蔽隧道把數(shù)據(jù)編碼在查詢(xún)名中做遠(yuǎn)程通信。通過(guò)dns.qname contains過(guò)濾可以快速對(duì)比基線。做這類(lèi)分析時(shí)最好能先有一個(gè)“這臺(tái)機(jī)器平時(shí)查哪些域名”的基線數(shù)據(jù)異常域名通常是與基線偏差最大的那部分而不是某個(gè)特定域名單。5.3 SYN掃描和暴力破解的初步識(shí)別安全體檢還有一個(gè)必備動(dòng)作就是看TCP連接建立階段的異常掃描行為。顯示過(guò)濾器tcp.flags.syn 1 and tcp.flags.ack 0出來(lái)的都是只發(fā)SYN不帶ACK的包。一個(gè)正??蛻?hù)端訪問(wèn)服務(wù)端不會(huì)一口氣對(duì)同IP的成百上千個(gè)端口發(fā)SYN所以一旦這個(gè)過(guò)濾器結(jié)果出現(xiàn)“一對(duì)多”的分布很可能是在被端口掃描。暴力破解的典型特征是大量建立連接后又快速斷開(kāi)伴隨大量HTTP 401等認(rèn)證失敗響應(yīng)。配合過(guò)濾表達(dá)式http.response.code 401再對(duì)來(lái)源IP做統(tǒng)計(jì)基本能鎖定暴力破解的源地址。這里要鄭重說(shuō)一句以上安全分析手段全部用于自己搭建的測(cè)試環(huán)境、自有設(shè)備或者明確授權(quán)的安全測(cè)試場(chǎng)景不要對(duì)著不屬于你的網(wǎng)絡(luò)做任何掃描和抓包分析。Wireshark只是取證和分析工具它能記錄證據(jù)不會(huì)攔截異常流量。真要防御還得靠防火墻、入侵檢測(cè)系統(tǒng)聯(lián)動(dòng)這個(gè)定位從第一天就要清楚。6. 幾個(gè)直接影響體驗(yàn)的實(shí)用設(shè)置和常見(jiàn)坑最后這部分更像是我自己踩坑攢下來(lái)的操作筆記每一條都能讓后續(xù)使用體驗(yàn)明顯改善。6.1 時(shí)間戳不對(duì)理解兩種時(shí)間顯示才會(huì)排障很多新手第一眼看見(jiàn)Wireshark的時(shí)間列會(huì)愣住怎么從0.000000開(kāi)始其實(shí)是默認(rèn)的“自捕獲開(kāi)始以來(lái)的時(shí)間”它適合看包與包之間的間隔不適合對(duì)表日志。排障時(shí)想和服務(wù)器日志對(duì)齊就需要切到“視圖→時(shí)間顯示格式→日期和時(shí)間”。如果你日期時(shí)間顯示的內(nèi)容和本地時(shí)間相差8小時(shí)那是時(shí)區(qū)沒(méi)設(shè)置。到“編輯→首選項(xiàng)→外觀→時(shí)間”里把時(shí)區(qū)設(shè)置成Asia/Shanghai。這個(gè)小細(xì)節(jié)能避免一大半日志對(duì)不上的問(wèn)題。6.2 給IP加地理位置標(biāo)簽GeoIP配置經(jīng)常做安全分析的人都想一眼看出流量來(lái)自哪個(gè)國(guó)家這需要給Wireshark配置GeoIP離線數(shù)據(jù)庫(kù)。操作路徑下載一份GeoLite2-City.mmdb格式的離線數(shù)據(jù)庫(kù)請(qǐng)從可信來(lái)源下載然后在“編輯→首選項(xiàng)→名稱(chēng)解析→MaxMind數(shù)據(jù)庫(kù)路徑”里指定這個(gè)數(shù)據(jù)庫(kù)所在目錄并勾選IP地理信息解析。配置完成后數(shù)據(jù)包詳情里IP層會(huì)顯示地理位置端點(diǎn)窗口也能按國(guó)家維度分組統(tǒng)計(jì)。這個(gè)配置的實(shí)際體驗(yàn)提升非常大尤其是處理“辦公室里大量流量非預(yù)期地涌向某個(gè)海外IP”這種問(wèn)題時(shí)少一個(gè)全世界一個(gè)個(gè)查數(shù)據(jù)庫(kù)的步驟結(jié)論出得更快。6.3 把藏在流量里的文件取出來(lái)導(dǎo)出HTTP對(duì)象Wireshark能把HTTP會(huì)話中傳輸?shù)膶?shí)際文件直接導(dǎo)出來(lái)操作路徑是“文件→導(dǎo)出對(duì)象→HTTP”。在彈出的列表里Wireshark會(huì)列出每個(gè)HTTP響應(yīng)中傳輸?shù)膬?nèi)容支持逐個(gè)保存或全部保存。在做安全分析時(shí)這個(gè)功能相當(dāng)順手。比如一個(gè)可疑網(wǎng)站給終端下發(fā)了一個(gè)壓縮包你不需要人工從十六進(jìn)制字節(jié)里還原文件直接導(dǎo)出然后放到沙箱環(huán)境里分析即可。SMTP等協(xié)議也有對(duì)應(yīng)的導(dǎo)出對(duì)象選項(xiàng)遇到“從流量里取文件”的需求都優(yōu)先看這里。6.4 常見(jiàn)問(wèn)題速查表現(xiàn)象可能原因處理方式點(diǎn)開(kāi)始抓包后一個(gè)包都沒(méi)有權(quán)限不足/npcap驅(qū)動(dòng)沒(méi)裝好/選錯(cuò)網(wǎng)卡管理員運(yùn)行修復(fù)驅(qū)動(dòng)換網(wǎng)卡試只能看到ARP等廣播包混雜模式?jīng)]開(kāi)或主機(jī)不在同廣播域檢查混雜模式檢查網(wǎng)絡(luò)接入方式數(shù)據(jù)包內(nèi)容全是亂碼加密流量或壓縮內(nèi)容看TLS層或配置解密密鑰打開(kāi)pcap文件特別卡文件太大、包太多用顯示過(guò)濾縮小范圍導(dǎo)出后再分析本機(jī)訪問(wèn)本機(jī)抓不到包選了物理網(wǎng)卡沒(méi)選回環(huán)選Loopback接口手機(jī)App的包抓不到?jīng)]走代理/證書(shū)校驗(yàn)或SSL Pinning配置代理并安裝證書(shū)調(diào)試環(huán)境關(guān)閉校驗(yàn)最后再多說(shuō)一句關(guān)于“抓包習(xí)慣”的事。玩了這么多年Wireshark我最大的體會(huì)是真正高效的分析絕大多數(shù)時(shí)間花在“想清楚要驗(yàn)證什么問(wèn)題”上而不是“多會(huì)幾個(gè)按鈕”。每次上手抓包之前先把過(guò)濾表達(dá)式想好并寫(xiě)好抓完先掃一眼專(zhuān)家信息和統(tǒng)計(jì)視圖再深入包級(jí)細(xì)節(jié)。這套流程能讓你在半小時(shí)內(nèi)搞定別人折騰一下午的網(wǎng)絡(luò)問(wèn)題也希望能幫你把Wireshark真正變成觀察網(wǎng)絡(luò)世界的那雙眼睛。