封包裡的秘密

whoami

  •   fallnight

  •   資工三甲

  •   113屆  會長

  •   女婕思

outline

  • 我們如何看到網頁?

    • 背後的過程發生了什麼?

  • 什麼是封包?

  • 為什麼要看封包?

    • 現實中藍隊的角色

  • 抓封包的工具  ->  Wireshark

  • 用 Wireshark 實際看封包 & 惡意封包

聽完今天的課程內容,你將會...

  • 知道封包是啥,也會用 Wireshark!

  • 能看懂封包的內容

  • 對於網路概論的東西有概念 (一起歐趴💯

  • 了解人生還很長,不要真的一個個去看封包(x

  • 總之就是從入門到...入土(?

  • 好了不說廢話了快開始吧~

我們如何看到網頁?

🖥️

URL 請求網頁資訊

回應,呈現網頁

瀏覽器
(Client)

伺服器
(Server)

過程中發生了什麼?

過程中發生了什麼?

分成兩部分:

  • 使用者端按下 Enter 後,請求被送出前
  • 請求被送出後,到達伺服器端之前的過程

網路世界的地圖:網路模型

舉個栗子 - 買手機

📱

選了一台心儀的手機

📦

裝進盒子裡
選擇寄送方式:

掛號 or 平信

📝

貼上貨運單
填寫收件地址

🛬

搭上飛機準備送到台灣

🏢

從國外抵達台灣後的
辨別不同大樓的編號

舉個栗子 - 買手機

📱

選了一台心儀的手機

📦

裝進盒子裡
選擇寄送方式:

掛號 or 平信

📝

貼上貨運單
填寫收件地址

🛬

搭上飛機準備送到台灣

🏢

從國外抵達台灣後的
辨別不同大樓的編號

舉個栗子 - 買手機

📱

選了一台心儀的手機

📦

裝進盒子裡
選擇寄送方式:

掛號 or 平信

📝

貼上貨運單
填寫收件地址

🛬

搭上飛機準備送到台灣

🏢

從國外抵達台灣後的
辨別不同大樓的編號

舉個栗子 - 買手機

📱

選了一台心儀的手機

📦

裝進盒子裡
選擇寄送方式:

掛號 or 平信

📝

貼上貨運單
填寫收件地址

🛬

搭上飛機準備送到台灣

🏢

從國外抵達台灣後的
辨別不同大樓的編號

舉個栗子 - 買手機

📱

選了一台心儀的手機

📦

裝進盒子裡
選擇寄送方式:

掛號 or 平信

📝

貼上貨運單
填寫收件地址

🛬

搭上飛機準備送到台灣

🏢

從國外抵達台灣後的
辨別不同大樓的編號

舉個栗子 - 買手機

📱

選了一台心儀的手機

📦

裝進盒子裡
選擇寄送方式:

掛號 or 平信

📝

貼上貨運單
填寫收件地址

🛬

搭上飛機準備送到台灣

🏢

從國外抵達台灣後的
辨別不同大樓的編號

對應網路世界

📱

選了一台心儀的手機

📦

裝進盒子裡

📝

貼上貨運單

🛬

🏢

  • 應用層
  • HTTP
  • 傳輸層
  • TCP/UDP
  • 網路層
  • IP
  • 實體層
  • 網路線、電波

辨別不同大樓的編號

搭上飛機準備送到台灣

  • 鏈結層
  • MAC

對應網路世界

📱

選了一台心儀的手機

📦

裝進盒子裡

📝

貼上貨運單

🛬

🏢

  • 應用層
  • HTTP
  • 傳輸層
  • TCP/UDP
  • 網路層
  • IP
  • 實體層
  • 網路線、電波

搭上飛機準備送到台灣

辨別不同大樓的編號

  • 鏈結層
  • MAC

對應網路世界

📱

選了一台心儀的手機

📦

裝進盒子裡

📝

貼上貨運單

🛬

🏢

  • 應用層
  • HTTP
  • 傳輸層
  • TCP / UDP
  • 網路層
  • IP
  • 實體層
  • 網路線、電波

搭上飛機準備送到台灣

辨別不同大樓的編號

  • 鏈結層
  • MAC

對應網路世界

📱

選了一台心儀的手機

📦

裝進盒子裡

📝

貼上貨運單

🛬

🏢

  • 應用層
  • HTTP
  • 傳輸層
  • TCP/UDP
  • 網路層
  • IP
  • 實體層
  • 網路線、電波

搭上飛機準備送到台灣

辨別不同大樓的編號

  • 鏈結層
  • MAC

對應網路世界

📱

選了一台心儀的手機

📦

裝進盒子裡

📝

貼上貨運單

🛬

搭上飛機準備送到台灣

🏢

  • 應用層
  • HTTP
  • 傳輸層
  • TCP/UDP
  • 網路層
  • IP
  • 鏈結層
  • MAC
  • 實體層
  • 網路線、電波

辨別不同大樓的編號

對應網路世界

  • 應用層
  • HTTP
  • 傳輸層
  • TCP/UDP
  • 網路層
  • IP
  • 實體層
  • 網路線、電波

📱

選了一台心儀的手機

📦

裝進盒子裡

📝

貼上貨運單

🛬

搭上飛機準備送到台灣

🏢

辨別不同大樓的編號

  • 鏈結層
  • MAC

對應一下

🎁

📦

📦

🎁

📫

要送出的請求資訊

加上一層層的資訊
封裝成封包

拿到送出的請求資訊

透過一層層的資訊
知道下一步往哪走

✈️

🛫

✈️

✈️

🛬

✈️

包裹在飛機上的運送過程

某個國外的寄送地

台灣

轉機

轉機

轉機

轉機

📦

📦

📦

📦

📦

📦

🖥️

網路世界也是類似的

送出請求的
使用者端 (Client)

給出回應的
伺服器端 (Server)

路由器

路由器

路由器

路由器

路由器

路由器

過程中會遇到的問題

✈️

🛫

✈️

🛬

出發地

目的地

轉機

轉機

  • 包裹可能會...
    • 遺失、送錯地方
    • 被摔壞、爆開
    • 被壞人打開

在網路世界對應的問題

🖥️

使用者

伺服器

路由器

路由器

路由器

  • 封包在傳遞過程中可能會...
    • 遺失
    • 損毀
    • 被駭客側錄,拿到機密資訊

如何解決問題?

  • 在現實世界可以
    • 找商家反應處理
  • 在網路世界可以
    • 利用  SSL / TLS  為封包加密
    • HTTP  ->  HTTPS

✈️

🛫

出發地

轉機

伺服器

路由器

路由器

什麼是「封包」?

封包 (Packet)

  • 網路傳輸的基本單位

  • 帶著資料在路由器之間穿梭,抵達目的地

  • 大小容量有限制

    • 傳輸的資料會被切割成小塊,每一小塊就是一個封包

  • ​常見的副檔名為 .pcapng 或 .pcap

封包攜帶了什麼?

  • Header

    • 外側貼的各種標籤資訊

    • 來源 IP

    • 目的地 IP

    • 來源 Port

    • 目的地 Port

 

  • Payload

    • 裡面攜帶的內容

    • 請求或回應的內容
    • 封包中實際要傳輸的資料本體

    • 例如: 網頁的 HTML 碼、Email 內文、LINE 的訊息

 

為什麼要看封包?

現實中是誰在看封包?

讓我們進入藍隊的世界

向保全一樣的 SoC 團隊

  • Security Operations Center,簡稱 SoC,安全營運中心
     
  • 負責 24 小時全天候監控組織的資訊安全
    • 監控網路流量、系統日誌
    • 透過 SIEM 等工具做自動監測,即時發現異常活動並自動通報人員處理

向保全一樣的 SoC 團隊

  • 發生資安事件時,團隊立即啟動應變程序
    • 隔離感染系統
    • 阻擋攻擊來源
    • 還原或切換受到影響的服務
    • 進行調查和處置
  • SIEM
    • Security  Information  and  Event  Management ,  安全資訊與事件管理
    • 像個中央監控室​
    • 將資料整合成一個可視化平台
      • IDS / IPS 
      • WAF
      • 防火牆
      • 防毒軟體
      • ...

自動化的防禦產品

SIEM 整合了 ...

  • IDS
    • Intrusion Detection System ,  入侵檢測系統
    • 監控網路流量,發現可疑 IP 來源或行為時發出警報
  • IPS
    • Intrusion Prevention System ,  入侵預防系統
    • 監控、發現可疑IP或行為時,採取行動、預防入侵 
  • 防火牆
    • WAF
      • Web Application Firewall ,  網站應用程式防火牆
      • 檢查封包內攜帶的請求內容是否有攻擊腳本
      • ex. 看到類似 XSS 的攻擊就擋下
<script>alert("XSS")</script>

SIEM 整合了 ...

所以到底什麼時候要看封包呢?

  • 設計防禦產品時
    • 實際去查看惡意封包的運作過程,決定如何規則
  • 還原事件前後因果時
    • 從事件發生時產生的封包內找線索,了解事情經過
  • CTF 題目
    • 有些 CTF 會把 flag 藏在封包裡,如果連封包都不會看的話就直接無解 (x

有什麼工具可以看封包呢?

工具介紹

  • 圖形化介面 (GUI)
    • Wireshark
  • 命令指令介面 (CLI)
    • Tshark 
    • tcpdump
    • 常用指令: 

 

ip a                 # 列出當前正在使用的網卡

tshark -D            # 列出可選的網卡名稱
tcpdump -D     
                
tshark -i eth0       # 在指定網卡上擷取封包
tcpdump -i eht0           

# 監聽與指定 IP 相關的流量
tshark -i eth0 -f "host XX.XX.XX.XX"
tcpdump -i eth0 -nn 'host XX.XX.XX.XX'

# 將擷取的流量都儲存為 .pcap 的封包檔案中
tshark -i eth0 -w output.pcap
tcpdump -i eth0 -w capture.pcap

# 讀取檔案並顯示所有內容
tshark -r output.pcap
tcpdump -r output.pcap

Wireshark

  • 免費開源的封包分析工具
  • 它可以...
    • 即時監聽,捕捉特定網段上經過的所有封包
    • 封包解析,看到...
      • 來源和目的地 IP、使用的 Port 號
      • 協定類型(HTTP、TCP 等)
      • 實際傳輸的資料內容
    • 過濾功能,只看特定 IP 或協定的封包
  • 圖形化介面,新手友好,操作簡單!

但實際上企業不會用 Wireshark,因為...

  • 封包數量太大
    • 每小時可能產生數 GB 到數 TB
    • 儲存成本極高,難以長期保存
  • 效能問題

    • Wireshark 不適合全天候運行
    • 無法處理高流量環境
  • 功能缺乏

    • 沒有告警機制
    • 沒有集中管理或分析功能

Wireshark 安裝

  • 使用 kali 內建好的 Wireshark 
  • 所以跟上週一樣匯入虛擬機!
  • 如果想在 Windows 安裝的話可以參考這邊

Wireshark 安裝

實際打開一個封包看看吧!

開什麼?

  • 選擇網段 -> 乙太網路 (eth)

 

 

 

 

 

  • 若要開啟檔案的話,直接拖曳進來即可

裡面有什麼資訊呢?

  • No.
    • 封包的編號
  • Time
    • 封包被捕捉到的時間
  • Source
    • 封包的來源 IP 位址,表達 "誰送出的"
  • Destination
    • 封包的目的地 IP 位址,表達 "要送給誰"

 

  • Protocol
    • 使用的網路協定
    • 例如: HTTP、TCP、UDP等
  • Length
    • 封包的大小,單位為 bytes
  • Info
    • 封包的內容摘要

 

嘗試看懂各個封包在做什麼吧!

還記得協定 (Protocol) 嗎?

  • 用來規範雙方通訊行為的規則
  • 常見協定有
    • HTTP / HTTPS
    • TCP
    • UDP
    • ...

 

舉個栗子 - TCP

  • 送出請求
    • TCP 建立連線
      • 三向交握
        • 第一次握手 (SYN)
          • .129 作為來源向目的地 .130 發送
        • 第二次握手 (SYN+ACK)
          • .130 作為來源向目的地 .129 發送
        • 第三次握手 (ACK)
          • .129 作為來源向目的地 .130 發送
    • 連線建立完成,開始傳送資料
      • 例如 HTTP 請求

 

TCP 建立連線 - 三向交握

  • 第一次握手 (SYN)
    • Client 向 Server 傳送一個帶有 SYN 的封包
    • 表示想建立連線
  • 第二次握手 (SYN+ACK)
    • Server 向 Client 回覆一個帶有 SYN 與 ACK 的封包
    • 表示「我收到了,也準備好建立連線」
  • 第三次握手 (ACK)
    • Client 向 Server 再回覆一個帶有 ACK 的封包
    • 表示「確認收到回應

打開後裡面有什麼?

  • 打開一個正在做 TCP 三向交握的第一次握手的封包
    • 會發現有四行待展開的資訊
    • 每一行都有自己的特點
      • Frame
      • MAC 位址
      • IP 位址
      • TCP

打開後裡面有什麼?

  • 打開一個正在做 TCP 三向交握的第一次握手的封包
    • 會發現有四行待展開的資訊
    • 每一行都有自己的特點
      • Frame                 -->  實體層
      • MAC 位址           -->  鏈結層
      • IP 位址                -->  網路層
      • TCP                     -->  傳輸層
      • 應用層?
        • ​還在三向交握的第一次握手,不需要傳輸應用層資料

三向交握哪裡看?

  • 展開傳輸層 (Transmission Control Protocol) 的資訊
    • 往下滑,找到 Flags 再繼續展開
      • 此 Flags 非彼 Flag
      • 這裡有各種 Flags (旗標)
      • 但只有 SYN 對應的是 1
      • 表示此封包只帶有 SYN 旗標

再換一個打開後裡面有什麼?

  • 找個三向交握結束之後的 HTTP 請求封包打開它
    • 會發現比剛剛的 TCP 多了一行 Hypertext Transfer Protocol
    • 一樣,每一行都有自己的特點
      • Frame、eth0     -->  實體層
      • MAC 位址           -->  鏈結層
      • IP 位址                -->  網路層
      • TCP                     -->  傳輸層
      • HTTP                   -->  應用層

找到請求的資訊

  • 展開應用層 (Hypertext Transfer Protocol) 的資訊
    • 在下方可以看到這次請求的網址

找到回應的內容

  • 找個在 HTTP 請求之後回應的 HTTP 封包打開它
    • 展開應用層下方的 Line-based text data 的那行
      • 就能看到這次回應的網頁原始碼

其他協定 - UDP

  • 送就對了,不管有沒有送達,也不管資料是否完整
  • 犧牲可靠性,換取即時性
  • 用在即時通訊、直播、線上遊戲等
    • 中間如果缺失幾個封包我們也只會覺得可能是網路卡了
    • 但我們在乎連線速度,所以這時適合用 UDP
  • ​​​TCP 與 UDP 的不同之處
    • TCP 利用三向交握確認連線正常後才傳輸資料
    • UDP 直接傳輸不做確認

其他協定 - ICMP

  • 常見於網路診斷
    • 使用 ping 指令,就會收到 ICMP 的封包
      • Echo request 與 Echo reply
    • ex. ping 8.8.8.8

 

Wireshark 功能操作

過濾掉不想要的雜項

  • 介面上方有個過濾器 (Filter)
  • 可以用的指令

 

//只查看 HTTP 封包
http

//只查看 TCP 封包
tcp

//只查看與特定 IP 位址相關的流量
ip.addr == XX.XX.XX.XX

//指查看訪問了特定網站的 HTTP 流量
http.host contains "xxxx.com"

一次看到完整的封包內容

  • 封包大小有限制,應用層裝不下全部的內容
    • 會分多個封包依序傳送
    • 一個個打開查看很麻煩
  • 在 HTTP 封包上按右鍵,再依序選
    • Fllow
    • HTTP stream 或是 TCP stream 等
    • 就可以一次瀏覽完整內容了!
  • 左下角的 "Entire conversation" 可以切換只查看某 IP 向另一個 IP 發送的內容
  • 右下角 "Stream 0" 可以切換查看不同 stream 的內容

Lab Time !

  • 打開 lab.pcapng,從裡面找到以下兩個 flag
    • 0x1:在請求的網頁原始碼中尋找 flag 吧!
    • 0x2:找找傳送的帳號密碼吧!(flag 為 NISRA{密碼} )

來看看攻擊中的封包

SYN Flood 攻擊

  • 持續送出三向交握中的第一次握手的 SYN 封包
    • 正常來說是
      • 送出帶有 SYN 的封包
      • 對方收到後給出 SYN+ACK 回應的封包
      • 收到之後再送出 ACK 封包表達有收到
    • 惡意行為
      • 持續送出 SYN 
      • 完全不管對方的回應,就當作自己沒收到
      • 大量占用對方的系統資源,使其無法正常提供服務

SYN Flood 攻擊

反射型 XSS

  • 將惡意程式藏在網址列或表單中

  • 讓使用者點擊帶有惡意程式的連結或提交表單

    http://www.example.com/upload?id=<script>alert(1);</script>

    http://www.example.com/upload?id=
    %3Cscript%3Ealert%28%29%3B%3C%2Fscript%3E

     

  • 從 HTTP 封包中找出類似的 URL,判斷是 XSS 攻擊

課後問卷~

Wireshark 與封包

By fallnight

Wireshark 與封包

  • 121