有米iOS惡意SDK分析
0x00 前言
有米廣告平臺為業界領先的移動資訊服務提供商優蜜科技™所有,總部和研發中心設在廣州,在北京設立分支機構。有米廣告擁有核心技術及完整智慧財產權,並獲多項國家專利,在使用者特徵識別、精準投放、客戶端防作弊、廣告智慧投放等關鍵領域遙遙領先。有米廣告瞄準7億手機使用者,致力於為數以萬計的企業廣告主提供精準的產品營銷和品牌推廣服務,為應用開發者創造公正和優質的廣告收益。
網址是 https://www.youmi.net/
前不久SourceDNA的研究人員發現iOS平臺使用有米SDK的一些APP收集使用者隱私資料,主要包括以下四類:
- 使用者安裝在手機上的應用列表資訊;
- 在使用者執行舊版iOS時,收集裝置的平臺序列號;
- 在執行新版iOS時,收集裝置的硬體元件及元件序列號;
- 使用者的Apple ID郵箱。
在跟進過程中發現,sourceDNA在自己的微博中更新了說明,對是否獲取apple id做了解釋
https://sourcedna.com/blog/20151018/ios-apps-using-private-apis.html
我們Nirvanteam也對此進行了詳細的技術分析。
詳細過程開始分析如下
0x01 社工獲取iOS的SDK
目前網上不太好找這個SDK,而且有米也在努力更新SDK。
最後透過社工得到 SDK。
0x02 SDK細節分析
拿到SDK後直接 strings不能搜尋到URL的, 劫持包發現了URL然後分析發現URL都做了編碼。 URL如下:
http://ios.wall.youmi.net 主要是這個URL在傳送資料
http://stat.gw.youmi.net
http://au.youmi.net/offer/ios/offers.manifest
http://t.youmi.net
透過分析SDK 發現SDK透過大量的私有API。
私有API是指放在PrivateFrameworks框架中的API,蘋果通常不允許App使用這類API,因為呼叫私有API而在稽核中遭到拒絕的現象並不少見。但蘋果的稽核機制並不透明,許多使用了私有API的App也被稽核透過,包括Google Voice這樣的應用,一樣呼叫了私有API,也獲得了透過上架。甚至是蘋果的預裝App iBooks也被揭露使用了大量私有 API,致使第三方應用無法實現亮度控制和呼叫字典等類似的功能。
逆向sdk分析:
透過分析URL 去挖掘傳送的資料,sub_2DE18 函式主要獲取各種資訊,如下如:
1) 其中獲取序列號資訊程式碼:
IOServiceMatching("IOPlatformExpertDevice")
io_service_t IOPlatformExpertDevicev_ios_service= IOServiceGetMatchingService)(
addr_kIOMasterPortDefault,
"IOPlatformExpertDevicev");
CFStringRef strref = CFStringCreateWithCString(kCFAllocatorDefault, IOPlatformSerialNumber_v64, 0x600);//Creates an immutable string from a C string.
CFTypeRef SerialNumberAsCFString =
IORegistryEntryCreateCFProperty(platformExpert, CFSTR("IOPlatformSerialNumber"), kCFAllocatorDefault, 0) ;
if ( SerialNumberAsCFString )
{
CFTypeID typeid = CFGetTypeID(SerialNumberAsCFString);
if ( typeid == CFStringGetTypeID() )
{
[NSString stringWithString:SerialNumberAsCFString]; //獲得統序列號 5K152FX7A4S
}
}
2) 獲得各種裝置資訊主要透過下面函式獲取。
getinfo_from_devicename_and_togetdict_infosub_1EC88((DeviceName, dict_v8);
傳入需要獲取的裝置名稱和字典資訊來獲取資訊,裝置名用於獲取資訊,字典是需要獲取的資訊。 函式程式碼如下:
io_iterator_t iterator,iterator2;
IORegistryEntryGetChildIterator(result2,"IOService", &iterator);
io_iterator_t t = IOIteratorNext(iterator);
char name[20];
IORegistryEntryGetNameInPlane(result2,"IOService", name);
if([DeviceName isEqualToString: name])
{
CFTypeRef data;
IORegistryEntryCreateCFProperties_v25)(result2,
&data,
kCFAllocatorDefault,
0);
if(CFGetTypeID(data) == CFDictionaryGetTypeID())
{
…………
例如獲取裝置名稱如下:
- 電池 battery-id
- 攝像機 AppleH4CamIn
- iOS加速度感測器 accelerometer
- WIFI 資訊 wlan
- 藍芽資訊 bluetooth
- Device Characteristics TLC還是MLC記憶體 ASPStorage disk
- 充電次數 AppleARMPMUCharger
獲取裝置資訊後將資訊儲存到APP/Library/.XABCD/nidayue.dict
這個檔案中,當需要哪些資訊就從這裡讀取。
寫這個檔案是透過設定訊息函式來實現的。
void __cdecl -[ChargerClinkeredConcertedly catalogueChoraleAlamo](struct ChargerClinkeredConcertedly *self, SEL a2)
{
struct ChargerClinkeredConcertedly *v2; // [email protected]
void *v3; // [email protected]
void *v4; // [email protected]
v2 = self;
v3 = objc_msgSend(&OBJC_CLASS___NSNotificationCenter, "defaultCenter");
objc_msgSend(
v3,
"addObserver:selector:name:object:",
v2,
"approvementAviateBefitted:",
UIApplicationWillTerminateNotification,
0);
v4 = objc_msgSend(&OBJC_CLASS___NSNotificationCenter, "defaultCenter");
objc_msgSend(
v4,
"addObserver:selector:name:object:",
v2,
"consummatingCreators:",
UIApplicationWillResignActiveNotification,
0);
}
當安裝好APP 後,將要關閉APP或者按home鍵到後臺才會去寫檔案資訊。
3) 獲取UUID資訊
4) 廣告標示符(IDFA-identifierForIdentifier)
ASIdentifierManager sharedManager
ASIdentifierManager
單例提供了一個方法advertisingIdentifier
,透過呼叫該方法會返回一個上面提到的NSUUID例項。
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
5) 螢幕大小 960*640 獲取方式
[[UIScreen mainScreen] bounds]
[[UIScreen mainScreen] scale]
CGRectGetHeight
CGRectGetWidth
6) 手機裝置型號獲取,如下圖:
如上函式假設引數*servicename_a1傳遞值為hw.machine時,返回裝置硬體資訊為iPhone3,1
0x03 危害分析
透過分析發現SDK 獲得瞭如下資訊(測試用的iPhone4 iOS7.12):
裝置的WIFI資訊,
BSSID = "d0:fa:1d:20:a:f8"; 這個無線AP的MAC地址 SSID = "360WiFi-200AF8"; 一個無線AP的名稱。 SSIDDATA = <33363057 6946692d 32303041 4638>;
序列號資訊IOPlatformSerialNumber 5K152FX7A4S
電池資訊 battery-id
攝像機資訊
iOS加速度感測器 low-temp-accel-offset
藍芽資訊 wifi-module-sn
Device Characteristics TLC還是MLC記憶體
- UUID 資訊 a2ab842508133b62b680b5f9efa1cd51
- 充電次數 CycleCount
- 廣告標示符(
IDFA-identifierForIdentifier
)112fb7fe79fb4b7abf7a8e2ecaf57147
- __UDID資訊
7a32771c3adf2ad0564c3cb2d6920bc6ef9818b7
- 螢幕大小 960*640
- 手機裝置型號 iPhone3,1
- 透過檢查程式名, 安裝的APP BundleID表 , 程式模組中有沒有 iGrimace,org.ioshack.iGrimace等來檢查越獄狀態,越獄或者未越獄。
- 裝置名稱資訊如
D. vice:iPhone3,1 Jailbreak:1 OS:iPhone OS Version:7.1.2 Name:“panda”的 iPhone Model:iPhone
獲得這些資訊後透過 deflate 壓縮,再透過一次混合加密傳送出去。加密過程如下圖:
經過加密後將資料整合到URL上,發後透過POST方式傳送出去。
傳送加密如下
NSURLConnection_start {
cookie = "";
data = "";
host = "ios.wall.youmi.net";
method = GET;
mime = "";
url = "http://ios.wall.youmi.net/v3/reqf?s=1,5,8aa2a777452acf72,lyOU,1,bfDG9lgEuEfsVbWHLjyNZ-ESDTPXoRHqPZvukpsNiA9esOWBJTHnmelJwR4Mzd-tYlsbO1ROsjJAYN35ngXjNvMqdtMKUu2czR4hRqws3pU2UGYPMY6Z2Z-XGzxqhb9o1gJmB2cNMfczHb4Lu8ji7e5gOu-VQjLZiXCHEnMdls-OOyb5e2wtU-wsQtK.Q0v6S692Tr-Qp8k-YcYMJ47vqcsnCJJdzehyw4W-uee7pHmmJJU1.jxMeHEKT4BpL8flP338p3HPN5Zx5DoAzEmNRdlvPui7LZiHyOxL0r8adyZyJDkfAn8qE6PDBWmK1MUQ1jWa6ghwR4bPVQmrCMZcq6a1RUZzTJVKMQOokMswhs.JdRBIZMyyUrBuRf1IcHECc.Rj1jL1IdiwTdZaDLAzcLiKDMK3Pn222K160LVqG6XhnAzmw6gs.9.0yc.kZmbsUKZ7MZ5dCliJY8Izkk9A2SGpLI4zQ5MML5XPnobSVHlVQQ4tN4khqvAXVAJwLK91YdxrhFae1fNoi5BaCpj7fSnzRjF1j46Lygnv4DgT890oljclyzBgxbxBFrwuqV8tc1VpGqMvnX6sDlGVonzGOQnd9Yjwm3d3CE3PYwCSC1jafsTlw8AhwsyZ6E5gKqio4B-JlLavdFZF4xPfP4YeQngzZRAijN3QUXYT7ZVB5f5C9NdrDdrnmZTLx5B7jChaUbdI5sTs4zNXgaGUzFYOxmgxlxdxZGN6TSUMUS7k9SEygV0tAI-uARcuF1MSE.o76aoRR1JmtSPDSI7yPL1ooo2-CeLEOhQCzcgNrrkdx.ZL6LRyWkyOXcGISiaWKWFh0BAtzv2mFhBvArj7d1MsKMY57suR58v8rugnnEeFBtfNDKK7lQrZAKKfm7iGv-xmJ4f3DFtqo4OYOE0.Q8uSQblgnK24F3-x&p=1&n=100&nshw=1";
}
加密資訊解密如下:
{
3gst = "";
acc = "0.000000,0.000000,0.000000";
accos = 1000010000000000c4bc1300612003004e260900;
aicid = 47a903bcec614984acd1d0f88039d34a;
apn = None;
av = "1.0";
batsn = ae15041460753d1420;
bcsn = "";
bsi = "";
bssid = ec26cad6e5a;
btsn = "";
cc = CN;
chn = 0;
chrcy = "";
cid = "eIyoH-ZvBqO_f";
cn = 2;
dd = "Device:iPhone3,1 Jailbreak:1 OS:iPhone OS Version:7.1.2 Name:\U201cpanda\U201d\U7684 iPhone Model:iPhone";
ddn = "\U201cpanda\U201d\U7684 iPhone";
ext = {
attr = 195;
it = 1;
nshw = 1;
reqt = 0;
rtype = 1;
sat = 3;
wat = 3;
};
fcsn = "";
gyo = "0.000000,0.000000,0.000000";
hv = 2;
ifa = 112fb7fe79fb4b7abf7a8e2ecaf57147;
ifat = 1;
ifst = 3155986;
ise = 0;
jb = 1;
kernid = a2ab842508133b62b680b5f9efa1cd51;
lat = "0.00";
lc = "zh-Hans";
lon = "0.00";
mac = "";
mcc = "";
mmcid = "";
mnc = "";
mod = iPhone;
odfa = "";
oifa = 112fb7fe79fb4b7abf7a8e2ecaf57147;
osv = "7.1.2";
pd = 3;
pn = "feng.YouMiWallSample";
po = "iPhone OS";
rb = "-1.000000";
rt = 1445444547;
sh = 960;
smv = 1;
sn = 5K152FX7A4S;
spc = "";
ssid = "TP-LINK_2510";
sv = "5.3.0";
sw = 640;
tid = 005ecs1rcn0k1dltd0o8dngsruf;
ts = 0;
udid = 7a32771c3adf2ad0564c3cb2d6920bc6ef9818b7;
usb = 2;
user = "this is user";
vpn = 0;
wifisn = "";
}
0x04 結果及總結
透過對大量樣本掃描發現,共計掃描出了1035個蘋果APP受到感染。 具體對應版本資訊見另一份文件
1)有米SDK主要用於統計裝置型別的使用情況,這樣來對市場形勢作出判斷來獲取利益。
2)私有API如果透過靜態掃描的話意思不大,一般能透過蘋果稽核的,私有API都是經過處理的,所以檢查私有API要透過動態HOOK的方式去檢查。
3)一般有使用私有API的一般都是啟動的階段,所以動態掃描APP執行階段做成自動化也是可行的。
相關文章
- linux ddos惡意軟體分析2020-08-19Linux
- 惡意軟體Linux/Mumblehard分析2020-08-19Linux
- Zero Access惡意軟體分析2020-08-19
- Flappy Bird 惡意程式詳細分析2020-08-19APP
- 惡意程式-分析SYNful Knock 思科植入2020-08-19
- 暴風影音等數千款APP遭惡意SDK嵌入2019-04-25APP
- 惡意程式碼分析之行為分析及樣本收集2021-01-29
- 動態惡意軟體分析工具介紹2020-11-08
- 【筆記】【THM】Malware Analysis(惡意軟體分析)2024-08-11筆記
- 防止獨立IP被其它惡意域名惡意解析2018-03-21
- “偽萬年曆” Root Exploit惡意應用分析2020-08-19
- Oracle 惡意攻擊問題分析和解決(一)2020-09-06Oracle
- 【技術分析】惡意 SPL 代幣識別指南2024-10-11
- Cuckoo惡意軟體自動化分析平臺搭建2020-08-19
- 某殭屍網路被控端惡意樣本分析2020-08-19
- 群裡的一個惡意連結分析過程2021-01-19
- 惡意 Prompt 攻擊2024-11-01
- 針對資訊竊取惡意軟體AZORult的分析2018-05-29
- 巧用 iLocker 清理惡意程式2021-06-02
- 防止API被惡意呼叫2020-12-18API
- 《Android惡意程式碼分析與滲透測試》讀後感2018-06-21Android
- 惡意爬蟲?能讓惡意爬蟲遁於無形的小Tips2023-05-09爬蟲
- 網站被惡意篡改什麼原因?防止網頁惡意篡改的方法2024-10-08網站網頁
- VPNFilter 惡意程式能降級 HTTPS2018-06-08FilterHTTP
- covd惡意包攻擊案例2020-11-28
- iOS sdk打包知識2018-12-19iOS
- google谷歌廣告投放被拒登 提示有惡意垃圾軟體2020-03-21Go谷歌
- 色情病毒魅影殺手的惡意行為及黑產利益鏈分析2020-08-19
- Google:2021年Play Store禁止19萬惡意賬戶 刪除120萬個惡意APP2022-04-29GoAPP
- 卡巴斯基釋出輕量級工具,可檢測Pegasus及其他iOS惡意軟體2024-01-17iOS
- 擁有相同的起源的Android惡意軟體家族——GM BOT&SlemBunk2018-03-08Android
- Ubuntu Snap Store發現惡意程式2018-05-14Ubuntu
- 2020 惡意機器流量報告2020-06-16
- 惡意傳播之——社工+白+黑2020-08-19
- Apache 使用 .htaccess遮蔽惡意 User Agent2021-04-12Apache
- iOS/Android 影片編輯SDK2018-08-03iOSAndroid
- Cordova-iOS SDK封裝2019-07-31iOS封裝
- 使用UnhookMe分析惡意軟體中未受監控的系統呼叫問題2021-09-26Hook