把证书安装为系统证书的脚本


在这里插入图片描述
抓包的本质是一种中间人攻击,攻击者插入到两方通信过程中,未经授权的第三方既可以拦截、监视、篡改传输中的数据,也可以冒充其中一方与另一方通信。以下是有关MITM攻击的几个关键点:

实施方式:

  1. 拦截通信:
    攻击者在数据传输路径上拦截来自客户端和服务器之间的通信。例如,攻击者可能控制了路由器或交换机,或者设置了虚假的无线接入点。
  2. 会话劫持:
    攻击者窃取或伪造会话cookie来接管用户的已登录会话,通常在Web应用中见到。
  3. DNS欺骗:
    攻击者篡改DNS服务器响应,使得用户在访问一个网站时,实际上是被引导到了攻击者设定的服务器上。
  4. SSL劫持:
    攻击者在客户端与服务器建立SSL连接的握手过程中介入,然后与客户端和服务器各创建一个加密连接。
  5. ARP欺骗:
    在局域网中,攻击者通过发送伪造的ARP消息,使网络中的其他设备误以为攻击者的计算机是网关,流量便会通过攻击者的计算机。

在自动化测试或者逆向开发过程中,一般只涉及SSL劫持,通过SSL劫持对目标app进行抓包。安装证书为其必要环节,以下提供一个在网上找到的脚本 ,亲测可行。

脚本代码

# 删除之前可能创建的临时目录
rm -rf /data/local/tmp/tmp-ca-copy
# 创建一个单独的临时目录,用来存放当前的证书
# 否则,当我们添加挂载点时将无法再读取当前证书
mkdir -p -m 700 /data/local/tmp/tmp-ca-copy
# 复制现有的证书
# Android 9 之后
cp /apex/com.android.conscrypt/cacerts/* /data/local/tmp/tmp-ca-copy/
# 系统证书
cp /system/etc/security/cacerts/* /data/local/tmp/tmp-ca-copy/
# 在系统证书文件夹上创建内存挂载点
mount -t tmpfs tmpfs /system/etc/security/cacerts
# 将已有的证书复制回内存文件系统,以保持对它们的信任
mv /data/local/tmp/tmp-ca-copy/* /system/etc/security/cacerts/
# 复制我们的Charles证书进去,以便我们也信任它,7c2c2971.0是从charles中导出的证书加工而来
cp /data/local/tmp/7c2c2971.0 /system/etc/security/cacerts/
# 更新权限和SELinux上下文标签
chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
# 处理APEX覆盖,需要注入到每个命名空间:
# 首先我们获取Zygote进程(它们启动每个应用程序)
ZYGOTE_PID=$(pidof zygote || true)
ZYGOTE64_PID=$(pidof zygote64 || true)
# 注意,有些设备两个都有!
# 应用程序在启动时会继承Zygote的挂载点,因此我们在这里注入,以确保
# 所有新启动的应用程序立即可以看到这些证书:
for Z_PID in "$ZYGOTE_PID" "$ZYGOTE64_PID"; do
    if [ -n "$Z_PID" ]; then
        nsenter --mount=/proc/$Z_PID/ns/mnt -- \
            /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
    fi
done
# 然后我们将挂载点注入到所有已经运行的应用中,这样它们
# 也可以立即看到这些CA证书:
# 获取每个其父进程是Zygote之一的进程的PID:
APP_PIDS=$(
    echo "$ZYGOTE_PID $ZYGOTE64_PID" | \
    xargs -n1 ps -o 'PID' -P | \
    grep -v PID
)
# 注入到这些应用的挂载命名空间中:
for PID in $APP_PIDS; do
    nsenter --mount=/proc/$PID/ns/mnt -- \
        /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts &
done
wait # 并行启动 - 在这里等待完成
echo "系统证书已注入"

这段代码展示了一个在Android设备上动态注入(添加)新的CA(证书颁发机构)证书的过程,使得系统和应用信任新添加的证书。这通常用于中间人攻击(MITM)场景,如使用Charles或Wireshark等代理和调试工具来分析HTTPS加密流量时需要。下面是代码步骤的详细解释:

  1. 清理旧的临时目录:
    利用 rm -rf /data/local/tmp/tmp-ca-copy 删除之前可能存在的临时目录,确保不会与旧文件发生冲突。
  2. 创建新的临时目录:
    mkdir -p -m 700 /data/local/tmp/tmp-ca-copy 创建一个新的临时目录来存储当前有效的证书,设置权限为700(只有拥有者具有读、写、执行权限)。
  3. 备份现有证书:
    cp /apex/com.android.conscrypt/cacerts/* /data/local/tmp/tmp-ca-copy/ 和 cp /system/etc/security/cacerts/* /data/local/tmp/tmp-ca-copy/ 将Android系统现有的CA证书从两个不同的位置复制到临时目录中。这么做是为了在执行接下来的挂载操作后能够恢复这些证书,因为挂载操作会使原始证书不可访问。
  4. 在证书目录上创建内存型挂载点:
    mount -t tmpfs tmpfs /system/etc/security/cacerts 在 /system/etc/security/cacerts 目录上创建一个临时文件系统挂载点。这意味着该目录现在在内存中,并且可以更灵活的修改,而不会影响实际的文件系统。
  5. 恢复证书和添加新证书:
    mv /data/local/tmp/tmp-ca-copy/* /system/etc/security/cacerts/ 将备份的证书从临时目录移动到新的内存挂载点中。
    mv /data/local/tmp/7c2c2971.0 /system/etc/security/cacerts/ 移动新的证书(例如,Charles的根证书)到内存挂载点。这个证书会被系统额外信任。
  6. 更新权限和SELinux上下文:
    使用 chown, chmod, 和 chcon 命令设置证书文件的所有者、权限和SELinux上下文,确保这些证书文件符合系统安全策略。
  7. 处理APEX覆盖问题:
    系统为每个应用进程维护单独的命名空间。脚本通过查找系统初始化过程(Zygote)的PID,使用nsenter命令注入到每个Zygote命名空间中,从而使所有新启动的应用也能信任新添加的证书。
  8. 为所有已运行的应用注入挂载点:
    查找所有由Zygote启动的应用进程的PID,并为这些进程注入改动后的挂载点,使他们也能立即信任新添加的证书而无需重新启动。
  9. 等待上述所有命令执行完毕。

此脚本使得新添加的证书被系统和所有应用信任,这对于开发者和安全研究人员在调试或安全测试过程中捕获和分析HTTPS加密通信非常有用。务必注意,执行这一操作通常需要root权限,并且应该在充分理解可能带来的安全隐患的情况下进行。

SSL劫持

SSL劫持(SSL Hijacking)是中间人攻击(MITM)的一种形式,其中攻击者插入到客户端(如Web浏览器)和服务器(如Web服务器)之间的加密通信连接中。在SSL劫持攻击中,攻击者不仅能够监视通信内容,还能够动态地篡改交互的数据。

工作原理

SSL劫持的典型情景包括以下几个步骤:

  1. 拦截初始连接:
    客户端尝试与服务器建立SSL连接时,攻击者利用各种手段(如ARP欺骗、DNS劫持等)接管通信。
  2. 建立两个SSL会话:
    攻击者与客户端建立一个SSL连接,并与服务器建立另一个SSL连接。这样攻击者既是客户端与服务器的中间人,又是两个独立SSL会话的终点。
  3. 中继和篡改数据:
    攻击者接收客户端的SSL加密数据,解密数据以查看内容,然后再加密数据发送给服务器;同时也将服务器的响应解密后,视情况决定是否篡改,再加密发送回客户端。

实施条件

成功实施SSL劫持通常需要以下条件:

  1. 流量控制: 攻击者需要能够控制客户端和服务器之间的数据流量。
  2. 信任问题: 攻击者必须让客户端信任其提供的SSL证书,这通常需要伪造或窃取某个受信任的CA(证书颁发机构)签署的证书。
  3. 握手过程介入: 攻击者必须在SSL握手过程中介入,以插入自己的证书和权限。

防御措施

  1. 证书透明度 (Certificate Transparency): 一个通过公开和监测SSL证书来增加透明度的机制,以显露不合法证书的发行。
  2. HSTS(HTTP Strict Transport Security): 一种Web安全策略机制,它告诉浏览器只能通过HTTPS而非HTTP通信。
  3. 证书固定 (Certificate Pinning): 是指在客户端存储已知的服务器证书的信息,后续的通信必须使用包含这些信息的证书,否则连接会被认为是不安全的。
  4. 持续监控和审计: 通过不断监控网络活动和审计SSL证书的合法性来防范不正常的通信模式。
  5. 使用自动更新的浏览器和操作系统: 确保使用的浏览器和操作系统有最新的安全补丁和防御机制。

SSL劫持是一种高级的攻击技术,因其可以完全控制客户端和服务器之间的加密通信,所以其防御措施需要多层次的安全保护和用户教育。牢记,始终验证和确认SSL证书的可信性是防止SSL劫持攻击的关键一步。

APEX机制

APEX(Application EXpress)是从 Android 9 (API级别 28) 开始介绍的一种新的软件分发格式,旨在改善关键系统组件的核心运行时和模块化更新。在Android历代版本中,谷歌致力于将更多系统组件模块化,APEX是这一努力的一部分。这种机制主要体现在以下方面:

APEX的主要目标

  1. 更新系统组件: 在传统的Android OTA(Over-The-Air)更新中,为了更新系统组件,通常需要进行全面的系统更新,这往往是一个庞大而耗时的过程。APEX旨在允许单独更新系统组件,无需完整OTA更新,以此加快更新过程,提高灵活性,同时减少需要下载的数据量。
  2. 提高安全性: APEX通过限定系统组件的更新方式和更新源,使得整个系统的安全性得到增强。每个APEX模块都必须经过严格的验证,确保其来源的安全性和稳定性。
  3. 提高兼容性: 通过将系统组件封装为APEX模块,Google可以在不同设备上提供统一的系统组件,无论制造商做了什么定制,这有助于减少Android碎片化。

APEX的工作原理

  1. 模块化: APEX模块包含了构成某个系统组件的所有必要组成部分,包括本地库、资源文件和Dex文件。它不仅仅是一个文件,而是一个完整的文件系统映像,这意味着它可以包含一整套目录和文件结构。
  2. 独立更新: APEX文件可以通过设备上的Google Play系统更新或其他方式分发到设备上。广泛使用了APEX的设备可以只更新单独的系统组件而无需执行完整的系统升级。
  3. 验证与安全: 在安装或更新APEX文件之前,系统会验证APEX文件的签名,保证其未被篡改,并且来自于可信的来源。更新时,也会验证版本的兼容性,确保系统的稳定性。
  4. 只读挂载: 一旦验证并安装,APEX模块将以只读方式挂载到特定的挂载点上。这有助于防止未授权的更改,并维护系统的完整性。

APEX模块的安装与更新

在系统启动时会挂载APEX文件。如果检测到有新的APEX更新文件,系统将在下一次启动时安装这些文件。

更新流程通常遵循以下步骤:下载 -> 验证 -> 激活 -> 重启 -> 挂载。

APEX模块的实例

Conscrypt: 负责加密的Android平台本地库。
Media: 提供多媒体支持的模块。
Runtime: 包含了ART(Android Runtime)。

APEX的局限性

  1. 设备兼容性: 并非所有Android设备都支持APEX,特别是那些早于Android 9的设备。
  2. 定制限制: 尽管APEX模块有助于减少系统组件的碎片化,但设备制造商和运营商对系统组件的定制可能仍然需要全系统更新。
  3. 更新流程: 由于APEX模块是在系统启动时进行更新的,用户可能需要重启设备来完成更新过程。

APEX是Android系统持续发展和改进中的重要一环,未来的Android版本可能会进一步扩展和优化这一机制。

APEX官方文档与资源

  1. Android官方文档: Android开发者官网提供了关于APEX的介绍和文档,这是学习APEX机制最权威的资源之一。
    APEX | Android Open Source Project
  2. Google开发者博客: Google的开发者博客上不时会发布与APEX相关的文章,介绍新功能、案例研究或最佳实践。Google Developers Blog
  3. Android Source: 在Android的开源项目代码库中,你可以找到关于APEX模块实现的实际代码,对于深入理解APEX如何在系统级别工作非常有用。
    AOSP Source Code

参考文章

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

namedlock

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值