一、越狱
1.1 越狱
- 通过iOS系统安全启动链漏洞,从而禁止掉信任链中负责验证的组件.拿到iOS系统最大权限Root权限
1.2 iOS系统安全启动链
- 当启动一台iOS设备时,系统首先会从只读的ROM中读取初始化指令,也就是系统的引导程序(事实上所有的操作系统启动时都要经过这一步,只是过程略有不同).这个引导ROM包含苹果官方权威认证的公钥,它会验证底层启动加载器LLB的签名,一旦通过验证后就启动系统.LLB会做一些基础工作,然后验证第二引导程序iBoot.iBoot启动后,设备就可以进入恢复模式或启动内核. 在iBoot验证完内核签名的合法性之后,整个启动程序开始步入正轨: 加载驱动程序、验证驱动程序、检测设备、启动系统守护进程. 这个信任链会确保所有的系统组件都有苹果官方写入、签名、分发、不能来自第三方机构.
- 越狱的工作原理正是攻击这一信任链.所有的越狱工具的作者都需要找到这一信任链上的漏洞,从而禁止掉信任链中负责验证的组件.拿到iOS系统最大权限ROOT权限.
1.3 完美越狱与非完美越狱
根据越狱的情况不同可以分为如下两种越狱:
- 完美越狱
- 所谓完美越狱就是破解iOS系统漏洞之后,每次系统重启都能自动调用注入的恶意代码,达到破坏安全验证,再次获得ROOT权限
- 非完美越狱
- 所谓非完美越狱是指,越狱系统后,并没有完全破解安全链,有部分信息或功能应用不佳;比如: 关机以后必须去连接越狱软件来引导开机; 或者重启会导致越狱的实效;这样的越狱称为“不完美越狱”.
1.4 越狱工具
- 推荐使用 uncOver,下载.ipa包,用重签名脚本直接运行到手机上即可.
- uncOver中的设置项:
- Dark Mode:适配暗黑模式
- Load Tweaks:开启此功能,在越狱激活时,会让越狱顺便加载越狱环境,通常都是维持开启状态。那何时可以关闭呢?当发生装完新插件后,导致插件冲突造成安全模式,那在激活越狱时先将此功能关闭,再激活越狱,就可进入Cydia来移除有冲突的插件
- Refresh Icon Cache:桌面上暂存的白色图示导致无法删除,通过此功能开启就可清除
- Disable Auto Updates:屏蔽自动升级,可以关闭iOS内的OTA升级提醒。这功能是no beta alert插件来完成,有装描述档来防堵iOS升级者,不需要删除或关闭,依旧都保持安装描述档和维持打开即可
- Export TFP0:输出TFP0(不安全)。Export TFP0是iOS一个漏洞,可以让所有App利用此漏洞来获取root权限,因此开发者也特别用括号提醒不安全,没事时候请勿开启
- Restore RootFs:清理越狱,清除所有插件并且撤销越狱工具注入的文件
- (Re)Install OpenSSh:重装OpenSSh。有了OpenSSh,可以用来远程连接设备
- Reinstall Cydia:重装Cydia。如发生激活越狱环境后,造成Cydia闪退或是Cydia消失,可以打开此功能重装Cydia
- Hide Log Windows:隐藏Log讯息。如果将此功能开启,会导致越狱时,无法看见黑色讯息内的Log信息
- Share OS Crash Logs:共享操作系统崩溃日志
- 使用uncOver越狱的好处:
- 在设置中,选择Restore RootFS,可清理越狱环境,删除所有插件并撤销越狱工具注入的文件
- 越狱成功后,如果设备重启过,需要使用uncOver重新越狱
- 在重新越狱过程中,如果屡次失败,可尝试勾选Reinstall Cydia,再进行重新越狱
- 使用Odyssey越狱,需要注意一点,在断开网络的情况下,开始执行越狱。在越狱过程中,按照提示链接网络。大致流程和uncOver一样.
- 越狱成功后,在Cydia中,添加常用软件源:
二、连接设备
- 通过OpenSSH插件可以连接手机,进行远程控制,或者传送文件
- 如果在越狱时,未勾选(Re)Install OpenSSH,需要在越狱成功后,在Cydia中安装OpenSSH。目的是在设备上开启SSH登录服务
- 安装后,可以在Cydia的已安装中查看
连接设备
- 通过插件,使用Wifi连接手机: ssh 用户名@手机IP地址
ssh root@192.168.124.12
The authenticity of host '192.168.124.12 (192.168.124.12)' can't be established.
RSA key fingerprint is SHA256:pPnsbMAtXRq2zeZwsMsa2ENP1y4nYLEraoKL1oT8kdM.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: 192.168.1.100
~/.ssh/known_hosts:3: 192.168.1.101
~/.ssh/known_hosts:5: 192.168.0.104
//首次登录,会出现下面提示
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
//输入yes后,要求输入密码
Warning: Permanently added '192.168.124.12' (RSA) to the list of known hosts.
root@192.168.124.12's password:
Holothurian6P:~ root#
- 提示输入密码:
- 默认密码是: alpine, 这里输入我之前修改过的密码,就成功登录到手机设备上,并且处于设备的root目录下.
- iOS设备下,有两个用户: root和mobile
- root用户: 最高权限用户,可以访问任意文件
- mobile用户: 普通用户,只能访问该用户/var/Mobile目录下的文件
- 登录手机设备的root用户,可以查看很多隐私内容
- 例如,查看手机上运行的进程
Holothurian6P:~ root# ps -A
PID TTY TIME CMD
1 ?? 0:00.00 /sbin/launchd -s
35 ?? 0:00.00 /usr/libexec/fseventsd
36 ?? 0:00.00 /usr/sbin/mediaserverd
42 ?? 0:00.00 /usr/libexec/configd
45 ?? 0:00.00 /System/Library/CoreServices/powerd.bundle/powerd
47 ?? 0:00.00 /usr/sbin/WirelessRadioManagerd
53 ?? 0:00.00 /usr/libexec/logd
59 ?? 0:00.00 /System/Library/PrivateFrameworks/IDS.framework/identityservices
61 ?? 0:00.00 /usr/sbin/syslogd
67 ?? 0:00.00 /usr/sbin/wirelessproxd
......
- 筛选出指定App的进程
Holothurian6P:~ root# ps -A | grep WeChat
33021 ttys002 0:00.00 grep WeChat
- 修改登录密码
- 登录手机设备的默认密码为alpine,使用passwd可以对其进行修改
- root用户,可以修改所有用户的密码: passwd 用户名
Holothurian6P:~ root# passwd root
Changing password for root.
New password:
Retype new password:
Holothurian6P:~ root#
- 输入两次新密码,确认修改.因为是登录状态,所以不能输入原始密码
- 断开设备连接
- 使用 exit命令,可以断开设备的连接
Holothurian6P:~ root# exit
logout
Connection to 192.168.124.12 closed.
三、OpenSSH
- OpenSSH是SSH(Secure Shell)协议的免费开源实现,SSH协议可以用来进行远程控制,或在计算机之间传送文件
- OpenSSH
- 它是一款软件,应用非常广泛
- SSH
- SSH是一种网络协议,用于计算机之间的加密登录
- 1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置
- 中间人攻击
- 冒充服务器,将生成的虚假公钥发给客户端。那么它将获得客户端连接服务
- 中间人:例如手机和电脑连接的黑客WiFi
- 当手机发送给Mac电脑的公钥被中间人截获,然后由中间人生成一对公钥和私钥,将伪造的公钥转发给Mac电脑
- Mac电脑会通过伪造的公钥加密登录密码,然后返回给中间人
- 中间人利用自己的私钥将其解密,使用截获的手机公钥加密,再将其发送给手机流程结束后,用户可以照常登录,但黑客已经截获了登录密码
- 服务器保护
- 为了避免中间人攻击,SSH在首次登录时,除了返回公钥,还会给出密钥的SHA256指纹
- 指纹的作用:服务器生成的有效指纹,会在网站上公布。用户首次登录时,可以人工核对该指纹的合法性。如果返回的指纹和公布的指纹不一致,可能出现中间人的伪造,立刻终止登录行为
- 首次登录的合法性,需要依靠人工核对。服务器在第一次登录时,会让客户端保存IP地址和公钥
- 当再次登录时,客户端发现相同IP地址对应的公钥发生变化,会给出疑似中间人攻击的警告,并阻止登录
- 公钥在Mac端保存的位置: ~/.ssh 目录下的known_hosts文件
vi ~/.ssh/known_hosts
- 公钥在手机中保存的位置:
Holothurian6P:~ root# cd /etc/ssh
Holothurian6P:/etc/ssh root# ls
moduli ssh_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub sshd_config
Holothurian6P:/etc/ssh root# cat ssh_host_dsa_key
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH
NzAAAAgQCLcTHtWg9VQSoIU3BK7/KX/BGrx8TiGQ7DwetzL1JDgZD9kicN/j8AQY5qcwW6
7vAdNZ4Ht8MqdaK+xJ1pIt3VcaBBHB22B6lMEq0nJz49T1ZqFwUl5mxfHQpGvUOo80eSi7
t9QIjfVJq97yMrp1MbPaKSyk1aG8K6mlHOGoq5PwAAABUA/v+RXpoCKnzt5E5KIuKEPkk5
nCkAAACAZPTqcCg3bXV7NHCxqghSnLnlFBQ1H+KPcnTTBy4WXYaECiWTTfI6ez0ItNTJGz
aN/nna6WyJPfs9iJ6k/jUv0jhjjEWBLbIEZjwk2cMvIk2vEKz0b4eXC5liw/9hmUVCynUq
kTZ8E29AfTC2ACBQ19Xh27jZUaGP63Gq/ZZ5k4IAAACAbEQOb4+mJO3U5FuSv6nH4Rc6Nt
MNylf6Z9sYpGcH5C0Rv3dtR5L1WCx0gRCPOEFhHJaxHGSj5qady2Et+kq+sFI3lDhkNqvx
UOZwkAmSXjq2XqfxRSm5kiLwCrp1dBnr4hd/GjVU1oYNM9ZKSeaJKbedpgWXuJMgyCs6wg
enRJcAAAHYJ5l9mieZfZoAAAAHc3NoLWRzcwAAAIEAi3Ex7VoPVUEqCFNwSu/yl/wRq8fE
4hkOw8Hrcy9SQ4GQ/ZInDf4/AEGOanMFuu7wHTWeB7fDKnWivsSdaSLd1XGgQRwdtgepTB
KtJyc+PU9WahcFJeZsXx0KRr1DqPNHkou7fUCI31Save8jK6dTGz2ikspNWhvCuppRzhqK
uT8AAAAVAP7/kV6aAip87eROSiLihD5JOZwpAAAAgGT06nAoN211ezRwsaoIUpy55RQUNR
/ij3J00wcuFl2GhAolk03yOns9CLTUyRs2jf552ulsiT37PYiepP41L9I4Y4xFgS2yBGY8
JNnDLyJNrxCs9G+HlwuZYsP/YZlFQsp1KpE2fBNvQH0wtgAgUNfV4du42VGhj+txqv2WeZ
OCAAAAgGxEDm+PpiTt1ORbkr+px+EXOjbTDcpX+mfbGKRnB+QtEb93bUeS9VgsdIEQjzhB
YRyWsRxko+amncthLfpKvrBSN5Q4ZDar8VDmcJAJkl46tl6n8UUpuZIi8Aq6dXQZ6+IXfx
o1VNaGDTPWSknmiSm3naYFl7iTIMgrOsIHp0SXAAAAFBwiXHjr9P5dHpeQ7IwD9XmOtqGn
AAAAAAECAw==
-----END OPENSSH PRIVATE KEY-----
Holothurian6P:/etc/ssh root#
- 免密登录
- 免密登录:也称之为“公钥登录”
- 原理:客户端将自己的公钥,储存在远程主机上。登录时,服务器会向客户端发送一段随机的字符串。客户端用自己的私钥加密后,再发回来。服务器用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录,不再要求密码
- 拷贝公钥给SSH服务器: ssh-copy-id 用户名@服务器IP地址
$ ssh-copy-id root@192.168.124.12
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/chenxi/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.124.12's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.124.12'"
and check to make sure that only the key(s) you wanted were added.
$ ssh 'root@192.168.124.12'
Holothurian6P:~ root#
- 公钥拷贝成功后,再次登录手机,就可以直接登录,不再要求密码
- 公钥在Mac端保存的位置:
% cd ~/.ssh
$ ls
id_rsa id_rsa.pub known_hosts
$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4fYdDP5bzzU5gJEPvbX3P1QCgNPTJFlpUZim3PxlNeJN8I8uFaaTEqmQqXpnpg1ZA8sj6IszNyiyFt23BOIYPUHmlZzkjDYftvItBB7H0gT4qdVwVGEO3HZrQdzc51pE5l8onLyyQkztiy3LXQY4Fe20iwozMxo9wiqQcwzFVlid0Hsl8MKt79rDZ5/HmthovIZmlVTT3hVdUE3EntZ+HTT4QYISOUwXuxeFBAkPzOgWsqCVbEwgdmRHXjBnefDWR39jP/ykDyBkJwUYNk36C41dK6TTg/6XW3m5JLT11/KBddQgiZ/MwPMoLTB86Xzvz7z2bytNDDMOq2cziTDyQ61haYZY3pfK/gqVSVKPLy1FNw+k8fROOBc9C5Pmv/Ee6xTnJYVIxF7hnRLm01fg5mci7Brc8tjlihTuse8YQTxxdReFHA8bCmYhnqS3JRP4mAM1ciPup5jv9xYcoUYqtyMKSETOGV0BpuEJx2sTZ9yjTlXIhWZ+D/ITCp+jyh3k= herrychenx@gmail.com
- 公钥在手机中保存的位置: ~/.ssh目录下的authorized_keys文件
$ ssh 'root@192.168.124.12'
Holothurian6P:~ root# cd ~/.ssh
Holothurian6P:~/.ssh root# ls
authorized_keys
Holothurian6P:~/.ssh root# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4fYdDP5bzzU5gJEPvbX3P1QCgNPTJFlpUZim3PxlNeJN8I8uFaaTEqmQqXpnpg1ZA8sj6IszNyiyFt23BOIYPUHmlZzkjDYftvItBB7H0gT4qdVwVGEO3HZrQdzc51pE5l8onLyyQkztiy3LXQY4Fe20iwozMxo9wiqQcwzFVlid0Hsl8MKt79rDZ5/HmthovIZmlVTT3hVdUE3EntZ+HTT4QYISOUwXuxeFBAkPzOgWsqCVbEwgdmRHXjBnefDWR39jP/ykDyBkJwUYNk36C41dK6TTg/6XW3m5JLT11/KBddQgiZ/MwPMoLTB86Xzvz7z2bytNDDMOq2cziTDyQ61haYZY3pfK/gqVSVKPLy1FNw+k8fROOBc9C5Pmv/Ee6xTnJYVIxF7hnRLm01fg5mci7Brc8tjlihTuse8YQTxxdReFHA8bCmYhnqS3JRP4mAM1ciPup5jv9xYcoUYqtyMKSETOGV0BpuEJx2sTZ9yjTlXIhWZ+D/ITCp+jyh3k= herrychenx@gmail.com
Holothurian6P:~/.ssh root#
- SSH取别名
- 作为逆向工程师,分别会使用完美越狱和非完美越狱两台手机.在更换设备时,切换登录的过程还是比较麻烦的.
- 我们可以在 ~/.ssh目录下,创建一个config文件.内部可以配置SSH登录的别名
- 使用vi config命令,配置config文件
Host 6P
Hostname 192.168.124.12
User root
Port 22
- Host: 别名
- Hostname: IP地址
- User: 用户名
- Port: 端口号
- 配置成功,使用别名登录
ssh 6P
Last login: Wed Apr 12 16:58:22 2023 from 192.168.124.13
Holothurian6P:~ root#
四、总结
越狱概述
- 通过破解 : iOS安全启动链的漏洞,拿到iOS的root权限
- 完美越狱:每次系统重新启动,都会再次进入越狱状态
- 非完美越狱:没有完全破解,一般重启后会失去越狱环境
OpenSSH
- SSH是一种网络协议
- OpenSSH是一款软件
SSH登录过程
- 远程主机(服务器)收到用户的登录请求,将自己的公钥发给客户端
- 客户端使用公钥,将自己登录的密码加密发送给服务器
- 远程主机(服务器)使用私钥解密登录密码,如果密码正确,就同意登录
中间人攻击
- 冒充服务器,将生产的虚拟公钥发送给客户端,它可以截获客户端连接服务器的密码
服务器保护
- 一般SSH服务器会将自己的Hash值公布在网站上
- 服务器在第一次登录时,会让客户端保存IP地址和公钥
- 存放在~/.ssh/known_hosts中
免密登录
- 使用ssh-copy-id,将公钥拷贝到ssh服务器
- 原理
- 客户端将公钥存储到远程服务器
- 登录时,远程服务器会向客户端发送随机字符串
- 客户端用自己的私钥加密后,发送给服务器
- 服务器用事先存储的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录,不再要求密码
SSH取别名
- ~/.ssh目录中,有一个 config用来配置SSH
- 配置config文件
- Host:别名
- Hostname:IP地址
- User:用户名
- Port:端口号