jb

keychain_Accounts3

帐号信息的分析以及清除

Posted by kunnan on August 12, 2018

前言

  • 1)本地数据攻与防

    • 存储方案的选择

    • NSUserDefault:一般用于存储小规模数据、业务逻辑弱的数据。

    • keychain: 苹果提供的可逆存储,因为有着只要app不重装系统、可以同步iCloud的特性,一般用来对用户的标识符或者一些需要加密的小数据进行存储。

    • 归档:主要原理是对数据进行序列化、反序列化操作后,写入、读出数据。方便便捷易使用,缺点查询、更改数据耗时耗性能。

    • 数据库:主要的有三种sqlite3、core data、realm

    • 系统键盘缓存

      • 我们打字在使用系统键盘打字时时,会出现提示,键盘一般会缓存这些提示字符串,缓存在手机的“/private/var/mobile/Library/Keyboard/xx-dynamic-text.dat”文件中,攻击者可以提取出来,出现频率最高的往往是账户名和密码。

        • en_GB-dynamic-text.dat
      • cat en_GB-dynamic-text.dat
        DynamicDictionary-5cantonciaocreateGeneratorhiiI'mIimoofflinePaymentNewSnsSThetheUuiuuuuuuuuuuuuuuuuuuuuuuuUuiuuuuuuuuuuuuuuuuuuuuuUuiuuuuuuuuuuuuuwwwZhangzhang发红包我是宝妈宝少爷之家babka我是iPhone:/private/var/mobile/Library/Keyboard root# 
        
         iPhone:/private/var/mobile/Library/Keyboard root# ls -lrt
         total 8
         drwxr-xr-x 2 mobile mobile 102 Apr 23  2017 completion-learning-dictionary-zh-Hans/
         drwxr-xr-x 2 mobile mobile 170 Apr 23  2017 PhraseLearning_zh_Hans.db.bundle/
         drwxr-xr-x 4 mobile mobile 136 Apr 23  2017 CoreDataUbiquitySupport/
         drwxr-xr-x 2 mobile mobile 102 Dec  5  2017 completion-learning-dictionary-zh-Hant/
         -rw-r--r-- 1 mobile mobile 256 Dec  5  2017 LearningSet_zh_Hant.plist
         drwxr-xr-x 2 mobile mobile 238 Dec  5  2017 zh_Hant-dynamic.lm/
         -rw------- 1 mobile wheel  293 Aug 11 10:29 en_GB-dynamic-text.dat
         drwxr-xr-x 2 mobile mobile 238 Aug 12 17:02 zh_Hans-dynamic.lm/
         drwxr-xr-x 2 mobile mobile 238 Aug 12 17:02 en-dynamic.lm/
                
      
    • 剪切板的缓存

      • 我们在使用剪切板进行操作时,iOS系统会缓存所操作的数据,如果数据涉及隐私,将会带来安全问题。如下图,iOS的三种剪切板和功能,其中系统级别的剪切板优先级最高。

      image

    * 注意:在获取剪切板内容时,总是先取系统的剪切板内容,若没有值才会取应用间的剪切板内容。所以在使用完剪切板时,我们在程序退出时,清空剪切板内容。
      
       ![image](https://wx3.sinaimg.cn/large/af39b376gy1fu71z74lmej218805fwh0.jpg)
    

    • 2)APP文件下的本地存储Documents、Library/Caches、Tmp

      • Documents: 保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。
      • tmp: 保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。
      • Library/Caches: 保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。
  • 数据库,一般存储在Documents路径下的特殊文件,格式一般为.db或者.sqlite,导出后使用特殊工具即可查看如DB Browser for sqlite 和 SQLiteStudio。

    • 我目前使用DB Browser for sqlite

本文重点讲解如何操作db ,获取和修改数据,达到一些特定目的。

I、/private/var/mobile/Library/Accounts/Accounts3.sqlite

ZACCOUNT

image

  • ZACCOUNT

    image

    •     const char *sql = “delete from ZACCOUNT where ZUSERNAME <> ""”;

      image

          const char *sql = "delete from ZACCOUNT where ZUSERNAME <> \"\"";
          
      

ZACCOUNTTYPE

image

image

II、/private/var/mobile/Library/Accounts/Accounts3.sqlite-shm

shm is an index file for wal

  • 使用SQLCipher进行整个数据的加密
  • 整库加密: 可使用第三方的SQLite扩展库,对数据库进行整体的加密。如:SQLCipher

    • 优点:对数据库整体操作,减少资源消耗。

    • 缺点:需要使用第三库。

    • usage

    • 加密之后的效果

      image

III、keychain_dumper:KeyChain数据的读取

Keychain是一个拥有有限访问权限的SQLite数据库(AES256加密),可以为多种应用程序或网络服务存储少量的敏感数据(如用户名、密码、加密密钥等)。如保存身份和密码,以提供透明的认证,使得不必每次都提示用户登录。在iPhone上,Keychain所存储的数据在 /private/var/Keychains/keychain-2.db SQLite数据库中。如下图:

3.0 /private/var/Keychains/

image

  • keychain-2.db                                                                                                                                                                                     

image

  • 当我们打开这个数据库,会发现如下图中四个表:genp、inet、cert、keys

    • 数据库内数据,大多数是加密的,Keychain的数据库内容使用了设备唯一的硬件密钥进行加密,该硬件密钥无法从设备上导出。因此,存储在Keychain中的数据只能在该台设备上读取,而无法复制到另一台设备上解密后读取。

      image

    • 一旦攻击者能够物理接触到没有设置密码的iOS设备时,他就可以通过越狱该设备,运行如keychain_dumper这样的工具,读取到设备所有的Keychain条目,获取里面存储的明文信息。具体方法是通过ssl让mac连接iPhone,使用keychain_dumper,导出Keychain

    • iOS系统的keychain 存储类型

      image

3.2 、使用theos 进行开发code ,获取数据

build
  • run script,赋予访问钥匙串的权限: keychain-access-groups

    /opt/MonkeyDev/bin/md --xcbp
      
    echo "$PROJECT_DIR/KCdumper/entitlements.xml"
      
      
    /opt/iOSOpenDev/bin/ldid -S"$PROJECT_DIR/KCdumper/entitlements.xml" "$TARGET_BUILD_DIR/$EXECUTABLE_NAME"
    
  • ldid -e

    iPhone:~/MonkeyDevBuilds/KCdumper root# ldid -e /bin/keychain_dumper
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    	<dict>
    		<key>keychain-access-groups</key>
    		<array>
    			<string>*</string>
    		</array>
    	</dict>
    </plist>
      
    
  • Keychain-Dumper-master git:(master) /opt/iOSOpenDev/bin/ldid

    usage: /opt/iOSOpenDev/bin/ldid -S[entitlements.xml]

    /opt/iOSOpenDev/bin/ldid -e MobileSafari

    /opt/iOSOpenDev/bin/ldid -S cat

    /opt/iOSOpenDev/bin/ldid -Stfp.xml gdb

Fix for recent iOS 11 JBs
  • Keychain-Dumper/entitlements.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    	<dict>
    		<key>keychain-access-groups</key>
    		<array>
    			<string>*</string>
    		</array>
    		<key>platform-application</key> <true/>
    	</dict>
    </plist>
      
    
usage
  • 将手机越狱,通过Cydia(越狱手机都有,相当于App Store)安装OpenSSH

  • 在mac终端输入: ssh root@(手机IP) 然后会提示输入密码,默认为alpine

  • 使keychain数据库权限可读: cd /private/var/Keychains/ chmod +r keychain-2.db

    •  /private/var/Keychains/

      iPhone:/bin root# ls -lrt keychain_dumper
      -rwxr-xr-x 1 root wheel 211584 Dec  7  2017 keychain_dumper*
      iPhone:/bin root# ls -lrt  /private/var/Keychains/
      total 4476
      -rw------- 1 _securityd wheel       0 Jan  1  1970 caissuercache.sqlite3
      -rw------- 1 _securityd wheel   16384 Dec  1  2017 TrustStore.sqlite3
      -rw------- 1 _securityd wheel     512 Jul 19 11:57 caissuercache.sqlite3-journal
      -rw------- 1 _securityd wheel   49152 Jul 26 10:26 ocspcache.sqlite3
      -rwx--x--x 1 _securityd wheel  274432 Aug  6 15:26 keychain-2.db*
      -rw------- 1 _securityd wheel   32768 Aug  6 16:34 ocspcache.sqlite3-shm
      -rwx--x--x 1 _securityd wheel   32768 Aug  6 16:35 keychain-2.db-shm*
      -rwx--x--x 1 _securityd wheel 1895232 Aug 10 14:30 keychain-2.db-wal*
      -rw------- 1 _securityd wheel 2274272 Aug 12 10:59 ocspcache.sqlite3-wal
          
      
  • 将下载的keychain_dumper可执行文件移到iPhone的/bin目录下

    • 输入命令:scp /Users/ice/Downloads/Keychain-Dumper-master/keychain_dumper root@(手机ip):/bin/keychain_dumper
    • 添加执行权限: chmod +x /bin/keychain_dumper
    • 解密keychain:/bin/keychain_dumper

II 、使用monkeydev 进行开发

  • https://github.com/zhangkn/KCdumper

  • iPhone:~/MonkeyDevBuilds/KCdumper root#

  • ldid

    ➜  Keychain-Dumper-master git:(master) ✗ ldid -S/Users/devzkn/code/jb/KCdumper/KCdumper/entitlements.xml /Users/devzkn/Library/Developer/Xcode/DerivedData/KCdumper-dldyptxafmjomrfzjyebxrbepxsh/Build/Products/Debug-iphoneos/KCdumper
      
    
  • scp

    ➜  Keychain-Dumper-master git:(master) ✗ scp -r /Users/devzkn/Library/Developer/Xcode/DerivedData/KCdumper-dldyptxafmjomrfzjyebxrbepxsh/Build/Products/Debug-iphoneos/KCdumper  usb2222:~       
      
    
  • dpkg -i

    iPhone:~/MonkeyDevPackages root# dpkg -i com.ldzspace.KCdumper_0.1-1_iphoneos-arm.deb
    (Reading database ... 4648 files and directories currently installed.)
    Preparing to unpack com.ldzspace.KCdumper_0.1-1_iphoneos-arm.deb ...
    Unpacking com.ldzspace.kcdumper (0.1-1) over (0.1-1) ...
    Setting up com.ldzspace.kcdumper (0.1-1) ...
      
    
  • MonkeyDevPackages

    iPhone:~/MonkeyDevPackages root# dpkg -c com.ldzspace.KCdumper_0.1-1_iphoneos-arm.deb
    drwxr-xr-x devzkn/staff      0 2018-08-12 10:27 usr/
    drwxr-xr-x devzkn/staff      0 2018-08-12 15:52 usr/bin/
    -rwxr-xr-x devzkn/staff 227520 2018-08-12 15:52 usr/bin/KCdumper
    
  • Generic Password

    • com.apple.account.IdentityServices.token

      Service: com.apple.account.IdentityServices.token
      Account: 4C64CF25027
      Entitlement Group: apple
      Keychain Data: V1MHKW000903db
      
    • BackupIDSAccountToken

      Service: BackupIDSAccountToken
      Account: 1680@qq.com-AuthToken
      Entitlement Group: apple
      Label: (null)
      Generic Field: (null)
      Keychain Data: V1MHKW0009
      

AirPort

Generic Password
----------------
Service: AirPort
Account: HN-WEI
Entitlement Group: apple
Label: (null)
Generic Field: (null)
Keychain Data: wei

平常我使用保持的数据格式

  • keychainItemWrapper

    • initWithIdentifier

              keychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"liu.openUdid"accessGroup:nil];
          
      
Generic Password
----------------
Service: 
Account: 
Entitlement Group: UVWU8XCYJX.com.gua
Label: 
Generic Field: iu.openUdid
Keychain Data: 11f6db3943cb989022db8f88cf489c

application-identifier
  • VG68Y2X7TH.com.taobao.taobao4iphone

    • udid

      Generic Password
      ----------------
      Service: com.taobao.taobao4iphone
      Account: udid
      Entitlement Group: VG68Y2X7TH.com.taobao.taobao4iphone
      Label: (null)
      Generic Field: (null)
      Keychain Data: s
      
  • 532LCLCWL8.com.tencent.xin

    • 存储json 字符串的例子

      Generic Password
      ----------------
      Service: 
      Account: 
      Entitlement Group: s.com.tencent.xin
      Label: 
      Generic Field: s.KNcom.tencent.xin
      Keychain Data: {"wxhq5c9sat12":"E7058B2523EE47FBBE02E94E8611418B"}
          
      
    • com.tencent.xin.updateresinfo

      Generic Password
      ----------------
      Service: com.tencent.xin.updateresinfo
      Account: com.tencent.xin.updateresinfo
      Entitlement Group: 532LCLCWL8.com.tencent.xin
      Label: (null)
      Generic Field: (null)
      Keychain Data: (null)
          
      Generic Password
      ----------------
          
      
    • tencent.mqq.analytics

    Generic Password
    ----------------
    Service: tencent.mqq.analytics
    Account: rqd.qimei
    Entitlement Group: 532LCLCWL8.com.tencent.xin
    Label: tencent.mqq.analytics
    Generic Field: (null)
    Keychain Data: 7DD2
      
    
  • 2018-07-01-security.md

See Also

/Users/devzkn/bin//knpost Accounts3 帐号信息的分析以及清除 -t jb
#原来""的参数,需要自己加上""

转载请注明: > keychain_Accounts3