嗅探與偽造原理

PsgQ發表於2020-12-09

嗅探


程式接收資料包的過程:

1.資料包在傳播介質中流動時,網路中的每個網路卡都能收到所有的資料幀,這些資料幀會被複制到網路卡的記憶體中,然後檢查目的MAC地址,是否為自己的MAC地址,是,則會通過直接儲存器(DMA)的方式被複制到作業系統核心的快取中,否則拒絕接收。然後網路卡會以中斷的方式告訴CPU,接收到了新資料,CPU會將這些資料從快取複製到一個佇列中(鏈路層驅動),為新資料的到來騰出空間。

2.然後通過協議棧,檢查網路層頭部,目的IP地址,目的IP地址不是自己的IP,會進行丟棄,在檢查傳輸層的目的埠,交給相應的程式。會依次去掉各層的頭部,交給程式的是資料部分。


如下圖:

Sniffer 程 序  鏈 路 一 驅  緩 存  網 卡  網 絡  用 戶 空 間  協 議 棧  OS 內 核

Q: Sniffer程式位於使用者空間部分,想觀察到完整的(包含首部資訊)、未經處理的、沒有進行丟棄的資料包,怎麼辦?

A: OS核心 為嗅探程式 提供了 一個Raw Socket API ,當資料包到達鏈路層驅動位置,會進行復制,通過raw socket 交給嗅探程式,如果有多個嗅探程式,會複製多份,分別交付。如下圖:

Sniffer 程 序  raw socket  co PY  鏈 路 一 驅 一  緩 存  網 卡  網 絡  用 戶 空 間  協 議 棧  OS 內 核

Sniffer程式並不需要獲得所有的報文,可能只需要獲得其中的一小部分報文,比如UDP報文,這裡就需要進行過濾,UNIX系統新增了一個BSD 資料包過濾器(BSD packet filter,BPF),如下圖:

Sniffer 程 序  raw socket  B P F 過 濾 器  鏈 路 一 驅 一  緩 存  網 卡  網 絡  用 戶 空 間  協 議 棧  OS 內 核

Q:為什麼不在Sniffer程式處過濾,而在OS核心裡面進行過濾?

A: 可以節省資源,在資料包複製之前進行過濾,之後進行復制的資料包相應大大減少。

注意:Sniffer程式,嗅探的是收包的過程。(站在攻擊者的角度)


偽造


正常的應用程式 僅僅向OS 核心提供資料,目的IP地址,目的埠等資訊,其他構造資料包的過程都交給OS核心去完成,而不能隨意的去構造各個包頭。與嗅探一樣,這列也可用raw socket API,進行資料包的構造,然後交給下層,傳送出去。如下圖:

應 用 程 序  ocket AP  協 議 棧  網 絡  spoof 不 帛  aw socket  網 卡

注意:該圖是簡化的圖,大體理解一下過程,沒有具體提及OS核心中的鏈路層操作。

另外,進行偽造,一般是發包的過程。(站在攻擊者的角度)





之後會提供相應python、c程式碼。

相關文章