ken 发表于 2016-1-30 15:25:26

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

本帖最后由 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


何须执手问年华 发表于 2016-1-30 15:53:16

排版乱,差评,内容少,差评,鸣人头像,好评。

ken 发表于 2016-1-30 16:19:41

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

还没写完呢{:4_114:}

Rebirth 发表于 2016-1-30 17:42:12

这排版,我猜除了我之外不会有人从头看完{:5_117:}
页: [1]
查看完整版本: IOS应用安全(九):IOS文件系统和取证