压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

盤古劉濤:使用Janus大規模挖掘濫用授權憑證的移動應用

劉濤:大家下午好,我是來自盤古的劉濤。今天我給大家帶來的議題是《使用Janus大規模挖掘濫用授權憑證的移動應用》。

3  劉濤

首先我們先來看一下,我們在做安全分析的時候,我們作為一個白帽子或者一個灰帽子經常會遇到這樣一個情況,就是說相比起大的安全公司,像安天或者是阿里,他們每天可能會收到成百上千,或者是上萬的安全應用。但是對于我們一些白帽子、灰帽子來說,我們每天可能就是搜集到一兩個或者是十多個有用的樣本,我們會對它進行一些分析。我們對于這些單一的樣本分析可能會發現一些很有趣的問題,比如說像前不久,最先在百度地圖里面發現有一個漏洞,當這個分析人員,這個白帽子找到有這樣一個漏洞的時候,由于他沒有足夠的樣本資源,他僅僅只能是把這樣一個漏洞提交到烏云,或者是分享到一些像天眼的平臺上面去,把這個漏洞發布。但是我不能夠去找到更多的應用,從而把它造成一個輿論的事件。所以在這里面我們可以看到,SVM的發明者弗拉基米爾·萬普尼克說過這樣一句話,很可能你擁有足夠的信息來很好的解決一個感興趣的特定問題,但是你沒有足夠的信息來解決一個一般性的問題,我們經常在分析當中就會有一個信息不完全的問題。針對這個我們在想,有沒有可能我們去搭建這樣一個平臺,我們能夠把大量的APK的樣本搜集到,我們對它進行一些信息的提取,我們發現我們的安全人員能夠到這個平臺上來,對他感興趣的問題去查看,看他所發現的問題有沒有大規模的存在,從而能夠發現更多的情況。

這就是我們搭建Janus的初衷。首先Janus會去搜集大量的原始數據,這些數據主要是APK,還有一些就是URL,比如一些常見的惡意的樣本庫里面的一些URL,或者是一些敏感的,比如說大的數據,像騰訊,或者是像阿里、支付寶這樣一些URL的鏈接,還有一些其他的信息資源。這些主要會通過渠道牽掣,或者是爬蟲,我們會搜集到這樣一些原始數據。收集到這些數據之后,我們自己之前也開發過很多靜態分析工具以及動態分析工具,我們就能夠把搜集到的這些數據原數據,一些有用的信息可以提取出來。比如說像APK里面的字符串,或者是他的一些簽名,或者是所有的一些布局文件,Layout或者是URL的信息。其次我們也可以通過動態的,剛才陸立新教授提到的,我們可以用沙箱在里面跑一段時間,我們可以把這個APK基本的一些行為數據也可以提取出來作為一個原數據進行分析。

當我們把這些數據存儲之后,就可以構成一個數據平臺,之后我們都可以在這個上面進行一些數據挖掘或者是構建一些檢測規則,我們可以利用一些分析引擎,在里面做一些威脅情報的搜集或者是一些漏洞的預警,這個主要就是我們Janus的整體架構。

在Janus的周圍可以看到還有很多云,除此之外我們還可以在Janus上面做一些其他的事情。比如說我們可以去進行機器學習,我們可能去發現一些以前不知道的一些潛在漏洞。還有就是我們可以進行一些相似性比對,我們經常會發現在Android市場上面經常會存在重打包的問題。一個開發者他開發出一個應用來之后,一旦放到市場上面的話,會有很多其他的人員,他們會把這個東西,把APK下載下來,Android也是開源的,加一個東西重新打包,放到市場上面去。對于用戶來說,用戶他并不Care這些東西。但是對于一個開發者,或者對于用戶的信息安全來說,會產生一些問題。比如像惡意分析,安全評估,SDK使用,這些都可以在我們這個平臺上面延伸出去,我們覺得這個應該是有很大的作為的。

這個主要是我們的界面,我們不僅可以在渠道上面去挖掘和拉取到一些數據,我們也希望一些安全分析人員可以到上面來提交你所感興趣的應用,我們會幫你盡量去提取一些數據出來。比如說我們會提供一個在線交互分析的工具,這樣的話,它集成了我們現在大部分的Android分析,包括反編輯。你可以看到,我們還可以對于某一個程序點可以去看它的一些交叉引用或者是調用的一些關系。其次我們也會內置一些我們以前總結的分析插件,當你把這個APK提取上來的時候,我們可以幫你去抓取到一些我們已知的問題。你可以去對這個問題進行深入的分析,去看這個問題是否會真正導致一些什么敏感的潛在漏洞。除了反編譯的話,我們也提供了一些阿里代碼的東西,使得你能夠更直觀的去分析這個程序的問題,因為畢竟這個反編譯的話,可能會造成一些信息的缺失。

這一塊是除了我們對于深層的交互分析之外,我們還會去提取一些基本信息。比如像這里面,我們會提取出一些MD5或者是其他的,我們會跟一些其他的安全廠商有一些合作,交叉的把一些情報關聯起來。這是一個我們的規則匹配界面,除了交互分析之外,你也可以把一些你總結出來的安全規則,可以用一個簡單的語法表示出來,我們可以在整個的信息平臺上面收集,看你這個東西是否會出現。

之后就進入我們今天要講的一個惡意憑證的泄漏。首先我們要講到這個授權憑證的話,就需要提到一個開放平臺,現在隨著SNS的發展,很多的SNS都會推出一個開放平臺,可以使得第三方應用方便的接入到用戶資源上面去。很多開放平臺的接入現在一般都是用2.0協議,當用戶在移動應用里面發起一個操作請求之后,第三方應用會向開放平臺申請一個授權。在經過用戶確認授權之后,第三方應用就能到這個開放平臺上面去拿取到用戶的一些數據,或者是他自己的一些數據進行交互分析。

在這里面主要就是在第一步,他會通過一個授權憑證去認證這個第三方應用是否有一個權限去訪問這些用戶的數據。一個授權憑證主要是由兩部分構成,一個就是Client ID,一個就是Client Secret,在向第三方平臺申請認證服務的時候,由服務平臺給開發者的,主要是用于認證這個開發者和所對應應用的主要手段。

當這個東西如果存在濫用的話會有一個什么樣的問題呢?首先一個最直接的就是說,我可以去利用這個授權憑證,用這個客戶端認證的方式,就可以用你的憑證修改這個應用的一些基本注冊信息。比如說像我們之前發現Facebook上面,如果說我知道了你一個應用的授權憑證的話,我會直接去Facebook上面,包括上面的官網地址,或者應用的一些鏈接能夠直接篡改掉,比如說可以設置成一個釣魚鏈接或者是其他的東西。其次也可以以應用的身份跟后面的交互,比如我們提到在微信的公共號當中,如果有這個公共號的授權憑證的話,在這個公共號上面交互的時候可以切入進去,跟用戶直接進行交互。還有我們之前在烏云上面也可以看到有一些報告,就是我可以去利用這個授權憑證,構建一些虛假的鏈接,然后幫用戶點擊或者是掃描的時候,經過篡改或者是中間人攻擊的方式,就可以去獲得用戶的一些登錄憑證,從而就可以直接以用戶的身份登錄上去竊取用戶的一些信息。除此之外還有更多的一些情況,也是有待于后面繼續發現。

這里看一個簡單的例子。這是去年曝光在烏云上面的一個廣東號碼百事通“總機服務”微信號授權憑證的泄漏。這是公眾號的界面,大家都可以到烏云上面去看這個東西。這個問題當時是怎么發現的呢?就是這個安全人員他通過這個公眾號的抓包,就可以發現這個授權憑證直接是固化在通訊包里面的,就可以看到當初這個公共號的授權憑證是APP ID和Secret,攻擊者和安全人員就可以上去,直接換取到一個授權憑證ACCESS-TOKEN。進入之后,就可以通過剛才那個調試頁,能夠獲取到用戶的OpenID,就是所有在這個公眾號上面進行關注的用戶的OpenID。當用戶有交互的時候,我也可以跟用戶發送一些信息,還有可以上傳頁面,還可以去更改這個公眾號的一些菜單信息,這些都是在授權的范圍內的。

在知道這些情況之后我們也去掃描了一些我們搜集到的APK,一些Android應用。我們可以發現,單就微信的授權憑證,我們實際上很多應用里面都有發現,它有些是固化在代碼當中的,有些可能是固化在配置文件里面。針對于微信這個,我們可以發現提取一個特征,這個特征主要就是以WX開頭,后面接16位的十六進制串,是一個MD5。這樣的話我們就可以很簡單的構建出這樣一個匹配規則,有了這個匹配規則,因為我們之前已經搭建了Janus,我們已經對這些APK里面的字符串進行過搜集處理,那么我們就能夠直接到Janus,就是之前你們看到的規則頁面上面,可以建立這樣一個檢測規則。這個寫得比較簡單,就是只檢測剛才所提到的這個匹配表達式。之后再選擇和控制我們所有的應用,去進行一個掃描。

由于時間的關系,我們并沒有去做一個全庫的,我們只是選取了6萬多個應用進行了微信的授權掃描。這是我們掃描出來的,包含有儀式授權,就是剛才那個匹配成功的一個應用的列表。我們可以點擊打開,能看到有很多字符串上的匹配。為什么會有那么多字符串?就是因為這邊可能是授權平臺,還有很多,我畢竟是去掃一個符合MD5的十六進制串。這里面匹配出來有一些可能不是,我們可以導出來這樣一些匹配成功的數據。之后我們會進行一個驗證操作,驗證操作的話就如同之前所提到的,就是我直接去到測試頁上面構造一個URL請求,去看這樣一個本來搜索到十六進制串,是否可能去獲取到一個ACCESS—TOKEN,下一步就直接可以用這個ID拉取到用戶的一些信息,還有可能會進一步的跟用戶交互或者是其他操作。

這是我們掃描出來的一個簡單的結果,就是我們掃了5萬多個應用,大概有400多個是找到了這樣一些憑證,最終是有21對收到。這個數據是今年我們做的數據,去年做的數據會比這個稍微好一點。主要一個原因就是我們后來發現,好像騰訊后來也更新了一個授權憑證的系統,使得以前能夠正常訪問的現在這些憑證有一些已經過期了,導致這個操作不能成功。

除了之前所說的憑證以外,也可以把獲取授權憑證這樣一個鏈接作為一個規則,我們可以去掃描出來列表之后,到交互平臺里面去,依次的去分析,看這個東西,去找到這個授權憑證可能會在什么樣的位置。這樣的話,找到的東西可能會更為精確一點,也更為實際一些,就是這兩種分析的模式。除此之外,我們也會去新浪微博、阿里云、Facebook這些去分析,看有沒有這樣的問題。

之后我們講一下為什么會有這樣一個授權憑證的問題,我們是掃了一下。首先第一個,開發人員可能會存在這樣一個情況,就是說他用于去分享數據,獲取數據或者存儲數據。因為我們發現有很多應用,比如我去使用阿里云的服務,我會去在上面存儲一些應用的基本數據信息,比如說像游戲里面,他可能會使用排行榜,他可能會要用阿里云的服務進行一些存儲。還有一些比如說他可能會到新浪微博或者是微信的朋友圈進行分享的時候,他可能也會需要用到這樣一個授權憑證。

不正確使用Auth2.0的協議。因為在Auth2.0里面認證是分為三個部分,客戶端和服務器,大部分的認證操作都是在服務器上面完成的,對于有一些Android的應用,把這個服務器上面的認證工作直接放到了客戶端上面去進行。這樣的話,就勢必使得這個授權憑證直接放到客戶端上面了,這樣的話就會造成一個憑證的泄漏。還有我們發現有一些開發人員,他可能在寫測試代碼的時候并沒有把這個測試代碼移除掉。這樣的話,就會使得一些代碼放在外部版當中,也會造成一些問題的泄漏。

剩下的就是一些建議,我們對于應用開發者,他應該去保護好自己的授權憑證,以防止有意者拿到授權憑證做一些其他事情。還有一個就是希望開發人員能夠在保證最小的應用授權,這樣即使你的授權憑證在不小心的情況下泄漏出去了,也不會造成過大的一些影響。后面我們可能第一是進一步擴展我們Janus的能力,另外就是對外進行開放。現在基本上我們Janus也做得差不多了,我們正在做下一步的調試。另外一個就是對外開放API的接口,使得開發人員能夠調用我們這些接口,去挖掘到一些他們所感興趣的信息。就像前面提到的,我們下一步可能會對于Android應用市場上面的重打包以及推廣類的App,像一些黑色的App,我們會進行一個挖掘分析,到時候可能會出一份報告。

我今天講的就是這些內容,不知道大家有沒有想要問的。

 

提問:我想的可能不太對,我請教一下。我看到你講的過程當中直接就是ACCESS-TOKEN了,是用的什么模式?

 

劉濤:其實這里面檢測主要是針對第四個模式,就是客戶端認證的模式。

 

提問:最簡單的客戶端認證的模式?

 

劉濤:不是最簡單的客戶端認證的模式。

 

提問:2.0里面說了一下,最后的模式是有一定的安全隱患的。

 

劉濤:是的,但是對于一二三四種模式其實都是使用到了一個認證的方式,都使用到了授權憑證。為什么我們只是檢測了第四種模式?因為我們在做定量分析的時候,其實并沒有用戶的參與加入進來。所以說我們在搜索授權憑證的時候,我們只是針對了最后一種模式,就是說在分析的時候會簡化一些,在我們整個分析里面,但是并不是說這個授權憑證不會用到ER里面去。其實對于像很多這種開放平臺的話,它都有授權憑證,有一些是一樣的。比如說像之前你們可以看到微信的公眾號里面的授權憑證,就是首先我能夠進行第四步驗證,就是直接是ACCESS-TOKEN,也可以用這個授權憑證在第一個正常的授權認證模式,讓用戶去發起一個登錄認證,之后再去拿到一個臨時的OID,我再去數據服務器上面拉取到用戶實際的登錄ACCESS-TOKEN。這是在不同的應用場景里面,但是都會用到這個授權憑證。

 

提問:在你們實際測試的過程中,是不是說大部分產品就沒有定時的刷新ACCESS-TOKEN過程呢?

 

劉濤:這個并不在我們這次分析當中,就是我們在應用當中挖掘看看是否有授權憑證的存在,而不是看整個登錄Auth2.0的使用過程當中是否是安全的,這是兩個問題。你說的這個東西,我們也可以寫另外一個檢測規則去掃描,這些都可以在Janus上面完成。

 

提問:我想問一下你們在掃描這些授權憑證過程中影響最大的,影響用戶最多的是哪個?

 

劉濤:這個數據我沒有帶過來,要回去稍微看一下這個東西。你提到用戶最多,不知道你要通過哪個,是通過下載量去分析,還是說去通過在線用戶度去分析。

 

提問:因為你用那個授權憑證,就是可以看到用戶的信息。你拿到那個開發者的數據,你可以訪問嗎?

 

劉濤:你說像剛才那個微信公眾號上面,我是可以拿取到用戶列表的。這個我們沒有去做過統計,因為我們僅僅只是去單獨驗證,因為是自動化的,我們只是說去看到我們可以拿到一個OID,我們就認為好,這個東西就過了。但是其實我們后面也手動分析過,我們從中挑了一個去看過。我們搜集到有一些,是一個游戲的公眾號,我記不起是什么名字了,大概是有幾千個用戶關注了這個,但是我們只是抽取了其中幾個,可能有一些其他的,有些可能就只有幾百個,有些有上千個,但是這些數據你現在向我要的話,我給不了你,抱歉。

 

提問:這些開放平臺大部分是可讀的嗎?還是可寫的?可以修改用戶的數據嗎?

 

劉濤:你要修改用戶的數據的話,這個好像我沒有怎么去關注過,但是我可以去修改這個應用的數據。因為畢竟你要修改用戶的數據的話,就像剛才那位女士提到的這個問題,就是說我要修改用戶的數據的話,我一般都要通過第一步認證,就是必須都要有用戶的登錄參與,就是說要有用戶的確認授權的話,他才可以去連接到用戶的數據。拿到授權憑證的話,主要修改都以應用的身份去改一些東西。所以說改的大部分都是應用的一些相關的東西,但是我可以通過應用的東西去影響到用戶。

 

提問:我想問一下,咱們Janus在分析我們APK數據的時候,如果遇到那種加固的應用我們一般是怎么處理?

 

劉濤:可能剛才我沒有提到,我們現在也已經對一些常見的一些加固的進行了一個脫殼的處理,但是就是說現在還不是對所有的加固都能進行這樣一個操作,但是我們現在正在研究怎么樣更通用的把一個應用的加固去掉,現在有一部分是可以把殼脫掉的。

 

提問:你說的這個脫殼是完整的脫下來還是靜態的,就是只是還原一步?加密過之后不是一個完整的,很多代碼是抽掉的,就是只有在運行的時候。

 

劉濤:運行的時候動態注入出去是嗎?

 

提問:對這一部分代碼進行保護的時候,我們在提取這一部分代碼數據的時候有沒有一些方案?

 

劉濤:現在我們還正在研究當中,但是我現在只能告訴你,就是說一部分的加固我們是可以進行脫殼處理的,另外還有一些,我們也正在有一定的解決方案,還有一些是在研究進一步的解決方案,并不是所有殼都能脫掉的,這倒是肯定的。在Janus系統里面,我們也是有提取的,我們也是有處理的,只是說可能有一些并不會還原到Java代碼上面去。

 

提問:靜態分析方面有嗎?

 

劉濤:有,剛才你看到的交互分析,很多數據其實都是通過靜態分析獲取到的。

 

提問:您提到開放問題,有沒有可能以后開放給其他的企業或者是個人用戶?

 

劉濤:這些都會的,我們對于普通的安全人員,比如像白帽子我們有這樣的用戶接口,還有對于企業的話,我們也有相應的用戶接口。

 

提問:我看您進的過程當中都是用Http的,是直接就沒有Https,直接在網上抓包得到的數據嗎?

 

劉濤:剛才說的抓包的話,其實是當初去年在烏云上面曝光的廣州號碼百事通里面,當時是通過抓包獲得的這個ACCESS-TOKEN,后來這個Janus我們是通過直接靜態分析得到的,并沒有存在抓包的。但是針對你ACCPS,我們在動態獲取當中,我們是對于這個做過一定的處理得,ACCPS我們也可以抓取到里面的數據的。

 

提問:你是說把包解下來?

 

劉濤:把包解下來,可以拿到一些數據。現在根據我團隊里面的成員他反饋給我的信息,好像有能夠解決一部分,但是不是全部的。

上一篇:陸立新:計算機病毒沙箱分析的優勢和挑戰

下一篇:對話騰訊馬斌 解讀互聯網+安全戰略