劉鋒:支撐“云安全”的核心技術——網頁腳本行為判斷技術
2009-08-27 07:51:12時間:2008年11月18日 下午地點:北京國際會議中心
主持人:各位嘉賓大家下午好!上午我們已經見過面了,所以下午的論壇我希望大家氣氛活躍一點,參加這個論壇的大多數
相關專題:共建可信任的互聯網 2008瑞星互聯網安全技術大會
時間:2008年11月18日 下午
地點:北京國際會議中心
主持人:各位嘉賓大家下午好!上午我們已經見過面了,所以下午的論壇我希望大家氣氛活躍一點,參加這個論壇的大多數嘉賓都是搞技術的,既然是這樣,希望大家有問題的話積極地提問,使我們的“云安全”計劃給大家講解的清楚一點。我介紹一下我的同事,一位是瑞星研發部反病毒部經理劉鋒先生,還有一位工程師是瑞星研發部的資深的工程師葉超先生,還有一位更隆重的嘉賓是我們研發部的領導,劉剛劉總。劉總穿得很隨意,平時也是很低調的人。
今天下午的論壇的主要議題是智能行為判斷技術在安全計劃中的應用,這個主題有兩個演講,第一個演講有請瑞星研發部反病毒部經理劉鋒先生給大家帶來《智能行為判斷技術之網頁腳本行為判斷技術》。
圖:瑞星研發部反病毒部經理劉鋒
劉鋒:各位朋友下午好,非常高興能夠在這里做講解,今天上午介紹了08的病毒趨勢以及當前的病毒傳播方式,在這兒我給大家介紹一下“云安全”的智能網應用。在整個介紹中,我們按照幾個問題的流程,分成幾大塊。首先看看我們的目標,游戲網站、論壇還有其他的熱點是掛馬網頁傳播的站點。早期的掛馬的出發形式一般是IE,但是隨著IE控件的出現,還有游戲、播放器這類互聯網上常用的軟件是掛馬運行的重要的途徑。我們面對這個問題要解決的首要的目標,實際上,首先我們要解決主機安全問題,對于單個的主機我們首先要防御不被掛馬入侵。安裝了瑞星可能只裝了殺毒軟件,防火墻這個產品沒有安裝,所以說我們第二個目標是把我們的信息充分應用。
接下來具體看一看問題,分別從三個方面,第一個網馬入侵的途徑,是掛馬網頁腳本的關系和掛馬腳本的運行特點。首先我們來看一看網馬入侵的途徑,Windows控件用的越來越廣泛了,這些結果提供一些功能,使用腳本或者程序都可以進行簡單變成的應用,但是這些控件存在一些問題,這些問題是什么呢?它本身的功能的調用有很多是沒有經過驗證的,是合法調用的還是非法的無法進行判斷。正是因為這些原因,所以導致漏洞,比如說百度的漏洞就是他的升級版本許多沒有得到驗證,從網站上下載自己的程序運行,這就是所謂的空間漏洞。第二個是運輸工具漏洞,這是利用微軟通過運行代碼,來下載代碼。第三種掛馬方式是文件型掛馬,這種掛馬方式實際上在網頁的頁面本身不存在任何問題,而是下載的文件有問題,比如說大部分的漏洞,都是網馬頁面。運行文件導致本地的運行程序產生問題。
掛馬的方式分為直接掛馬、框架掛馬和RGP掛馬,直接掛馬非常簡單,黑客直接入侵網站,把用戶網站上的頁面修改了,把自己的頁面掛上去。框架掛馬是放一個連接或者其它的來做。RGP掛馬是對用戶的訪問進行劫持,比如說你訪問了某一個頁面,他會在頁面里面直接插入。接下來我們看看掛馬頁面的生成方式,早期的是入侵者自己寫的,但是隨著產業鏈的發展,這種簡單的工作已經交給專門的頁面來做。而先進的掛馬頁面往往是針對多個漏洞的,為什么會出現這種情況,因為漏洞是存在于用戶的主機上的,并不是網站。針對個人的機器是為什么?為了提高被掛木馬感染的范圍,采取了自動腳本的方式,首先看你裝了什么軟件,然后看哪些控件是有用的,然后針對你裝的控件來進行針對性的代碼。我們再來看看掛馬的腳本本身的特點,掛馬腳本本身的特點在早期實際上是一個明馬,如果是明馬的話,我們可以非常簡單的看出來,首先看一下這一段腳本,通過這一段腳本,我們可以很明顯的看到:首先創造一個對象,即使不懂程序也知道它在干什么,然后打開了一個連接,下載程序,不懂,把這個文件保存下來,下載,接著把這個程序運行起來,如果這是一個木馬程序的話,很簡單這是一個利用漏洞下載木馬的簡過程,我們對它加密以后,這個代碼即使讓程序員來看也不知道什么意思,只有讓代碼跑開才知道。就是如果沒有看到程序代碼,可能都沒有辦法判斷它是做什么的。
然后我們在前面介紹了我們的問題以及這個問題的一些具體細節性的東西,接下來我給大家介紹一下我們傳統的方法對這個問題有輔助性幫助的技術。我們把這些技術分成了兩類,一類是運行攔截的,包括了惡意網址攔截和網頁腳本的殺毒。惡意網址攔截就是防火墻。網頁腳本的殺毒,比如說文件監控,掛完以后漏了一個文件下來,利用文件監控把文件殺一遍,判斷是不是病毒,這都屬于靜態殺毒范圍,時效性和有效性不高,網頁腳本殺毒這一塊本身存在對加密定型沒有辦法處理,文件監控,如果是掛馬型的話,監控的第一是我下載的文件你能查到,我稍微做一點修改你能查到嗎?這是不可能的。然后看一下運營式的攔截,網頁腳本監控不是說我們現在的智能腳本技術,這是兩、三年前就出現的技術,實際上基本的原理攔截了Windows架構中的腳本執行系統,一旦發現有腳本執行就把腳本塊取出來去查殺這類似于文件監控的概念。這種技術我們個人認為在目前的狀況下本身是一個積累,因為腳本可能是分塊的,在你監控到腳本塊的時候,拿到的不是完整的腳本,所以對說病毒你拿到一塊不可能判斷出來是病毒還是不是病毒。
然后我們再來看看主動防御技術,大家都很熟悉了我也不做特別詳細的介紹,當然這一塊的優點是可以查到目前未知的病毒,是基于行為規則來判斷的。但是也存在一些問題,比如說我定的很寬松,對于用戶來說存在一種情況,就是說他沒有這方面的專業知識,沒有辦法判定。第二我直接告訴你這是有危險的,直接刪除,這存在誤報的問題。
90%的網馬感染機器是需要利用到腳本的,這是第一個信息,第二個信息我們基本上可以得出一個結論,如果能夠把腳本問題解決了讓這些腳本沒有辦法跑起來,那么網馬是不是還可以下載到用戶機器上呢?第三我們要解決腳本問題,判斷它是不是惡意的腳本,首先面對的一個問題是腳本的加密和變形導致的問題,這個問題是非常復雜的,因為腳本本身是一種程序,是一種編程,我可以很簡單的編寫一些算法,你如果利用虛擬執行,對加密和變形了的我們可以參考原來舊的PE的殺毒方式,一個是廣譜特征,還有比較非常有效的虛擬機,我通過虛擬機可以經過這個程序的流程,可以把加密的代碼解開,但是對于腳本來說這不是特別現實的,因為腳本只是一個文本性的語言,它的很多的功能調用依賴于系統,第二腳本的方便性它本身就是提供非常方便的編寫語言和工具,它的門檻低。第二它可以調動非常多的第三方的CAM控件,你如果要做到虛擬執行,實現它的緊密動作那就意味著你必須要有非常多的第三方控件,這在效率上、代價上還有精力上是沒有辦法來處理的。
然后我們分析了這個問題以及我們的一些想法,我們發現用特征法沒有辦法搞定這個事情用虛擬執行方式也存在很大的問題,再看看我們提到的主觀防御。這有點類似于警察辦案,第一步收集證據,第二步通過專家經驗來匹配勘定這個行為是不是惡意的,也就是說類似于法律,什么能做什么不能做如果做了不能做的事情就是違法犯罪。如果我們能夠了解腳本的行為以及動作,是不是可以用規則來進行匹配了?這個答案是肯定的,如果我們能夠攔截到腳本的行為是可以做到這一點的。因為漏洞還有掛馬腳本本身實際上是依賴于第三方控件或者是系統漏洞來做的,這些漏洞實際上都是有限的,可能是100個、200個,代碼都是有特定的,流程也是持續的過程,所以說只要我們能抓住腳本的行為就可以制訂專家經驗規則來進行行為判定。
接下來介紹智能行為技術的實現。在這一部分,我們首先給大家介紹一下Windows腳本的運行模型,通過這一塊的介紹讓大家對整個腳本運行的框架有一個大致的了解,接著介紹一下我們的監控體系架構。最后再介紹一下我們的行為判定規則,就是說里面用到的三項的最主要的技術。首先我們來看看Windows腳本執行架構,分成兩大塊,一塊是腳本數字,第二是腳本引擎,他們倆是相互獨立,而且有通訊關系的兩個模塊。腳本數字是整個腳本運行的發起者,也就是說它發起腳本運行,給腳本運行提供環境,這也就是為什么我們發現有很多腳本,比如說VBS、JS可以是混合編程的,在VBS里的變量在JS也可以使用,為什么?因為他們的民族空間是同一個而不是多個。然后提供的另外一個功能,就是說它會接受和響應腳本的系統調用和腳本的一些事件,比如說腳本我需要調用系統的某些功能比如說要改變窗口大小,這些都是通過腳本數字來做的。腳本引擎第一個功能是提供腳本的代碼解釋執行,第二個它會通知腳本數據腳本引擎本身的一些狀態以及腳本執行的狀態,第三會調用系統的一些功能。我們通過仔細觀察腳本數字和腳本引擎,我發現幾個有趣的特點:首先腳本數字提供了整個腳本運行環境,腳本數字和腳本引擎之間的通訊是需要用COM接口來實現的。腳本引擎也有一個非常鮮明的特點,它里面的函數都是由COM口構成的,這是我們發現的第二個特點。
接下來,我們介紹了腳本引擎和腳本數字的關系,腳本引擎和腳本數字通訊的特點,然后再來看看腳本監控系統的模型架構。這是系統提供的腳本數字,這是腳本引擎,我們在中間插入了一個腳本待定引擎,在傳統的腳本監控里面,這個腳本產生的事件和系統調用是沒有進行系統監控的這就導致了系統無法獲取它的監控,所以說傳統的不是智能的監控,只是一個腳本塊的監控,所以說沒有辦法進行系統處理。但是大家可能有一個疑問,如果說我只是做一個安全瀏覽器,做一個其它的東西不是一樣的嗎?在一年多前,我們瑞星實際上做了一個腳本掛馬頁面的沙箱,當時我們對這個已經有了比較深入的研究了,我們利用了AE盒,自己編寫了一個瀏覽器,然后利用這個瀏覽器運行我們認為可疑的掛馬頁面,發現我們可以攔截到非常多的系統相關的調用,原理是基本上一致的,但是最終為什么放棄了?因為里面有兩個問題,一個是腳本的加密和解密是腳本引擎自身實現的,他內部做的事情我沒有辦法攔截掉,那么作為產品出去的話還是有問題的,如果作為自己的沙箱沒有辦法攔截到所有的數據。第二個我們還發現一個特點,腳本引擎我們曾經提到過,它的系統功能的調用都是通過腳本數字來做的,但是我們發現理論和實踐往往是有區別的,腳本引擎可以通過自己的函數來創建系統提供的第三方控件,或者系統提供的一些標準控件。雖然說腳本引擎可以通過腳本數字本身來創建這個對象,但是很多的木馬的編寫者不這樣做他直接通過腳本引擎來做,那這樣的話還是沒有辦法,還是實現不了我們的行為監控。
然后第三個缺點,我們發現如果把腳本數字替換了,那么在微軟的概念里面,利用IE類盒的程序我們是沒有辦法進行處理的,該下載木馬還下載木馬,該感染用戶還是感染用戶,我們就考慮到對Windows腳本的架構來說,不管你腳本數字是什么,腳本引擎是固定的,不可能存在多個腳本引擎,我可以寫一個自己的其他的引擎,所以說我們通過腳本代理可以攔截到Windows所有的VBS和JS和系統之間的通訊。我們解決了這個問題之后接下來還有一個問題,腳本引擎本身是可以創建對象,可以調動COM創建第三方控件那就存在一個問題,我們必須對腳本引擎自身的函數進行了解,我們在前面說過,腳本引擎本身是一個COM對象的話,我們就可以做一些手腳和處理了。大家看一下我們的腳本引擎代理,首先腳本數字創造腳本引擎的時候,腳本代理引擎創造一個真正的腳本引擎,接著他會獲取腳本引擎的函數的COM對象,這是我們所關心的,我們都可以獲取到,但是我們獲取的只是我們關心的對象。第三它把COM對象進行了替換,替換成我們自己使用的,這樣就等于我們在腳本引擎里面實現了動作監控。我們再來看看我們掛接以后的執行流程,掛接以后的執行流程,我們的腳本引擎,就是說這是腳本代理引擎,調用函數的時候,首先調用的是代理提供的COM對象,代理提供的COM對象如果發現有問題可以直接回去,如果沒有問題可以再繼續調用使用。
接下來看就下我們腳本監控的具體的監控技術,我們的腳本監控主要判定技術,給大家介紹三種,一種是溢出攻擊防御技術,還有一種是惡意行為的監控體系,還有智能啟發監控的掃描技術。首先看看溢出攻擊防御技術,溢出代碼的入口上,通過執行溢出代碼可以做一些特殊的事情,比如說下載程序,獲取系統信息,當然這都看溢出者想做什么,也就是說它想做什么就可以做什么。然后對于溢出攻擊我們進行過分析,溢出攻擊首先必須要有溢出代碼,你利用腳本進行溢出,那是不是要有溢出代碼?這些溢出代碼本身都有一些具體的特征,比如說0704他有自己的特征,可以里面是一個目錄、參數,因為不同的溢出有不同的函數,函數有不同的特點,所以這種溢出的特點是很容易找到。第二點這個溢出的代碼在腳本中始終存在的,不管你做任何的加密和解密,我們只需要攔截到函數的執行底,在函數執行前檢查他的參數和溢出的特征性能匹配,這樣就可以非常容易的判定出這個代碼是不是溢出代碼,然后進行攔截組織整個代碼運行。這個技術它的特點就是它對溢出判斷是非常準確的,因為主要是兩點,一點可以拿到溢出代碼,第二點所有的溢出都有典型的特征,我們通過典型的特征進行判斷,這是它的優點。第二在腳本的執行中,函數是非常多的,我們在前期的技術里面,基本上是非常多的攔截的,所以這個技術本身對腳本執行的速度有一定的影響,可能會導致腳本運行比較慢。
接下來介紹一下行為監控技術,首先我們攔截到了腳本運行是調用系統函數的功能,然后在功能執行前,我們檢查已經存在的行為序列,執行有一個行為序列,我們把所有的執行的過程可以保留下來,保留下來我們就形成一個行為鏈,這個行為鏈保存在這我們怎么檢查?在執行之前首先我們有一個專家的經驗數據庫,這是怎么產生的?我們病毒分析源可以對腳本病毒進行分析,知道某一類的腳本病毒行為序列是什么樣的,只要這個行為序列匹配上了我們就可以認為它是一個危害程序,是處于惡意代碼,我們就可以終止這個函數的執行,而且也終止后面的任意函數的調用,這樣我們就達到了阻止木馬下載的目的。但是這個行為監控本身有一個天然的缺陷,因為正常程序也存在行為程序,如果比較寬松的話,很多惡意的就放進去了,起不到防御作用。如果過于嚴格的話本身存在誤報,比如說我定一個非常嚴格的定義,腳本創造文件我就認為是危害程序就不讓你形成,這怎么辦呢?我們實際上對這個問題本身也做了一個考慮,然后我們在安全系統中會有一個校驗的東西,通過網絡進行校驗,非常嚴格準確的規則實際上直接報給用戶,確認它是一個惡意行為。對于我們不確定的規則,我們實際上只是提出它本身可能是一個惡意行為。
然后給大家介紹一下第三種技術,智能啟發掃描監控,我們為什么會使用它?它從原理上本身是一個特征碼,大家可以會用,你本身就是行為監控的技術,怎么會用到特征碼?這是很簡單的問題,因為很多利用漏洞的程序在用戶的主機上是不存在一些漏洞的,因為現在很多安全工具輔助用戶打補丁,用戶的安全意識也提高了,大部分的網馬起效的可能是一、兩個起效,那為什么還要做特征碼?這時候比如說一個用戶利用QQ漏洞,但是這個漏洞在用機上都不存在,都不存在,代碼就跑不起來,我們惡意行為監控,通過行為監控的時候發現它沒有異常行為,就認為這個是正常的,很顯然用戶這個機器上不會中毒。但是換一個用戶,如果有這個漏洞,我們就可以抓住他。但是并不是所有的用戶都安裝了我們的程序,我們的目的是在獲取更多的信息,比如說惡意網址,拿過來可以加到防火墻庫里面,可以保護更多的用戶。所以說針對這一塊我們做了一些處理,因為大部分的時候我們看到的是明碼而不是加密過后的代碼,這樣的話,利用漏洞也好、其他方式也好,它的代碼和漏洞本身是有限的,每個漏洞它的代碼特征、明碼特征實際上是非常相似的,這時候就可以利用我們的廣譜特征進行差,而不是說加密以后幾十個特征變成幾十萬個特征,這樣我們可以用非常少的代價來實現功能。因為是一個明碼查毒,準確是非常高的,但是因為腳本是文本式的你要做廣譜殺毒要做智能匹配這需要花費一定的代價,而且我們這樣做對腳本本身有影響。
我們在前面給大家簡單介紹一下腳本監控的技術,接下來看一下智能網頁腳本監控的優缺點,第一個優點非常明確,可以把網絡威脅阻止在外。第二個優點因為我們是基于行為,不用產生網址庫或者非常大的病毒庫,所以這是一個輕量級的行為監控系統,所以升級維護的代價都是非常小的。第三因為我們是攔截在腳本引擎這一塊,而不是腳本數字,腳本數字可以由非常多,比如說基本上所有的工具,像IE、QQ、MSN,實際上都包括了,還有一些現場直播的工具,游戲類的有大話西游,還有CS,CS我們曾經發展過它本身被掛馬,玩游戲的時候中毒。如果用我們的智能腳本監控系統,只要他利用到IE類盒都可以監控到。它的缺點,這只是一個監控技術,它執行時肯定會導致一些系統問題,還需要我們在里面加入一些特征匹配和漏洞,漏洞溢出攻擊這種匹配是比較耗時的,會拖慢整個腳本運行的速度。
第二個問題,我們提了三種掛馬類型,其中有一個是文件型掛馬,利用網頁連接、惡意網址我們可以攔到,但是對于光標文件和動畫文件,本身文件內部的架構和腳本是沒有關系的,這種是沒有辦法做到攔截的。當然這兩種文件有非常明顯的特征,它的運行結構是非常 類似的,我們可以簡單的利用文件特征在病毒庫里面添加進去。
最后給大家介紹一下我們智能腳本監控技術的應用,第一個應用就是我們在瑞星2009里面做了一個智能木馬防御,查殺功能,阻止木馬的下載。第二個它是一個網絡威脅的探針,可以把它收集到的懷疑為病毒或者確認為病毒的網址,或者由這個網址下產生的下載地址傳輸到我們的安全系統,在我們的安全系統里進行深入的挖掘,然后傳入我們的自動分析和處理系統,然后快速的加到病毒庫里以保護更多的人。我的講解基本上就到這,謝謝大家!
主持人:非常感謝劉鋒的精采演講,也非常的賣力氣,喝了好幾次水。下面我們有10分鐘的茶歇時間,茶歇過后我們會請葉超先生進行下一階段的演講。剛才我看到大家拍我們的PPT這沒有必要,我們的PPT會下載給你們的。謝謝大家!


