自由Android安全研究员陈愉鑫:移动App灰色产业案例分析与防范
11月18號,2017看雪安全開發者峰會在北京悠唐皇冠假日酒店舉行。來自全國各地的開發人員、網絡安全愛好者及相應領域頂尖專家,在2017看雪安全開發者峰會匯聚一堂,只為這場“安全與開發”的技術盛宴。
在移動互聯網時代,互聯網業務飛速發展,在這樣的大背景下滋生了一條以刷單、倒賣、刷榜、引流、推廣為主的灰色產業鏈。山寨APP遍地開花,給原APP的開發者帶來了很大的沖擊,這些人往往被稱為“打包黨”。他們以低成本換取了高額的利潤,給互聯網企業以及用戶都帶來了巨大的損失。雖然加固技術、風險控制、設備指紋、驗證碼等技術也都在飛速發展,但實際效果并不能讓人滿意。本次峰會上,自由Android安全研究員、看雪會員陳愉鑫揭露了多個真實案例的技術細節、開發流程、運營流程,描述了一條以刷單、倒賣、刷榜、引流、推廣為主的灰色產業鏈,并提出了一些防護建議,協議安全需要從體系上進行加強。
自由Android安全研究員、看雪會員 陳愉鑫
陳愉鑫,自由Android安全研究員、看雪會員。熱愛APP通信協議分析,曾經分析過各商城、直播軟件協議流程并還原加密。對灰色產業鏈流程略有研究。
以下為演講:
陳愉鑫:大家好,我叫陳愉鑫,網名無名俠。今天很高興能夠在這里和大家相聚,這一次看雪的峰會辦的特別好,我是2012年成為看雪的會員,這幾年我在看雪也學了很多的知識,非常感謝看雪能夠給我們提供這樣的一個平臺,我今天演講的題目是移動APP灰色產業案例分析與防范。
大家玩過薅羊毛嗎?我首先講的是薅羊毛的工業革命。之所以叫它為什么工業革命,是因為我想講薅羊毛怎么樣從手工到腳本自動化完成。今天我會以小米商城、搶購軟件做一個簡單的例子,針對這些東西我會提出防范的建議。
羊毛黨的工業革命。手動薅然后轉換成自動化腳本,這一群人可以做什么?首先就是情報的搜集,要提前知道有那些活動,比如說今天發什么券他們都會提前知道,或者某一個什么APP有獎可以抽。羊毛黨提前知道活動之后再找合伙人準備小號,準備小號就會批量注冊,批量注冊就涉及到注冊協議的分析,現在這些APP里面都做了加密算法,這些加密算法有沒有用,未知。也有很多加固,這些加固是否有效果,我們也未知。注冊小號之后就會準備VPS,VPS越多請求量就越大。比如抽獎,用很多機器抽,肯定會比單人快。找技術人員,比如說分宜寫法,解決算法脫掉破解,這些薅羊毛相當于做一個管理,管理下面的技術人員。活動上線之后,這個協議以及算法都生效了可以開始分析了,活動上線之后就要在第一時間內把這個東西做出來,所以上線之后就會找技術脫殼,找技術分析協議,直到出一個完整的軟件出來。
安卓App容易被反編譯以及調試,大部分的算法都是用Java寫的,反編譯非常容易,還有一些非常核心的算法會放在SO里面,但是效果也不是很好。做這一塊的技術人很多,會的人也很多,做起來特別方便。
這是小米的搶購軟件,在小米商城上有活動,比如說小米商城有一個板塊叫做真心想要,這個板塊里面就定期有非常低價商品出售的活動,這些活動一旦出來了,有一些人就會寫腳本,買很多的服務器,同時開搶,搶到之后以稍微高的一點的價格轉手出去。很多人從這個里面撈了很多錢。
首先我們來分析一下小米搶購軟件的解決方案,要怎么樣做一個搶購軟件?我們要搶購東西首先要有一個API接口來源,小米應該有三個端,Web端,app以及盒子端。App又有Android和iOS兩個端 ,iOS分析成本比較高,安卓比較容易。
小米盒子的商城里面時候也有一些便宜的東西,盒子看著挺難分析的,實際上可以很容易把里面的算法、協議提取出來。小米盒子抓包可能有一些困難,因為小米盒子沒有代理配置功能,但是小米也自己犯了一個坑,發包函數里面會把發的數據通過log輸出,我們通過查看logcat日志,可以知道他發送了什么。
做搶購就需要大量的小號,這些小號需要注冊腳本,就涉及到一個驗證碼的識別,這個解碼平臺很多驗證碼就可以識別。今天上午看到一個笑話,驗證碼需要你手機上的尾碼乘以數字是多少,這種解碼平臺就無能為力了,感覺特別好,這是一個特別好的思路。
小米的登陸算法也挺復雜的,會涉及到很多的步驟包括設備信息綁定等等。登陸之后,我們還會涉及到一個批量設置收貨地址,批量下單。這些東西的原理還是非常簡單,模擬一下小米數據包,像爬蟲一樣。抓包不能完全防止,因為抓包禁止不了,服務端也不可能完全對這個客戶端鑒權,所以只能提高協議難度。
最簡單的方法是最每一個數據包里添加一個sign 字段,僅僅通過抓包我們是無法得知該sign字段的計算方法的。我們知道一點的是,這個字段必須輸入正確才可以成功登陸一個賬號,一般這種解決思路就是通過逆向APP尋找注冊密鑰,還原這個過程,把真正密碼以及提交后的加密密碼對應生成關系,生成之后又可以讓服務器認可,服務器認可之后就可以登陸,這是一個基本的思路。
現在許多應用開發商為了圖方便,于是就直接調用Java的Crypto算法庫。直接調用這樣的算法庫會存在一個潛在的安全隱患,密鑰是固定的,算法也是固定的。既然是Java的算法庫,那么就可以通過Hook的方法輸出密鑰、加密數據等重要信息。即使一個APP已經加固甚至做過許多混淆也沒有太大的用處。在這種情況下,逆向就顯得太慢了!
千里之提毀于蟻穴,有小部分APP選擇使用加固產品,但是只使用了DEX加固功能,他們又將協議加密算法的代碼放在SO里面,這樣加固就沒有起到太大的作用。
我們如何利用經過OLLVM編譯的SO呢? SO文件是已經編譯的可執行文件,那么既然都叫可執行文件了,是否有手段可以讓這些SO執行起來呢? 有部分APP中的加密SO有x86版本,這就非常好辦,直接load到內存,設置環境執行即可。如果只有ARM版本的SO又該如何處理呢? 我選擇使用Unicorn 庫模擬執行。Unicorn是一款基于Qemu模擬器內核的庫,提供了許多方便的API接口。利用該庫,我可以通過編程,完完全全虛擬出一顆ARM的處理器以及內存。
模擬執行成本就低了,而且使用Unicorn模擬執行還是線程安全的,非常適合羊毛黨的業務需求。
模擬執行對抗方法也很簡單,在核心的算法內增加上下文依賴,增加系統API調用,盡量避免純運算函數。
其它的安全建議還有許多,例如修改標準算法也是不錯的選擇。最簡單的方法是修改Base64的映射表、替換字符等等。再復雜一點就是修改Hash函數的初始化常量、增刪算法部分邏輯等等,比較典型的是jd的tea算法。
自己實現VM也是一種不錯的方案,自己實現VM有一個好處,可以根據自身APP的業務需求來設計。Bytecode可以靈活更新,甚至可以根據設備信息生成唯一加密算法。
最后,我建議核心點的協議采用一些二進制的序列化協議,這樣能增加分析的難度。
注:本文根據大會主辦方提供的速記整理而成,不代表CSDN觀點。
2017看雪安全開發者峰會更多精彩內容:
- 2017看雪安全開發者峰會在京召開 共商網絡安全保障之策
- 中國信息安全測評中心總工程師王軍:用技術實現國家的網絡強國夢
- 興華永恒公司CSO仙果:Flash之殤—漏洞之王Flash Player的末路
- 中國婚博會PHP高級工程師、安全顧問湯青松:淺析Web安全編程
- 威脅獵人產品總監彭巍:業務安全發展趨勢及對安全研發的挑戰
- 啟明星辰ADLab西南團隊負責人王東:智能化的安全——設備&應用&ICS
- 騰訊反病毒實驗室安全研究員楊經宇:開啟IoT設備的上帝模式
- 綠盟科技應急響應中心安全研究員鄧永凱:那些年,你怎么寫總會出現的漏洞
- 騰訊游戲安全高級工程師胡和君:定制化對抗——游戲反外掛的安全實踐
- 綠盟科技網絡安全攻防實驗室安全研究員廖新喜:Java JSON 反序列化之殤
- 阿里安全IoT安全研究團隊Leader謝君:如何黑掉無人機
總結
以上是生活随笔為你收集整理的自由Android安全研究员陈愉鑫:移动App灰色产业案例分析与防范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinksns php7,centos
- 下一篇: thinksnsv4.6运行php,社交