✔️ 2022-04-18 21:14:31 – 巴黎/法国。
注意:此消息仅提供技术建议。 本文中描述的测试由读者自行承担风险,并且只能在您有权测试的设备和网络上执行。
介绍
为了验证我们日常使用的应用程序的隐私和安全实践,我们需要能够检查它们发送的网络流量。 请求获知您位置的应用程序只能使用它来将其发送给您的朋友,或者它可以跟踪您的一举一动。 如果不确切知道正在发送什么流量,您永远不会知道。 传统上,这是动态分析的工作——运行应用程序并在用户与之交互时捕获流量。 典型设置可能涉及运行应用程序的测试设备连接到运行 mitmproxy、Burp Suite 或类似日志流量的无线接入点。 可以将额外的控制笔记本电脑添加到组合中,通过 USB 连接到测试设备,以在设备上运行 adb 命令或使用仪表工具包动态 Frida 覆盖 Java 方法。 通过覆盖对 Java 的 TrustManager 的应用程序调用并提供我们自己的(接受我们提供的代理证书),可以通过这种方式拦截 HTTPS 流量。 结合起来,该设备方案为分析静态和受控环境中的流量提供了强大的设置。
但是,如果我们没有豪华的测试实验室怎么办? 如果应用程序的行为根据您的位置或您与外界的互动而发生变化怎么办? 例如,如果您使用应用程序租车或打开共享工作场所的门,则应用程序的实时行为将不同于您在实验室中复制的行为。 对于这些类型的复杂交互,需要中间机器 (MitM) 漫游方案。 事实上,上图中的三个组件(测试设备、拦截器和控制设备)需要合并为一个设备,运行所有三个组件所需的软件。 如果被审计的应用程序是一种纪律技术,即某人安装在另一个人的设备上的监控应用程序,那么审计员还需要偷偷地捕获应用程序发送的流量,这可能需要额外的测试。 并发症。
本文将详细介绍配置 Android 设备以审核安装在其上的任何应用程序的流量所需的步骤,而不需要任何其他设备的物理存在。 设备需要 root 才能安装此设置所需的软件。 本文中所需的所有软件都是免费和开源的,除了设备本身之外,不需要一分钱的额外投资。 最终结果将允许用户以允许记录流量的特殊方式打开应用程序,而无需绑定外部设备或要求设备连接到网络或接入点。
医美问题
- 有根的 Android 设备
- 对 Linux 命令行的基本了解
- 对 IPv4 网络的基本了解
- 带有 Linux 的 PC 或虚拟机(我们在下面使用 Debian 11 x86_64)在安装期间进行交叉编译步骤
为简洁起见,我们回顾了以下一些步骤,但几乎所有这些步骤都在其他地方有详细记录。 如果没有足够的可用文档,我们会更详细地介绍并提供屏幕截图。
安装
概观
在配置阶段,目的是允许用户以可以拦截其流量的方式启动应用程序。 用户不必自己发出命令来执行此操作。 我们假设设置中涉及第三方侦听器,我们希望能够远程访问设备并发出命令。 这允许具有一定程度技术技能的侦听器与可能对应用程序功能具有特殊访问权限(例如使用其凭据登录)的用户分开。 用户应该只参与打开所需应用程序并与之交互的过程。 在此示例中,应用 ID 为 com.example.android – 将其替换为您要审核的应用。
为了给我们的设置增加额外的复杂性,我们希望这个过程尽可能自动化。 用户不必在设备启动时手动启动服务。
为了允许第三方侦听器从远程位置访问设备,我们将不得不处理网络交换机和位于 NAT 路由器后面的可能性,没有可公开路由的 IP 地址。 解决此问题的最简单方法可能是将设备连接到 Wireguard VPN,我们将在下面详细介绍。 如果监听者和设备操作者是同一个人,则不需要这一步——他们可以自己发出命令,为本地拦截做准备。
要以允许拦截的方式打开应用程序,我们需要在手机上守护 frida-server 和可在本地运行的 frida-tools。 frida-server 模块可用于优秀的低级 Android 工具 Magisk,它会在启动时自动运行服务器。 允许 frida-tools 在本地运行有点复杂。 我们需要在设备上部署一个完整的 linux 发行版,并在其上安装 frida-tools。
为了让用户以可拦截的方式轻松启动应用程序,在 Linux 容器上,我们将配置一个 SSH 服务器,当具有特定 SSH 密钥的用户连接到它时,该服务器会执行自定义 frida 命令。 然后,我们将使用流行的 ConnectBot Android SSH 客户端生成此 SSH 密钥并触发应用程序启动。
最后,我们需要在设备上安装 mitmproxy 来显示和记录我们遇到的流量。
我们建议设备在此设置阶段保持插入状态,以避免 Android 执行后台进程以节省电池的各种复杂情况。
显然,这些工具中有许多在 Android 操作系统中的底层工作。 在这种情况下,第一步是安装一个定制的 Android 操作系统,为我们提供该级别的访问权限。
闪存所需的操作系统/应用程序
首先,您需要将恢复映像闪存到您的测试设备。 我们推荐 TWRP。
然后启动进入恢复模式。 您可以找到特定于您设备的说明。
将您的设备连接到 PC 或虚拟机,并确保已安装 adb。 对于基于 Debian 的发行版,它就像 apt-get install adb 一样简单。
然后你需要下载、推送和刷入以下内容:
- 沿袭操作系统。 再次检查您设备的安装指南以下载正确的版本。
- 魔法师。 应该是类似于上面LineageOS的刷机过程。
- (可选)打开 GApp。 这可能是必要的,也可能不是必要的,具体取决于您正在审核的特定应用程序。 注意:这些应用程序是闭源的。
在安卓中设置
将设备重新启动到新安装的 Lineage OS 并连接到您的网络。
如果您正在测试需要从 Google Play 商店安装的应用程序,您可能需要将设备连接到您的 Google 帐户以方便使用。 这不是绝对必要的。 您可以使用我们开发的 apkeep 工具绕过此要求,并在设备上不安装 Google Play 的情况下安装您选择的应用程序。
从其网站安装 F-Droid。 系统将提示您允许从浏览器安装应用程序。
配置 WireGuard
仅当您希望允许第三方(例如研究人员)远程监控连接时,才需要执行以下步骤。
在您选择的 VPS 上,配置要连接的 WireGuard 对等点(服务器)。 请按照这些说明了解该过程的细分。
打开 F-Droid 并安装 WireGuard 应用程序。 系统将提示您允许从 F-Droid 安装应用程序。
打开 WireGuard 并设置与您的 WireGuard VPS 实例的连接。 例如:
完成后,连接到 VPS 对等体并允许该应用充当 VPN。 在设置 -> 网络和 Internet -> 高级 -> VPN 中,将 WireGuard 设置为永远在线的 VPN。
现在,只要设备连接到互联网,第三方就可以访问它。 这在频繁切换网络连接的移动环境中很有用。
配置 ConnectBot
ConnectBot 是一个 Android SSH 客户端,它将允许我们的用户以启用监控的特定方式启动应用程序。
打开 F-Droid 并安装 ConnectBot 应用程序。
在 ConnectBot 中,生成一个新的 SSH 密钥对。
记下公钥,因为稍后您将需要它。
接下来,添加要连接的新主机:
协议:ssh android@localhost 昵称:MitM App 使用公钥认证:
安装 SimpleSSHD
稍后我们将需要 SimpleSSHD 来传输 Linux 容器文件。
打开 F-Droid 并安装 SimpleSSHD 应用程序。
打开 SimpleSSHD 并启动 SSH 守护程序。 在应用程序设置中,激活“启动时启动”。
安装 Magisk 和 Frida 服务器
现在你需要安装一个 Magisk 模块来在设备启动时启动 Frida 服务器。
首先,在您的设备上下载最新版本的 magisk-frida。 这可能无法在默认浏览器中下载正确的 zip 文件。 如果发生这种情况,请尝试在其他浏览器中下载它。
以前,当我们处于恢复模式时,我们将 Magisk 刷入我们的设备。 这应该已经在我们安装的应用程序中添加了一个 Magisk 应用程序。 打开它并在出现提示时继续安装完整的应用程序。
安装完整的 Magisk 应用程序将覆盖引导应用程序。 打开 Magisk 并导航到模块选项卡。 点击“从存储安装”并选择您之前下载的 zip 进行安装。 您将需要重新启动设备。
在设备上部署 Linux
我们需要在设备上安装完整的 Linux 发行版,以便在本地通过 Frida 启动应用程序,从而拦截网络流量。
从其 GitHub 存储库安装 Linux Deploy。
在从默认配置配置或安装 Linux 之前,需要更改一些设置。 点击屏幕的左下角以访问此设置的设置并将发行版更改为 debian stable。 图像大小必须至少为 4G。 激活 init 系统和 SSH 服务器。 同时复制用户的密码。
您现在可以从右上角的菜单中选择“安装”,然后选择“开始”来启动容器。
最后,转到应用程序设置并启用自动启动。 我们发现将自动启动延迟更改为 10 秒很方便。
安卓 Linux 容器
使用 ConnectBot,您应该能够使用我们之前配置的配置文件和您在上一步中复制的密码连接到 Linux 容器。
使用以下命令安装我们的依赖项:
sudo apt install tmux python3-venv python3-dev gcc-arm-linux-gnueabihf python3-pyasn1 python3-flask python3-urwid libxml2-dev libxslt-dev libffi-dev python3-pip libssl-dev zlib1g-dev iptables rustc pip install mitmproxy prompt_toolkit颜料
并允许我们使用新的 SSH 密钥连接到主机 Android SSH 实例:
ssh-keygen #回车回车回车 scp -P 2222 .ssh/id_rsa.pub localhost:./authorized_keys
在 SimpleSSHD 应用程序中,您将看到提示时输入的新临时密码。 下列的:
编辑器 ~/.ssh/authorized_keys
返回 ConnectBot 密钥库并复制我们之前记下的公钥。 使用此公钥,在编辑器中输入以下内容并保存:
command=”/home/android/frida_*/bin/frida -H 127.0.0.1 -f com.example.android -l frida-android-repinning.js –no-pause”,no-agent-forwarding,no- transfer x11,没有端口转发…
来源: 评论 新闻
不要犹豫,在社交网络上分享我们的文章,给我们一个坚实的推动力。 📱