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

2016-12-13 553448人围观 ,发现 4 个不明物体 工具

*本文原创作者:薛定谔的大表哥本文属FreeBuf原创奖励计划,未经许可禁止转载

0×00前言

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

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

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

工具介绍

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

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

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

1.1使用环境

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

测试设备:iPhone4 withiOS6;

iPhone5 with iOS8;

iPhone5s with iOS9

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

1.2安装前的一些命令

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

1.png

图 1 审计工具主界面

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

14813587989799.png!small

图 2 连接设备

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

14813588065192.png!small

图 3 help命令

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

1481358815895.png!small

图 4 重签名

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

14813588212926.png!small

图 5 注入dylib

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

14813588275663.png!small

图 6 注入并重签名

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

14813588352039.png!small

图 7安装ipa

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

1481358842621.png!small

图 8注入签名安装

1.3获取应用信息

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

14813588487805.png!small

图 9 列举第三方应用

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

10.png

图 10粉笔binary

11.png

图 11获取应用详细信息

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

1.4真正的审计

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

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

12.png

图 12 列举所有存储文件

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

13.png

图 13搜索特征字符串

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

14.png

图 14查看plist文件内容

15.png

图 15 plist中搜索特征字符串

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

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

1481358906155.png!small

图 16 列举证书

 14813589121009.png!small

图 17删除证书

14813589188544.png!small

图 18导入证书

14813589265505.png!small

图 19导出证书

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

14813589359400.png!small

图 20打包下载应用

14813589428340.png!small

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

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

14813589512599.png!small

图 22配置

14813589597224.png!small

图 23懒人模式

1.5其他贴心功能

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

14813589679521.png!small

图 24监视paste board

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

14813589735437.png!small

图 25 dump ipa

14813589795700.png!small

图 26 dump binary

还有啥了,让我想想……

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

14813589862939.png!small

图 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文件里面,你可以进去改,想改成啥就改成啥,就这了。
*本文原创作者:薛定谔的大表哥本文属FreeBuf原创奖励计划,未经许可禁止转载

相关推荐

这些评论亮了

  • HEHE 回复
    整个流程都没有说到一个很重要的条件:必须越狱后才可进行
    )16( 亮了
发表评论

已有 4 条评论

取消
Loading...

这家伙太懒,还未填写个人描述!

2 文章数 9 评论数 0 关注者

特别推荐

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php