劉濤:大家下午好!
這個報告本來應該是由我的同事趙帥來跟大家分享這個話題,但是由于他臨時有事,所以由我來代替他跟大家進行一個分享。首先做一個自我介紹,我叫劉濤,是2015年加入了盤古團隊,到現在差不多兩年多的時間。今天跟大家講的是《如何牽一發動惡意家族之全身》。
首先我們先從一個線索開始。我們設計了這樣一個例子,就是快要下班了,突然發現手機上面接到這樣一個短信,說你的車牌在路口的時候被攝像頭拍到了,你看了一下車牌號是自己的,再看了一下這個電話號碼,也似乎是有點像是公共服務號,后面有一個鏈接,你可能點了,然后恭喜你,中招了。相信在座都是安全從業人員,可能這種比較小白的事情不會發生,可能會懷疑這個東西有可能會是一個木馬,把這個鏈接扒下來,發現是這樣一個應用。如果確定懷疑是一個木馬的話,就緊接著進行一個分析活動。分析就是一個很正常的常規分析流程,我們先對這個應用進行反編譯,看一下申請了哪些權限。之后再看看執行入口是哪些,可能會對一些關鍵代碼比較感興趣,進行一個掃描。對這個東西可能會進一步深入的代碼分析,當有了一些頭緒之后,可能會對它進行一些動態運行的調試,這些都是一些常規的分析方式。
我們把這個木馬投入到分析平臺里面,就可以發現在左側我們檢測出了很多如圖所示的這樣一些惡意行為,每個惡意行為我們也可以看到,比如像在右側,這是我們反編譯出來,看到在代碼里面動態注冊了一個短信接收器,是有一個短信攔截的行為。還有一個我們感到很高興的,就是我們在應用的代碼里面發現,因為他用了SMTP的協議,要往郵箱上面發一些木馬爬到的數據,因為用了SMTP,用客戶端這種方式往上傳東西的話,需要提供郵箱和密碼,他把這個密碼硬編碼在木馬當中,我們就可以拿到如圖右側所顯示的郵箱信息。把這個郵箱登錄上去看一下,可以看到這些應該是惡意攻擊者還沒有來得及把這些所收集到的信息刪除。這里面我們可以看到,應該是受攻擊者整個的通訊錄,還有農業銀行的短信日志,都是在這里面的。這里就會看到,這樣一個木馬其實對于受害者的影響還是很大的。到這里我們是偶然發現一個木馬,分析大概到這里就結束了,我們可以看到它的一些行為,然后就是結束。但是我們拿到這個App這樣一個木馬之后,只對它進行分析就結束了嗎?實際上我們覺得是不足夠的。其實拿到每一個惡意樣本,其實對于一個安全分析人員來說是很珍貴的。我們拿到這個木馬之后可以做一些什么事情呢?首先在這里我們可以看到,我們是抓到了它的這樣一個惡意行為的包。
我們拿到包之后可以做一些什么事情呢?我們可以看一看是否還有一些其他的惡意內容里面會包含這樣一個東西。我們就把這個類放到了大數據平臺上面進行了一次搜索,總共我們找到了有13個應用,都包含了剛才注冊動態短信接收器的這樣一個類。我們對這13個應用可以做什么?我們對它里面的一個數據進行聚合。在這里選取了4個維度,包括這個應用里面包含了哪些域名,用的是什么證書簽發的,包含了哪些電話號碼,包含了哪些電子郵件這四個東西。我們拿到這四個數據之后就可以寫一個檢測規則了。構建一個檢測規則。當然這不是最終的,因為這里面可能會有一些無用的數據。但是我們把它作為一個規整之后,再放到我們的數據平臺里面再進行一次搜索。我們就可以在如圖的右下角可以看到,我們又找到了59個新的應用。不斷進行迭代的話,這59個新的應用,我們又可以拿到一批新的聚合的數據。
這些數據之后我們可以看到,每一個數據跟它所對應的App其中有一個關聯關系。這里面會有一些特征值,它會跟所有的聚合到的敏感,認為有關聯的App有一個關聯度。這樣的話,我們都可以得到一個這些惡意應用之間的關聯關系,最終我們經過多次迭代,以后有可能能夠找到一批惡意應用家族的族譜。
上面就是我所講的故事。這個故事里面提到三個東西,首先是特征的演化,我們最初得到一個惡意應用,只找到了里面的一個特征點,就是我們所說的類名。從這個類名出發,在大數據平臺里面進行一個關聯分析,就會逐步的擴大、擴大、再擴大,最終就能得到整個惡意應用的群體,很有可能就是一個家族,當然也有可能是多個家族在一起。經過我們后面的分析,也驗證了我們在這個特征關聯到整個所得到的惡意應用群體,最終命中的東西基本上都是處于一個家族的惡意行為或者是某幾個家族。我們用這個方法所得到的這樣一個結果是比較有效的,而且它的速度也是比較快,比起來我們在大量的App里面去找會有效得多。
在這里面,首先一個最根本的就是我們要對所拿到的這個樣本進行一個分析和檢測。現有的分析檢測技術大致我們分類了一下,也就可以分為這四類:第一個是特征匹配,現在傳統的大部分的安全工具,我們在拿到一個惡意樣本之后,我們會對這個惡意樣本進行一個分析,最后拿到一個特征值。比如某一段代碼片段,某一個字符串,某一個IP或者是某一個特征去匹配;第二是靜態檢測技術,我們的應用可以對二進制,或者是對一個中間代碼進行一次掃描,然后通過一些過程間或者是一些上下文的動態分析技術,能夠快速的得到一些運用的行為,從而判斷是否可能存在安全問題;第三是動態檢測,我們可以把它放到一個沙箱里面去掃一下,抓取一下;第四是動靜結合,這也是現在大部分安全分析人員所采用的方式。就是我們動態工具和靜態工具分析看,最后通過結合的方式,最終得到一個承認的東西。
這四種方式檢測成本可以按照這個圖,是呈線性關系的,就是成本和準確度是呈線性關系。其中特征匹配是最快的,掃一下,然后對一下,有的話就是成功,沒有的話就認為是一個非黑即白的東西。速度非常快,但是精確度低一些,在沒有特征覆蓋范圍內的應用可能就直接被放過了。靜態分析比特征稍微好一點,但是如果有一些誤報,或者規則寫得不全面的話,也有可能會放過一些東西。隨之后面的動態會稍微更多一些,但是會涉及到要去運行,所以說又會進一步提高成本。最后,肯定動靜結合,再加上人工,這個可能是最高的。
從另外一個角度,我們通過單位時間內檢測應用的角度和個數這樣一個維度,與上面這張圖就變成了一個反比的形式。我們有這樣一個問題,就是我們的安全分析人員資源有限,每天就只能用動靜結合人工分析,就只能分析那么幾個或者是幾個,甚至是要花幾天時間才能夠分析完一個應用,這個是有限的,但是我們這些攻擊者不會等你的安全人員分析好以后再去寫下一個。所以說怎樣能夠有效,我們的分析當中會發現,安全分析存在這樣一些問題,現在有很多惡意應用是通過非公開分發流量的方式進行傳播的。所謂非公開分發流量,傳統的一些應用都會正常開發后之后放到這個市場上供大家下載。但是惡意應用的話,有可能放到市場上面,但是隨著現在市場的審核力度越來越大,惡意攻擊者就會通過一些其他方式,比如說通過之前我們在前面的例子里面提到的,通過短信,或者是通過郵件,專門的針對性的去發送這個東西給用戶,去誘導他安裝,或者是把它放到一個論壇上面去,這個論壇是一個非公開的,我相信有些人,如果說你們玩網游的話,有些時候會下一些破解版的游戲,有些惡意的應用也會在玩家論壇上面,發一些帶有惡意行為的破解版的應用,再破解到游戲應用,放到論壇上面,誘使玩家下載。
對于這些惡意應用就存在這樣一個生命周期短的問題,而且因為它的傳播范圍不是特別大,是針對性的傳播,很有可能這些惡意查殺軟件沒有捕捉到這些惡意應用,如果沒有人去報的話,他可能就沒有捕獲到。他在這個惡意應用里面,再對這些特征掃描,因為很多殺毒軟件大部分有些還是采用特征的,對于這些特征進行繞過,他就躲避了這樣一個殺毒軟件的查殺。而且這樣一個針對性的東西,感染的回報率就特別高。
這是其中一個例子,圖沒有完全放上來。這個應用是一個國防軟件,是烏克蘭的一個炮兵軟件,本來是小范圍,在軍事網絡里面傳播的,由一個軍官寫的,炮兵能夠通過這個應用,方便炮兵對炮彈進行發射的行為。這個本來是軍事安全里面的,但是一個惡意人,一個黑帽子抓到這樣一個應用,他再把這個應用里面嵌入了一些木馬的行為在里面。比如說去獲取士兵的地理位置信息,一些操作的操作在里面,再放到論壇上面。導致一些士兵可能通過這個論壇上面下載這個App,導致這個攻擊。攻擊者對很多特征進行了一個繞過,再把這個惡意應用放到上面進行一個掃描,發現全部都通過的,基本上都標志成一個安全應用。這樣的話,如果說這個東西是一個涉密的,威脅程度是非常高的。
另外一個方面是仿冒應用,這個仿冒應用有點像剛才我說的破解版的游戲。這里面舉的例子是右側工商手機銀行,我們看它寫的描述信息比較有誘惑性,一邊玩游戲,一邊領紅包。如果有人愛貪小便宜的話,他就看到論壇上面在分享這個,他就下載下來,安裝到手機上面,那么他就中招了。
這是一個統計,我們每天抓取到那么多應用,其中只有28%的應用是所涵蓋的,有72%是未知的應用。在這72%里面,其實每天有大量的未知的惡意應用。我們就要想一個問題,怎樣能夠降低安全分析人員的工作量,讓他們把有限的精力放在最應該去分析的應用上面,這是我們說的分級處理。首先我們應該在惡意代碼生命周期的第一個環節,分發環節就把這個惡意應用抓到,這是一個最基本的東西。我們可以把這些應用進行一個大數據關聯,然后進行排查和溯源,然后進行分析。之后就是業務模式的精細化,基于一個平臺,構建一個平臺,使得我們的分析人員都能參與到這里面來進行分析,這是我們最初的一個動機。
解決方案,我們可以看到,這是寫了一個五級的,最下面的是全網目標,就是我們每天所抓取到的東西。但是我們覺得,我們的分析人員所分析的東西應該只是最上面這一層高價值的目標,剩下的一些東西我們希望能夠通過我們的一些方法,能夠把它過濾掉,來降低分析人員的工作量?;谶@樣一個想法,我們提出了這樣一個金字塔的模型。可以看到,在中間的三級,對應著剛才講的金字塔模型當中的關注目標、重點關注目標和風險目標。這五層是怎么一層層過濾的呢?首先最下面對于全網目標,我們肯定還是選用最傳統的方式,就是我們用黑名單特征,跟大部分的安全友商一樣,用黑名單把已知的東西篩掉,白名單也會篩掉。之后是我們的關注目標,我們可以對應用進行一個簡單的掃描,可以很容易的提示到一些關鍵特征,包括一些簽名、類名、方法調用和證書都是可以提取到的,對于一些廣譜特征我們寫一些檢測的規則,把它作為第二步的一個篩選的東西。我們通過這樣一個篩選,就可以很容易得到第三層綠色的重點關注目標。對于這些關注目標之后,我們就可以使用一些成本更高一點,更親切一點的靜態分析的方式,也就是反編譯源碼分析和匯編指令流啟發分析等等,再進行捕獲,就可以得到第四個風險目標。最后我們用成本更高、更精確的動態分析,最后我們就可以得到交給我們的安全分析人員的這樣一個高價值的目標,構成了這樣一個金字塔的階段。這里面其實我們每一層都是存在一個迭代的關系,就是說我們最后分析團隊所分析出來的結果,以及上面的每一層,其實都可以作為下一層的一個條件。之后這個分析模型就會有一個沉淀的情況,最終我們分析人員的工作量,最終我們認為可能會存在一個邊際擴散的效應。
這是目前我們所得到的一個大數據場景。因為要搭建這樣一個目標會用到大數據。首先就是我們所做的現在的一個源數據集,包括第一個應用的基本特征,包括應用云、證書這些,這是第一層的階段。通過靜態分析技術,我們可以得到一些加固特征、調用序列和一些內嵌和SDK。之后還有一些已知信息,就是通過分析沉淀,可以得到白名單庫、黑名單庫,通過安全人員的分析,可以得到一個規則庫。在第三層和第四層所要用到的靜態分析系統和動態分析系統,就構成了這樣一個金字塔模型里面所要涵蓋到的所有元素。
這里面提到一個特征聚合的方法,我們這里面列了那么多的特征,并不可能直接把所有這些維度一股腦的全部塞到分析引擎里面去然后進行聚合。當然你也可以這么去做,但是你這樣做的話,很有可能最后只能匹配到你的這樣一個應用,這是一個選擇的問題。之后還有一個,當你把多個應用放在里面的時候,其實有很多重疊的東西。我們如何把它篩選出一些最重要的呈現給安全的,我們覺得最重要、最應該呈現給安全分析人員去看的這些東西,我們是使用了一個白名單聚合的方式進行一個過濾。所謂的白名單的方式,事先有一批應用,通過分析可以確認它是安全的,包括一些合法的開發者的應用,我們可以作為一個白名單。把白名單里面的東西進行聚合,可以看到在合法的應用里面哪些東西應該是安全的,之后進行聚合,最終得到一個集合,最后對位置信息進行聚合的時候,把這些合法的聚合數據先去除掉,再把剩下的這些東西要交給分析人員進行觀測和篩選選擇,最終作為下一步聚合的依據。再有一個就是特征的標記,就是你在那么多聚合得到的條件里面,并不是說所有聚合得到的數據就是你下一步聚合所輸入的數據源,還是應該要對它進行一個篩選。
再講兩個例子,第一個就是仿冒應用。首先這是一個支付寶的情況,我們輸入源是在平臺上去搜支付寶這樣一個應用名。我們可以看到,我們的分發渠道里面總共監控到700多個應用,在右下角的證書里面可以看到,其中490多個,將近500個應用都是用了一個證書,剩下還有其他100多個應用,他說它叫支付寶,但是是用其他證書簽發的。這些證書簽發,一般作為一個這樣的合法的大型應用開發,其實都是會用相同的證書去簽發整個應用鏈。當然也會存在一種情況,就是在應用發布的階段上,可能會在不同的階段使用不同的證書,但是它的證書基本上應該是集中在這個里面的。如果我們在聚合里面發現用的不同的證書,用的證書比較少的話,很有可能就是這種惡意的,有可能就是一個仿冒應用。比如我們選取了第三個證書一掃,這個證書如果大家分析的多,就可以發現這是一個Google的測試開發證書,默認導出的時候,是用這個證書簽名的。
這些應用經過我們的分析可以看出是一個仿冒應用,上面是用一個證書來進行分析的。還有另外一個,比如我們對它進行一個聚合,可以看到,在這700多個應用當中,有495個跟剛才這個證書是一致的,它使用的是支付寶的名冊,剩下還有4個是對應Pad、Android平板版本的,剩下的是一些很怪的,包括最后一個,連圖標都不是支付寶的圖標。我們再換一個,QQ也是有同樣的問題,我們對它的證書進行一個聚合,也是同樣把這個證書,把其中量比較少的這樣的證書進行一個聯合的搜索,就可以發現這樣一個應用。比如看開頭這兩個,很明顯連圖標都沒有改過來。
另外一個例子,我們經常會在網上看到一些安全報告,這是一個APT報告。這些安全報告雖然說會對這個應用的惡意行為進行一個分析,也講跟這樣一個攻擊是怎么樣發生的,應該怎么樣去防范這樣一些東西。但是往往只會給一些片段上面的東西,而且很多這樣的一個報告是不會把樣本分享出來的??吹竭@樣一個報告,可能你會想去跟蹤這個報告,看看是怎么做的,它的里面除了報告所涉及的問題之外,是否還有其他的問題,沒有樣本怎么辦?其實也像我們剛才所說的,像類型的剛才那種牽一發而動全身的方式,在報告里面我們可以看到,在給出一些片段的時候,我們可以把這些片段作為一個惡意程序的特征,把它放到我們的數據平臺里面進行搜索。比如像這個里面,有一個特征字符串,我們把這個作為一個特征來進行搜索,搜索到了25個。我們再對其中一個進行分析,進去一看,的確是在對應的這個類里面,有這么一個字符串調用。我們就可以高度懷疑,雖然說我可能找的這個應用并不是這個APT報告里面所提到的應用,但是它們很有可能是一個關聯樣本,可能是屬于一個家族體系。我們對它進行一個定位樣本,去分析它的行為,之后我們又可以回到最初例子里面所講到的,可以拿到它的一些特征。我們再把這個字符串放進平臺里面,再進行一個掃描,又得到了33個新的應用,再把這33個新的應用進行聚合,最終都可以得到這樣一個關系圖。
之后我們通過這樣一個關系圖,可以審查這里面所關聯出來的特征值,哪些我們可以作為標記這一個群體的特征值,我們通過這樣一個可視化的圖可以看到,像這樣一個域名以及包括右側的這些IP號,都是可以作為一個特征值,因為它對大多數應用都是存在一個關聯關系的,就可以快速的通過這樣一個聚合關系得到這樣一個規則表。之后我們再把我們這樣一些特征值作為一個規則,再放到流量監控上面進行監控,這樣的話,很快的就能夠過濾出這樣一些惡意應用。這樣的話,就完成了一次惡意行為規則的建立。
作為總結,雖然我們拿到了很多應用特征,但是很關鍵的一點。就是對于這些特征的選取,我們并不能把所有抓取到的東西一股腦的扔進去,還是存在一個特征的分析。再就是關聯分析,我們通過實踐發現,大數據關聯是一個很有效的,能夠自動化的幫助我們篩選出一批值得關注的東西。特征的演化,我們可以通過目前已知的只有少數的幾個特征,我們可以通過數據關聯一步步的擴大、再擴大,最終能夠得到一批我們以前預先沒想到的一些特征,最終把這些東西作為我們的一個分析。
以上就是我今天想跟大家分享的內容,希望對大家能夠有所幫助,謝謝!
潘柱廷:劉濤剛才講的主要是惡意代碼的家族問題,就像前面菠蘿也談到過,要去重置用戶賬戶的密碼,可以用他舊版本的App去重置。其實對于惡意軟件也是一樣,像溯源作者,不可能一下子就變成大師這個水準。
劉濤:在這里稍微給大家打一個廣告,我們目前盤古所用到的這些工具,我們現在搭建了一個平臺,是開放給公眾進行分享的,我們也希望在座的這些友商和安全分析伙伴們可以加入進來,去使用我們的平臺,大家一起努力,就像我們在PPT當中所說的,大家都在一個平臺上面去做事,壯大我們的這樣一個特征封鎖平臺,我們也希望能夠一定的用處。大家有興趣的話可以會跟后我們聯系,謝謝!