<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/4966

            0x00 前言


            如今的企業內網,大多是都是建立在靜態體系上的,所以那些內網攻擊框架,工具,也是為靜態網絡度身定做。如Nmap,蠕蟲病毒,DDOS,Cain等。那么如果讓我們的防御體系轉向,化靜為動,會為內網安全帶來什么呢?

            0x01 背景


            軟件定義網絡(SDN)是由美國斯坦福大學clean slate研究組提出的一種新型網絡架構。簡而言之就是,利用SDN技術將控制邏輯(控制器)從網絡交換設備中“分離”了出來。當控制器是可編程的時候,我們就能通過控制器給網絡設備的FLOW TABLE(流表)進行修改,讓路由設備靈活地達到我們的需求。

            而本文說的是基于SDN的MTD技術,這個MTD是MOving Target Defence(移動防御技術)的縮寫。翻譯過來就是基于軟件定義網絡的移動防御技術

            移動目標防御技術是近年來美國科學技術委員會提出的網絡空間“改變游戲規則”的革命性技術之一。今天我要介紹的就是將MTD通過SDN網絡來實現。

            現在大部分內網掃描工具,如Nmap,x-scan的掃描機制都大同小異,所以,我們今天就以著名的Nmap為例,講解對抗Nmap信息收集的最新保護策略和技術展望。

            0x02 SDN下的移動防御技術


            移動防御技術(MTD)是相對于傳統的靜態網絡提出的新型防御策略,它的目的在于混淆網絡環境,讓內網情況“亦真亦假” 最后達到阻止,拖延內網中惡意流成員攻擊的目的。

            我們來看看一個攻擊者(小A)是如何一步步走向MTD布下的迷魂陣吧。

            下面分成了三個部分,分別用主機存活性的隨機(A),軟件版本信息的隨機(B),IP地址的隨機(C)來保護這個SDN控制下的內網

            Step A 網絡踩點,掃描


            在大多數內網滲透過程中,攻擊的第一步就是研究攻擊面,試圖找出弱點和漏洞,這種踩點就包括識別存在已知漏洞的服務,或是掃描整個網段來找出同一個內網中的存活主機(用來傳播蠕蟲),用基于SDN的移動防御技術可以阻止這種踩點掃描讓攻擊成果顯著減少。

            大多是網絡掃描工具都是通過ICMP,TCP或UDP掃描來完成。ICMP包的作用用來確認目標是否可連接可到達。TCP,UDP端口掃描能用來識別目標上運行著哪些服務。

            這些掃描行為的應答(TCP RST,silent drop 或ICMP 不可達)也可能透露哪些服務被傳輸設備允許(過濾),另外IP包里面的TTL區段也被黑客用來識別靶機和目的地之間的節點距離。

            于是,小A做好內網代理之后 執行了nmap -sP 192.168.1.0/24

            基于SDN的路由設備能用來對抗這種網絡掃描。 本文中,針對目標的非法通信是能夠根據過濾規則被SDN設備發現并丟棄的,然后SDN設施還能生成不同的響應來迷惑攻擊者,只有當通信是符合預編譯好的過濾策略的時候,才能暢通無阻地經過路由器,要不然,充斥的將是來自SDN的欺騙。

            接下來的偽代碼向我們解釋了SDN網絡交換設備是怎樣攔截,轉發TCP包

            #!bash
            Require: Probabilities PrSA < PrA < PrPA < PrR < 1 hash table action buffer ← NULL
            while (new TCP packet p is received) do
              if (p is illegitimate traffic) then
                if (p.dest port not in action buffer) then
                  r ← random real number ∈ [0, 1]
                  store r in action buffer
                else
                  r ← as in action buffer 
                end if
                switch (r)
                  case r < PrSA:
                    respond with TCP SYN-ACK
                  case r < PrA:
                    respond with TCP ACK
                  case r < PrPA:
                    respond with TCP PUSH-ACK with random payload
                  case r < PrR:
                    respond with TCP RST packet
                  default:
                    drop silently
                  end switch 
                 end if
            end while
            

            從代碼里面能看出,針對每一個非法的TCP連接請求,響應信息是由SDN路由器直接響應的,而并沒有到達目標。 這樣一來,返回的端口開閉狀況,主機存活狀況其實完全是隨機的,無疑起到迷惑攻擊者的作用(試想小A向一個根本沒有開啟1433的主機進行MSSQL弱口令碰撞的場景)

            Step B 服務版本和系統指紋掃描


            為了能夠在內網里面能夠利用一個已公布的軟件漏洞,小A最開始要做的事情無疑是識別目標機上有哪些缺陷服務以及他們的版本(當然如果小A掌握了通殺的0day那就另當別論)。舉個例子,小A如果想攻擊一個運行這Apache Tomcat 2.x的服務器,他就會發起一個HTTP GET請求到這個服務器的web端口,然后根據服務器的響應,他就能判斷服務器是不是跑著有漏洞的apache組件啦。 于是,他執行了nmap -A 192.168.1.x

            那么在這種情況下,一旦服務器的組件版本不可判斷,攻擊面就會變寬,隨之而來的結果就是增加攻擊成本和攻擊事件,讓攻擊更容易被(IPS)發現。

            不同的服務會有不同的技術來發送自己的版本信息,比如HTTP服務器就會在HTTP header的HTTP 200 OK響應中加入自己的httpd守護進程版本。運用基于SDN的MTD技術,我們能讓SDN設備防止真實版本信息的泄露,并且替換其成一個虛假的version信息發送給攻擊者

            下面是一段對抗OS fingerprinting(Nmap)掃描的MTD偽代碼

            #!bash
            while (new TCP packet p destined to target is received)do                          
              if (p is illegitimate traffic) then
                if (p has TCP SYN set) then
                  s ← random 32-bit number
                  respond with TCP SYN-ACK and s as the seq#
                else
                  generate random payload and respond
                end if 
               end if
            end while
            

            除此之外,還需要提及的是,TCP,UDP 和ICMP的包也總會泄露對攻擊產生幫助作用的信息。雖然現代操作系統已經有產生隨機響應的機制,但TCP 序列號以及針對某些包的TCP ICMP UDP響應還是能被識別出目標運行的是什么操作系統。比如說一個linux的系統的隨機TCP序列碼的生成方式是和其他是系統不一樣的。上面這段偽代碼就描述了SDN的控制器是如何給非法的通信生成隨機TCP響應和載荷。

            Step C 隨機主機變換(RHM) #核心


            其實從上文并不難發現,隨機化是移動防御技術一個主要策略和手段,這是由于如果目標的ip在一直變化。或者說目標和攻擊者之間的網絡策略一直在發生改變,那么攻擊難度實際上是顯著上升的。所以,我們完全可以把這種隨機化上升到ip地址這個層面來看,在這個層面上進行了MTD保護的網絡,是可以很好抵御蠕蟲攻擊和DDOS攻擊的。

            本文的重點也是在于基于openflow的隨機主機變換(OpenFlow Random Host Mutation)下面就簡稱OF-RHM。

            OF-RHM機制說明白一點就是讓后端主機的ip看起來是隨機變化的,這個隨機包括了地址隨機和變換間隔隨機兩個方面。在這樣的網絡中,那些假定了內王的IP在一段有效時間(比如一個月)內是靜態的攻擊程序(絕大多數蠕蟲病毒,DDOS攻擊)都會失去作用。

            我們來看看SDN實現ip隨機的業務邏輯是怎樣的

            enter image description here

            OF-RHM需要兩個客觀條件:

            一,IP變換對于后端主機應該是透明的,也就是說,OF-RHM應該讓后端的真實ip(rIP)保持不變,但是主機之間的聯系使用的應該是存活期很短的虛擬ip(vIP),vIP在一段間隔時間內就應該變化一次。 由于由vIP->rIP的轉換是在SDN控制器所操縱的流表內進行的,而流表是完全有能力建立這種對應關系,所以完全不用擔心內網主機之間不能通信這個問題。

            二,這種IP變換應具有高不可預測性以及頻率,讓攻擊者在摸清網絡環境之前就發生一次變換,使攻擊者始終處于迷惑狀態。

            說了 這么多其實并不夠具體,我們用圖解法來看看內網中主機通信到底是如何進行的。

            根據研究,有兩種主機通信辦法

            一:通過name進行通信

            圖解很清楚,這里我簡單解釋下。這里的DNS服務器是有NOX控制器實時更新的,保證v--r的轉換

            enter image description here

            二,通過rIP進行通信

            通過rIP通信需要某些主機(認證主機)具有指定的幾臺的rIP(真實ip)所以,這種主機之間的通信一定程度上其實是偽隨機的,不過,大可不必擔心的,NOX 控制器里的認證過程完全能夠規避風險,比如mysql服務器和web之間的認證關系是存儲在NOX 控制器里的,所以這里WEB服務器就是認證主機了,然而,它就不能通過rIP訪問到具有員工信息的oracle服務器

            enter image description here

            相信你們能從上面的偽代碼中看到,其實這些策略中相當重要的一環就是判斷策略,來判斷哪些是非法訪問,哪些是能被服務器放行無阻的。其實判斷策略可以有很多種。 比如,可以基于ACL(預設訪問名單)STEP C 隨機主機變換中的通過rIP通信就是這種;也可以是啟發式的,通過行為判斷(類似IPS)觸發隨機機制。

            0x03 結語


            總而言之,用SDN構建出的網絡是靈活的,目前華為等大廠商也逐漸在高端路線上考慮SDN路由器(盡管SDN路由器動輒上千,但是對于大型企業來說,安全和功能強大顯然更加重要)

            傳統的靜態網絡已經走過從ARPNET到INTERNET走過了屬于它的幾十年,在絕大多數攻擊模式都是針對靜態內網的今天,擁有創新思維,化靜為動地去思考如何保護內網顯得尤為重要和關鍵。雖然SDN和MTD又都是走在前面的美國人所提出的,但從跟上腳步,也不失一種智慧,中國人的智慧。(我們不都是這么干的嗎)

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线