|
||||
網卡和交換機是常見的組網設備,網卡和交換機功能的實現需要MAC支橕,操作系統依賴網卡驅動程序和MAC打交道,進而通過網卡和交換機等網絡設備完成網絡通訊,MAC在網絡安全中也扮演了重要角色。
一、網卡、MAC控制器和MAC地址
提到MAC不得不涉及網卡的工作原理,網卡工作在OSI參考模型的數據鏈路層和網絡層。這裡又出現了一個概念『OSI參考模型』,在這個模型中定義了網絡通訊是分層的,分別是物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。以太網數據鏈路層其實包含MAC(介質訪問控制)子層和LLC(邏輯鏈路控制)子層。
物理層定義了數據傳送與接收所需要的電與光信號、線路狀態、時鍾基准、數據編碼和電路等,並向數據鏈路層設備提供標准接口。數據鏈路層則提供尋址機構、數據幀的構建、數據差錯檢查、傳送控制、向網絡層提供標准的數據接口等功能。以太網卡中數據鏈路層的芯片一般簡稱之為MAC控制器,物理層的芯片簡稱之為PHY。許多網卡的芯片把MAC和PHY的功能做到了一顆芯片中,比如Intel 82559網卡的和3COM3C905網卡。但是MAC和PHY的機制還是單獨存在的,只是外觀的表現形式是一顆單芯片。當然也有很多網卡的MAC和PHY是分開做的,比如D-LINK的DFE-530TX等,原文中說『MAC地址對應物理層』是不確切的。
通常提到的MAC指狹義的MAC地址,其實在網卡中,一塊以太網卡MAC芯片的作用不但要實現MAC子層和LLC子層的功能,還要提供符合規范的PCI界面以實現和主機的數據交換。以太網MAC芯片的一端接計算機PCI總線,另外一端就接到PHY芯片上。MAC從PCI總線收到IP數據包(或者其他網絡層協議的數據包)後,將之拆分並重新打包成最大1518Byte,最小64Byte的幀。這個幀裡面包括了目標MAC地址、自己的源MAC地址和數據包裡面的協議類型(比如IP數據包的類型用80表示)。最後還有一個DWORD(4Byte)的CRC碼。
網卡上有一顆EEPROM芯片,通常是一顆93C46。裡面記錄了網卡芯片的供應商ID、子系統供應商ID、網卡的MAC地址、網卡的一些配置,如SMI總線上PHY的地址,BOOTROM的容量,是否啟用BOOTROM引導系統等東西。
認識一下它們
MAC和PHY集成在一顆芯片的以太網卡
①RJ-45接口②Transformer(隔離變壓器)③PHY芯片
④MAC芯片⑤EEPROM⑥BOOTROM插槽
⑦WOL接頭⑧晶振⑨電壓轉換芯片
⑩LED指示燈
二、交換機、MAC地址表和MAC地址學習
對於網絡交換機來說,MAC地址表是其能否正確轉發數據包的關鍵,為此,協議標准RFC2285和RFC2889中都對以太網交換機的MAC地址表深度和MAC地址學習速度進行專門的描述。 MAC地址表顯示了主機的MAC地址與以太網交換機端口映射關系,指出數據幀去往目的主機的方向。當以太網交換機收到一個數據幀時,將收到數據幀的目的MAC地址與MAC地址表進行查找匹配。如果在MAC地址表中沒有相應的匹配項,則向除接收端口外的所有端口廣播該數據幀,有人將這種操作翻譯為泛洪(Flood,泛洪操作廣播的是普通數據幀而不是廣播幀)。在我們測試過的交換機中,有的除了能夠對廣播幀的轉發進行限制之外,也能對泛洪這種操作進行限制。
而當MAC地址表中有匹配項時,該匹配項指定的交換機端口與接收端口相同則表明該數據幀的目的主機和源主機在同一廣播域中,不通過交換機可以完成通信,交換機將丟棄該數據幀。否則,交換機將把該數據幀轉發到相應的端口。交換機還將檢查收到數據幀的源MAC地址,並查找MAC地址表中與之相匹配的項。如果沒有,交換機將記錄該MAC地址和接收該數據幀的端口,並激活一個定時器。這個過程被稱作地址學習。這個定時器一般就是我們在配置交換機時的AgeTime選項,一般我們都可以配置這一定時器的時間長度。在定時器到時的時候,該項記錄將從MAC地址表中刪除。而如果接收的數據幀的源MAC地址在MAC地址表中有匹配項,交換機將復位該地址的定時器。
三、IP地址、MAC地址和三層交換技術
一臺計算機想要接入到網絡中,必須要有兩個地址。一個是網卡的地址,也就是MAC地址。在以太網中,我們通過MAC地址來進行數據傳送和數據交換。在以太網環境中,數據會分幀傳送,每一個數據幀都會包含自己的MAC和目的MAC地址信息;另外一個地址是平時所說的IP地址,定義在網絡層,每一臺網絡計算機都會有一個或者多個IP地址,這是一個虛擬的數據,並且可以隨時更改。在硬件層次上進行的數據幀交換必須有正確的接口地址。但是,TCP/IP有自己的地址: 32 bit的IP地址。知道主機的IP地址並不能讓內核發送一幀數據給主機。內核(如以太網驅動程序)必須知道目的端的硬件地址纔能發送數據。ARP的功能是在32 bit的IP地址和采用不同網絡技術的硬件地址之間提供動態映射。點對點鏈路不使用ARP。當設置這些鏈路時(一般在引導過程進行),必須告知內核鏈路每一端的IP地址。像以太網地址這樣的硬件地址並不涉及。
IP地址和MAC地址是同時使用的,在數據傳送過程中,一個完整的TCP/IP包需要由以太網進行數據封裝,數據分幀,最後再通過物理層傳輸到目標計算機。在以太網封裝上層的TCP/IP包的時候,它需要知道源MAC地址和目的MAC地址,但是我們只能給出一個對方的IP地址,這個時候就需要一個協議來支持IP到MAC的轉換,這就是ARP,Address Resolution Protocol. ARP協議是介乎於網絡層和數據鏈路層的一個協議。第一次傳送某個目的IP地址的數據的時候,先會發出一個ARP包,其MAC的目標地址是廣播地址,裡面說到:"誰是xxx.xxx.xxx.xxx這個IP地址的主人?"因為是廣播包,所有這個局域網的主機都收到了這個ARP請求。
收到請求的主機將這個IP地址和自己的相比較,如果不相同就不予理會,如果相同就發出ARP響應包。這個IP地址的主機收到這個ARP請求包後回復的ARP響應裡說到:"我是這個IP地址的主人"。這個包裡面就包括了他的MAC地址。以後的給這個IP地址的幀的目標MAC地址就被確定了。其它的協議如IPX/SPX也有相應的協議完成這些操作。
IP地址和MAC地址之間的關聯關系保存在主機系統裡面,叫做ARP表,由驅動程序和操作系統完成。在Microsoft的系統裡面可以用arp -a的命令查看ARP表。收到數據幀的時候也是一樣,做完CRC以後,如果沒有CRC效驗錯誤,就把幀頭去掉,把數據包拿出來通過標准的借口傳遞給驅動和上層的協議客棧,最終正確的達到我們的應用程序。還有一些控制幀,例如流控幀也需要MAC直接識別並執行相應的行為。
三層交換機工作過程的簡單概括:如果目的IP地址顯示不是同一網段的,那麼A要實現和B的通訊,在流緩存條目中沒有對應MAC地址條目,就將第一個正常數據包發送向一個缺省網關,這個缺省網關一般在操作系統中已經設好,對應第三層路由模塊,所以可見對於不是同一子網的數據,最先在MAC表中放的是缺省網關的MAC地址;然後就由三層模塊接收到此數據包,查詢路由表以確定到達B的路由,將構造一個新的幀頭,其中以缺省網關的MAC地址為源MAC地址,以主機B的MAC地址為目的MAC地址。通過一定的識別觸發機制,確立主機A與B的MAC地址及轉發端口的對應關系,並記錄進流緩存條目表,以後的A到B的數據,就直接交由二層交換模塊完成。這就通常所說的一次路由多次轉發。
四、真實MAC地址、注冊表MAC地址和MAC地址的修改
MAC地址固化在網卡中的BIOS中,可以通過命令取得,但是,通過命令取得的MAC地址不一定是真實的MAC地址,因為在網卡初始化過程中,操作系統確實讀取了網卡中MAC地址,但是在以後通訊過程中使用的MAC地址卻是從初始化過程結束後建立的緩衝區中讀取,而緩衝區中MAC地址可能是注冊表定義的MAC地址,而不是真實的MAC地址,這個過程由網卡驅動程序完成。這也是WIN操作系統的MAC地址可以被輕易修改的原因。
WIN98/ME/2k/XP/2003用戶都可以使用ipconfig/all命令獲取MAC地址,XP/2003用戶有更簡單的方法:右鍵本地連接圖標、選擇狀態然後點擊支持選項卡,這裡『詳細信息』中包含有MAC和其它重要網絡參數。
大部分的網卡都可以通過在控制面板中修改網卡屬性來更改其MAC地址。在『設備管理器中』,右鍵點擊需要修改MAC地址的網卡圖標,並選擇『屬性/高級』選項卡。在『屬性』區,就可以看到一個稱作『Network Address』或其他相類似名字的的項目,點擊它,在右側『值』的下方,輸入要指定的MAC地址值。要連續輸入12個十六進制數字或字母,不要在其間輸入『-』。
重新啟動系統後設置就會生效了。參考上面發的圖比較有明顯的變化,顯然圖中顯示的是修改過的MAC地址。
五、MAC地址的捆綁、ARP命令缺陷和MAC地址重復
MAC地址綁定與IP地址綁定類似,MAC地址綁定也分為服務器有關MAC地址綁定、服務器無關MAC地址綁定、MAC地址靜態綁定和MAC地址動態綁定。服務器有關MAC地址綁定在政務網或園區網中的應用較多,可將用戶的使用權限和機器的MAC地址綁定起來,限制用戶只能在固定的機器上網,保障安全,防止帳號盜用。由於MAC地址可以修改,因此這個方法可以起到一定的作用,但仍有漏洞。
關於在WINDOWS 2000 SERVER下用ARP -S捆綁MAC和IP的方法需要具體分析,否則可能起不到綁定定作用。以WINDOWS 2000server為例,WIN主機用IP+MAC的方式限制上網,很容易被用戶突破。這裡需要說明的是有3種情況:
1、服務器用ARP -S做IP+MAC捆綁後,如果用戶自己改IP,保持MAC不變,這種情況下,ARP -S的捆綁被用戶輕易突破。
第一種情況的實驗如上圖,服務器2000/NAT/10.41.221.2。客戶機的IP是10.41.221.6,然後在2000的服務器上用ARP -S做捆綁。然後把客戶機的IP改為10.41.221.7,如圖,10.41.221.7可以上網。輕易可以突破捆綁。
2、服務器用ARP -S做IP+MAC捆綁後,如果用戶自己改MAC,保持IP不變,這種情況下,ARP -S的捆綁被用戶輕易突破。
所以上面的實驗用第三方軟件發包欺騙網關,達到正常的用戶IP不能上網的目的。
3、服務器用ARP -S做IP+MAC捆綁後,如果LAN中存在2臺計算機的IP和MAC完全相同(參考上面介紹的方法設置MAC地址),這種情況下,操作系統不會報告IP地址衝突,也不會報告MAC地址衝突。ARP -S的捆綁被用戶輕易突破。
為什麼在WINDOWS 2000下用ARP -S做IP+MAC捆綁會無效呢?
高手做了詳細的描述:『對於ARP表,W2K系統是通過內建的SNMP來進行管理的,不管你的SNMP服務是否開啟,呵呵,奇怪吧?先我也一樣很奇怪ARP這個程序是如何運行的,因為查遍了所有MSDN的文檔都沒有涉及到ARP表讀取,修改的API。萬般無奈之下,只有看ARP的匯編代碼,纔發現這個秘密。ARP -S命令也只是根據SNMP對應的OID接點的ARP表規范的ARP類型由3(動態)修改成4(靜態),但是低層的TCP/IP協議棧在收到ARP包以後修改SNMP對應的ARP表,根本就沒有檢查其類型,這也是ARP -S命令無效的原因。』
六、MAC地址帶來的網絡安全問題
修改IP和MAC都很容易,這不可避免的帶來了安全問題,下面分別以的IP+MAC綁定、端口和MAC捆綁和虛擬路由器這3種情況討論,這裡討論的綁定可以是WIN主機也可以是路由交換設備。
情況1、簡單的IP+MAC綁定
前面介紹了ARP -S靜態ARP綁定無效的情況,使用『ARP SERVER』按一定的時間間隔廣播網段內所有主機的正確IP-MAC映射表,可以解決這個問題。不過ARP綁定在WIN2003下卻是有效果的,在LINUX下也有效果,不僅如此,個人防火牆如ZoneAlarm等也有MAC過濾功能。在交換機上也可以做類似綁定,增加靜態ARP綁定以防止IP地址盜用(類似這樣的命令arp 1.1.1.1 0001.0001.1111 ARPA)。設置完成之後,如果非法用戶把地址改為1.1.1.1,它發送到路由器的包正常,但是從目標服務器2.1.1.1返回的數據包在路由器上轉發的時候,目標MAC地址將總是設為0001.0001.1111,非法用戶不能接收。
突破方法:修改MAC地址很容易,在Windows網絡連接設置修改網卡的配置,在『高級』頁面中找到NetworkAddress設置為指定的值即可。
情況2、端口和MAC地址捆綁認證
如果限制了指定端口只能被特定MAC地址的機器,用戶若更改了MAC地址端口將會進入不可用狀態。交換機端口上首次連接的PC的MAC地址將會記錄到交換機中,成為唯一能夠使用該端口的MAC地址。如果該PC更換MAC地址,默認將會使用端口置於shutdown狀態,無法與網絡連通。
突破方法:
1、代理服務器。用戶在同一VLAN內能夠對外訪問的主機上安裝代理服務器,通過代理訪問。
2、巧妙運用MAC地址重復。在要求進行端口和MAC地址認證的交換機中的一個端口下,用戶私自接一個HUB或者交換機。再將幾臺PC連在這個HUB或是交換機上,並將幾臺PC的IP和MAC地址設的完全一致。結果是多臺PC可以同時上網,只需要一個人包月就行了。先將MAC設成一樣的,再改IP。這樣,機器發出的免費ARP包被其它同IP主機收到時,那些主機發現MAC和自己的一樣,就會認為是自己發的了。在windows系統下就不會彈出『IP地址衝突』提示框。爭用的情況會有丟包現象出現,但不太會影響使用的。至少我親身感受是這樣,有時網頁打不開,再刷新一下就可以了。
情況3、虛擬MAC地址挑戰傳統寬帶認證管理
包括MAC捆綁在內的所有寬帶認證管理手段,它們都有個共同的目的,就是在某一時刻,只允許一臺計算機上線,如果能虛擬一個路由器,這個虛擬的路由器擁有唯一的MAC,它取代物理代理服務器,完成認證過程、同時提供網絡地址轉換功能,不就可以突破MAC地址綁定解決共享上網問題了嗎!HomeShare就是這樣一個共享軟件,使用單網卡共享方式,不需要設置專用的服務器。下圖是HomeShare組網網絡圖,可以看出沒有服務器或者路由設備。
HomeShare虛擬的路由器有3個特點:
1、和認證方式無關的特點。網絡中誰先開機誰執行登錄認證,即使認證手段改變也不影響共享上網。
2、虛擬主機的特點。這個主機可以設置MAC地址,也就是說:對外無論誰先撥號,服務商檢測到的是已經注冊的唯一的合法的MAC,輕松突破服務商IP+MAC捆綁或者MAC+端口捆綁;當服務器關機後,其它電腦將會自動成為服務器,保證網絡可以繼續使用,這樣可以實現無縫切換:當服務器關機,客戶機切換到服務器的過程中,可以保證客戶機中正在進行中的游戲不會中斷。無縫切換已經在大多數游戲中測試過,包括CS、Quake、聯眾世界等。
3、HomeShare虛擬的路由器提供網絡地址轉換(NAT)功能,實現共享上網和內部網絡資源共享,而且是通過廣播來完成的,客戶機不需要復雜的設置就可以上網。網絡中所有的計算機使用自己真實的MAC地址和虛擬主機的虛擬MAC通訊,完成數據交換。毫無疑問,HomeShare虛擬的路由器給傳統的寬帶認證管理帶來了安全問題。