03-iOS逆向工程使用SSH通过WiFi远程登录越狱iPhone

前提
  • 需要在iPhone上安装OpenSSH(SSH的开源实现)
    在Cydia中搜索OpenSSH并安装,这样iPhone上就可以开启SSH服务。SSH服务默认绑定端口号22。
  • Mac和iPhone需要在同一局域网下,比如连接到同一个WIFI中。
使用步骤
Mac终端连接iPhone

命令: ssh 账户名@服务器主机IP

  • 在iOS中,有2个常用的账户:root、mobile;
  • 这里服务器为iPhone,IP通过系统设置->无线局域网->IP地址中查找;
  • 苹果给iOS账号默认登录密码为:alpine;
  • 清除某服务器ssh公钥信息,公钥信息存储在~/.ssh/known_hosts
    清除命令:ssh-keygen -R [服务器主机IP]


    image.png
修改初始密码

命令:passwd 用户名
然后输入两边新密码


image.png
SSL与OpenSSL&SSH与OpenSSH
SSL

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

OpenSSL

OpenSSL 是一个SSL密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。简单来说就是SSL的免费开源实现。
绝大部分HTTPS请求等价于:HTTP + OpenSSL。

SSH

SSH(Secure Shell 安全外壳协议),由 IETF 的网络小组(Network Working Group)所制定;SSH 是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
SSH协议一共2个版本:SSH-1和SSH-2
现在用的比较多的是SSH-2,客户端和服务端版本要保持一致才能通信。

查看SSH版本(查看配置文件的Protocol字段)
客户端:/etc/ssh/ssh_config
服务端:/etc/ssh/sshd_config

OpenSSH

OpenSSH是SSH协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
OpenSSH的加密就是通过OpenSSL完成的。

SSH通讯过程

SSH的通信过程可以分为3大主要阶段

1. 建立安全连接
  • 在建立安全连接过程中,服务器会提供自己的身份证明。


    image.png
  • 如果客户端还没有保存服务器端的公钥信息,建立连接前会询问是否连接此服务。


    image.png
  • 如果服务器的身份信息发生了变更,在连接过程中会遇到以下错误:


    image.png

    如果确定要连接此服务器,需要删除掉之前的服务器的公钥再连接即可。
    方式一:使用命令删除:ssh-keygen -R 服务器IP地址
    方式二:直接打开~/.ssh/known_hosts找到服务器IP地址对应的公钥信息直接删除并保存即可。

2. 客户端认证

SSH2提供了2种常用的客户端认证方式

  • 基于密码的客户端认证
    连接时提示用户输入密码进行认证。

  • 基于密钥的客户端认证
    免密码认证,是最安全的一种认证方式。
    注意SSH2默认会优先尝试“密钥认证”,如果认证失败才会尝试密码认证。
    认证流程如下:


    image.png

具体流程如下:

  1. 在客户端生成一对相关联的密钥对(Key Pair):一个公钥(Public Key)和一个私钥(Private Key)
    使用命令:ssh-keygen
    一路敲回车键(Enter)即可
    OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型
    生成的公钥:~/.ssh/id_rsa.pub
    生成的私钥:~/.ssh/id_rsa
  2. 把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部
  • 方式一:直接使用ssh-copy-id完成
    命令:
    ssh-copy-id [-i identity_file] 用户名@服务器主机地址
    选项:
    -i:指定公钥文件
    ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。需要输入用户的登录密码。
    实例:
    ssh-copy-id root@192.168.10.80
    不指定公钥文件默认会将客户端~/.ssh/id_rsa.pub的内容自动追加
    到服务器~/.ssh/authorized_keys尾部。
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.80
    将客户端指定的公钥文件自动最佳到服务器~/.ssh/authorized_keys尾部

  • 方式二:
    先将客户端的公钥文件拷贝到服务器中,然后再将公钥内容追加到授权文件中。
    1)复制客户端的公钥到服务器某路径
    scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
    scp是secure copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上。
    上面的命令行将客户端的~/.ssh/id_rsa.pub公钥文件拷贝到服务器
    ~目录中。
    2)SSH登录服务器
    ssh root@服务器主机地址
    需要输入root用户的登录密码
    3)在服务器~目录下创建.ssh文件夹
    mkdir .ssh
    4)追加公钥内容到授权文件尾部
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    5)删除公钥
    rm ~/id_rsa.pub

  • 方式三:直接通过iFunBox进行操作。

  1. 注意:如果配置了免密码登录后,还是需要输入密码,需要在服务器端设置文件权限。
    chmod 755 ~
    chmod 755 ~/.ssh
    chmod 644 ~/.ssh/authorized_keys
3. 数据传输

推荐阅读更多精彩内容