1. 项目概述
在移动应用安全测试领域,Android模拟环境的搭建是基础且关键的环节。作为一名长期从事渗透测试的安全工程师,我发现在Linux Mint系统上基于Qemu构建Android模拟器,配合Burp Suite进行流量拦截,能够创建高度可控的测试环境。这套方案不仅避免了实体设备的硬件限制,还能灵活调整系统配置,特别适合进行长期的自动化安全测试。
2. 环境准备
2.1 系统基础配置
Linux Mint 19.1基于Ubuntu 18.04 LTS,其内核已内置KVM虚拟化支持。建议使用至少8GB内存的物理机,并为虚拟机分配4GB以上内存。关键准备工作包括:
- 验证CPU虚拟化支持:
bash复制egrep -c '(vmx|svm)' /proc/cpuinfo
输出大于0表示支持,需在BIOS中开启VT-x/AMD-V功能。
- 安装KVM相关组件:
bash复制sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
- 当前用户加入kvm和libvirt组:
bash复制sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER
注意:执行组修改后需要重新登录生效。如果遇到权限问题,可尝试重启系统。
2.2 Qemu源码编译
官方仓库的Qemu版本可能较旧,我们从源码编译8.1.0版本以获得完整功能:
- 安装编译依赖:
bash复制sudo apt-get build-dep qemu
sudo apt-get install libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
- 克隆源码并切换分支:
bash复制git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
git checkout v8.1.0
- 配置编译选项(关键参数说明):
bash复制mkdir build && cd build
../configure --target-list=x86_64-softmmu --enable-kvm --enable-virtfs --enable-sdl
--enable-kvm:启用KVM加速--enable-virtfs:支持主机-虚拟机文件共享--enable-sdl:提供更好的图形输出
- 并行编译加速:
bash复制make -j$(nproc)
sudo make install
编译完成后验证版本:
bash复制qemu-system-x86_64 --version
3. 网络配置
3.1 TAP设备与桥接
创建持久化的网络配置需要以下步骤:
- 创建桥接设备br0:
bash复制sudo ip link add name br0 type bridge
sudo ip link set br0 up
- 添加物理网卡到桥接(示例为enp3s0):
bash复制sudo ip link set enp3s0 master br0
- 创建Qemu网络脚本:
bash复制sudo tee /etc/qemu-ifup <<'EOF'
#!/bin/sh
echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ip link set $1 up promisc on
sudo /sbin/brctl addif br0 $1
sleep 2
EOF
sudo chmod +x /etc/qemu-ifup
3.2 网络问题排查
常见问题及解决方案:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 无法ping通外网 | 缺少NAT或路由配置 | 在br0上配置DHCP或静态IP |
| 桥接后主机断网 | 物理网卡未正确桥接 | 重新配置网络管理器或手动设置桥接 |
| TAP设备未出现 | 权限不足或脚本未执行 | 检查qemu命令中的-netdev参数 |
实操技巧:使用
tcpdump -i br0实时监控桥接流量,有助于诊断网络问题。
4. Android系统安装
4.1 镜像准备
推荐使用Android-x86官方镜像:
- 下载9.0-r2版本:
bash复制wget https://osdn.net/dl/android-x86/android-x86-9.0-r2.iso
- 创建qcow2格式虚拟磁盘(动态分配空间):
bash复制qemu-img create -f qcow2 android.img 16G
- 启动安装向导:
bash复制qemu-system-x86_64 -enable-kvm -m 4G -smp 4 \
-hda android.img -cdrom android-x86-9.0-r2.iso \
-boot d -vga std -display sdl
安装时需注意:
- 选择"Installation"而非"Live CD"
- 分区时建议使用ext4文件系统
- 跳过GRUB安装(选择No)
4.2 系统优化配置
首次启动后建议:
- 启用开发者选项(连续点击版本号7次)
- 开启USB调试模式
- 禁用验证应用功能:
bash复制adb shell settings put global verifier_verify_adb_installs 0
- 修改系统属性以支持ARM应用:
bash复制adb shell su -c 'setenforce 0'
adb shell su -c 'echo "ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi" >> /system/build.prop'
5. 流量拦截配置
5.1 Burp Suite证书部署
-
导出Burp的CA证书:
- 访问http://burp/cert
- 保存为
cacert.der
-
转换为PEM格式:
bash复制openssl x509 -inform DER -in cacert.der -out cacert.pem
- 计算证书哈希:
bash复制openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1
输出类似9a5ba575,将证书重命名为9a5ba575.0
- 推送到模拟器:
bash复制adb root
adb remount
adb push 9a5ba575.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0
5.2 代理配置
- 获取主机IP(在Qemu内):
bash复制adb shell ip route get 1 | awk '{print $7}'
- 设置全局代理:
bash复制adb shell settings put global http_proxy 192.168.1.100:8080
- 绕过特定流量(可选):
bash复制adb shell settings put global global_http_proxy_exclusion_list "*.google.com,*.facebook.com"
重要提示:Android 7+默认不信任用户证书,必须将CA证书安装到系统证书目录。
6. 高级调试技巧
6.1 常见问题解决
| 问题 | 解决方案 |
|---|---|
| SSL握手失败 | 检查证书是否在/system分区,而非/data |
| 应用仍检测代理 | 使用iptables重定向流量:adb shell iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination $PROXY_IP:8080 |
| 网络延迟高 | 在Qemu启动参数中添加-net nic,model=virtio -net user |
6.2 性能优化
- 启用KVM加速:
bash复制-cpu host -enable-kvm
- 使用virtio图形驱动:
bash复制-vga virtio -display sdl,gl=on
- 内存大页支持:
bash复制-object memory-backend-file,id=mem,size=4G,mem-path=/dev/hugepages,share=on -numa node,memdev=mem
- 多核CPU分配:
bash复制-smp cores=4,threads=1,sockets=1
7. 自动化脚本示例
创建一键启动脚本start_android.sh:
bash复制#!/bin/bash
QEMU=/usr/local/bin/qemu-system-x86_64
$QEMU -enable-kvm -m 4G -smp 4 \
-drive file=android.img,if=virtio,format=qcow2 \
-net nic,model=virtio -net tap,script=/etc/qemu-ifup \
-vga virtio -display sdl,gl=on \
-object memory-backend-file,id=mem,size=4G,mem-path=/dev/hugepages,share=on \
-numa node,memdev=mem \
-cpu host -machine type=pc,accel=kvm
赋予执行权限:
bash复制chmod +x start_android.sh
这套环境经过半年多的实际测试,稳定性足以支撑长期的安全评估工作。特别是在进行金融类App测试时,能够完整捕获所有API请求,包括使用了证书绑定的应用。建议定期更新Android-x86镜像以获得最新安全补丁。