美文网首页移动攻防
App安全测试指南(七)——通信安全

App安全测试指南(七)——通信安全

作者: book4yi | 来源:发表于2020-11-24 21:26 被阅读0次

    本文仅作学习记录,如有侵权,请联系删除!

    1.1 通信加密:

    客户端和服务端通信是否强制采用 https 加密

    如果客户端与服务器之间的通信加密协议实现不当,攻击者将有机会对当前网络环境中其他合法用户的通信内容进行窃听甚至篡改。

    tcpdump 程序可以嗅探指定网络接口的所有网络流量。常用命令行如下图所示。

    -i 指定监听所有网络接口,
    -p 指定禁用混杂模式,
    -s 0 指定捕获完整数据包,
    -w 指定输出文件。

    执行命令后就会开始抓包,用 Ctrl+C 结束 tcpdump 的执行。得到 SD 卡上的 capture.pcap 文件后,可以在 pc 上结合 Wireshark 进一步分析。

    测试流程:

    使用 tcpdump 嗅探客户端提交的数据,将其保存为 pcap文件。使用 Wireshark 打开 pcap 文件,检查交互数据是否是 https。
    将客户端链接到的地址改为 http(将所有 URL 开头的 https 改为 http),查看客户端是
    否会提示连接错误。

    使用 tcpdump 将设备中的应用操作引发的通信包导出,使用 wireshark 查看,相应的命令:

    tcpdump -w traffic.pcap
    

    为了对服务器端进行测试,至少要先弄清楚客户端与服务器的通信协议,一般有三种情况:

    • 使用 HTTP(S)协议:大多可以通过设置系统 HTTP 代理来进行操作客户端的网络访问。这种情况占绝大多数:
    • HTTP(S)协议,但是不接受操作系统代理
    • 如果不是 HTTP 协议,那么一般就是由 TCP 或 UDP 实现的私有协议,大多数是 TCP。

    HTTPS证书校验绕过请参考:Android App—HTTPS证书校验绕过

    此外,通信过程如果有加密、签名等措施,通常需要从客户端代码入手,进行传统逆向分析以破解其加密。如果其实现非常复杂,此项可以认为安全。

    威胁等级:

    当客户端和服务器的通信不经过 SSL 加密(或没有参考 TLS 协议,RFC4346 等实现加密信道)时为高风险;
    当自实现通信算法存在漏洞可被解析或绕过时为高风险;
    使用低版本 SSL 协议(SSLV2,SSLV3 均存在漏洞,至少使用 TLSV1.1 以上算法)时为高风险;

    安全建议:

    建议使用 SSL 协议,并在客户端对服务端的证书进行验证。如果自行实现加密协议,建议在客户端预先存储服务端公钥,在建立会话时随机生成对称加密密钥,用服务端公钥加密并发送给服务端,随后服务端用私钥解密后,正式开始进行通信。加密过程尽量避免使用 CBC 模式

    1.2 证书有效性:

    • 客户端程序和服务器端 SSL 通信是否严格检查服务器端证书有效性。避免手机银行用户受到 SSL 中间人攻击后,密码等敏感信息被嗅探到

    通过 wifi 将手机和测试 PC 连接到同一子网。android 代理配置在手机上配置好代理,代理 IP 为测试 PC IP 地址,端口为代理的监听端口,如图所示。此时,客户端通信将会转发给测试 PC 上的 fiddler 代理。然后使用客户端访问服务端,查看客户端是否会提示证书问题。

    • 测试客户端程序是否严格检查服务器端证书信息,避免手机银行用户访问钓鱼网站后,泄露密码等敏感信息。

    通过修改 DNS,将客户端链接到的主页地址改为 https://mail.qq.com/,然后使用客户端访问服务端,查看客户端是否会提示连接错误。此项测试主要针对客户端是否对 SSL 证书中的域名进行确认。

    查阅代码中是否有 SSL 验证。下图是 Java 中进行服务端 SSL 证书验证的一种方式。关键函数为: java.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(),通过此函数查找 HostnameVerifier 的 verify 函数。如 verify()函数总返回 true,则客户端对服务端 SSL 证书无验证。(可能还有其他 SSL 实现,需要验证)

    • SSL 协议安全性。检测客户端使用的 SSL 版本号是否不小于 3.0(或 TLS v1),加密算法是否安全。

    使用 openssl,指定域名和端口,可以看到 SSL 连接的类型和版本。
    如下图所示, TLSv1.2,加密算法为 RSA 256 位密钥。(RC4,DES 等算法被认为是不安全的)

    openssl.exe s_client -host aq.qq.com -port 443
    

    在线SSL证书检测:SSL Certificate Checker

    威胁等级:

    当客户端和服务器互相不验证证书时高风险,当只有客户端验证服务器证书时为中风险;
    当服务器不通过白名单的方式验证客户端时为中风险;
    当客户端和服务器进行双向认证,并且服务器通过白名单方式验证客户端证书时无风险。

    安全建议:

    使用 Https 方式进行加密,且服务器通过白名单方式验证客户端证书。

    1.3 关键数据加密和校检:

    • 测试客户端程序提交数据给服务端时,密码、收款人信息等关键字段是否进行了加密,防止恶意用户嗅探到用户数据包中的密码等敏感信息。
    • 测试客户端程序提交数据给服务端时,是否对提交数据进行签名,防止提交的数据被木马恶意篡改

    使用代理观察交互数据,确认是否包含签名字段。尝试在代理中篡改客户端提交的数据,检查服务端是否能检测到篡改

    威胁等级:

    当账号,密码,卡号等数据明文传输,未进行二次加密时为高风险;
    当密码只进行了单项散列而未经过加密时为高风险;
    当返回数据中包含更新的 URL 且数据不加密时为高风险;
    当校验字段删除后服务器仍会处理所发送的数据包时为高风险;
    当校验字段的散列中不包含随机因子时为高风险。

    1.4 访问控制:

    测试客户端访问的 URL 是否仅能由手机客户端访问。是否可以绕过登录限制直接访问登录后才能访问的页面,对需要二次验证的页面(如私密问题验证),能否绕过验证。在 PC 机的浏览器里输入 URL,尝试访问手机银行页面。

    威胁等级:

    当 PC 端也可访问手机页面时低风险,当可以绕过登陆限制访问登陆后才能访问的页面时中风险。

    1.5 客户端更新安全性:

    测试客户端自动更新机制是否安全。如果客户端更新没有使用官方应用商店的更新方式,就可能导致用户下载并安装恶意应用,从而引入安全风险。

    使用代理抓取检测更新的数据包,尝试将服务器返回的更新 url 替换为恶意链接。看客户端是否会直接打开此链接并下载应用。在应用下载完毕后,测试能否替换下载的 apk文件,测试客户端是否会安装替换后的应用。

    威胁等级:

    当客户端返回明文 URL 地址并可以通过篡改的方式控制用户下载恶意 APK 包进行安装,则高风险;若返回数据包经过二次加密则无风险

    安全建议:

    对于返回的数据包要进行二次加密处理

    1.6 短信重放攻击:

    检测应用中是否存在数据包重放攻击的安全问题。是否会对客户端用户造成短信轰炸的困扰。

    威胁等级:

    当存在短信轰炸的情况时为中风险,若短信网关会检测短时间内发送给某一手机号的短信数量则无风险。

    参考如下:


    Android APP渗透测试方法大全.pdf
    App安全检测指南-V1.0.pdf
    APP测试指南_Android.pdf

    相关文章

      网友评论

        本文标题:App安全测试指南(七)——通信安全

        本文链接:https://www.haomeiwen.com/subject/znyuiktx.html