詳解空會話攻擊及防御
空會話攻擊可以說是一種很古老的網絡攻擊形式,已經古老到系統管理員幾乎忘卻了還有這種攻擊形式的存在。但現在它卻又開始像幾年前一樣肆虐起來。盡管現在的系統已經不那么容易受到攻擊,然而在針對windows設備執行滲透測試時,空會話枚舉仍然是最先要做的事情之一。本文的目的在于分析空會話攻擊,并探討如何防止空會話攻擊的發生。
空會話攻擊過程
當用戶使用用戶名和密碼(可以訪問系統資源的登陸帳戶)遠程登陸到計算機時就創建了一個遠程會話,這是通過服務器消息模塊(SMB)和Windows Server服務來實現的,當提供正確登陸信息時這些連接都是完全合理的。
當用戶沒有使用用戶名或者密碼來與windows系統建立連接時就會出現空會話,這種類型的連接不能進行任何典型的windows共享,但是可以進行進程間通信(IPC)管理共享。IPC共享,是windows進程(通過SYSTEM用戶名)來與網絡其他進程進行通信的,IPC共享是SMB協議專用的。
沒有登陸憑證使用IPC共享是專供程序間通信使用的,但這并不是說用戶不能通過IPC連接代替連接到計算機。這種方式不允許對計算機的無限制訪問,但廣泛枚舉可能會幫助攻擊者發起攻擊。
通過空會話進行枚舉
現在我們知道空會話是如何發生的,那么攻擊者如何利用空會話發動攻擊呢?可以說,攻擊者可以很輕松地利用空會話。空會話連接可以通過簡單使用NET命令從windows命令行直接產生,不需要額外的工具。NET命令可以用來執行各種管理功能,使用NET命令我們可以嘗試對目標主機(命名為HACKME)上的標準共享建立連接,但是這樣會失敗,因為我們沒有提供正確的登陸憑證。
如何防御空會話攻擊
首先你會問的問題是:“我的系統容易受到攻擊嗎?”這個問題的答案取決于網絡環境中的操作系統,如果運行的是Windows XP、Windows Server 2003或者Windows 2000,答案是肯定的,至少在某種程度上來看。雖然現在大多數人都在使用這些版本以上的系統,不過Windows XP和Server 2003仍然是使用最多的系統,但還是可以通過其他防御來防止空會話攻擊的。
在注冊表中限制空會話攻擊
事實上,大多數公司由于資金緊缺問題,一直還在使用舊版本的軟件,這也是為什么到處可見windows 2000工作站和服務器的原因。如果你仍然在使用Windows 2000,那么可以通過簡單的修改注冊表來防止通過空會話的信息提取。
打開regedit,瀏覽HKLM/System/CurrentControlSet/Control/LSA/RestrictAnonymous,你可以配置這三種設置選擇:
· 0 – 默認設置,無限制空會話訪問
· 1 – 不排除空會話,但是防止用戶名和共享的枚舉
· 2 – 通過嚴格限制對所有資源的訪問,從而防止任何值從空會話流失
正如你所見,你不能100%的消除空會話,但是你可以通過設置2來嚴格限制攻擊者的攻擊,在windows2000服務器上配置時要非常注意,因為可能會破壞集群。
你可以在windows XP和2003服務器中執行類似的操作,主要通過以下三種不同的注冊表項:
HKLM\System\CurrentControlSet\Control\Lsa\RestrictAnonymous
· 0 – 默認設置,空會話可以用于枚舉共享
· 1 –空會話不可以用于枚舉共享
HKLM\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM
· 0 –空會話可以用于枚舉用戶名
· 1 –默認設置,空會話不可以用于枚舉用戶名
HKLM\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous
· 0 –默認設置,空會話沒有特殊權力
· 1 – 空會話被認為是成員組的部分(非常危險,可以允許共享訪問)
你可以清楚地從上述內容中看出,默認情況下,windows XP只允許共享的枚舉,這樣比windows 2000更加安全。
從網絡級別阻止訪問
如果你不能對上述注冊表進行修改,那么你可以通過windows防火墻或者網絡防火墻阻止空會話攻擊,這可以通過組織與NetBIOS和SMB TCP/IP有關的端口來實現,這些端口包括:
· TCP Port 135
· UDP Port 137
· UDP Port 138
· TCP Port 139
· TCP和 UDP Port 445
這些端口用于windows的各種網絡功能,包括文件共享,網絡打印功能、集群和遠程管理等。話雖如此,在關閉這些端口之前應該進行全面的測試,以確保系統正常運行。
使用IDS識別空會話
如果上述注冊表修改或者防火墻政策破壞了網絡應用程序的功能性,那么你必須將防御工作調整為被動方式,而不是主動方式。除了阻止空會話枚舉之外,最后的希望就是在發生枚舉的時候我們能夠阻止它。
如果你正在使用Snort,也就是現在最常用的IDS,那么進行以下操作就可以檢測所有空會話枚舉:
alert tcp $EXTERNAL_NET any -> $HOME_NET 139 (msg:”NETBIOS NT NULL session”; flow:to_server.establshed;
content: ‘|00 00 00 00 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 20 00 4E 00 54 00 20 00 31 00 33 00 38 00 31|’; classtype:attempted-recon;)
這不能夠阻止空會話枚舉的發生,但是會提醒你枚舉的發生,從而采取適當行動。
總結
空會話攻擊概念并不是新的攻擊方式,但是卻常常被忘記和誤解。這種方式對于攻擊者而言,仍然是非常可行的攻擊策略,了解空會話攻擊的方式是系統管理員的必修課。
【編輯推薦】