美文网首页
22-越狱 & OpenSSH

22-越狱 & OpenSSH

作者: 深圳_你要的昵称 | 来源:发表于2021-06-07 07:24 被阅读0次

    前言

    本篇文章将给大家介绍下iOS越狱的流程,以及OpenSSH的原理,看看越狱后如何使用OpenSSH连接以及调试手机。

    一、越狱

    越狱(Jailbreak):通过iOS系统安全启动链漏洞,从而禁止掉信任链中负责验证的组件,拿到iOS系统最大权限 👉🏻 root权限

    1.1 安全启动链

    那什么是安全启动链呢?👇🏻

    • 当启动一台iOS设备时,系统首先会从只读ROM中读取初始化指令,也就是系统的引导程序(事实上所有的操作系统启动时都要经过这一步,只是过程略有不同)。

    • 这个引导ROM包含苹果官方权威认证的公钥,他会验证底层启动加载器(LLB)的签名,一旦通过验证后就启动系统。

    • LLB会做一些基础工作,然后验证第二级引导程序iBootiBoot启动后,设备就可以进入恢复模式或启动内核。在iBoot验证完内核签名的合法性之后,整个启动程序开始步入正轨:加载驱动程序、检测设备、启动系统守护进程。

    • 这个信任链会确保所有的系统组件都由苹果官方写入、签名、分发,不能来自第三方机构

    以上整个流程如下图👇🏻

    所以,越狱的工作原理正是攻击这一信任链。所有越狱工具的开发者,都需要找到这一信任链上的漏洞,从而禁止掉信任链中负责验证的组件。拿到iOS系统最大权限root权限

    1.2 越狱类别

    根据越狱的情况不同,可以分为如下两种越狱👇🏻

    1. 完美越狱 👉🏻 所谓完美越狱就是破解iOS系统漏洞之后,每次系统重启都能自动调用注入的恶意代码,达到破坏安全验证,再次获得root权限。

    2. 非完美越狱 👉🏻 系统越狱之后,并没有完全破解安全链,有部分信息或功能应用不佳。例如:关机以后必须去连接越狱软件来引导开机,或者重启会导致越狱的失效。这样的越狱称为不完美越狱

    1.3 越狱工具

    目前比较靠谱的两种越狱工具👇🏻

    1.4 uncOver越狱演示

    1. 官网下载ipa包👇🏻

    ⚠️注意:官方给出的安装流程,过于繁琐,不建议使用。
    更简单的方式 👉🏻 重签名将App安装到手机上。

    1. 使用脚本重签名 👉🏻 请参考10-应用重签名

    ⚠️注意:不要使用MonkeyDev,会在越狱时出现奇怪的问题。

    1. 安装成功后,断开Xcode。
    2. 重新运行App,在设置中,勾选(Re)Install OpenSSH,然后进行越狱。

    ⚠️注意:越狱过程中,手机会重启。重启之后,再次运行越狱工具,完成本次越狱。

    uncOver中的设置项
    title 释义
    Dark Mode 适配暗黑模式
    Load Tweaks 开启此功能,在越狱激活时,会让越狱顺便加载越狱环境,通常都是维持开启状态。那何时可以关闭呢?当发生装完新插件后,导致插件冲突造成安全模式,那在激活越狱时先将此功能关闭,再激活越狱,就可进入Cydia来移除有冲突的插件
    Refresh Icon Cache 桌面上暂存的白色图示导致无法删除,通过此功能开启就可清除
    Disable Auto Updates 屏蔽自动升级,可以关闭iOS内的OTA升级提醒。这功能是no beta alert插件来完成,有装描述档来防堵iOS升级者,不需要删除或关闭,依旧都保持安装描述档和维持打开即可
    Export TFP0 输出TFP0(不安全)。Export TFP0iOS一个漏洞,可以让所有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,可清理越狱环境,删除所有插件并撤销越狱工具注入的文件
    • 缺点 👉🏻 越狱成功后,如果设备重启过,需要重新越狱

    ⚠️注意:在重新越狱过程中,如果屡次失败,可尝试勾选Reinstall Cydia,再进行重新越狱。

    1. 越狱成功后,在Cydia中,添加常用软件源👇🏻

    二、OpenSSH

    接下来,我们看看什么是OpenSSH👇🏻
    OpenSSHSSH(Secure SHell) 协议的免费开源实现。SSH协议可以用来进行远程控制, 或在计算机之间传送文件。

    • OpenSSH 👉🏻 它是一款软件,应用非常广泛
    • SSH👇🏻
      • SSH是一种网络协议,用于计算机之间的加密登录
      • 1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置

    2.1 SSH登录过程

    Mac电脑登录iPhone手机的过程如下图所示 👇🏻

    1. Mac请求连接到iPhone手机
    2. 手机将公钥发给Mac电脑
    3. Mac电脑通过收到的公钥加密登录密码
    4. iPhone手机利用私钥解密登录密码,是否允许登录

    ⚠️注意:手机将公钥发给Mac电脑的时机点 👉🏻 在首次登录给出提示的时候

    Mac端的公钥

    Mac端存储的公钥在什么位置呢?

    1. 进入ssh目录
    cd ~/.ssh
    
    1. 打开known_hosts文件
    vi known_hosts
    

    这里就存储了所有的公钥。我们可以找到手机设备的IP地址以及对应的公钥👇🏻

    1. 尝试将其删除,然后再次登录
    ssh root@172.26.104.24
    -------------------------
    The authenticity of host '172.26.104.24 (172.26.104.24)' can't be established.
    RSA key fingerprint is SHA256:gVFSTQl82bEyY21NqHcrcH8PVIh18OZPkht9khvQXUA.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    上面的意思就是 👉🏻 客户端不存在公钥,视为首次登录。将手机公钥发给Mac电脑,同时还有一个RSA密钥SHA256指纹,输入yes,让后续流程继续。

    2.2 中间人攻击

    中间人:例如手机和电脑连接的黑客WiFi,中间人攻击即Man-in-the-middle attack,过程如下图👇🏻

    1. 第三方假冒服务器,将生成的虚假公钥发给客户端。那么它将获得客户端连接服务的信息,包括服务端下发给客户端的公钥
    2. 当手机发送给Mac电脑的公钥被中间人截获,然后由中间人生成一对公钥和私钥,将伪造的公钥转发给Mac电脑
    3. Mac电脑会通过伪造的公钥加密登录密码,然后返回给中间人
    4. 中间人利用自己的私钥将其解密,使用截获手机公钥加密,再将其发送给手机
    5. 流程结束后,用户可以照常登录,但黑客已经截获了登录密码

    服务端保护

    那如何预防中间人攻击呢?👇🏻
    为了避免中间人攻击,SSH在首次登录时,除了返回公钥,还会给出密钥的SHA256指纹

    指纹的作用 👉🏻 服务器生成的有效指纹,会在网站上公布。用户首次登录时,可以人工核对该指纹的合法性。如果返回的指纹和公布的指纹不一致,可能出现中间人的伪造,立刻终止登录行为。

    • 首次登录的合法性,需要依靠人工核对。服务器在第一次登录时,会让客户端保存IP地址和公钥
    • 当再次登录时,客户端发现相同IP地址对应的公钥发生变化,会给出疑似中间人攻击的警告,并阻止登录
    公钥存储位置
    1. 之前说过Mac端的存储位置 👉🏻 ~/.ssh目录下的known_hosts文件
    2. 手机端的存储位置 👉🏻 /etc/ssh目录下的ssh_host_rsa_key.pub文件

    2.3 OpenSSH连接手机

    1. 需要手机越狱成功后,在Cydia中安装OpenSSH👇🏻

    这样我们就可以在手机上开启SSH登录服务

    1. 安装后,可以在Cydia的已安装中查看👇🏻
    1. 使用WiFi连接手机
    ssh 用户名@手机IP地址
    
    ssh root@172.26.104.24
    -------------------------
    The authenticity of host '172.26.104.24 (172.26.104.24)' can't be established.
    RSA key fingerprint is SHA256:gVFSTQl82bEyY21NqHcrcH8PVIh18OZPkht9khvQXUA.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    之前说过,首次登录就会出现上述提示。

    1. 此时输入yes可能会直接要求输入密码,也可能出现警告👇🏻
    yes
    -------------------------
    Warning: Permanently added '172.26.104.24' (RSA) to the list of known hosts.
    Connection closed by 172.26.104.24 port 22
    

    如果未出现密码输入的提示,直接无视警告,尝试再次登录

    ssh root@172.26.104.24
    -------------------------
    root@172.26.104.24's password:
    

    输入默认密码alpine

    alpine
    -------------------------
    iPhone8:~ root#
    

    成功登录到手机设备上,并且处于设备的root目录下。

    iOS设备下,有两个用户 👉🏻 rootmobile

    • root用户:最高权限用户,可以访问任意文件
    • mobile用户:普通权限用户,只能访问该用户/var/Mobile目录下的文件

    2.4 免密登录

    接下来我们来看看免密登录的流程。
    免密登录也称之为公钥登录。起原理如下👇🏻

    客户端将自己的公钥,储存在远程主机上。登录时,服务器会向客户端发送一段随机的字符串。客户端用自己的私钥加密后,再发回来。服务器用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录,不再要求密码。

    1. 客户端将自己的公钥存储在服务器上
    2. 登录的时候,服务器发送一个随机字符串
    3. Mac电脑通过私钥加密字符串
    4. iPhone手机利用客户端的公钥解字符串

    操作演示

    1. 打开终端,输入指令:拷贝公钥给SSH服务器👇🏻
    ssh-copy-id 用户名@服务器IP地址
    
    ssh-copy-id root@172.26.104.24
    -------------------------
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/zang/.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@172.26.104.24's password:
    
    1. 输入默认密码alpine
    alpine
    -------------------------
    Number of key(s) added:        1
    
    Now try logging into the machine, with:   "ssh 'root@172.26.104.24'"
    and check to make sure that only the key(s) you wanted were added.
    
    1. 公钥拷贝成功后,再次登录手机
    ssh root@172.26.104.24
    -------------------------
    Last login: Mon May 24 12:15:57 2021 from 10.165.192.78
    

    此时就直接允许登录了,没有要求输入密码。

    2.5 SSH取别名

    作为逆向工程师,分别会使用完美越狱非完美越狱两台手机。在更换设备时,切换登录的过程还是比较麻烦的,此时就需要给设备的SSH取别名

    1. 在~/.ssh目录下,创建一个config文件,该文件的目的 👉🏻 内部可以配置SSH登录的别名。
    2. vi config命令,配置config文件👇🏻
    Host iphone8
    Hostname 172.26.104.24
    User root
    Port 22
    
    • Host:别名
    • Hostname:IP地址
    • User:用户名
    • Port:端口号
    1. 配置成功后,就可以使用别名登录👇🏻
    ssh iphone8
    -------------------------
    Last login: Mon May 24 15:55:27 2021 from 172.26.104.24
    

    2.6 USB登录

    之前,我们都是使用WiFi,通过ip和端口号登录的,其实也可以手机usb线连接Mac电脑,使用USB登录,因为使用WiFi连接手机,在使用一些指令时,会出现卡顿情况。

    USB连接的原理

    在Mac电脑上,默认是支持USB连接的。例如:在Xcode中使用的USB调试SSH登录,默认使用22端口。

    而USB连接,需要使用usbmuxd服务 👉🏻 主要用于在USB协议上,实现多路TCP连接usbmuxd所在Mac电脑的位置👇🏻

    /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd
    
    USB连接演示
    1. 首先准备python-client工具👇🏻(ps:需要的可以评论区发邮箱)
    1. 使用Python脚本,建立端口映射👇🏻
    python tcprelay.py -t 22:12345
    -------------------------
    Forwarding local port 12345 to remote port 22
    

    将本地12345端口,映射到设备TCP22端口上。这样就可以通过本地的12345端口建立连接。

    1. 通过USB进行SSH连接手机设备
    ssh -p 12345 root@localhost
    -------------------------
    The authenticity of host '[localhost]:12345 ([127.0.0.1]:12345)' can't be established.
    RSA key fingerprint is SHA256:gVFSTQl82bEyY21NqHcrcH8PVIh18OZPkht9khvQXUA.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    SSH连接本地12345端口,由于进行了端口映射,所以会通过USB连接到设备的22端口。

    1. 对应localhost属于首次登录,出现密钥指纹的提示。输入yes,继续登录👇🏻
    ssh -p 12345 root@localhost
    -------------------------
    Last login: Mon May 24 16:44:58 2021 from 172.26.104.24
    

    此时成功登录到手机设备上!🍺🍺🍺🍺🍺🍺

    1. 切换到另一台手机设备,使用USB连接
    ssh -p 12345 root@localhost
    -------------------------
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    SHA256:TjRKqJ/x87z4LizFQTK6iLhPcOO1PAaFdl4rVI2gHfI.
    Please contact your system administrator.
    Add correct host key in /Users/zang/.ssh/known_hosts to get rid of this message.
    Offending RSA key in /Users/zang/.ssh/known_hosts:9
    RSA host key for [localhost]:12345 has changed and you have requested strict checking.
    Host key verification failed.
    

    上面出现警告⚠️,因为设备更换,服务器返回的公钥发生了变化,但连接的IP地址都是localhost。当相同IP地址的公钥发生变化,客户端会给出疑似中间人攻击的警告,并阻止登录。

    怎么办呢?2种方式👇🏻

    1. 可以在known_hosts文件中,删除之前保存的IP地址和公钥
    2. 使用127.0.0.1代替localhost

    每次切换都去删除显然很麻烦,所以建议第2种。

    ssh -p 12345 root@127.0.0.1
    -------------------------
    The authenticity of host '[127.0.0.1]:12345 ([127.0.0.1]:12345)' can't be established.
    RSA key fingerprint is SHA256:TjRKqJ/x87z4LizFQTK6iLhPcOO1PAaFdl4rVI2gHfI.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '[127.0.0.1]:12345' (RSA) to the list of known hosts.
    root@127.0.0.1's password:
    

    输入默认密码alpine,设备登录成功。

    2.7 Shell脚本登录

    以上连接设备登录等操作,都需要手动一条条的输入指令完成,还是挺麻烦,为了省事,建议使用脚本。

    1. 创建端口映射脚本usbConnect.sh,建议就在用户目录下👇🏻
    python /Users/xxx/python-client/tcprelay.py -t 22:12345
    
    1. 创建USB连接手机设备的脚本usb-iphone8.sh👇🏻
    ssh -p 12345 root@localhost
    
    1. 创建USB连接另一台手机的脚本usb-iphoneXs.sh👇🏻
    ssh -p 12345 root@127.0.0.1
    
    1. 配置环境变量,方便全局使用。在./.zshrc./..bash_profile中👇🏻
    export USB_CONNECT="/Users/xxx/"
    export PATH=$USB_CONNECT
    
    1. 使用,直接在终端中输入👇🏻
    usbConnect.sh
    -------------------------
    Forwarding local port 12345 to remote port 22
    
    usb-iphone8.sh
    -------------------------
    Last login: Mon May 24 17:25:52 2021 from 127.0.0.1
    

    2.8 iproxy

    USB连接设备,除了使用Python脚本,还可以使用iproxy命令

    1. 使用brew list命令,查看libimobiledevice工具是否已安装👇🏻
    1. 未安装的话,使用brew install命令,安装libimobiledevice工具
    brew install libimobiledevice
    

    ⚠️注意:如果是M1电脑,使用arch -arm64 brew install libimobiledevice

    1. 使用iproxy命令,建立端口映射
    iproxy 12345 22
    -------------------------
    Creating listening port 12345 for device port 22
    waiting for connection
    
    1. 最后使用Shell脚本,快速连接设备
    usb-iphone8.sh
    -------------------------
    Last login: Mon May 24 18:19:32 2021 from 127.0.0.1
    

    USB连接成功!🍺🍺🍺🍺🍺🍺

    2.9 清理越狱环境

    当越狱设备出现问题,如果在设备的“通用-还原”中,选择“还原所有设置”,很容易出现白苹果。正确的做法是,先将设备清理越狱环境,然后进行设备平刷

    使用uncOver工具越狱,在设置中很容易清理越狱环境。但如果是老系统的设备,使用其他工具进行越狱,此时想清理越狱环境就很困难了

    这种情况下清理越狱环境的方法:

    • 准备清理越狱环境的脚本:unjailbreak.sh
    • unjailbreak.sh拷贝到越狱手机的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:端口号

      • USB登录 👉🏻 需要进行端口映射
        ◦ Pythopn脚本
        ◦ iproxy

    相关文章

      网友评论

          本文标题:22-越狱 & OpenSSH

          本文链接:https://www.haomeiwen.com/subject/qjpysltx.html