iOSSecAudit:一个iOS APP安全审计工具

原文最早发表于freebuf,我是原作者本人,原文链接

0×00前言

App安全审计对于安全人员是一项苦逼的工作,但对于厂商却非常重要,因为App属于客户端产品,一旦出现漏洞由于更新推送需要时间、且新版本更新率等原因,导致其不能像服务端程序那样很短时间内修复,对于App的漏洞应该尽量控制在发布之前发现并解决。

目前世面已有的漏洞扫描工具还远没有达到替代人工审计的地步,无法解放劳动力;然而App安全审计经常需要安全人员在手机端和pc端来回切换操作,造成大量而又毫无意义的重复劳动,如果没有积累、没有总结就会让这项工作变得无味,而且对审计人员的能力提升非常小。

年底,我写了个iOS App审计工具,用于辅助人工审计,这个工具不是漏洞扫描器,旨在简化或替代安全审计中的各种乱七八糟的繁琐操作,将所有的工作合并在一个shell中进行,免去来回切换shell的过程。也算是帮忙建设移动端工具链了。

0x01工具介绍

相对于Android,iOS上的安全问题要少很多,笼统的可以分为本地和网络两大块,网络端已有burp suite和fiddler等非常好用的工具,因此这个工具主要是针对本地问题。

下面以一个简化的安全审计步骤来介绍如何使用该工具。

一般来说iOS App安全审计只需要拿到一个ipa包就够了,能拿到源码当然更好,这时候可能连ipa的bundleID都不知道,甚至都没签名;还有更坑的是告诉你一个应用的名字,让你自己去App Store上下载(嗯,目前没遇到要自己付费下载进行安全审计的情形)。

1.1使用环境

开发环境:Mac OS X with python2.7

测试设备:iPhone4 with iOS6 & jailbreak;

iPhone5 with iOS8& jailbreak;

iPhone5s with iOS9& jailbreak;

目前没在Linux和windows下测试过,因为我太懒了……而且我也不建议在Linux或windows下进行iOS安全研究。最最最重要的是,该工具的部分功能仅支持Mac OS X。

1.2安装前的一些命令

启动工具,命令为pythonmain.py,启动之后如图1。



该工具是建立在ssh连接上的,通过ssh连接执行命令并获取结果。因此首先必须连接手机设备,连接命令有两个:usb和ssh。使用usb命令连接必须先使用usb线连接pc和手机,ssh命令连接只需要知道手机的IP地址就好了,不过我还是强烈建议使用usb连接,网络连接有的时候会很卡很卡。连接命令的使用如图2。


使用help或help [cmd]命令可查看所有命令,以及命令介绍、使用说明、使用举例,如图3。

图 3 help命令

如果ipa未签名,首先使用resign命令对ipa文件进行签名(当然就算这个ipa是已经签名过的,这个命令也会对其进行重签名),如图4。要用自己的证书进行签名当然得有自己的证书,这里多提一句,关于iOS的签名机制已经有文章讲的非常透彻了,比如:http://objccn.io/issue-17-2/

图 4 重签名

如果在审计的过程中需要注入一个dylib到ipa文件进行测试,可以使用命令dlinj,使用方法如图5。

图 5 注入dylib

注入之后肯定是需要重签名的,不然是安装不上去的,当然,对于我这种懒人,我一定会做一个命令把注入和重签名合并在一起,就是dlini命令,如图6。

图 6 注入并重签名

好的,扯了这么多,终于可以安装ipa了,安装命令是iipa,使用示例如图7。

图 7安装ipa

当然,对于我这种懒人,我一定会做一个命令把注入、重签名和安装合并在一起,就是dlinji命令,如图8。

图 8注入签名安装

1.3获取应用信息

安装好ipa之后,开始获取应用的一些信息,比如bundleID之类的,命令la可以列举所有第三方应用,如图9,从这里应该能看出自己手机上哪个是刚安装的应用吧,如果真看不出来,那就安装前后都用la命令对比下吧。

图 9 列举第三方应用

确定了bundleID,就好比打枪有了靶子,又好比打飞机有了飞机……诶,扯远了……然后咱就可以分析应用的binary文件,如图10;获取应用的详细信息了,如图11。

图 10粉笔binary
图 11获取应用详细信息

说明:ab命令后面没有跟bundleID,是因为工具对bundleID做了缓存,如果某个命令需要bundleID但却没有输入,则会使用上一次使用的bundleID。

1.4真正的审计

一般来说,我建议首先进行网络端的各种安全测试,不管是中间人也好,重放攻击,xss,爆接口,验证码接口短信轰炸啥的都好,等网络端的所有测试完成之后,这个应用的大部分功能都已经使用过一遍,肯定会在本地应用目录生成一堆的文件,这时候再做本地的安全测试比较科学。

比如,我可以使用las列举该应用的所有存储文件路径,如图12,目前仅发现db、sqlite3、plist文件。

图 12 列举所有存储文件

再比如,我设置了一个密码,我想看看应用有没有在本地明文存储这个密码,可以使用gs命令对该应用所有存储文件进行特征字符搜索,如图13搜索特征串字符“DTSDKName”。

图 13搜索特征字符串

图12发现了很多的文件,我想查看某个plist文件的内容,或者是在所有plist文件中搜索特征字符串,如图14、15。

图 14查看plist文件内容
图 15 plist中搜索特征字符串

对于db文件,可以完成类似sqlite3的所有功能,如查看db文件内容、列举db文件所有表名、查看单个表的内容、搜索特征字符串等; 对于keychain,一样也有增删改查的功能,可以dump keychain所有条目,对单个条目进行编辑等,限于篇幅,这里就不截图了,各位看官自己试试就好。

对于设备可以证书管理,有安装证书、列举所有证书如图16、删除证书如图17、导入证书如图18,导出证书如图如图19等。

图 16 列举证书

图 17删除证书

图 18导入证书

图 19导出证书

当然啦,对于某些有怪癖的选手……哦,对不起,是对于某些有特殊爱好的安全从业人员,我还提供了打包下载整个应用目录、打包下载应用所有存储文件的功能,如图20、21。

图 20打包下载应用

图 21打包下载所有存储文件

当然,对于我这种懒人,我一定会……诶,这话好耳熟……我做了一个超级贴心的功能,就是懒人模式,做一些简单配置,就可以一个命令把上面几乎所有的命令搞定了……如图22、23(在使用该功能之前,请先对globals.py的lazy mode区域进行配置)。

图 22配置

图 23懒人模式

1.5其他贴心功能

比如动态监视pasteboard,如图24。

图 24监视paste board

针对只给一个应用名,自己去AppStore下载的这种大坑情形,我们强势推出了dump ipa、dump binary的功能,如图25、26。

图 25 dump ipa

图 26 dump binary

还有啥了,让我想想……

嗯,对了,为了不让大伙用小手去手机上点开一个应用,还可以用命令远程启动一个app,如图27。

图 27远程启动应用

dumpbinary之后,多半这个binary是fat头,你还可以用nonfat命令处理一哈。

还有好多功能,比如端口映射、远程调试应用、文件上传下载、class dump、weak class dump、获取应用pid、获取panic log啥的,有点多,我实在不想写了,因为我太懒了,各位看官自己去折腾吧……

0×02最重要的事情

现在来说最重要的事情,这个项目已经开源了,开源地址:https://github.com/alibaba/iOSSecAudit

如果各位小伙伴在使用的时候发现bug怎么办?

1.自己改改得了(强烈建议

2.直接在github项目提issue(不推荐)

3.联系我的gmail邮箱,地址在图1里面(不推荐)

4.微博艾特我:@ylxz幽林晓筑(推荐粉我,但不推荐提bug)

5.艾特我:@Junejuly(推荐粉我,但不推荐提bug)

0×03写在最后

其实还有很多功能想做,但时间不太够(这是借口,其实还是太懒了),各位有想到啥好用的功能可以fork之后自己加上去,或者通过0×02章节的联系方式找我帮忙加,我有空会加上去(不过肯定没空的)。

我也知道某些代码写的很蠢,不过我就是懒的改,咬我啊。

你可能会吐槽这些命令太傻X,也真是太特么难记了,这一点我承认哈……所有命令都定义在globals.py文件里面,你可以进去改,想改成啥就改成啥,就这了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容