iOS安全测试-KeyChain

Keychain简介

根据苹果的介绍,iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个在所有app之外的sqlite数据库。

keychain可以说是系统里唯一可以做到安全可靠存储应用敏感数据并且可以在应用卸载或重新安装时仍然保留其数据的地方。当使用itunes进行数据备份时,每个应用程序在keychain里的数据都会得到备份,而且备份的数据是经过加密的。

虽然keychain的访问有权限控制,但是,在越狱的设备上,是可以查看到所有的keychain存储数据。所以在使用Keychain存储用户敏感信息(如 access_token, password等)时,最好还是要加密。

获取Keychain数据

iOS越狱

需要获取keychain数据文件必须要越狱,iOS越狱教程请根据自己的系统版本来选择:爱思越狱教程 越狱之前切记备份重要资料,最好不要使用自己日常使用的设备越狱。

OpenSSH

越狱成功之后需要安装OpenSSH工具,iOS设备其实就是一个小型的Unix系统,由于苹果的封闭性,在不越狱的手机上,我们能操作的东西很少。如果想在ios设备上,通过pc直接执行shell命令,可以在ios设备(已越狱)上安装openssh服务器,通过pcssh连接过去。

打开Cydia直接搜索OpenSSH安装。如果搜索不到可以在软件源菜单中添加源,如雷锋源:http://apt.abcydia.com

abcydia

安装好OpenSHH后,可以使用爱思助手来打开SSH通道。
as_ssh

使用远程登录工具如:XshellsecureCRT输入上面爱思助手提供的地址端口和账户密码进行登录,登录之后可以查看到iPhone设备的文件目录。

1
2
3
4
5
6
klygteki-iPhone:~ root# ls -l
total 0
drwxr-xr-x 3 root wheel 96 Apr 20 2018 Application\ Support/
drwxr-xr-x 3 root wheel 96 Jul 21 16:53 Containers/
drwx------ 10 root wheel 320 Sep 12 2018 Library/
drwxr-xr-x 2 root wheel 64 Feb 27 2008 Media/

KeyChain数据库

所有存储在KeyChain中的数据,实际上是保存在一个keychain-2.db的数据库中。
该数据库位于/private/var/Keychains/目录下。

1
2
3
4
5
6
7
klygteki-iPhone:/ root# cd /private/var/Keychains/
klygteki-iPhone:/private/var/Keychains root# ls
Analytics/ caissuercache.sqlite3-journal ocspcache.sqlite3
Assets/ crls/ ocspcache.sqlite3-shm
SupplementalsAssets/ keychain-2.db ocspcache.sqlite3-wal
TrustStore.sqlite3 keychain-2.db-shm pinningrules.sqlite3
caissuercache.sqlite3 keychain-2.db-wal

更改权限

默认情况下,我们是不能都读取keychain-2.db数据库的,所以需要先赋予其可读权限,给keychain-2.db数据库可读权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
klygteki-iPhone:~ root# cd /private/var/Keychains/
klygteki-iPhone:/private/var/Keychains root# chmod +r keychain-2.db
klygteki-iPhone:/private/var/Keychains root# ls -l
total 7020
drwxrwxr-x 17 _securityd wheel 544 May 28 2018 Analytics/
drwxr-xr-x 2 _securityd wheel 64 Apr 23 2018 Assets/
drwx--x--x 6 _securityd wheel 192 Jul 22 04:57 SupplementalsAssets/
-rw------- 1 _securityd wheel 61440 May 9 16:15 TrustStore.sqlite3
-rw------- 1 _securityd wheel 0 Apr 20 2018 caissuercache.sqlite3
-rw------- 1 _securityd wheel 512 Jul 21 21:09 caissuercache.sqlite3-journal
drwx--x--x 3 _securityd wheel 96 Jul 22 11:14 crls/
-rw-r--r-- 1 _securityd wheel 1560576 Jul 21 11:06 keychain-2.db
-rw------- 1 _securityd wheel 32768 Jul 22 09:40 keychain-2.db-shm
-rw------- 1 _securityd wheel 1091832 Jul 22 10:44 keychain-2.db-wal
-rw------- 1 _securityd wheel 53248 Jul 21 10:51 ocspcache.sqlite3
-rw------- 1 _securityd wheel 32768 Jul 22 09:29 ocspcache.sqlite3-shm
-rw------- 1 _securityd wheel 1759272 Jul 22 10:58 ocspcache.sqlite3-wal
-rw------- 1 _securityd wheel 139264 Jul 2 12:03 pinningrules.sqlite3

查看KeyChain数据

keychain-2.db拷贝到桌面,然后使用DB Browser for SQLite即可查看数据内容。

1
2
3
4
C:\Users\Shuqing
λ scp root@127.0.0.1:/private/var/Keychains/keychain-2.db C:\Users\Shuqing\Desktop
root@127.0.0.1's password:
keychain-2.db 100% 1716KB 20.2MB/s 00:00

参考资料