勞翠金,秦 燊
(柳州城市職業學院 信息工程系,廣西 柳州 545000)
建立在TCP/IP 之上的局域網由于協議本身的脆弱性,給攻擊者留下了入侵的機會。 以太網中的數據傳輸信道是共享信道,如果局域網采用集線器連接,因為集線器接收到信號后會將信號從所有接口轉發出去,發給局域網中的所有主機,主機若被設為監聽模式,即使收到的信號不是發給自己的,也會接收下來,從而達到偵聽網絡數據,非法竊取他人賬號、密碼等信息和借此進行其他非法操作,損害他人利益的目的。如果局域網連接使用的不是集線器而是交換機,雖然能避免以上廣播轉發的后果,但攻擊者仍可基于ARP協議及交換機生成MAC 地址表的原理,偽造“IP 地址與MAC 地址對應關系”,實施中間人攻擊。 另外,攻擊者還可利用局域網對DHCP 服務器缺少驗證機制,通過攻擊DHCP 服務器,進而將偽造的缺省網關和DNS服務器地址發給用戶,達到中間人攻擊和網絡釣魚等目的。 文章主要探討如何有針對性地加強其防御能力及相關技術手段。 涉及的安全防護措施和技術手段,均可通過運行EVE-NG 虛擬化平臺進行驗證[1]。
網絡管理員運用端口鏡像技術,可對網絡流量進行監控,將流經交換機各端口的流量轉發到網絡安全管理員監控的端口。 以Catalyst 2950 系列的交換機為例,命令“monitor session 1 source interface g0/1”指定源端口,命令“monitor session 1 destination interface g0/2”指定目的端口,源端口g0/1 的流量將會被鏡像到管理員所在的目標端口g0/2 上,由管理員進行監控和分析。
因為攻擊者沒有交換機的管理權限,故攻擊者無法采用以上方法對局域網上的流量進行監控和捕獲諸如密碼等重要信息。 但攻擊者卻可采用MAC 地址泛洪等攻擊達到該目的。 下文先探討攻擊者的做法,再給出解決方案。 這涉及交換機的工作原理及MAC 地址表。
局域網中的電腦互通時,源電腦先根據目標電腦的IP 地址,獲得其對應的MAC 地址,然后,再通過源MAC 地址和目標MAC 地址進行通信。 通信需經過中間設備交換機的中轉。 交換機查找其MAC 地址表中是否存有目標MAC 地址的條目,若有,則可找到出接口;若無,則交換機會通過廣播的方式,把這個數據幀從除了入接口之外的其他所有接口廣播出去,收到這個數據幀的電腦如果發現數據幀的目標MAC 地址與自己的MAC 地址不同,則會將其丟棄,如果發現接收到的數據幀的目標MAC 地址是自己的MAC 地址,就接收并處理該數據幀。
交換機上的MAC 地址表存有MAC 地址與接口的對應關系,但剛開始時是空的。 當有數據幀到達交換機時,交換機會將源MAC 與交換機中的MAC 地址表中的條目進行對比,如果在MAC 地址表中找不到包含這個源MAC 地址的條目,交換機就會將這個源MAC地址與對應的入接口作為一個新的條目,存入MAC 地址表。 以后一旦有目的MAC 地址與MAC 地址表中已有的MAC 地址一致的數據幀進入交換機,交換機就可以將其從查到的對應接口轉發出去[2]。
然而,交換機的MAC 地址表的存儲空間畢竟是有限的,當攻擊者虛構大量的源MAC 地址的數據幀,并發往交換機中時,交換機將會將這些虛構的源MAC 地址記錄到自己的MAC 地址表中,最終導致交換機的MAC 地址表爆滿,使交換機無法存儲新的MAC 地址及其與相應接口的對應關系。 此后,如果還有新的數據流經過交換機,因為交換機無法從MAC 地址表中查找到其相應的目標MAC 地址,所以交換機只能像集線器一樣,將數據幀廣播出去。 包括攻擊者在內的電腦,都會收到這些廣播信息,攻擊者通過抓包軟件,捕獲和分析這些信息。
因為交換機的MAC 地址表容量是有限的,所以攻擊者若在kali linux 上打開多個命令行窗口,同時運行macof 命令,偽造大量的源MAC 地址來占滿交接機的MAC 地址表空間,則經由此交換機的數據的轉發只能通過廣播進行,此時通過抓包就可以捕獲到網絡上的所有流量了。
防御MAC 地址泛洪攻擊的常用方法,是配置交換機端口的port-security 屬性。 通過交接機端口的portsecurity 屬性可限制每個端口可連接的MAC 地址數量,還能限制相同的MAC 地址是否允許出現在不同的端口列表中。 對不符合port-security 屬性的違規行為,可配置為將相應的端口關閉,也可配置為將違規幀丟棄,從而避免出現MAC 地址泛洪的不良影響。 進入交換機端口使用“switchport port-security”命令,可開啟交換機端口的port-security 屬性,阻止端口遭受MAC 地址的泛洪攻擊。 開啟port-security 后,一個交換機端口默認只能連接一個MAC 地址;相同的MAC 地址不允許同時出現在不同的端口的列表中。 如果相同的MAC地址在不同的交換機端口列表中出現,交換機會將這種情況視為違規。 違規幀的處理方式有以下3 種[2]。
第一種違規幀的處理方式是protect,會將違規幀丟棄,而且不發送任何告警信息;第二種違規幀的處理方式是restrict,會將違規幀丟棄,同時發送告警信息;第三種違規幀的處理方式是shutdown,會將出現違規幀的端口關閉,將端口的狀態置為errordisable,同時,發送告警信息。 例如,通過“switchport port - security violation shutdown”命令,可將違規幀的處理方式設置為“shutdown”;通過“switchport port-security maximum 2”命令,將端口允許連接的最大MAC 地址數量設置為2 個。
配置了相關的防護命令后,若攻擊者發動攻擊,交換機會進行主動防御,此時,可在交換機上通過“show port-security interface g1/0”命令,查看交換機g1/0 接口的port-security 狀態,可以看到,雖然攻擊者發起大量的偽造源MAC 地址,想占滿交換機的MAC 地址表的空間,但由于源MAC 地址數超過了2,端口因違規而被關閉,達到了防御的目的。 網絡管理員為了進一步追蹤攻擊者,可通過“show port-security address”命令,查看port-security 上的地址信息,從而追蹤到攻擊者并進行追責。 如果交換機的端口因遭受攻擊,進行主動防御而關閉了,當網絡安全管理員處理好相關問題后,需要對該端口進行恢復處理:先使用 “no switchport port-security”命令,關閉這個端口的port-security 屬性,再用“shutdown”命令關閉這個端口,最后用“no shutdown”命令啟用這個端口。
除了MAC 地址泛洪攻擊,局域網站的DHCP 服務器也容易受到攻擊。 正常的DHCP 服務器接收到客戶機獲取地址的請求后,會從地址池中取出IP 地址分配給客戶機,同時還會把相關的子網掩碼、網關地址、DNS服務器地址等信息,一并分配給客戶機,具體如下。
首先,客戶機向局域網發送DHCP Discover 廣播請求,向DHCP 服務器申請IP 地址、子網掩碼、缺省網關、DNS 服務器等信息。
如果局域網中存在多臺DHCP 服務器,每臺服務器都會從自身地址池的可用IP 地址中取出一個,連同相關的子網掩碼、網關地址、DNS 服務器地址,回應給客戶機。 客戶機收到DHCP 服務器的回應后,選擇其中一個服務器分配的地址等信息,并作出響應。 沒有被客戶機接收的DHCP 服務器會把打算分配出去的IP地址回收到地址池中;被客戶機接收的DHCP 服務器則返回確認信息給客戶機,客戶機最終正式獲得該DHCP 服務器分配的IP 地址、子網掩碼、網關地址、DNS 地址等信息,進行正常的網絡通信。
然而,若有攻擊者通過kali 的“pig.py 網卡類型及編號”命令不斷地向正規DHCP 服務器申請IP 地址,則會耗盡正規DHCP 服務器地址池中的所有IP 地址,導致正規DHCP 服務器無法再為正常用戶分配地址,此時,若攻擊者啟用自己控制的惡意DHCP 服務器,就可以在給客戶機分配IP 地址的同時,給客戶機分配惡意的網關信息或惡意的DNS 服務器地址信息。 若客戶機獲取的是惡意網關地址,客戶機訪問外網的所有數據都會經過攻擊者控制的惡意網關進行轉發,攻擊者就可以把自己當作中間人,在惡意網關上采取抓包等方式,截獲受害客戶機訪問外網的所有數據流量;若客戶機獲取的是惡意DNS 的地址,受害者打算訪問正規網站時,卻被惡意DNS 服務器引導到釣魚網站,導致賬號、密碼等信息泄露。
針對這樣的DHCP 服務攻擊,作為網絡安全管理員,可采用DHCP Snooping 技術來限制交換機端口發送用于分配IP 地址的數據包,限制每秒鐘通過交換機端口的DHCP 包的數量,從而對DHCP 攻擊進行防御[3]。
(1) 設置交換機的時區和時間。 因為DHCP Snooping 技術涉及DHCP 服務器所分配IP 地址的租用時間,所以要先用命令“clock timezone”和“clock set”設置好交換機所屬的時區及當前時間。
(2)激活DHCP snooping。 先通過命令“ip dhcp snooping”在全局激活DHCP snooping,然后通過“ip dhcp snooping vlan id 號”在特定的VLAN 中進一步激活。
(3) 指定DHCP Snooping 數據庫的存放位置。DHCP 的租用時間、客戶端的MAC 地址、IP 地址、所屬vlan、所連的交換機端口等相關信息,除了可臨時存儲到交換機的內存中,還可存儲到DHCP Snooping 數據庫中。 可使用“ip dhcp snooping database flash:/文件名”命令,指定DHCP Snooping 數據庫的存放位置。
(4)設置信任端口。 對于正規的DHCP 服務器所連接的端口,可通過命令“ip dhcp snooping trust”將其指派成信任端口。 信任端口可發送所有的DHCP 包,包括DHCP 的請求包和對外分配IP 地址的DHCP 包。
(5)對非信任端口進行DHCP 限速。 未明確指派的則為非信任端口,非信任端口只能發送DHCP Discover 和DHCP Request 這樣的DHCP 請求包,不能發送用于分配IP 地址的DHCP OFFER 和DHCP ACK包。 連接到非信任端口的惡意DHCP 服務器,是無法分配IP 地址給客戶機的。 可對非信任端口應進行DHCP 限速,限制每秒DHCP 包的數量,命令是“ip dhcp snooping limit rate 速率值”。
進行以上配置后,若遭受針對DHCP 服務的攻擊,受攻擊的交換機端口會主動關閉,網絡管理員追究攻擊者的責任、進行相關處理后,需要恢復被關閉的端口,恢復的方法是:先進入該接口,然后用shutdown 命令關閉該接口,再用no shutdown 命令重新打開該接口。
若沒有配置交換機端口的port-security 屬性對MAC 地址泛洪攻擊進行防御,攻擊者可在局域網中實施攻擊后,通過抓包捕獲包括密碼在內的各種信息。若沒有啟用DHCP Snooping 對DHCP 攻擊進行防御,正規服務器遭受針對DHCP 服務的攻擊后,將會耗盡地址池中的地址。 攻擊者會進一步使用偽造的DHCP服務器為客戶分配虛假的網關或DNS 服務器,對客戶實施中間人攻擊或釣魚網站攻擊等,可見局域網中必要防范的重要性。