越獄概述
越獄(
Jailbreak
):通過iOS
系統(tǒng)安全啟動鏈漏洞,從而禁止掉信任鏈中負責驗證的組件绞旅。拿到iOS
系統(tǒng)最大權限root
權限
安全啟動鏈
當啟動一臺
iOS
設備時虏缸,系統(tǒng)首先會從只讀的ROM
中讀取初始化指令,也就是系統(tǒng)的引導程序(事實上所有的操作系統(tǒng)啟動時都要經(jīng)過這一步肠虽,只是過程略有不同)這個引導
ROM
包含蘋果官方權威認證的公鑰,他會驗證底層啟動加載器(LLB
)的簽名歇盼,一旦通過驗證后就啟動系統(tǒng)
LLB
會做一些基礎工作舔痕,然后驗證第二級引導程序iBoot
。iBoot
啟動后豹缀,設備就可以進入恢復模式或啟動內核伯复。在iBoot
驗證完內核簽名的合法性之后,整個啟動程序開始步入正軌:加載驅動程序邢笙、檢測設備啸如、啟動系統(tǒng)守護進程這個信任鏈會確保所有的系統(tǒng)組件都由蘋果官方寫入、簽名氮惯、分發(fā)叮雳,不能來自第三方機構
iOS
系統(tǒng)安全啟動鏈:
越獄的工作原理正是攻擊這一信任鏈。所有越獄工具的開發(fā)者妇汗,都需要找到這一信任鏈上的漏洞帘不,從而禁止掉信任鏈中負責驗證的組件。拿到
iOS
系統(tǒng)最大權限root
權限
根據(jù)越獄的情況不同杨箭,可以分為如下兩種越獄:
- 完美越獄:所謂完美越獄就是破解
iOS
系統(tǒng)漏洞之后寞焙,每次系統(tǒng)重啟都能自動調用注入的惡意代碼,達到破壞安全驗證,再次獲得root
權限- 非完美越獄:系統(tǒng)越獄之后捣郊,并沒有完全破解安全鏈辽狈,有部分信息或功能應用不佳。例如:關機以后必須去連接越獄軟件來引導開機呛牲,或者重啟會導致越獄的失效刮萌。這樣的越獄稱為“不完美越獄”
目前比較靠譜的兩種越獄工具:
越獄流程着茸,以
uncOver
為例:官網(wǎng)下載
ipa
包官方給出的安裝流程,過于繁瑣畜侦,不建議使用
更簡單的方式:使用重簽名技術元扔,將
App
安裝到設備上使用腳本重簽名,不要使用
MokeyDev
旋膳。使用后者澎语,會在越獄時出現(xiàn)奇怪的問題安裝成功后,斷開
Xcode
重新運行
App
验懊,在設置中擅羞,勾選(Re)Install OpenSSH
,然后進行越獄越獄過程中义图,會重啟設備
重啟之后减俏,再次運行越獄工具,完成本次越獄
uncOver
中的設置項:
Dark Mode
:適配暗黑模式Load Tweaks
:開啟此功能碱工,在越獄激活時娃承,會讓越獄順便加載越獄環(huán)境,通常都是維持開啟狀態(tài)怕篷。那何時可以關閉呢历筝?當發(fā)生裝完新插件后,導致插件沖突造成安全模式廊谓,那在激活越獄時先將此功能關閉梳猪,再激活越獄,就可進入Cydia
來移除有沖突的插件Refresh Icon Cache
:桌面上暫存的白色圖示導致無法刪除蒸痹,通過此功能開啟就可清除Disable Auto Updates
:屏蔽自動升級春弥,可以關閉iOS
內的OTA
升級提醒。這功能是no beta alert
插件來完成叠荠,有裝描述檔來防堵iOS
升級者匿沛,不需要刪除或關閉,依舊都保持安裝描述檔和維持打開即可Export TFP0
:輸出TFP0
(不安全)榛鼎。Export TFP0
是iOS
一個漏洞俺祠,可以讓所有App
利用此漏洞來獲取root
權限公给,因此開發(fā)者也特別用括號提醒不安全借帘,沒事時候請勿開啟Restore RootFs
:清理越獄蜘渣,清除所有插件并且撤銷越獄工具注入的文件(Re)Install OpenSSh
:重裝OpenSSh
。有了OpenSSh
肺然,可以用來遠程連接設備Reinstall Cydia
:重裝Cydia
蔫缸。如發(fā)生激活越獄環(huán)境后,造成Cydia
閃退或是Cydia
消失际起,可以打開此功能重裝Cydia
Hide Log Windows
:隱藏Log
訊息拾碌。如果將此功能開啟,會導致越獄時街望,無法看見黑色訊息內的Log
信息Share OS Crash Logs
:共享操作系統(tǒng)崩潰日志
使用
uncOver
越獄的好處:在設置中校翔,選擇Restore RootFS
,可清理越獄環(huán)境灾前,刪除所有插件并撤銷越獄工具注入的文件越獄成功后防症,如果設備重啟過,需要使用
uncOver
重新越獄在重新越獄過程中哎甲,如果屢次失敗蔫敲,可嘗試勾選
Reinstall Cydia
,再進行重新越獄
使用
Odyssey
越獄炭玫,需要注意一點奈嘿,在斷開網(wǎng)絡的情況下,開始執(zhí)行越獄吞加。在越獄過程中裙犹,按照提示鏈接網(wǎng)絡。大致流程和uncOver
一樣
越獄成功后衔憨,在
Cydia
中叶圃,添加常用軟件源:
連接設備
通過
OpenSSH
插件可以連接手機,進行遠程控制巫财, 或者傳送文件
如果在越獄時盗似,未勾選
(Re)Install OpenSSH
,需要在越獄成功后平项,在Cydia
中安裝OpenSSH
赫舒。目的是在設備上開啟SSH
登錄服務
安裝后,可以在
Cydia
的已安裝中查看
- 來自
apt.bingner.com
軟件源
連接設備
通過插件闽瓢,使用
WiFi
連接手機:ssh 用戶名@手機IP地址
ssh root@10.165.45.19 ------------------------- The authenticity of host '10.165.45.19 (10.165.45.19)' can't be established. RSA key fingerprint is SHA256:gVFSTQl82bEyY21NqHcrcH8PVIh18OZPkht9khvQXUA. Are you sure you want to continue connecting (yes/no/[fingerprint])?
- 首次登錄接癌,會出現(xiàn)上述提示
此時輸入
yes
,可能會直接要求輸入密碼扣讼,也可能出現(xiàn)警告yes ------------------------- Warning: Permanently added '10.165.45.19' (RSA) to the list of known hosts. Connection closed by 10.165.45.19 port 22
如果未出現(xiàn)密碼輸入的提示缺猛,直接無視警告,嘗試再次登錄
ssh root@10.165.45.19 ------------------------- root@10.165.45.19's password:
- 提示輸入密碼
輸入默認密碼:
alpine
alpine ------------------------- iPhone6P:~ root#
- 成功登錄到手機設備上,并且處于設備的
root
目錄下
iOS
設備下荔燎,有兩個用戶:root
和mobile
root
用戶:最高權限用戶耻姥,可以訪問任意文件mobile
用戶:普通用戶,只能訪問該用戶/var/Mobile
目錄下的文件
登錄手機設備的
root
用戶有咨,可以查看很多隱私內容例如琐簇,查看手機上運行的進程
ps -A ------------------------- PID TTY TIME CMD 1 ?? 2:23.51 /sbin/launchd 219 ?? 0:27.75 /usr/libexec/substituted 456 ?? 0:04.24 /System/Library/PrivateFrameworks/AssistantServices.framework/assistantd 458 ?? 0:19.25 /usr/libexec/fseventsd 459 ?? 3:38.85 /usr/sbin/mediaserverd ...
篩選出指定
App
的進程ps -A | grep WeChat ------------------------- 3980 ?? 0:25.14 /var/containers/Bundle/Application/454EA887-EB3B-43B3-ABFD-B9B2CA006981/WeChat.app/WeChat
找到
MachO
文件拷貝出來
圖形化界面
在完美越獄的手機上座享,可以安裝
AFC 2
插件婉商,可以使用圖形化的界面訪問手機設備的所有目錄但在非完美越獄的手機上,使用
iFunBox
或其他助手軟件渣叛,只能訪問到設備的/var/mobile/Media
目錄
修改登錄密碼
登錄手機設備的默認密碼為
alpine
丈秩,使用passwd
命令,可以對其進行修改
root
用戶淳衙,可以修改所有用戶的密碼:passwd 用戶名
passwd root ------------------------- Changing password for root. New password: Retype new password:
輸入兩次新密碼蘑秽,確認修改。因為是登錄狀態(tài)滤祖,所以不用輸入原始密碼
斷開設備連接
使用
exit
命令筷狼,可以斷開設備的連接exit ------------------------- logout Connection to 10.165.45.19 closed.
OpenSSH
OpenSSH
是SSH
(Secure SHell
) 協(xié)議的免費開源實現(xiàn)。SSH
協(xié)議可以用來進行遠程控制匠童, 或在計算機之間傳送文件
OpenSSH
- 它是一款軟件埂材,應用非常廣泛
SSH
SSH
是一種網(wǎng)絡協(xié)議,用于計算機之間的加密登錄1995
年汤求,芬蘭學者Tatu Ylonen
設計了SSH
協(xié)議俏险,將登錄信息全部加密,成為互聯(lián)網(wǎng)安全的一個基本解決方案扬绪,迅速在全世界獲得推廣竖独,目前已經(jīng)成為Linux
系統(tǒng)的標準配置
SSH
登錄過程使用
Mac
電腦登錄iPhone
手機的過程
- 請求連接到
iPhone
手機- 手機將公鑰發(fā)給
Mac
電腦Mac
電腦通過收到的公鑰加密登錄密碼iPhone
手機利用私鑰解密登錄密碼,是否允許登錄
手機將公鑰發(fā)給
Mac
電腦挤牛,就是在首次登錄給出提示的時候將客戶端存儲的公鑰刪除
在
Mac
的終端莹痢,進入ssh
目錄cd ~/.ssh
打開
known_hosts
文件vi known_hosts
找到手機設備的
IP
地址以及對應的公鑰
將其刪除,然后再次登錄
ssh root@10.165.45.19 ------------------------- The authenticity of host '10.165.45.19 (10.165.45.19)' can't be established. RSA key fingerprint is SHA256:gVFSTQl82bEyY21NqHcrcH8PVIh18OZPkht9khvQXUA. Are you sure you want to continue connecting (yes/no/[fingerprint])?
客戶端不存在公鑰墓赴,視為首次登錄竞膳。將手機公鑰發(fā)給
Mac
電腦,同時還有一個RSA
密鑰的SHA256
指紋诫硕,輸入yes
坦辟,后續(xù)流程繼續(xù)
中間人攻擊
中間人攻擊(
Man-in-the-middle attack
)
- 冒充服務器,將生成的虛假公鑰發(fā)給客戶端章办。那么它將獲得客戶端連接服務
中間人:例如手機和電腦連接的黑客
WiFi
當手機發(fā)送給
Mac
電腦的公鑰被中間人截獲锉走,然后由中間人生成一對公鑰和私鑰滨彻,將偽造的公鑰轉發(fā)給Mac
電腦
Mac
電腦會通過偽造的公鑰加密登錄密碼,然后返回給中間人中間人利用自己的私鑰將其解密挪蹭,使用截獲的手機公鑰加密亭饵,再將其發(fā)送給手機
流程結束后,用戶可以照常登錄嚣潜,但黑客已經(jīng)截獲了登錄密碼
服務器保護
為了避免中間人攻擊冬骚,
SSH
在首次登錄時,除了返回公鑰懂算,還會給出密鑰的SHA256
指紋指紋的作用:服務器生成的有效指紋,會在網(wǎng)站上公布庇麦。用戶首次登錄時计技,可以人工核對該指紋的合法性。如果返回的指紋和公布的指紋不一致山橄,可能出現(xiàn)中間人的偽造垮媒,立刻終止登錄行為
首次登錄的合法性,需要依靠人工核對航棱。服務器在第一次登錄時睡雇,會讓客戶端保存
IP
地址和公鑰當再次登錄時,客戶端發(fā)現(xiàn)相同
IP
地址對應的公鑰發(fā)生變化饮醇,會給出疑似中間人攻擊的警告它抱,并阻止登錄
公鑰在客戶端保存的位置:
~/.ssh
目錄下的known_hosts
文件
公鑰在手機中保存的位置:
/etc/ssh
目錄下的ssh_host_rsa_key.pub
文件
免密登錄
免密登錄:也稱之為“公鑰登錄”
原理:客戶端將自己的公鑰,儲存在遠程主機上朴艰。登錄時观蓄,服務器會向客戶端發(fā)送一段隨機的字符串§羰客戶端用自己的私鑰加密后侮穿,再發(fā)回來。服務器用事先儲存的公鑰進行解密毁嗦,如果成功亲茅,就證明用戶是可信的,直接允許登錄克锣,不再要求密碼
- 客戶端將自己的公鑰存儲在服務器上
- 登錄的時候,服務器發(fā)送一個隨機字符串
Mac
電腦通過私鑰加密字符串iPhone
手機利用客戶端的公鑰解字符串
拷貝公鑰給
SSH
服務器:ssh-copy-id 用戶名@服務器IP地址
ssh-copy-id root@10.165.45.19 ------------------------- /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@10.165.45.19's password:
輸入默認密碼:
alpine
alpine ------------------------- Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@10.165.45.19'" and check to make sure that only the key(s) you wanted were added.
公鑰拷貝成功驶俊,再次登錄手機
ssh root@10.165.45.19 ------------------------- Last login: Mon May 24 12:15:57 2021 from 10.165.192.78
直接允許登錄娶耍,不再要求密碼
公鑰在客戶端保存的位置:
/Users/zang/.ssh
目錄下的id_rsa.pub
文件
公鑰在手機中保存的位置:
~/.ssh
目錄下的authorized_keys
文件
SSH取別名
作為逆向工程師,分別會使用完美越獄和非完美越獄兩臺手機饼酿。在更換設備時榕酒,切換登錄的過程還是比較麻煩的
我們可以在
~/.ssh
目錄下胚膊,創(chuàng)建一個config
文件。內部可以配置SSH
登錄的別名使用
vi config
命令想鹰,配置config
文件Host 6p Hostname 10.165.45.19 User root Port 22
Host
:別名Hostname
:IP
地址User
:用戶名Port
:端口號配置成功紊婉,使用別名登錄
ssh 6p ------------------------- Last login: Mon May 24 15:55:27 2021 from 10.165.192.78
USB登錄
使用
WiFi
連接手機,在使用一些指令時辑舷,會出現(xiàn)卡頓情況喻犁。但使用USB
連接,無論何種操作都會無比順暢
USB
連接的原理在
Mac
電腦上何缓,默認是支持USB
連接的肢础。例如:在Xcode
中使用的USB
調試
SSH
登錄,默認使用22
端口碌廓。而USB
連接传轰,需要使用usbmuxd
服務。主要用于在USB
協(xié)議上谷婆,實現(xiàn)多路TCP
連接
/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd
USB
連接過程讓
usbmuxd
服務映射到本地端口慨蛙,然后通過本地端口,建立USB
連接首先準備
python-client
工具
使用
Python
腳本纪挎,建立端口映射python tcprelay.py -t 22:12345 ------------------------- Forwarding local port 12345 to remote port 22
- 將本地
12345
端口期贫,映射到設備TCP
的22
端口上。這樣就可以通過本地的12345
端口建立連接通過
USB
進行SSH
連接6p
設備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
端口對應
localhost
屬于首次登錄,出現(xiàn)密鑰指紋的提示隙轻。輸入yes
埠帕,繼續(xù)登錄ssh -p 12345 root@localhost ------------------------- Last login: Mon May 24 16:44:58 2021 from 10.165.192.78
使用
USB
連接,成功登錄到手機設備上
切換到另一臺
5s
設備玖绿,使用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.
由于設備更換敛瓷,服務器返回的公鑰發(fā)生了變化,但連接的
IP
地址都是localhost
斑匪。當相同IP
地址的公鑰發(fā)生變化呐籽,客戶端會給出疑似中間人攻擊的警告,并阻止登錄在這種情況下蚀瘸,想要繼續(xù)登錄狡蝶,必須在
known_hosts
文件中,刪除之前保存的IP
地址和公鑰更簡單的方法贮勃,將
localhost
使用127.0.0.1
代替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
贪惹,設備登錄成功
Shell腳本登錄
封裝
Shell
腳本,更方便的登錄手機設備在
ZangShell
目錄下寂嘉,創(chuàng)建腳本創(chuàng)建端口映射腳本:
usbConnect.sh
python /Users/zang/Zang/Tools/python-client/tcprelay.py -t 22:12345
創(chuàng)建
USB
連接6p
的腳本:usb-6p.sh
ssh -p 12345 root@localhost
創(chuàng)建
USB
連接5s
的腳本:usb-5s.sh
ssh -p 12345 root@127.0.0.1
最后將
ZangShell
目錄配置到環(huán)境變量中奏瞬,對腳本添加可執(zhí)行權限
在終端使用
Shell
腳本枫绅,可快速連接到不同的手機設備上usbConnect.sh ------------------------- Forwarding local port 12345 to remote port 22
usb-6p.sh ------------------------- Last login: Mon May 24 17:25:52 2021 from 127.0.0.1
iproxy
USB
連接設備,除了使用Python
腳本硼端,還可以使用iproxy
命令使用
brew list
命令并淋,查看libimobiledevice
工具是否已安裝
未安裝,使用
brew install
命令珍昨,安裝libimobiledevice
工具brew install libimobiledevice
使用
iproxy
命令县耽,建立端口映射iproxy 12345 22 ------------------------- Creating listening port 12345 for device port 22 waiting for connection
使用
Shell
腳本,快速連接設備usb-6p.sh ------------------------- Last login: Mon May 24 18:19:32 2021 from 127.0.0.1
USB
連接成功镣典,使用iproxy
命令兔毙,同樣可以將12345
端口映射到設備TCP
的22
端口上,效果和使用Python
腳本是一樣的
清理越獄環(huán)境
當越獄設備出現(xiàn)問題骆撇,如果在設備的“通用-還原”中瞒御,選擇“還原所有設置”,很容易出現(xiàn)白蘋果神郊。正確的做法是,先將設備清理越獄環(huán)境趾唱,然后進行設備平刷
使用
uncOver
工具越獄涌乳,在設置中很容易清理越獄環(huán)境。但如果是老系統(tǒng)的設備甜癞,使用其他工具進行越獄夕晓,此時想清理越獄環(huán)境就很困難了這種情況下清理越獄環(huán)境的方法:
- 準備清理越獄環(huán)境的腳本:unjailbreak.sh
- 將
unjailbreak.sh
拷貝到越獄手機的root
用戶目錄下- 在手機上執(zhí)行該腳本(設備會重啟并且清理干凈)
總結
越獄概述
- 通過破解
iOS
安全啟動鏈的漏洞,拿到iOS
的root
權限- 完美越獄:每次系統(tǒng)重新啟動悠咱,都會再次進入越獄狀態(tài)
- 非完美越獄:沒有完全破解蒸辆,一般重啟后會失去越獄環(huán)境
OpenSSH
SSH
是一種網(wǎng)絡協(xié)議OpenSSH
是一款軟件
SSH
登錄過程
- 遠程主機(服務器)收到用戶的登錄請求,將自己的公鑰發(fā)給客戶端
- 客戶端使用公鑰析既,將自己登錄的密碼加密發(fā)送給服務器
- 遠程主機(服務器)使用私鑰解密登錄密碼躬贡,如果密碼正確,就同意登錄
中間人攻擊
- 冒充服務器眼坏,將生產(chǎn)的虛擬公鑰發(fā)送給客戶端拂玻,它可以截獲客戶端連接服務器的密碼
服務器保護
- 一般
SSH
服務器會將自己的Hash
值公布在網(wǎng)站上- 服務器在第一次登錄時,會讓客戶端保存
IP
地址和公鑰- 存放在
~/.ssh/known_hosts
中免密登錄
- 使用
ssh-copy-id
宰译,將公鑰拷貝到ssh
服務器- 原理
? 客戶端將公鑰存儲到遠程服務器
? 登錄時檐蚜,遠程服務器會向客戶端發(fā)送隨機字符串
? 客戶端用自己的私鑰加密后,發(fā)送給服務器
? 服務器用事先存儲的公鑰進行解密沿侈,如果成功闯第,就證明用戶是可信的,直接允許登錄缀拭,不再要求密碼
SSH
取別名
~/.ssh
目錄中咳短,有一個config
用來配置SSH
- 配置
config
文件
?Host
:別名
?Hostname
:IP
地址
?User
:用戶名
?Port
:端口號
USB
登錄
- 需要進行端口映射
?Pythopn
腳本
?iproxy