什么是SSL Pinning
SSL Pinning是在客户端使用的一种技术,通过验证服务器证书来避免中间人攻击。开发人员在开发过程中将可信证书列表嵌入(或固定)到客户端应用程序,并在运行时使用它们与服务器证书进行比较。如果服务器与本地证书副本不匹配,则连接将直接中断,甚至不会向该服务器发送更多用户数据。这种实施可确保用户设备仅与专用的可信服务器通信。
为什么应在iOS应用程序中实施SSL Pinning
SSL Pinning可以防止中间人攻击,这意味着攻击者无法拦截流量和修改数据。如果攻击者无法拦截流量,则应用程序会自动阻止许多服务器端漏洞,因为攻击者无法执行 API 级别的测试用例。
绕过SSL Pinning的基本方法
绕过 SSL Pinning的基本方法是分析应用程序的二进制文件,以确定它是用哪种语言编写的。然后采用特定于语言的方式来绕过该iOS应用程序的 SSL Pinning。例如,如果应用程序使用Flutter或Xamrian构建,那么我们将使用Hotspot方法,如果应用程序在Cordova中构建,那么我们将尝试替换硬编码的SHA-256哈希等。
绕过SSL Pinning的不同方法
一、热点方法(Flutter & Xamarin 应用程序)
Flutter 和 Xamarin 应用程序不支持系统代理(Flutter 是由 Google 开发的一个开源 UI 框架,用于构建跨平台应用程序。Xamarin 是由微软支持的一个跨平台开发框架,它允许开发者使用 .NET 和 C# 编程语言开发可以运行在 iOS、Android 和 Windows 上的应用程序。),这意味着如果在 iPhone 上设置代理并尝试捕获流量,应用程序可能会报错或无法捕获流量。因此,通常采用热点方式来对这类应用程序进行 API 级别的渗透测试。
在开始之前,首先确定应用程序是在Flutter或Xamarin中构建的。
1.解压缩 IPA 文件:
unzip test.ipa
2. 转到 “Framework” 目录或使用grep命令并搜索flutter
cd Payloads/test.app/framework
要求:
-
一台移动设备 (Android/iOS) 通过蓝牙网络共享共享互联网。
-
已越狱/未越狱的 iOS 设备
-
MacBook
通过热点方法捕获流量的步骤
1.通过蓝牙网络共享共享互联网连接
打开移动数据 => 打开移动蓝牙 => 连接到 MacBook => 从移动设备的设置中打开蓝牙网络共享(尝试在 MacBook 中浏览一些数据以确认蓝牙网络共享已正确完成)。
2. 共享从 MacBook 到 iPhone 的互联网连接
在 MacBook 中,导航到系统偏好设置 => 通用 =>共享 => 互联网共享
3. 在 iPhone 中到 Wifi => 连接到 Macbook 的 wifi
(尝试在 iPhone 中浏览一些数据以确认此操作已正确完成)
4. 将iPhone流量转发到burpsuite
使用以下数据创建 pf.rules 文件
rdr pass on bridge100 inet proto tcp from any to any -> 127.0.0.1 port 8080
5. 运行以下两个命令
sudo pfctl -f pf.rules
sudo sysctl -w net.inet.ip.forwarding=1
6. 打开burpsuite中的support invisible proxy选项
打开burpsuite => Proxy => Options => Edit => Request handling => 开启support invisible proxy
7. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。
二、通过替换硬编码证书绕过SSL Pinning
某些应用程序使用硬编码证书在 iOS 应用程序中实现SSL Pinning。应用程序将检查证书是否匹配,然后仅将流量发送到服务器。
因此,我们将 iOS 应用程序中的硬编码证书替换为我们的burpsuite证书并重新安装该应用程序,这样我们就可以绕过固定。
让我们看看如何替换硬编码的证书
1.使用以下命令解压缩 IPA 文件。
unzip test.ipa
2. 转到二进制文件
cd /Payload/test.app
3. 通过以下命令搜索硬编码证书
find . | grep .cer
4. 将所有硬编码证书替换为你的BurpSuite证书
cp ~/Path_of_Your_burp_certificate ./Full_Path_Of_Hardcoded_Certificate
5. 重新编译应用程序并通过 Cydia Impactor 安装应用程序
-
压缩 Payload 文件夹,文件扩展名为 .zip。
-
将上述压缩的 zip 文件重命名为 .IPA 文件扩展名。
-
现在通过 Cydia impactor安装应用程序(它将退 出并在 iPhone 中安装应用程序)
6. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。
三、通过替换硬编码的 SHA 256 哈希来绕过 SSL Pinning
某些应用程序使用证书的硬编码哈希在 iOS 应用程序中实现SSL Pinning。大多数内置 Cordova 的应用程序都使用此技术来实现SSL Pinning。
因此,我们只需将 iOS 应用程序中的硬编码证书哈希值替换为我们的 burpsuite证书哈希值,然后重新安装应用程序。
让我们看看如何替换硬编码证书的哈希值
1.使用以下命令解压缩 IPA 文件。
unzip test.ipa
2. 转到以下位置并查找硬编码哈希,它可能也位于不同的位置,在我的情况下,它就在那里
cd /Payload/test.app/www/pinning/pinning.json
3. 通过以下命令生成 burpsuite证书哈希
openssl x509 -inform DER -in cacert.cer -out cacert.crt
openssl x509 -in cacert.crt -pubkey -noout |openssl pkey -pubin -outform der |openssl dgst -sha256 -二进制 |openssl enc -base64
4. 通过编辑器将我们的哈希值替换为应用程序哈希值。
5. 重新编译应用程序并通过 Cydia Impactor 安装应用程序
-
压缩 Payload 文件夹,文件扩展名为 .zip。
-
将上述压缩的 zip 文件重命名为 .IPA 文件扩展名。
-
现在通过 Cydia impactor安装应用程序(它将退出并在 iPhone 中安装应用程序)
6. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。
四、通过 SSL Kill Switch2 绕过 SSL 锁定
1.安装 SSL Kill Switch
2.下载 SSLLillSwitch deb 文件
https://github.com/nabla-c0d3/ssl-kill-switch2/releases
3. 通过以下命令将 deb 文件复制到您的 iPhone,然后输入默认密码“alpine”。
scp /Path_Of_Downloaded_deb_file root@your_iphon_ip:/private (要复制包的文件夹)
4. 下载 Debian 软件包和 Cydia Substrate PreferenceLoader
从 Cydia 下载它,希望它已经安装好了
5. 进行 ssh 连接并输入默认密码“alpine”
ssh root@iphone_ip
6. 输入以下命令安装 SSL kill Debian 软件包或从 filza 安装
dpkg -i ssl.deb
7. 前往设置并寻找SSL kill switch应用程序。
8. 单击禁用 SSL 证书,所有应用程序的SSL Pinning都将被绕过。
9. 从 iPhone 开始浏览应用程序,并观察流量将在 burpsuite中捕获。
五、通过 MITM 绕过 SSL 锁定
某些应用程序流量无法直接通过 burpsuite捕获,在这种情况下,MITM 会出现。我们可以使用 MITM 来捕获流量,然后使用 MITM 将其发送到 burpsuite,而不是通过 burpsuite捕获流量。MITM 还可以与 objection、Frida 脚本和其他工具一起使用。您还可以将 MITM 与objection、Frida 脚本等一起使用。它工作了很多次,在我的一个项目中,我尝试了很多绕过SSL Pinning,但没有任何效果,最后使用一个 Frida 脚本和 MITM,我能够捕获流量。
在 MacBook 中通过以下命令安装 mitmproxy
brew install mitmproxy
2. 在 iPhone 中下载 MITM 证书
3. 通过 USB 连接 iPhone 和 Macbook,然后输入以下命令
mitmproxy
4. 在 iPhone 浏览器中输入以下命令
Mitm.it (下载 iOS 证书)
5. 在 iPhone 上安装 MITM 证书
在 iPhone 中导航到设置 => 安装配置文件 => 设置 => 信任证书 => 证书信任设置 => 启用 mitmproxy
6. 输入以下命令以在浏览器中启动 mitmproxy。
mitmweb(mitm 在浏览器中自动打开)
7. 设置 MITMProxy 以将流量从 MITM 转发到burpsuite。
8. 输入以下命令
mitmweb 网站
-
转到选项并单击“编辑选项”,然后单击“设置此配置”
2. 搜索 mode 并在此处添加以下行
upstream:http://127.0.0.1:8888
3. 搜索 ssl_insecure 并启用
4. 在burpsuite中设置upstream proxy。
在模式中选择您为上游设置的burpsutie中的 IP 地址和端口号。
5. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。
六、通过objection绕过SSL Pinning
安装 Frida Server:
从 iPhone 打开 Cydia => 来源 => 编辑 => 添加 => https://build.frida.re => 搜索 =>frida =>安装
默认情况下,Frida 服务器在 iPhone 上运行,您无需每次都启动 Frida 服务器。
1.在 MacBook 中安装objection
sudo pip3 install objection
(注意* 使用objection时,请确保在设备中打开应用程序,否则objection将不起作用。)
2. 输入以下命令,将申请连接到objection并浏览申请。
objection --gadget package_name explore
3. 运行以下命令以绕过 SSL 锁定
ios sslpinning disable
4. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。
七、通过 Frida 绕过 SSL 锁定
1. 输入以下命令以绕过 SSL 锁定
frida -U -f package_name -l ssl.js --pause
U =>将连接的 USB 设备用作目标
F =>To 表示包名称
L =>加载脚本
ssl.js => 脚本
(根据您的 iOS 版本从代码共享下载脚本)
--pause =>强制 Frida 在注入脚本后 “不暂停” 应用程序执行。
通用脚本:
Java.perform(function () {
var SSLContext = Java.use('javax.net.ssl.SSLContext');
var TrustManager = Java.use('javax.net.ssl.X509TrustManager');
// 创建一个信任所有证书的TrustManager
var TrustAllCerts = Java.registerClass({
name: 'TrustAllCerts',
implements: [TrustManager],
methods: {
checkClientTrusted: function (chain, authType) {},
checkServerTrusted: function (chain, authType) {},
getAcceptedIssuers: function () {
return [];
}
}
});
// 替换默认的SSLContext
SSLContext.init.overload('javax.net.ssl.KeyManager[]', 'javax.net.ssl.TrustManager[]', 'java.security.SecureRandom').implementation = function (keyManagers, trustManagers, secureRandom) {
console.log('Bypassing SSL Pinning');
this.init(keyManagers, [TrustAllCerts.$new()], secureRandom);
};
});
2. 从 iPhone 开始浏览应用程序,并观察流量将在burpsuite中捕获。
八、通过 Info.Plist 修改绕过SSL Pinning
一些应用程序在 Info.Plist 文件中定义固定规则并设置布尔值。我们可以将这些布尔值从 true 修改为 false 并绕过SSL Pinning。
转到 IPA 文件的二进制文件,然后打开 Info.plist 文件。
数据存在且键值对,搜索关键字,如:
-
<key>TSKEnforcePinning</key>
<key>NSRequiresCertificateTransparency</key>
将这些值从 true 更改为 false,然后重新安装应用程序。
开始从 iPhone 浏览应用程序并观察流量是否会被捕获在burpsuite中。
原文始发于微信公众号(赛哈文):8种绕过iOS应用程序SSL Pinning的方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论