发新帖

IOS应用安全(九):IOS文件系统和取证

[复制链接]
5080 3
本帖最后由 ken 于 2016-1-30 21:07 编辑

原文链接:http://resources.infosecinstitute.com/ios-application-security-part-10-ios-filesystem-and-forensics/#article

在这篇文章,我们来学习IOS文件系统的结构和在IOS系统中有哪些重要的文件。怎样从数据库和plist文件提取数据。应用程序怎样存放它们自己的数据在他们指定的目录(sandbox)又应该怎么提取它们。

在之前的文章,我们登录设备都是使用root权限来登录的。其实IOS还提供了另一个用户权限mobile。只不过mobile拥有被root更少的权限。而在IOS系统大部分的应用程序都是使用mobile权限运行的,Cydia和一些其他应用是使用root权限的,苹果的一些内部守护进程和服务也是运行在root权限下。我们使用命令ps aux可以很清楚的看到当前运行的进程和它们的用户权限。

如下图,在终端最左端,第一列是USER,显示的是该应用程序是以什么用户权限运行的。比如在这图中我们看到Cydia以root权限运行。 /Applications/AppStore.app/AppStore 是以mobile权限运行,而一些守护进程也可能以mobile权限运行而不是root权限。如 /usr/sbin/wifid。
其他的应用程序你也可以通过Cydia来安装让它可以以root权限运行。一般越狱后的设备,root和mobile的密码默认是alpine。
http://t.cn/RbBpXB7
如果你想让你的程序可以以root权限运行。你可以在Stack Overflow找到答案。

ssh连入你的设备,来到
/Applications目录,你可以看到.app结尾的文件夹。这些都是安装在你的设备的app。大部分是IOS预装程序。也有一些例外是通过其他途径安装的,如Terminal app就是通过Cydia安装的。

这里有一点值得注意。 /Applications内运行的应用不会在沙盒环境运行而 /var/mobile/Applications运行的应用运行在沙盒环境。
然而,除非指定该应用程序使用root权限,不然还是使用默认的mobile权限运行,也就是说应用程序使用mobile权限在在沙盒环境下运行

http://t.cn/RbBOL3L

所有从App Store上下载的应用都被保存在 /var/mobile/Applications/  目录。也包含一些使用installipa和其他源(如:Cydia)安装的程序,前面也说了,在这个目录的应用使用mobile权限在沙盒环境下运行。
http://t.cn/RbBWopb

从数据库收集信息


Aplle使用sqlite数据库来保存信息,这些数据库文件以.db或
.sqlitedb后缀结尾。许多功能的开发,如Core Data, NSUserDefaults等等,它们使用更低层次的操作来操作数据库文件。
这些数据库通常被用来提取指定应用或者系统的一些数据。包括但不限于呼叫历史、在应用保存的邮件
使用命令
find . -name  *.db 找到所有的数据库文件,熟悉linux命令的童鞋都知道,这条命令 . 代表从当前目录开始往下找,包括文件夹里的文件-name匹配要找的文件名。在这里,这条命令会从root路径开始找所有后缀为db的数据库文件。

http://t.cn/RbBHSZ7
上图打印出了这个设备的所有的数据库文件。

我在我的设备上安装有gmail应用,下图这个文件从文件名看很有可能是保存邮件的数据库,那到底是不是呢
http://t.cn/RbB8A9j
下面我们使用
sqlite client客户端来分析这个数据库文件,在这之前得确认在你的设备是否已经安装sqlite3客户端。使用命令 sqlite3 file_name来打开数据库文件。
http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/072913_1331_IOSApplicat8.png

执行命令后进入sqlite的交互模式,输入.headers on命令,这样我们就可以看到所有列值的头部值。使用 .table来查看数据库中所有的表项
http://t.cn/RbBRcKI
有几个表项看起很有趣,如
cached_contacts, cached_queries and cached_messages.  我们使用 select * from cached_messages sql查询语句来dump看看里面存放着什么数据。
http://t.cn/RbBRCNn
正如我们看到的那样,这个数据库文件存放的是email缓存。同样的,我们也可dump所有的SMS数据,SMS数据库文件存放在
/private/var/mobile/Library/SMS。
在这个dump出来的数据里,你可以看到
text Test message for ios security tutorial. SMS内容。
http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/072913_1331_IOSApplicat11.png

另一个例子是联系人数据库,存放路径在
/var/mobile/Library/AddressBook 。
http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/072913_1331_IOSApplicat12.png
你还可以看呼叫历史。数据库文件路径
/private/var/wireless/Library/CallHistory。
http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/072913_1331_IOSApplicat13.png


使用命令行工具来查看sqlite数据不够直观花费大量时间,对此,我们有一个更好的办法,将数据库文件导出到你想导出的位置。如下载
Address Book Sqlite database.来查看 Address Book数据。
http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/072913_1331_IOSApplicat14.png
我们可以使用GUI 的sqlite客户端来分析数据库。在这里我使用
MesaSQLite客户端
http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/072913_1331_IOSApplicat15.png


举报 使用道具

回复

精彩评论3

何须执手问年华    发表于 2016-1-30 15:53:16 | 显示全部楼层
排版乱,差评,内容少,差评,鸣人头像,好评。

举报 使用道具

回复 支持 反对
ken    发表于 2016-1-30 16:19:41 | 显示全部楼层
何须执手问年华 发表于 2016-1-30 15:53
排版乱,差评,内容少,差评,鸣人头像,好评。

还没写完呢

举报 使用道具

回复 支持 反对
Rebirth    发表于 2016-1-30 17:42:12 | 显示全部楼层
这排版,我猜除了我之外不会有人从头看完

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表