objection绕过SSL Pinning 起因 随着移动端安全逐渐加强,现在越来越多的app已经无法抓到包,或者提示网络相关错误。其实根本原因在于客户端发包时对于服务端的ssl证书进行了校验。 SSL Pinning原理 证书锁定(SSL/TLS Pinning)即将服务器提供的SSL/TLS证书内置到APP客户端中,当客户端发请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性 所以,ssl pinning需要开发人员将APP代码内置仅接受指定CA或域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性。 com.android.thememanager 上一步命令执行后会进入一个 objection 的 shell,执行命令 android sslpinning disable 即可绕过APP的SSL Pinning
pinned-tweet 原文:选自《Rust异步编程》第4章 Pinning 译者注:如果你一时半会没啃动Pinning,也别心急,试试阅读这篇《Rust的Pin与Unpin - Folyd》,理解起来会容易不少 Pinning详解 让我们尝试使用一个比较简单的示例来了解pinning。前面我们遇到的问题,最终可以归结为如何在Rust中处理自引用类型的引用的问题。 Pinning实践 让我们看下Pinning和Pin类型如何帮助我们解决此问题。 Pin类型封装了指针类型,它保证不会移动指针后面的值。 async { /* ... */ }; execute_unpin_future(fut); // Error: `fut` does not implement `Unpin` trait // Pinning Box`: let fut = async { /* ... */ }; let fut = Box::pin(fut); execute_unpin_future(fut); // OK // Pinning
SSL Pinning 指的是,对于 target sdk version > 23 的 Android App,App 默认指信任系统的根证书或 App 内指定的证书,而不信任用户添加的第三方证书。 这会导致我们在对 App 做逆向分析的时候,使用 Charles 无法抓 https 包(如图):图片针对 SSL Pinning,常见的绕过方法有两种:重打包 APK,修改 AndroidManifest 重打包重打包是绕过 SSL Pinning 比较常见且实用的办法。 Objection 框架提供了现成的 SSL Pinning Bypassing 功能,因此我们采用了该框架:https://github.com/sensepost/objection 。 package name>第五步:第四步命令执行后会进入一个 objection 的 shell,执行命令 android sslpinning disable 即可 disable APP 的 SSL Pinning
本文包含以下内容: 宿主机CPU特性查看 虚拟机CPU特性查看 KVM虚拟机cpu pinning如何配置 cpu pinning的应用场景 cpu pinning简单的性能测试 首先需求了解基本的信息 3 在线pinning虚拟机的cpu 强制让虚拟机只能在26-31这些cpu之间调度 virsh emulatorpin 21 26-31 --live 查看结果 virsh emulatorpin 技术应用场景 pinning前后效果比较 没有做cpu pinning ? 前面的cpu压力和后面的cpu压力相差很大 做了cpu pinning ? 前后CPU性能比较平衡了 ? 5 cpu pinning简单的性能测试 cpu pinning到底对cpu的性能影响有多大,进行了一个简单的测试。
作者附注:普通的 Pin<Box<_>> 是 pinning 而不是 pinned [^pinning-pinned]。 把值/实例 pin 住的 Box Pin<Rc<_>> "pinning Rc" 把值/实例 pin 住的 Rc Pin<Arc<_>> "pinning Arc" 把值/实例 pin 住的 Arc Pin<&_> "pinning (shared) reference" 把值/实例 pin 住的共享引用 Pin<&mut _> "pinning (exclusive) reference" 把值/ 对于具有内部可变的 pin 类型或包含 non-pinning 字段所组成的 pin 类型来说尤其如此,因为它们通常会在 non-pinning API 和 pinning API 之间共享大部分实现。 作者附注:pinning 对于安全的“异步”性能来说是一件大事!
0x00 前言 做APP测试过程中,使用burp无法抓到数据包或提示网络错误可能是因为APP启用了SSL Pinning,刚好最近接触到apk就是这种情况,于是便有了本文。 0x01 SSL Pinning原理 SSL Pinning即证书锁定,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性 0x02 环境 Win10 安卓模拟器(夜神模拟器) Burp Frida(Python 3.7) adb工具 apk(途牛apk) 0x03 利用Frida绕过SSL Pinning 绕过原理: 客户端请求时会将内置的证书与服务端的证书做一次性校验 在模拟器里运行途牛旅游app,并使用frida-ps -U命令列出设备上运行的服务,找到途牛应用程序的包名 下载注入脚本,保存为fridascript.js /* Android SSL Re-pinning Cert Pinning Bypass/Re-Pinning"); var CertificateFactory = Java.use("java.security.cert.CertificateFactory
在移动应用安全不断演变的格局中,SSL Pinning已成为抵御中间人攻击的关键防御机制。然而,对于安全研究人员和渗透测试人员来说,识别这些实现可能是一项耗时且复杂的任务。 我为什么要创建 SSLPinDetect我创建此工具的目的是为了在扫描应用中实现的SSL Pinning时,建立一些模式检测。在运行应用之前先进行静态分析会更容易。 传统的SSL Pinning检测方法通常需要手动代码审查或动态分析,这可能效率低下且消耗资源。 代码审查:在安全代码审查过程中实现SSL Pinning的自动检测。合规性审计:协助验证对SSL Pinning实施要求的遵循情况。研究:支持专注于移动安全实践的学术和职业研究。 其模块化模式系统确保能够快速纳入新的SSL Pinning技术,使您的安全评估保持时效性和全面性。参与贡献SSLPinDetect是开源的,欢迎安全社区的贡献。
数据可视化大屏 Sentry 监控 - Environments 区分不同部署环境的事件数据 目录 Content-Security-Policy Expect-CT HTTP Public Key Pinning Sentry 能够通过设置适当的 HTTP header 来收集有关 Content-Security-Policy (CSP) 违规行为以及 Expect-CT 和 HTTP Public Key Pinning (HPKP) :https://developer.mozilla.org/en-US/docs/Web/HTTP/Public_Key_Pinning Content-Security-Policy https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT HTTP Public Key Pinning HTTP Public Key Pinning (HPKP) 是一种安全功能,它告诉 Web 客户端将特定的加密公钥(public key)与某个 Web 服务器相关联,以降低使用伪造证书进行 MITM 攻击的风险。
一.fridajs脚本模板(网上找的保留) /* Android SSL Re-pinning frida script v0.2 030417-pier $ adb push burpca-cert-der.crt frida-android-repinning.js --no-pause https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida Cert Pinning Bypass/Re-Pinning"); var CertificateFactory = Java.use("java.security.cert.CertificateFactory
什么是SSLpinning SSL pinning,即SSL证书绑定,是验证服务器身份的一种方式,是在https协议建立通信时增加的代码逻辑,它通过自己的方式验证服务器身份,然后决定通过是否继续下去。 1.根据浏览器或者说是操作系统(android)自带的证书链 2.使用自签名证书 3.自签名证书加上SSL pinning特性 解决方案 有矛就有盾,开发者已经突破了ssl-pinning的限制达成了抖音的抓包需求 什么是SSLpinning SSL pinning,即SSL证书绑定,是验证服务器身份的一种方式,是在https协议建立通信时增加的代码逻辑,它通过自己的方式验证服务器身份,然后决定通过是否继续下去。 1.根据浏览器或者说是操作系统(android)自带的证书链 2.使用自签名证书 3.自签名证书加上SSL pinning特性 解决方案 有矛就有盾,开发者已经突破了ssl-pinning的限制达成了抖音的抓包需求
反抓包机制核心原理剖析1.1 反抓包机制的技术架构拼多多 App 的反抓包防护并非单一技术手段,而是由多层防护策略构成:网络层防护:检测代理服务器、SSL 证书校验、TCP/IP 栈特征识别;应用层防护:SSL Pinning 1.2 核心反抓包技术原理(1)SSL Pinning 证书固定拼多多 App 内置了可信 CA 证书的哈希值,在 HTTPS 握手阶段,会对比服务器返回的证书哈希与本地预置值,若不一致(如抓包工具的中间人证书 证书验证SSL Pinning 是阻止抓包的核心机制,我们通过 Objection 自动化绕过:bash运行若自动化绕过失效,可采用手动 Hook 方式:javascript运行3.3 第三步:突破代理检测机制拼多多 总结拼多多 App 的反抓包机制是多层防护体系,需从 Root 检测、SSL Pinning、代理检测、参数加密等维度分层突破;核心技术手段包括 Frida 动态插桩 Hook 核心检测 / 加密函数、 Objection 自动化绕过 SSL Pinning、Mitmproxy 抓包分析;所有逆向操作必须在合法合规的前提下进行,逆向技术的核心价值在于推动安全防护能力的提升。
prefer 属性配置说明参见:http://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/virt-driver-cpu-pinning.html 使用方法一般是建两个host-aggregate,一个叫cpu_pinning,一个叫normal,两个aggregate加入不同物理机,有绑定需求的虚机使用cpu_pinning这个aggregate
下面开始说如何防范: 1.2.1 SSL Pinning SSL Pinning的原理就是把服务端的公钥存到客户端中,客户端会校验服务端返回的证书是否和客户端保存的一致,这样就避免了中间人替换证书进行的攻击 SSL Pinning的实现比较简单,只需要把CA证书放入项目中,通过Security framework实现NSURLSession上的SSL Pinning。 但是用SSL Pinning有个很严重的问题,就是如果证书有问题,只有发布新版本才能解决。如果新版本一直审核不通过,app的网络通信就全部挂掉了。 如果不用SSL Pinning来防止中间人攻击,也可以把接口返回的数据也进行加密,这样抓包工具抓到包后也依然不能破解。 比如微信,微信中的接口用的是http协议,但是内容全部进行了加密。
Java层的 SSL Pinning APP代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性。 Native层的 SSL Pinning Native层也就是so里面做的SSL Pinning,目前没有通用的解决方案,只能见招拆招,具体情况具体去搞。 今天我们遇到的就是 so里面做的SSL Pinning,导致抓不到包。 针对flutter抓包 在对这个生鲜App的分析中,我们发现只有很少的数据包被截获,明显有很多包被漏掉了。
security/cacerts/ 注意 但是呢,现在多数手机都很难root了 包括我之前的锤子M1L和很多常见品牌,比如小米、华为等,的最新手机 如果真的可以root,那倒是容易此办法去解决ssl pinning 确保了手机已root或越狱 Android:已root 确保后续可以安装Xposed等工具 iOS:已越狱 确保后续能安装Cydia等工具 再去用可以绕开/禁止 SSL pinning
image.png 反抓包策略 为了防止中间人攻击,可以使用SSL-Pinning的技术来反抓包。 可以发现中间人攻击的要点的伪造了一个假的服务端证书给了客户端,客户端误以为真。 SSL-pinning有两种方式: 证书锁定(Certificate Pinning) 和公钥锁定( Public Key Pinning)。 突破SSL-Pinning抓包 在逆向界,一山更比一山高。 思路是这样的:内置证书或者公钥的时候,常常会有对比验证的函数,直接控制这个函数的返回结果让验证通过不就好了吗。 于是就有了一个突破SLL-Pinning的经典操作:采用Xposed+justTrustme模块。
四 Android O 新特性四 介绍以及开发指南 固定快捷方式和小部件 — Pinning shortcuts Pinning shortcuts 是一个比 APP shortcuts 更小的快捷方式 Pinning shortcuts 在桌面上可呈现不同的图标显示。 ? 用 requestPinShortcut() 方法应用 Pinning shortcuts。你可以通过 PendingIntent 来通知你的 shortcuts 有没有创建成功。 ?
2048 mykey QmVZvdYEsdfHSR43Qm1fY8eDFrhB3UNZ2oVyEuVUH3VHrg > ipfs name publish --key=mykey hashxxx Pinning Pinning 在IPFS里是一个很重要的概念,当我们每次请求一个网络上的内容的时候,IPFS总是会把内容先同步的本地提供服务,而为了防止 IPFS 存储空间不停增长,实际上使用cache 机制来处理文件 Pinning 的作用就是把文件”钉“住,确保文件在本地不被”回收“。 如果是重要的文件,就可以使用 Pinning 防止文件被删除。 当我们使用ipfs add 添加文件时,默认会进行Pinning(使用其他命令获取的文件不会进行pinning), IPFS 提供了pin命令进行Pinning操作, 比如我们查询下某一个hash
禁用 SSL Pinning(SecurityContext) 最后,让我们看看如何绕过SSL Pinning。一种方法是定义一个包含特定证书的新SecurityContext。 幸运的是,上面列出的Frida脚本已经绕过了这种root-ca-pinning实现,因为底层逻辑仍然依赖于BoringSSL库的相同方法。 禁用 SSL Pinning(ssl_pinning_plugin) Flutter开发人员执行ssl pinning的方法之一是通过 ssl_pinning_plugin flutter插件。
什么是SSL Pinning? 为什么要用SSL Pinning?正常的验证方式不够吗? 如果服务端的证书是从受信任的的CA机构颁发的,验证是没问题的,但CA机构颁发证书比较昂贵,小企业或个人用户可能会选择自己颁发证书,这样就无法通过系统受信任的CA机构列表验证这个证书的真伪了,所以需要SSL Pinning 要做到真正安全通讯,需要我们手动去验证服务端返回的证书,AFSecurityPolicy封装了证书验证的过程,让用户可以轻易使用,除了去系统信任CA机构列表验证,还支持SSL Pinning方式的验证。 1.2.2 使用 AFSecurityPolicy 时,总共有三种验证服务器是否被信任的方式: AFSSLPinningModeNone • 这个模式不做本地证书验证(不做 SSL Pinning