移动端防抓包实践

手机软件开发 2024-9-11 15:48:30 59 0 来自 中国
目次介绍


  • 01.团体概述介绍

    • 1.1 项目配景
    • 1.2 思索标题
    • 1.3 设计目标
    • 1.4 收益分析

  • 02.市面抓包的分析

    • 2.1 Https三要素
    • 2.2 抓包焦点原理
    • 2.3 搞定CA证书
    • 2.4 突破CA证书校验
    • 2.5 怎样搞定加解密
    • 2.6 Charles原理
    • 2.7 抓包原理图
    • 2.8 抓包焦点流程

  • 03.防止抓包思绪

    • 3.1 先看怎样抓包
    • 3.2 设置设置文件
    • 3.3 数据加密处置处罚
    • 3.4 克制黑科技抓包

  • 04.防抓包实践开辟

    • 4.1 App安全设置
    • 4.2 关闭署理
    • 4.3 证书校验
    • 4.4 双向认证
    • 4.5 防止挂载抓包
    • 4.6 数据加解密
    • 4.7 证书锁定
    • 4.8 Sign署名
    • 4.9 其他的方式

  • 05.架构设计阐明

    • 5.1 团体架构设计
    • 5.2 关键流程图
    • 5.3 稳固性设计
    • 5.4 降级设计
    • 5.5 非常设计阐明

  • 06.防抓包功能自测

    • 6.1 网络请求测试
    • 6.2 抓包测试
    • 6.3 黑科技挂载测试
    • 6.4 逆向破解测试

01.团体概述介绍

1.1 项目配景


  • 通讯安满是App安全检测过程中非常紧张的一项

    • 针对该项的紧张检测本领就是使用中心人署理机制对网络传输数据举行抓包、拦截和篡改,以查验App在焦点链路上是否有安全毛病。

  • 包管数据安全

    • 通过charles等工具可以对app的网络请求举行抓包,如许这些信息就会被清除的提取出来,会被非法分子举行使用。

  • 不想被竞争对手逆向抓包

    • 不想自身App的数据被别人十拿九稳地抓包获取到,从而举行雷同业务或数据分析、爬虫或网络攻击等粉碎性举动。

1.2 思索标题


  • 开辟项目标时间,都须要抓包,很多环境下纵然是Https也能正常抓包正常。那么标题来了:

    • 抓包的原理是?任何Https的 app 都能抓的到吗?如果不能,哪些环境下可以抓取,哪些环境下抓取不到?

  • 什么叫做中心人攻击?

    • 使用HTTPS协议举行通讯时,客户端须要对服务器身份举行完备性校验,以确认服务器是真实正当的目标服务器。
    • 如果没有校验,客户端大概与仿冒的服务器创建通讯链接,即“中心人攻击”。

1.3 设计目标


  • 防止App被各种方式抓包

    • 做好各种防抓包安全步伐,克制各种黑科技抓包。

  • 沉淀为技能库复用

    • 现在只是针对App端有须要做防抓包步伐,后期其他业务线大概也有这个须要。因此下沉为工具库,傻瓜式调用很有须要。

  • 该库终极设计目标如下所示

    • 第一点:必须是低入侵性,对原有代码改动少,最简朴的参加是一行代码设置即可。完全解耦合。
    • 第二点:可以动态机动设置,支持设置克制署理,支持设置是否证书校验,支持设置域名正当性过滤,支持拦截器加解密数据。
    • 第三点:可以检测App是否在双开,挂载,Xposed攻击环境
    • 第四点:可以机动设置加解密的key,可以机动更换加解密方式,好比现在接纳RC4,另一个项目想用DES,可以机动更换。

1.4 收益分析


  • 抓包库收益

    • 进步产品App的数据安全,必须对数据传输做好安全掩护步伐和完备性校验,以防止自身数据在网络传输中裸奔,乃至是被三方恶意使用或攻击。

  • 技能的收益

    • 下沉为功能底子库,可以方便各个产品线使用,进步开辟的服从。克制跟业务解耦合。傻瓜式调用,低本钱接入!

02.市面抓包的分析

2.1 Https三要素


  • 要清晰HTTPS抓包的原理,起首须要先说清晰 HTTPS 实现数据安全传输的工作原理,紧张分为三要素和三阶段。
  • Http传输数据现在存在的标题

    • 1.通讯使用明文,内容大概被窃听;2.不验证通讯方的身份,因此大概遭遇伪装;3.无法证明报文的完备性,以是有大概遭到篡改。
    • 1.png

  • Https三要素分别是:

    • 1.加密:通过对称加密算法实现。
    • 2.认证:通过数字署名实现。(由于私钥只有 “正当的发送方” 持有,其他人伪造的数字署名无法通过验证)
    • 3.报文完备性:通过数字署名实现。(由于数字署名中使用了消息择要,其他人篡改的消息无法通过验证)

  • Https三阶段分别是:

    • 1.CA 证书校验:CA 证书校验发生在 TLS 的前两次握手,客户端和服务端通过报文获得服务端 CA 证书,客户端验证 CA 证书正当性,从而确认 CA 证书中的公钥正当性(大多数场景不会做双向认证,即服务端不会认证客户端正当性,这里先不思量)。
    • 2.密钥协商:密钥协商发生在 TLS 的后两次握手,客户端和服务端分别基于公钥和私钥举行非对称加密通讯,协商获得 Master Secret 对称加密私钥(差异算法的协商过程细节略有差异)。
    • 3.数据传输:数据传输发生在 TLS 握手之后,客户端和服务端基于协商的对称密钥举行对称加密通讯。

  • Https流程图如下



2.2 抓包焦点原理


  • HTTPS抓包原理

    • Fiddler、Charles等抓包工具,实在都是接纳了中心人攻击的方案: 将客户端的网络流量署理到MITM(中心人)主机,再通过一系列的面板或工具将网络请求布局化地出现出来。

  • 抓包Https有两个突破点

    • CA证书校验是否正当;数据通报过程中的加密息争密。如果是要抓包,则须要突破这两点的技能,无非就是MITM(中心人)伪造证书和使用本身的加解密方式。

  • 抓包的工作流程如下

    • 中心人截获客户端向发起的HTTPS请求,佯装客户端,向真实的服务器发起请求;
    • 中心人截获真实服务器的返回,佯装真实服务器,向客户端发送数据;
    • 中心人获取了用来加密服务器公钥的非对称秘钥和用来加密数据的对称秘钥,处置处罚数据加解密。

2.3 搞定CA证书


  • Https抓包焦点CA证书

    • HTTPS抓包的原理还是挺简朴的,简朴来说,就是Charles作为“中心人署理”,拿到了服务器证书公钥和HTTPS毗连的对称密钥。
    • 条件是客户端选择信托并安装Charles的CA证书,否则客户端就会“报警”并中断毗连。如许看来,HTTPS还是很安全的。

  • 安装CA证书得手机中必须洗白

    • 抓包应用内置的 CA 证书要洗白,必须安装到体系中。而 Android 体系将 CA 证书又分为两种:用户 CA 证书和体系 CA 证书(须要Root权限)。

  • Android从7.0开始限定CA证书

    • 只有体系(system)证书才会被信托。用户(user)导入的Charles根证书是不被信托的。相称于可以明白Android体系增长了安全校验!

  • 怎样绕过CA证书这种限定呢?已知有以下四种方式

    • 第一种方式:AndroidManifest 中设置 networkSecurityConfig,App 信托用户 CA 证书,让体系对用户 CA 证书的校验给予通过。
    • 第二种方式:调低 targetSdkVersion < 24,不外这种方式谷歌市场有限定,意味着抓 HTTPS 的包越来越难使用。
    • 第三种方式:挂载App抓包,VirtualApp 这种多开应用可以作为宿主体系来运行别的应用,使用xposed避开CA证书校验。
    • 第四种方式:Root手机,把 CA 证书安装到体系 CA 证书目次中,那这个假 CA 证书就是真正洗白了,难度较大。

2.4 突破CA证书校验


  • App版本怎样让证书校验安全

    • 1.设置targetSdkVersion大于24,去掉清单文件中networkSecurityConfig文件中的system和user设置,设置不信托用户证书。
    • 2.公钥证书固定。指 Client 端内置 Server 端真正的公钥证书。在 HTTPS 请求时,Server 端发给客户端的公钥证书必须与 Client 端内置的公钥证书一致,请求才会乐成。

      • 证书固定的一样寻常做法是,将公钥证书(.crt 大概 .cer 等格式)内置到 App 中,然后创建 TrustManager 时将公钥证书加进去。


  • 那么怎样突破CA证书校验

    • 第一种:JustTrustMe 破解证书固定。Xposed 和 Magisk 都有相应的模块,用来破解证书固定,实现正常抓包。破解的原理大抵是,Hook 创建 SSLContext 等涉及 TrustManager 相干的方法,将固定的证书移除。
    • 第二种:基于 VirtualApp 的 Hook 机制破解证书固定。在 VirtualApp 中参加 Hook 代码,然后使用 VirtualApp 打开目标应用举行抓包。详细看:VirtualHook

2.5 怎样搞定加解密


  • 现在使用对称加密息争密请求和相应数据

    • 加密息争密都是用雷同密钥。只有一把密钥,如果密钥袒露,内容就会袒露。但是这一块逆向破解有些难度。而破解解密方式就是用密钥逆向解密,大概中心人假冒使用本身的加解密方式!

  • 加密后数据镇兼顾了安全性吗

    • 不肯定安全。中心人伪造本身的公钥和私钥,然后拦截信息,举行篡改。

2.6 Charles原理


  • Charles雷同署理服务器

    • Charles 通过将软件本身设置成体系的网络访问署理服务器,使得全部的网络请求都会走一遍 Charles 署理,从而 Charles 可以截取颠末它的请求,然后我们就可以对其举行网络包的分析。

  • 截取装备网络封包数据

    • Charles对应设置:将署理功能打开,并设置一个固定的端口。默认环境下,端标语为:8888 。
    • 移动装备设置:在手机上设置 WIFI 的 HTTP 署理。注意这里的条件是,Phone 和 Charles 署理装备链接的是同一网络(同一个ip地点和端标语)。

  • 截取Https的网络封包

    • 正常环境下,Charles 是不能截取Https的网络包的,这涉及到 Https 的证书标题。

2.7 抓包原理图


  • Charles抓包原理图

    • 3.png

  • Android上的网络抓包原来是如许工作的

    • Charles抓包

2.8 抓包焦点流程


  • 抓包焦点流程关键节点

    • 第一步,客户端向服务器发起HTTPS请求,charles截获客户端发送给服务器的HTTPS请求,charles伪装成客户端向服务器发送请求举行握手 。
    • 第二步,服务器发回相应,charles获取到服务器的CA证书,用根证书(这里的根证书是CA认证中央给本身颁发的证书)公钥举行解密,验证服务器数据署名,获取到服务器CA证书公钥。然后charles伪造本身的CA证书(这里的CA证书,也是根证书,只不外是charles伪造的根证书),假冒服务器证书通报给客户端欣赏器。
    • 第三步,与寻常过程中客户端的使用雷同,客户端根据返回的数据举行证书校验、天生暗码Pre_master、用charles伪造的证书公钥加密,并天生HTTPS通讯用的对称密钥enc_key。
    • 第四步,客户端将紧张信息通报给服务器,又被charles截获。charles将截获的密文用本身伪造证书的私钥解开,获得并盘算得到HTTPS通讯用的对称密钥enc_key。charles将对称密钥用服务器证书公钥加密通报给服务器。
    • 第五步,与寻常过程中服务器端的使用雷同,服务器用私钥解开后创建信托,然后再发送加密的握手消息给客户端。
    • 第六步,charles截获服务器发送的密文,用对称密钥解开,再用本身伪造证书的私钥加密传给客户端。
    • 第七步,客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就如许创建了”信托“。

  • 在之后的正常加密通讯过程中,charles怎样在服务器与客户端之间充当圈外人呢?

    • 服务器—>客户端:charles吸收到服务器发送的密文,用对称密钥解开,获得服务器发送的明文。再次加密, 发送给客户端。
    • 客户端—>服务端:客户端用对称密钥加密,被charles截获后,解密获得明文。再次加密,发送给服务器端。由于charles不绝拥有通讯用对称密钥enc_key,以是在整个HTTPS通讯过程中信息对其透明。

03.防止抓包思绪

3.1 先看怎样抓包


  • 使用Charles须要做哪些使用

    • 1.电脑上须要安装证书。这个紧张是让Charles充当中心人,颁布本身的CA证书。
    • 2.手机上须要安装证书。这个是访问Charles获取手机证书,然后安装即可。
    • 3.Android项目代码设置兼容。Google 推出更加严酷的安全机制,应用默认不信托用户证书(手机里本身安装证书),本身的app可以通过设置办理,相称于信托证书的一种使用!

  • 尤其可知抓包的突破口会合以下几点

    • 第一点:必须链接署理,且跟Charles要具有雷同ip。思绪:客户端是否可以判定网络是否被署理了
    • 第二点:CA证书,这一块克制使用黑科技hook证书校验代码,大概拥有修改CA证书权限。思绪:会合在可以判定是否挂载
    • 第三点:假冒中心人CA证书,在客户端client和服务端server之间篡改拦截数据。思绪:可以做CA证书校验
    • 第四点:为了可以在7.0上抓包,App每每设置清单文件networkSecurityConfig。思绪:线上环境去掉该设置

3.2 设置设置文件


  • 一个是CA证书设置文件

    • debug包为了可以大概抓包,须要设置networkSecurityConfig清单文件的system和user权限,只有如许才会信托用户证书。

  • 一个是查验证书设置

    • 岂论是权势巨子机构颁发的证书还是自署名的,打包一份到 app 内部,好比存放在 asset 里。然后用这个KeyStore去引导天生的TrustManager来提供证书验证。

  • 一个是查验域名正当性

    • Android允许开辟者重界说证书验证方法,使用HostnameVerifier类查抄证书中的主机名与使用该证书的服务器的主机名是否一致。
    • 如果重写的HostnameVerifier不对服务器的主机名举行验证,即验证失败时也继续与服务器创建通讯链接,存在发生“中心人攻击”的风险。

  • 怎样查察CA证书的数据

    • 证书验证网站 ;SSL设置查抄网站

3.3 数据加密处置处罚


  • 网络数据加密的需求

    • 为了项目数据安全性,对请求体和相应体加密,那肯定要知道请求体或相应体在哪里,然后才气加密,实在都一样岂论是加密url内里的query内容还是加密body体内里的都一样。

  • 对数据哪里举行加密息争密

    • 现在对数据返回的data举行加解密。那么怎样做数据加密呢?现在项目中接纳RC4加密息争密数据。

  • 抓取到的内容为乱码

    • 有的APP为了防止抓取,在返回的内容上做了层加密,以是从Charles上看到的内容是乱码。这种环境下也只能反编译APP,研究其加密解密算法举行解密。难度极大!

3.4 克制黑科技抓包


  • 基于Xposed(大概)黑科技破解证书校验

    • 这种方式可以查抄是否有Xposed环境,大概的思绪是使用ClassLoader去加载固定包名的xp类,大概手动抛出非常然后捕捉去判定是否包罗Xposed环境。

  • 基于VirtualApp挂载App突破证书访问权限

    • 这个VirtualApp相称于是一个宿主App(可以把它想像成桌面级App),它突破证书校验。然后再实现挂载App的抓包。判定是否是双开环境!

04.防抓包实践开辟

4.1 App安全设置


  • 添加设置文件

    • android:networkSecurityConfig="@xml/network_security_config"

  • 设置networkSecurityConfig抓包阐明

    • 中心人署理之全部可以大概获取到加密密钥就是由于我们手机上安装并信托了其署理证书,这类证书安装后都会被归结到用户证书一类,而不是体系证书。
    • 那我们可以选择只信托体系内置的体系证书,而屏蔽掉用户证书(Android7.0以后就默认是只信托体系证书了),就可以防止数据被解密了。

  • 实现App防抓包安全设置方式有两种:

    • 一种是Android官方提供的网络安全设置;另一种也可以通过设置网络框架实现(以okhttp为例)。
    • 第一种:详细可以看清单设置文件,相称于base-config标签下去掉 <certificates src="user" /> 这组标签。
    • 第二种:须要给okhttpClient设置 X509TrustManager 来监听校验服务端证书有用性。遍历装备上信托的证书,通过证书别名将用户证书(别名中含有user字段)过滤掉,只将体系证书添加到验证列表中。

  • 该方案长处和缺点分析阐明

    • 长处:network_security_config设置简朴,对整个app网络生效,无需修改代码;代码实现对通过该网络框架请求的生效,能兼容7.0从前体系。
    • 缺陷:network_security_config设置方式,7.0从前的体系设置不生效,依然可以通过署理工具举行抓包。okhttp设置的方式只能对使用该网络框架举行数据传输的接口生效,并不能对整个app生效。
    • 破解:将手机举行root,然后将署理证书放置到体系证书列表内,就可以绕过代码或设置查抄了。

4.2 关闭署理

<ul>charles 和 fiddler 都使用署理来举行抓包,对网络客户端使用无署理模式即可防止抓包,如
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 20:33, Processed in 0.135729 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表