在本章中,我们将研究 Android 设备的网络流量,并分析平台和应用程序的流量数据。 通常应用程序会在其网络数据中泄漏敏感信息,因此发现它是渗透测试程序最重要的任务之一。
此外,你经常会遇到通过不安全的网络协议执行身份验证和会话管理的应用程序。 因此,在本章中,我们将学习如何拦截和分析 Android 设备中,各种应用程序的流量。
4.1 Android 流 量 拦 截
根据 OWASP 移动 Top10(
https://www.owasp.org/index.php/Project/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks
) ,不完善的传输层保护是第三大威胁。实际上,假设一个应用程序通过 HTTP 将用户的登录凭据提交到服务器。 如果用户位于咖啡店或机场,并在有人嗅探网络时登录到他的应用程序,会怎么样? 攻击者能够获得特定用户的整个登录凭据,它以后可能用于恶意目的。 假设应用程序正在通过 HTTPS 进行身份验证,通过 HTTP 的会话管理,并且在请求中传递身份验证 Cookie。 在这种情况下,攻击者也能够通过在执行中间人攻击时拦截网络来获取身份验证 Cookie。 使用这些认证 cookie,他可以直接作为受害用户登录到应用程序。
4.2 流 量 分 析 方 式
在任何情况下都有两种不同的流量捕获和分析方法。 我们将研究 Android 环境中可能的两种不同类型,以及如何在真实场景中执行它们。 被动和主动分析如下:
被 动 分 析
被动分析的概念是将所有网络信息保存到特定文件中,之后使用数据包分析器查看。 这就是我们将在 Android 设备中进行被动分析。 我们将使用
tcpdump
来将所有的信息保存到设备中一个位置。 此后,我们将该文件拉取到我们的系统,然后使用 Wireshark 或 Cocoa 包分析器查看它。 请参阅以下步骤:
-
我们从 Timur Alperovich 的网站
http://www.eecs.umich.edu/~timuralp/tcpdump-arm
下载为 ARM 编译的 tcpdump 二进制文件。 如果我们需要,我们还可以下载 tcpdump 的原始二进制文件并交叉编译( 为 Android 交叉编译你的二进制文件,请按照链接
http://machi021.blogspot.jp/2011/03/compile-busybox-for-android.html
。链接展示了交叉编译 BusyBox,但相同的步骤可以应用于
tcpdump
) 。
一旦我们下载了 tcpdump ,我们可以通过在我们刚刚下载的二进制上执行一个文件,来确认它是否为 ARM 编译。对于 Windows 用户,你可以使用 Cygwin 来执行命令。 输出类似于以下屏幕截图中所示:
-
这里的下一步是将
tcpdump
二进制文件推送到设备中的一个位置。 我们还必须记住,我们需要继续执行这个文件。 因此,我们将它推送到一个位置,我们可以从中更改权限,以及执行二进制来捕获流量。
-
现在,继续并使用
adb
的
pu
sh
命令推送二进制来将二进制推送到设备。 同样,在我们需要从设备中拉取内容的情况下,我们可以使用
pull
而不是
push
。
-
这里,我们将使用
adb pus
h 将其推送到 Android 中的
/data/local/tmp
:
adb push tcpdump-arm /data/local/tmp/tcpdum
-
一旦我们将
tcpdump
二进制推送到设备,然后需要使用
adb
在
shell
中访问设备,并更改二进制的权限。 如果我们试图运行
tcpdump
,它会给我们一个权限错误,因为我们没有执行权限。
为了更改权限,我们需要访问
/data/local/tmp
,使用
chmod
命令,并授予其权限
777
,这意味着应用程序将具有所有权限。 以下屏幕截图显示了上述命令的结果输出:
-
这里的最后一步是启动
tcpdump
并将输出写入
.pcap
文件。 使用
-s
,
-v
和
-w
标志启动
tcpdump
。 参考以下描述:
-s
:这表示从每个封包抽取给定( 在我们的例子中为 0) 字节的数据,而不是默认的65535 字节。
-v
:这表明详细输出。
-w
:这表明写入原始数据包的文件名。 例如,我们可以使用
./tcpdump-v-s 0 -w output.pcap
,以便将所有文件写入
output.pcap
,并输出详细信息。
-
在流量捕获执行期间,打开手机浏览器并访问位于
http://attify.com/data/login.html
的漏洞登录表单,该表单通过 HTTP 发送所有数据并使用 GET 请求:
-
这里使用用户名
android
和密码
mysecretpassword
登录应用程序。
-
我们现在可以在任何时候通过
adb shell
服务终止进程( 使用
Ctrl + C
) 。 下一步是将捕获的信息从设备拉取到我们的系统。 为此,我们将简单地使用
adb pull
如下:
adb pull /data/local/tmp/output.pcap output.pcap
-
你可能还需要更改
output.pcap
的权限才能拉取它。 在这种情况下,只需执行以下命令:
chmod 666 output.pcap
-
一旦我们下载了捕获的网络数据的
.pcap
文件,我们可以在 Wireshark 中打开它并分析流量。 在这里,我们将尝试查找捕获的登录请求。 我们可以从网站
http://www.wireshark.org/download.html
下载 Wireshark。 一旦下载并安装完毕,打开 Wireshark 并在里面打开我们新拉取的文件
output.pcap
,通过访问
File | Open
。
一旦我们在 Wireshark 中打开
.pcap
文件,我们会注意到一个类似下面截图所示的屏幕:
Wireshark 是一个开源封包分析器,它帮助我们发现敏感信息,并分析来自所有网络连接的流量数据。 在这里,我们正在搜索我们对
http://attify.com
所做的请求,并输入了我们的登录凭据。
-
现在,访问
Edit
并单击
Find Packets
。 在这里,我们需要查找我们提交登录凭据的网站,并检查
String
。
-
在这里,我们可以看到与
http://attify.com/data/login.html
的连接。 如果我们在底部窗格中查找有关此数据包的更多信息,我们可以看到包含我们输入的用户名和密码的请求网址。
因此,我们使用
tcpdump
成功捕获了网络数据,并将其存储在
.pcap
文件中,然后使用Wireshark 进行分析。 然而,被动流量捕获也可以通过
adb shell
直接完成。
adb shell /data/local/tmp/tcpdump -i any -p -s 0 -w /mnt/sdcar/output.pcap
这里,
-i
代表接口。 在这种情况下,它从所有可用接口捕获数据。
-p
指定
tcpdump
不将设备置于混杂模式( 这是在执行嗅探攻击时经常使用的模式,并且不适合我们目前使用的模式) 。 在使用
-tcpdump
标志启动模拟器时,我们还可以指定使用
tcpdump
。 我们还需要使用
-avd
标志,指定要捕获流量的 AVD 名称。
emulator -avd Android_Pentesting --tcpdump trafficcapture.pcap
主 动 分 析
主动分析的基本规则是,使每个请求和响应通过我们定义的中间设备。 在这种情况下,我们将设置一个代理,并使所有请求和响应通过该特定代理。 此外,我们可以选择操纵和修改请求和响应中的数据包,从而评估应用程序的安全性:
-
为了为 HTTP 创建代理,请使用指定代理 IP 和端口以及
-http-proxy
标志启动模拟器。
由于我们在同一个系统上运行模拟器,我们使用IP
127.0.0.1