iOS/Malware(三)ikeymonitor间谍件分析
一、样本捕获
二、deb包
2.1 解包
文件名:ikeymonitor_3.9.0-51.deb
md5:376C77FC791CC7119247951D5CEDD52E
该文件为cydia的deb包形式,实则为压缩包,可使用tar解压:
tar xvf ikeymonitor_3.9.0-51.deb
(deb包是Debian系统的标准文件格式)
2.2 deb包格式
2.2.1 deb 文件是使用 ar 包装,包含了三个文件:
debian-binary - deb 格式版本号码
control.tar.gz - 包含包的元数据,如包名称、版本、维护者、依赖、冲突等等。 在dpkg 1.17.6 之后添加了对 xz 压缩和不压缩的 control 元数据的支持。[1]
data.tar.* - 实际安装的内容
其中,"*"所指代的内容随压缩算法不同而不同。常见的可能值为xz、gz、或bz2。有时也会使用lzma。
2.2.2 deb文件未打包之前目录
+- MyProgram
+- Applications
| +- MyProgram.app
| | +- Info.plist
| | +- MyProgram
| | +- icon.png
+- DEBIAN
+- control
其中,control文件可视为一个没有后缀的UTF-8,Unix编码,Unix/Linux换行符(LF)的一个文本文件,可用写字版进行编辑!
2.2.3 control文件夹
control.tar.gz解压后为一个control文件夹,里面包含三个文件:
control:这个文件主要描述软件包的名称(Package),版本(Version)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
postinst:主要完成软件包(".deb")安装完成后所需的配置工作. 通常, postinst 脚本要求用户输入, 和/或警告用户如果接受默认值, 应该记得按要求返回重新配置这个软件. 一个软件包安装或升级完成后, postinst 脚本驱动命令, 启动或重起相应的服务.
prerm:停止一个软件包的相关进程, 要卸载软件包的相关文件前执行
2.2.3.1 control
一些软件和作者的基本信息:
Author: Awosoft Technology <[email protected]> //作者
Maintainer: BigBoss <[email protected]> //cydia源
Name: iKeyMonitor keylogger for iPad/iPhone/iPod //程序名
Package: com.aw.mobile.ikm //包名
Conflicts: com.aw.mobile.ikm64, com.aw.mobile.ikm.customized
Section: Security //软件类型
Depends: firmware(>= 3.0), mobilesubstrate (>= 0.9.5000), zip(>= 2.0), com.rpetrich.rocketbootstrap
Version: 3.9.0-51
Architecture: iphoneos-arm //软件包结构
Description: reports keylogging, web history, screenshots & more
Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=ikeymonitorDp
Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=ikeymonitorDp
Sponsor: thebigboss.org <http://thebigboss.org>
dev: ikeymonitor
Installed-Size: 5312
Tag: purpose::extension, ios7support::1, ios8support::1
2.2.3.2 postinst
安装脚本,主要程序为/Library/Caches/.keycache/centerd
并利用launchctl来启动centerd守护进程(plist文件指定),/Library/LaunchDaemons目录下随系统启动
#!/bin/sh
chown root:wheel /Library/Caches/.keycache/centerd
chmod 755 /Library/Caches/.keycache/centerd
chown root:wheel /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
chmod 644 /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
/bin/launchctl load -w /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
exit 0
2.2.3.3 com.aw.mobile.ikm.centerd.plist
/Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
postinst里利用launchctl加载centerd进程
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.aw.mobile.ikm.centerd</string> //Label值,任务名,一般为plist文件名
<key>ProgramArguments</key>
<array>
<string>/Library/Caches/.keycache/centerd</string> //ProgramArguments值,需要执行的程序
</array>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>UserName</key> //指定程序运行用户为mobile
<string>mobile</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
2.2.3.4 prerm
卸载脚本,只需要去掉centerd进程的启动项plist文件
#!/bin/sh
/bin/launchctl unload /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
exit 0
2.2.4 deb包安装流程
三、样本分析
3.1 样本结构
.keycache文件夹为加载的资源
LaunchDaemons中即luachctl加载进程的plist文件
DynamicLibraries使用了三个MobileSubstrate的动态库:
keychain.dylib
MobileSafe.dylib
PreferencesEx.dylib
usr/bin中一个执行文件centerd,该文件与.keycache中的centerd为同一个文件
3.2 centerd分析
3.2.1 deb文件安装
先拷贝deb文件进手机:
scp ikeymonitor_3.9.0-51.deb [email protected]:/private/var/ikeymonitor.deb
ssh登陆手机:
dpkg安装deb包:
dpkg -i ikeymonitor.deb
3.2.2 动态分析
3.2.2.1 运行界面
该文件没有运行界面,是通过架设本地服务器,浏览器读取html文件进行设置
该样本使用Sun Answerbook HTTP server的web服务
3.2.2.2 调试log
xcode-window-devices查看log
测试中有用log信息很少,如开机即加载keychain.dylib
3.2.3 静态分析
3.2.3.1 入口,ida显示的信息更多,hopper比ida容易识别入口点
样本随系统启动,进程如下:
hopper或者ida皆可,该样本支持的cpu版本
不过同一代码下,ida显示的信息更多,如图hopper中为r0,ida则直接给出objc_msgSend函数:
objc_msgSend是Objective-C中传递消息用的
而在hopper中,则比ida容易识别入口函数entryPoint:
3.2.3.2 参数设置
设置的内容与动态运行时web页面对应
如下开始后进入Email、GPS设置:
3.2.3.3 Email设置
// IKMEmailManager - (void)sendEmailWithSettings:(id)
设置邮箱帐号密码等(上传数据用)
3.2.3.4 GPS设置
// IKMGPSTracker - (id)init
调用系统api,OBJC_CLASS___CLLocationManager来设置GPS
3.2.3.5 加密模块
样本使用AES256和base64来加密数据
3.3 Cydia Substrate
动态库释放到以下目录:
/Library/MobileSubstrate/DynamicLibraries
各dylib库都有一个对应plist文件,用来指定限制加载到特定程序中
dylib库执行时间在cydia启动后加载到对应目标程序中
与其他cydia库不同,样本的三组dylib都属于root用户
3.3.1 keychain.dylib(获取键盘记录)
plist:
{ Filter = { Bundles = ( "com.apple.UIKit" ); }; }
窗口和视图框架
该库hook了WKContentView类的insertText、 "setMarkedText:selectedRange:"方法:
NSNotificationCenter类的"postNotificationName:object:userInfo:"方法:
其中WKContentView是webkit中UI处理的代码,该库中用于获取键盘记录:
NSNotificationCenter则是消息通信机制,类似于android中的广播:
按键记录:
3.3.2 MobileSafe.dylib(主体)
plist:
{ Filter = { Bundles = ( "com.apple.springboard" ); }; }
桌面
该库hook以及添加了不少方法,主要恶意行为都在entry_point中添加到SpringBoard里:
样本获取到的信息都保存在~/Library/Keyboard/.Logs/文件夹下,并用plist文件记录:
3.3.2.1 恶意行为
一、截屏,图片保存在~/Library/Keyboard/.Logs/Screenshots文件夹下,~/Library/Keyboard/.Logs/screenshots.plist记录图片信息
二、浏览器历史记录
safari历史记录:
chrome历史记录:
三、键盘记录
四、短信记录
五、通话记录
<= ios7:
ios8:
六、whatsapp
七、GPS
八、远程控制面板:
远控URL:
登陆URL:https://amobilespy.co/
从介绍和功能上看,除了获取信息,还可以在设备丢失后远程清空数据
九、清空数据
3.3.2.2 其他
一、高级设置:
隐藏cydia、ftp设置
二、ftp上传信息
三、email上传信息,SMTP协议
获取email设置
四、架设本地web服务器
先将安装时路径/Library/Caches/.keycache里得所有文件拷贝进~/Library/Keyboard/.Logs里面:
然后架设本地web服务器
默认端口:8888
五、POST上传信息:
3.3.3 PreferencesEx.dylib(隐藏cydia)
plist:
{ Filter = { Bundles = ( "com.apple.Preferences" ); }; }
偏好设置
该库主要用于隐藏cydia,
修改~/Library/Preferences/com.apple.mobilesys.plist的某个键值来隐藏cydia
3.3.4 获取的信息
样本主要数据存储在 /User/Library/Keyboard/.Logs 文件夹下的plist文件里
gps信息不是很准确:
键盘记录只有一条safari的:
数个屏幕截图:
浏览器历史记录:
浏览器历史记录:
按键记录:
四、总结&流程图
该样本为商业间谍件,基于cydia开发,需要越狱后才能使用,安装无图标,设置界面在本地web页面,主要功能为获取键盘记录、短信/whatsapp聊天记录、通话记录、浏览器历史记录、随机时间截屏、GPS位置,可设置通过ftp、email上传信息,可远程设置启动/禁用监控以及清空设备数据等功能。
样本执行流程图:
0 评论:
发表评论