Mariano:大家好,一開始介紹一下我是誰,我現在是安全的研究員,是思科團隊的,我們做很多的工作,不同的團隊。每天我和不同的團隊,不同的項目為了減緩這個目標而努力。是一個學者,我們有以前學術的專長,同時我也做了博士、博士后的一些研究,所以我有很多的博士論文還有學術的研究。
什么是Spraying,這是一個設計,我們對于Spraying有很多的研究,研究它是什么樣的情況和它的問題。我們對Spraying的技術有很多的描述,一個描述就是要根據我們怎么樣來做,首先是基礎之上的Spraying,這個可能是對攻擊者很難來猜到這個郵件或者怎么樣來跳躍。
一個可能的方式來越過這些問題,一個簡單的方式那就是把100多個東西復制到里邊,這100個復制實際上就放在這個殼的概念里。我們如果在執行過程當中,可以通過我們的密碼,我們還有數據的Spraying,這個數據我們也要越過,這是我們的目的,來進行預警和防御。
這些數據的形式,可能是基于一些口令的,比如說不同的鏈接上的口令,我們有這么多復制的鏈接。第一個設備要進行Spraying的數據,這樣的話,我們就可以執行了,這是我們的定義,大家應該有一個概念,什么是Spraying了。
我們看看Spraying這個技術在整個演化過程當中是怎么的。我想強調,實際上這個時間軸,這是我建立的軸,這個軸包括了公共的一些技術,公共的技術我認為是論文中記錄的Spraying的情景。
當然有一些里程碑式的事件,比如最開始Spraying是2001年,我們是第一個由Telnetd Team發現的,2004年我們開始談論Spraying,我們可以看到挖掘的問題,然后來解決這個問題。從2004年之后我們看到了更多的挖掘,有不同的技術來做Spraying,2007年之后我們有了一個完全的革命和演變,我們用這個技術來控制這個Spraying。
所以這時候是成為了一個飛躍成為一個普遍的概念,可以看到這個Spraying意義不到了第二步控制方面。最后這個數據,我們看到思科實際上在運營方面、系統方面我們了攻擊者要避開這些問題,所以2010年我們有這樣的戰略,這個Spraying在和內核方面我們使用過濾的技術,然后我們有數據的Spraying。
這些年實際上我們看到很多的漏洞利用和挖掘,實際上影響了很多的設備。2010年我們有非常好的一個項目在Spraying的領域,實際上我們Windows和其他的瀏覽器,還有其他的團隊有了新的發現。2014年有這么一個論文,是更詳細的介紹了Spraying。
在2016年的時候,基本上我們買了很多關于電腦相關非常有價值的技術。有一些研究者他們就開始去抱怨,而且也比較擔心36Bit的,但是事實上我們看一下這個問題,Spraying仍然是一個非常有價值的技術。
因為首先一般來說我們可以用UAF的這種漏洞,如果是64位的話,這個空間就更大了,但是這些數據庫還沒辦法很好的配置。對于某一些類型的漏洞來講,我們覺得它對Spraying仍然是一個比較好的技術應用。而且他也曾經指出,在64位的操作系統里面,可以更好的發揮作用。
很多研究人員他們從不同的角度都進行了研究,也有一些研究人員提出了一些防御的計劃和解決方案。第一個是關于Heap Spraying,有來自于Egele、Nozzle和Bubble這些不同的解決方案,他們每一個只能應用于某一類型的引擎。
JITsec、Bania、JITDefender和Lobotomy,我們看到這些技術其實只是應用于某一些領域,還有數據的Spraying,在這里面沒有很好的解決方案,有一個很好的例子就是EMET-Windows09,它可能會有更進一步的更新,但是仍然還是一個很好的通用的工具來幫助這些應用。
它有很多的特色,其中有一個好處就是沒有把這個工作變得更加復雜。像這些瀏覽器的解決方案,有一些都是特別復雜的。在這里面,它只能應用于某一類型的瀏覽器和應用,這些就是一些問題。我們現在沒有一些技術可以能夠囊括所有的可能出現的這些OS Agnostic。如果說從理想來講,我們希望沒有一種操作系統是這樣一種解決方案。
所以我們想要設計一個防御計劃,我們退一步去看一下Spraying的一些問題。我們看到一個特別特殊的行為,因為如果要想一下這種問題的話,基本上我們在某一個特定的時間段會配置某一些內存,我們可以在這張圖上看到綠色的線和紅色的線,它是正常的一些活動的情況。
一般正常的這些用戶在上網的時候,他就會表現出這樣一種形態。但是我們看到另外有一個內存的峰值,有一個漏洞,那就是灰色的那條線所表示的。我們也可以看到,大概10秒鐘的樣子,它就達到了400M比特,在這個里面肯定是要給他有一個很好的標識。
它控制著大小,還控制著速度,他可以把這些主要的應用讓他們能夠在一個正常的條件下運行。我們還可以看到這個圖,因為它控制著大小,大小也是一個很重要的參數,因為它也是在Spraying領域里面決定著它的活躍程度,在某些實驗里面,我們也是進行利用和開發,一步一步的,每次我們都會進行檢測和計算,看看是成功還是失敗。
我們做了很多的實驗,可以發現對于這樣一種特殊的漏洞利用,小于131MB的話,如果說是132MB,絕大多數的情況下,這些漏洞的利用有的時候是被高估了的,有80%的是131MB,但是也取決于我們從這個攻擊者的角度來講。如果說我們想要實現一個攻擊的話,我們就要知道攻擊的網站訪問情況是怎么樣的。
我們也看到了,通過Allocator來保護這些應用,我們通過這樣一個強大的系統,不需要依賴于操作系統的這些信息。我們的這個系統必須要和存儲的配置器獨立開來,只有這樣的話,我們才能夠確保它的安全性。
這個系統可以獨立的在微軟或者Linux的系統上應用,還有這個系統所使用的這種標題符也應該是合理的。而且因為我們希望去利用Virtualization-VT-X這個系統,我們的這個系統也必須要非常合理。也就是說,它可以和其他類型的技術能夠有一個比較,這些就是我們框架的要求。
我們的框架是基于我們創建的一個虛擬化的環境,這里面有幾個概念,一般來說,我們每一次切換這個模式的時候都會有一個Vmexit,我們進行配置的時候,就需要了解到許多的狀態。還有虛擬機的控制結構,它包括了很多方面的,
有主機,還有客機的零件,還有擴展的配置,我們可以轉化成EPT,必須要把這個客機轉換成主機,能夠去識別的這樣一個配置。我們也可以進行EPT的一些配置,一般來說,它能夠幫助我們更好的去解讀它的虛擬的概念。
這個是我們系統的一個架構,有一些應用,比如說瀏覽器,它在進行一些配置的時候都需要遵循這樣一個流程,在每一個節點上面,比如說內存、數據提取等等,而且對于第一個組件,當我們達到了某一種水平的時候,第二個元素就是數據的檢測器,這是攻擊的檢測器,也可以看到,是不是有哪些潛在的威脅在發生。
第一個就是內存追蹤器,第二個就是攻擊的檢測器。內存的追蹤器,我們可以了解到內存的系統,我們還需要一種方式去應對它的運作。因為特別是在某一種結構下面,我們希望能夠創造一個頁面,然后創建和刪除,看看有沒有什么樣的變化。
我們要看一下它是怎么來完成的,對于每一個流程來講,我們都在看PTE的檢測。要看這個頁面的創建、修改和移除,如果說創建了一個頁面,不管是直接的還是一個結構的一部分,我們還需要去檢查這個PDE,如果說有一個新的頁面條目的話,我們就需要去注意到它的屬性是怎樣的。
我們也做了一些實驗,還有整個的預警系統。我們通過這樣一種修改的內存頁,系統可能就不再會奏效了。所以為了解決這些問題,我們能夠監測到一些異常,但是和內核的一些基礎架構還是需要通過一些假設來驗證的,我們把它叫做干擾的問題。
我們發現這里有一些問題,所以我們做了一些實驗。我們決定要去監控某一個特殊的過程,再看其他的流程,比如說在Overhead for Internet Explorer為10上面是22%。這些我們稱之為V虛擬化,是一個組件,可以創建某一個內存的沙箱。
對于某一個具體單一的流程,來給它制作一個內存的沙箱。我們看它是如何在操作當中使用的,在每一層創建一個流程的時候,我們都會去收集所有的這些物理的關于這個具體流程的一些Page,需要保護這些Page,它是基于EPT的。
在每個環境下面,我們都要去改變這個EPT的指征。這些指征都會指向這個Page,也就是我們想要去保護的這個Page。我們希望能夠促進一個我們能夠保護的過程。
在這里面,我們也是專門去進行了一些設計。可以先看一下第一個Demo。在第一個Demo里面,它是一個正常瀏覽器的使用情況,首先我們看一下這個框架,我們做了一個搜索,一個正常搜索的操作,我們看到這個Driver就很成功的加載上來了。
然后會傳遞一些信息,鎖定目標,我們的瀏覽器是Explorer,我們打開這個頁面,再次做一些研究,這個保護了那個部分。然后我們再做一些系統進行回應,這樣的話確保我們的框架沒有漏洞。
回到這個PPT現在說一下我們的架構,架構實際上是非常活躍的,如果只是最開始的時候我們使用了一些案例,我想強調的是每個人都可以插入、拔出,我們要保護所有的地域,可以建立你自己的地址,我們通過插入進行活躍,找到執行的方式,我們看不同企圖的分布,
這些隨意的分布,我們建立這個架構,這個案例實際上可以使我們進行這個應用,因為我們有這么一個殼的口令。實際上攻擊者可以使用這個漏洞,比如默認的使用他可以找到這個漏洞。
在這方面我們再次使用這個方式,我們使用簡單的方式進行執行,我們要檢查這個基礎是不是合適,然后再進行執行,然后再去除這個漏洞。
給大家一個例子,有很多的感應器在這個上面,我們做的事情是把我們的這些頁面的口令進行程序化,我們一個字一個字的檢查。如果我們把頁面上所有的字都進行檢查,看到這些點是不是可知性的,然后我們看這個分布情況,就會進行這個架構。
我們看到這些實驗,進行了一些嘗試,首先要進行設計,然后來測量整個溢出的一些元素,我們的記憶方面。我們想測量這個元素,這個元素是非常活躍的,在這一方面我們想強調它的行為,
我們找一個設計作為標桿進行對比,每秒8MB的速度進行分布,所以在Windows7,80%的記憶我們是可以追蹤到的,在Linux3.2當中是25%,這個數字是很高的,這是我們最壞情景的情況下做的比例。
我們做的第二個實驗是啟動的比例。我們把這個比例從100MB到400MB測量這個重疊性,在這個畫面上越低是這個活躍的比例,越高是另一個極端,因為我們看到我們的記憶和框架之間是有這樣的聯系的。
然后我們做下一個實驗,那就是看準確性,看看它是不是有效。我們怎么做呢?我們拿一些變量,我們有不同的目標標的,還有一些Flash,我們使用不同的技術來啟動我們的系統,在我們的系統就可以找到這些點,這個比例是150MB。
這實際上是一個比較老的方式,因為我們需要記錄這種方式,我們需要這樣的東西。讓公眾能夠得到在市場上比較容易得到的東西,我們可以執行,能夠良好的記錄。
我們做了另一個實驗,是一個非常大師級的實驗。我們有很多的文件,有很多的學術論文,我們拿出了1千個惡意的PDF,在我們的庫存中看到是惡意的軟件。然后我們做了150的MB,這是比較低的,比較保守的一個起點,然后我們進行挖掘。
我們用系統進行運轉,首先1000的PDF,1000個惡意軟件,我們的架構可以保護我們的任務,也就是說把這1000個惡意的軟件去除,可以偵測到這個不好的PDF。
我們也做了一個全球的實驗,我們看到這樣的事實,我們需要把系統應用到機器和設備上,需要有這樣的要求。我們布置了系統,讓兩個用戶做7天,每天8到10小時作為工作時間,然后我們放到了Windows7的機器當中,還是用了150MB的基準。
結果得到了什么呢?在7天之后,我們收集了所有的日志和結果,發現他們訪問了差不多500個不同的網站,我們測到了實際上非常活躍,這個平均每天是8到9次。我們調查了非常高水平的產出,有一些頁面,我們會討論為什么有這樣的前景?
這些元素告訴我們這些數據有不同頻率的密碼。最主要的原因,這些頁面包括他們訪問了一些網站,實際上這些網站,包括很多的內容,他們插入了不同的地址。我們是基于這個漏洞,看我們怎么樣來把這個涂鴉配置,首先要設定我們的目標,我們監督的目標要有名字。
然后我們還要指出比率,比如說以150作為我們的比率,我們把Windows和其他的系統進行應用,有某一個文件。
在這些演示中,我們建立了我們的病毒,我們看這個表現。驅動情況,我們上傳,看到這些頁面的情況,解除漏洞的信息,然后我們訪問這些頁面,檢查瀏覽器,我們看這個記憶。然后運轉,看它的地點,我們看到這個攻擊者實際上被跟蹤了。
我們系統的局限是什么呢?第一個局限,我們要執行在記憶的追溯方面,包括架構,比如說有一定的頻率,需要修正一些情況。即使可能是在這個學術論文上發表的一些情況我們也進行修改,如果你想在微軟方面進行運作的話現在可能還不行。我們的框架需要基于數據,不能在其他的領域進行運作。
未來我們有什么樣的工作?我們建議應該有更強有力的,比現在更好的體系,我們需要在我們的記憶之上建立更好插入的情景。我們更多的使用可能在其他的領域就會更好了,我們需要更好的瀏覽器版本,也需要這個內核的Spraying。因為如果在那種情況下,啟動的時候地址可能是20或者是25的MB,有的時候進行堆積。
最后做一下結論,我們展示了第一個解決方案,對任何的一種Spraying的攻擊來進行保護。我們建議、設計和執行這方面的行為,使用我們的技術來做保護,保護我們的使用者,給他們沙箱進行保護,是開源的情景。這個可以克隆我們的研究,希望大家能夠使用,能夠把這個利用到你們自己的實驗中。如果你們想看文字的東西,我們有論文。
以上就是我向大家介紹的全部內容,謝謝!