參加 HITCON 2011 (Hacks in Taiwan Conference 台灣駭客年會), 學習到不少有趣的東西.
對於 Android 的認識, 經過 Thinker、Jserv 的解說, 對於程式開發會很有幫助. 🙂
HITCON 2011 筆記
先把現在還記得的寫下來, 今年的主題主要是 防毒軟體 + Sandbox + 雲端, Android, APT (Advanced Persistent Threats, 進階持續威脅) 等.
APT (Advanced Persistent Threats, 進階持續威脅)
- 簡單講, 就像在看電影, 一連串的事件都是有 原因/因果 的.
- Xecure Lab.
- APT: 有計劃, 有組織, 有針對性的網路間碟活動.
- APT 通常針對 政治, 軍事... 等重要資料, 有計劃性的入侵行為.
- APT 必須要看一系列的事件, 而不是單一的攻擊事件. (一群事件的處理)
- APT-Deezer - 線上快篩服務 快速檢驗是否為 APT 惡意文件 (使用數學模型 - Rough Set Theory 描述 APT 的 Grouping)
- APT 惡意郵件不能只是做一般病毒信件處理而敷衍過去.
Android 加密 與 逆向工程
- apktool: http://code.google.com/p/android-apktool/
- dex2jar http://code.google.com/p/dex2jar/
- Jad / jd-gui java.decopiler.
- smali http://code.google.com/p/smali/ - 推薦
- Dalvik opcode list
- DexOpt (vertify and optimzie all of the classes in the DEX file)
- 應用程式會走 JDWP 的 Protocol, 所以使用 此 Protocol 來抓取資料.
- adb forward tcp_29882 jdwp:291
- DDMS: Dalvik Debug Monitor Server - 圖形化的工具, 比 adb 易懂.
- Android 執行檔 - DEX, Bytecode (0~255)
防毒軟體 + Sandbox + 雲端
- MD5 變形
- 自我膨脹, 自動把照片、影片都拉進此文件, 讓上傳雲端檢查速度變慢.
- Sandbox 本身是個好防護, 但是被破解的話, 嚴重性更大
投影片: HITCON 2011 投影片下載
APT Secrets in ASIA - 亞洲的 APT 奧義 - Anthony Lai
- http://blog.xecure-lab.com
- http://www.chroot.org/
- APT: 有計劃, 有組織, 有針對性的網路間碟活動.
- APT 通常針對 政治, 軍事... 等重要資料, 有計劃性的入侵行為
- RSA SecurID token 被偷 2011/3/18
- DoD: APT 偵測與防護是資訊戰基石
- 駭客喜歡攻擊立委的秘書, 都是他在幫忙看信.
- APT 是多種面向攻擊路徑
- APT(有組織有計劃的間碟活動) vs Crime-Group (大規模散步惡意程式以竊取個資)
- RAT: 後門程式
- APT Mail = Document Exploit + Malware
- APT 最常被觀察到的活動(Targeted-Attack Email): Phishing mail(騙 id/pw), Malicious script(Web mail Hacking 探測環境), Drop Malware
- 樹大有枯枝, 人多有白痴
- APT 必須要看一系列的事件, 而不是單一的攻擊事件. (一群事件的處理)
- 分析 APT 樣本中的行動與武器特徵, 找出 APT 駭客集團的特徵與習慣
- 不僅只分析 Malware 特徵, 也要包含 Exploit, C&C Network, 原始攻擊的 Email, 被攻擊者的背景分析
- 使用數學模型 - Rough Set Theory 描述 APT 的 Grouping
- 樣本分析: Static Approach 根據檔案格式取出特徵進行比對
- Dynamic Approach
- 系統分析的難題: 加密, 遇到 Sandbox 不執行, 5分後, 1周後才執行
- 取出 特徵組出 APT Attributes
- Document -> Xecute Engine -> APT Attributes -> APT Groups -> APT Taskforce Databse
- http://contagiodump.blogspot.com/ - 這個網站有很多 APT 的樣本
- 公開且開放, 而且可以重複驗證.
- Top 3 APT Taskforce Groups: C&C Taiwan 28.81%, US 11.85%, HK 8.47%, China 6.78%, Canada 6.78%.
- APT-Deezer http://aptdeezer.xecure-lab.com - 線上快篩服務 快速檢驗是否為 APT 惡意文件
- 目前支援 DOC, PPT, XLS, PDF, RTF
- COMODO 簽章被偷
- APT 惡意郵件不能只是做一般病毒信件處理而敷衍過去.
- 攻擊事件將一再發生.
Android 應用程式逆向工程提示 (Android Application Reversing Essence) - Jserv
- Practice of Android Reverse Engineering
- ODM, 逆向工程, 拿到 Source code 的時間, 比預期還要久.
- 產品出貨, Source code 還沒拿到.
- 後製處理 做 optimization
- 我的字典裡沒有放棄
- 開發流程, Reverse Practice, Real world tasks
- unzip xxx.apk - AndroidManifest.xml, resources.arsc, classes.dex, lib/armeabi/libangrybirds.so (JNI)
- META-INF/MANIFEST.MF - sha1
- android-apktool
- - apktool d xxx.apk - 將 binary 轉乘 xml
- - adb logcat -c
- - adb install -r xxx.apk
- - adb logcat
- DexOpt (vertify and optimzie all of the classes in the DEX file)
- adb shell am start -e debug true -a android.intent.action.MAIN -c android.intent.category.LUNCHER -n org.jfedor.frozenbubble.Fz...
- Binder Driver (/dev/binder)
- adb shell dumpsys | grep -i bubble
- Activity Manager - 看的到的叫 Activities, 看不到的叫 Service.
- ANR (Application Not Responding) - 多久系統沒有回應, 就沒辦法再追蹤
- Android is Multi-thread.
- use JDB to Trace Android Application.
- JDWP: Java Debug Wire Protocol
- 應用程式會走 JDWP 的 Protocol, 所以使用 此 Protocol 來抓取資料.
- - adb forward tcp_29882 jdwp:291
- > threads - 看到目前系統的 thread.
- DDMS: Dalvik Debug Monitor Server - 圖形化的工具, 比 adb 易懂.
- - hierarchyviewer: Traverse widgets, 可以邊看畫面, 邊逆向追蹤.
- - Decompile / Disassembly
- - 跳過某些檢查.
- 工具
- - apktool: http://code.google.com/p/android-apktool/
- - dex2jar http://code.google.com/p/dex2jar/
- - Jad / jd-gui java.decopiler. ..
- - smali http://code.google.com/p/smali/
- - 推薦 smali .
- smali 使用
- - mkdir workspace smli-src
- - cd workspace
- - unzip *.apk
- - 程式碼會放在 classes.dex
- - bin/baksmli -o smali-src workspace/classes.dex
- - R$string.smali - R: resource
- - grep "\.method" org/jfedor/frozenbubble/LevelManager.smali
- - 修改 constructor
- - super: 他繼承誰
- - 修改後, 用 smali 重開, 再重包
- Tasks
- - Tasks - ODEX (Optimized DEX), JNI - JNIEnv, Native Activity, Key signing.
- - http://www.androidengineer.com/2010/07/optimizing-obfuscating-and-shrinking.html
- 如何避免 Dex 被逆向工程的風險
- - 綁 Sense UI, 綁平台
- - 把程式的一部分功能放到雲端.
- http://jserv.blogspot.com/2010/05/android.html
Android 執行檔注入與資料防護 - Thinker
- code injection and data protection
- 誼智科技
- 沒有完全安全的系統 (no safe system)
- DroidDream
- 偵測 (detect & defense) - virus / malware scanner
- 避免 (avoid) - 沙箱 (sandbox)
- FAT 是沒有權限的, 所以 Android 在 SD Card 上是很難顧及安全性的.
- 工具注射 過濾和編碼
- 針對 檔案, DB, 網路存取做加解密, 將應用程式關在一個安全環境, 將 sandbox 反過來應用.
- Android 執行檔 - DEX, Bytecode (0~255)
- 執行檔格式: $(ANDROID_TOP)/dalvik/libdex/DexFile.h
- Add / Inject New Classe: ClassDef, ClassData, Field, Method
- 有效隔離企業網路 - 注入程式碼: Wrap file I/O, Wrap network I/O, Wrap database access
- - Project: paraspace, hg clone http://hg.assembla.com/paraspace
- - file I/O (done), Network I/O (T.B.D), Database (T.B.D)
- - 加密的 key 目前是 embed 到執行檔裡面.
- - Reference: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html , dalvik/libdex of Android, paraspace
- mapOffset
- - python codedump.py hello.dex
- - 解開 apk, 取出 dex file, 在 redirect 加工.
手機見識技術及實務分享 - 黃敬博 [email protected] 鑑真數位有限公司
- Smart phone 會遠超過 PC
- SIM / Handset / Memory Card
- Handset - 手機裡面的記憶體.
- Android 底層的 Driver 都不一樣.
- 手機畫面, 按一下拍一張. XD
- Manual Extraction, Logical Analysis, Hex Dump, Chip-Off, Mico Read
- Physical Extraction Tool: XACT
- live boot for mobile + dd
- Remote wipe
- wipe iphone key 就解決了.
- 將訊號遮蔽, 防止去 mobile me 把 key wipe 掉.
- Consolidated.db - GPS 記錄所有軌跡.
- use XRY map to Google Earth.
- Android JB, Super One Click
- 影片 Root 教學
- Full NAND Backup - Recovery ROM
- decode dd 出來的 DMG, 如何讀取. EnCase V7 Mount
- 有預算和沒有預算的推薦軟體.
- 於 ppt 倒數第二頁
- XRY 會把座標也都取出來, 所以可以用 Google Earth 讀取畫出來.
- iPhone - GPS 每 5分鐘定位一次.
- 有 Budget: XRY Office Complete, UFED _ Physical Pro, EnCase
- 沒有 Budget: XACT (Free downloaded from XRY), iFunbox / SuperOneClick, SQLite / Plist Editor, FlashBox
- iPhone 4.3.2 前 GPS 打卡是 unLimit, 4.3.3 以後是有 Limit 的.
- iPhone 記錄在 Consolidated.db - 砍掉這個就可以了.
- 需要 JB
Reversing Android Malware - yomuds
- MyCERT, CyberSecurity Malaysia
- Infecting legitmate apps
- - Mod app with malicious code (Geinmi, DreamDroid, ADDR)
- - Upload to "Market" or 3rd party hosting
- Exploting Android's (core/apps) bugs
- Fake apps - DreamDroid's removal tool
- Reversing Android Malware
- APK - Can extract .DEX file.
- Reversing and interactive debugging is possiable - ADB
- Building Process: *.java -> javac -> *.class -> dx (dexer - Dalvix's format) -> *.dex class
- Reversing Process: *.dex class (Disassembler: Baksmali / Dedexer / undx -> *.class -> *.java
- Tools: Dedexer, Baksmali, Undx, Dexdump (dumping *.dex file, from Android SDK)
- Assembler - to convert to original Dalivik VM bytecode (smali)
- dex2jar
- Android Manifest.XML - Permission request, Entry poing
- 行為都定義於此.
- Tracing function calls: XREF
- Dalvik Bytecode - http://android.git.kernel.org/?p=platform/dalvik.git;a=tree
- http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
- (Based on Gabor's RE on .dex bytecode)
- .class: public final com/xxx/xxx (a class file)
- Case study
- DreamDroid
- udevRoot
- adbRoot
- RE #2: GoldDream
- 竊取資訊: SMS, Phone(call) activity
- Files: /data/data/com.gamelio.DrawSlasher/files/zjphonecall.txt, zjsms.txt
- Botnet capability: Send sms -> Get task from server -> Call phone number -> Get value from server -> Start service -> Upload file
- RE #3: ZeusDroid
- Part of bigger financial malware package: Zeus
- ZITMO
- just steal mobile banking SMS only.
- Issues
- Decompiling - convert native Dalvik to Java, Dex2jar
- Conclusion
Current Trends in Web Security Attachs and Best Practices to Stop Them - M86 Security, Terry Leung
- Malware: 1. USA (3x%), 2. China
- Web Crimeware
- Exploit Kits: Neosploit, Phoenix, Blackhole, Incognito, Eleonore, Bleeding Life, SEO Sploit, CrimePack, Intoxicated, Siberia
- Web2.0: Creating a Fertile Ground for Attachks
- 把 Facebook 當 msn 使用.
- 54% Attachks 在 24hr 後, 就變種了.
- AV scanning.
- URL filter.
- Real-Time Code Analysis - Fetch Code 產生的動作.
- Dynamic Malicious Code - 每次連過去看到的 Code 都是不一樣的, 所以 AV Scanners 很難抓到.
- 解編碼, 看這些程式到底是做哪些事情, 虛擬執行, 依照結果來看是否是有問題的 Code.
- Real-Time Content Analysis - malicious PDF file.
- Real-time Code Analysis - 將 Code 分類, 執行會做什麼事情, 將有問題的 Script decompile 並移除.
- Effective Security Strategy: Anti-virus scanning (AV), URL filtering, Real-time code analysis
- m86security.com
針對性惡意程式攻擊趨勢 - Nart Villeneuve (TrendMicro)
- Trends in Targeted Malware
- FakeAV
- Affiliates (PPC)
- GhostNet
- ShadowNet
- 使用 res:// protocol.
- PDF load iframe.
- C&C: Command and Control
Escaping From Auto Sandboxes - MJ0011(鄭文彬) - 360安全衛士
- [email protected]
- Windows kernel
- 系統級沙箱弱點及逃逸技巧
- 系統級沙箱: 隔離可疑程式或易受攻擊的程式
- Api Hook
- 沙箱中惡意程式逃逸後的安全問題: 比普通惡意程式更嚴重, 虛擬化可能使其他防禦機制失效
- Avast!沙箱弱點和逃逸: 進程行為防護可被繞過
- SSDT Hook: 參數檢查的疏漏, BSOD Hook
- 沙箱的 SSDT Hook 中, 由於要改寫訪問資源的最終路徑, 參數檢查疏漏將可能導致內核任意位址寫入漏洞, 沙箱中任意許可權進程可以直接在內核態運行代碼
金山雲體系
- 10大病毒集團, 產業鏈
- 哪個集團丟出來的病毒, 知道是哪個集團後, 就知道大概會有多少人中毒.
- 黃飛鴻集團 - 色情播放器
- 產業鏈的特徵自動提取系統, 假日休不休息. XD
- 春節休息, 其他假日他們比我們忙.
- 邊界防禦
- Browser, IM, Download, MailBox, P2P, USB, Intranet 與外部溝通的機會, 這些都會做邊界防禦的 Scan.
- 主動防禦
- 明明知道有毒, 但是還是要執行 - 用戶的需求是擋不住的. XD
- 惡意文件: 色情播放器, 外掛, KeyGen, ebook
- 金山看片不中毒++
- 金山外掛運營 - 真的去玩, 沒有用會通知使用者. XD
- 金山沙箱 (KeyGen...), 安全沙箱
- 一鍵雲查殺 - 活體查殺, 重開後還活著.
- Boot - 非白即黑
- 99秒雲鑑定
雲安全體系下的安全技術對抗 - 張文君 (Junzz)
- 雲對抗 - 手法 -- 把網路斷線就好了.
- 膨脹自身 - 讓病毒上傳上去要很久, 就會有時間差可以做事.
- MD5 變形
- BootKit, Bat, Vbs, MSi
- 斷網 - Script, 修改 DNS, route, IP組, TcpEntry, 增加 IP, LSP, Hook TCP/IP, NDIS中間曾
- 切斷 Client 雲端
- 切不斷的話, 修改雲端返回結果.
- QvodPlayer.exe
- Hook TCP/IP
Wargame
- arp -s 10.0.15.1 00:50:56:11:22:33
Hi Tsung sirs
一件事不知能否請教?
目前我正在寫一各android的功能叫onKeyDown
我想要在長按音量鈕(>3秒)後能夠啟動一各class(在下面的程式碼中我先以toast代替這各class)
由於要能夠長駐背景
所以我把偵測長按音量鈕的程式碼放在service裡面
不過程式執行到onKeyDown()這一段沒有反應,
我還在onkeydown()後面放了一各ff()測試,這ff()是會被run然後跳出"測試ff是否被執行",
這代表在我的程式碼中,onKeyDown()無法執行
可以請教您這是什麼原因嗎?
謝謝
Jimmy
===========================================
package com.myvoulume;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.view.KeyEvent;
import android.widget.Toast;
public class MyVolumeBackground extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate(){
super.onCreate();
Toast.makeText(this, "On Create...", Toast.LENGTH_SHORT).show();
}
public void onStart(Intent intent, int startID){
super.onStart(intent, startID);
Toast.makeText(this, "On Start...", Toast.LENGTH_SHORT).show();
onKeyDown(startID, null);
ff();
}
public void ff(){
Toast.makeText(this, "測試ff是否被執行", Toast.LENGTH_SHORT).show();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_VOLUME_UP){
Toast.makeText(this, "按下了上音量鍵", Toast.LENGTH_SHORT).show();
return true;
}else if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){
Toast.makeText(this, "按下了下音量鍵", Toast.LENGTH_SHORT).show();
// return true;
}
return true;
}
public void onDestroy(){
super.onDestroy();
}
}
===========================================
我是不太確定原因是什麼, 畢竟我沒寫過你講得這種.
但是我似乎有看到一點點怪怪得, 不知道對錯, 您參考看看.
public 有 "KeyEvent event"
在下面得判斷, 為何是用 KeyEvent.KEYCODE_VOLUME_UP ?
是否應該用 event.KEYCODE_VOLUME_UP?
Dear Tsung sir
thank you for reply,
用KeyEvent.KEYCODE_VOLUME_UP因為這是KeyEvent classes中的方法,如下http://developer.android.com/reference/android/view/KeyEvent.html
,另外,您知道在背景偵測長按電源鍵的方法嗎?
謝謝你阿
呃, 這個我也不知道耶. Orz.