跳过内容

MASTG-TEST-0065: 测试网络数据加密

此测试即将更新

此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。

请提交PR帮助我们:MASTG v1->v2 MASTG-TEST-0065:测试网络上的数据加密 (ios)

发送反馈

概述

所有提出的案例都必须作为一个整体进行仔细分析。例如,即使应用程序在其Info.plist中不允许明文流量,它实际上可能仍然发送HTTP流量。如果它使用底层API(ATS将被忽略)或配置不佳的跨平台框架,则可能会出现这种情况。

重要提示:您应该将这些测试应用于应用程序主代码,以及嵌入在应用程序中的任何应用程序扩展、框架或Watch应用程序。

有关更多信息,请参阅Apple开发者文档中的文章“防止不安全的网络连接”“微调您的应用程序传输安全设置”

静态分析

通过安全协议测试网络请求

首先,您应该在源代码中识别所有网络请求,并确保不使用纯HTTP URL。通过使用URLSession(使用标准的来自iOS的URL加载系统)或Network(用于使用TLS进行套接字级别通信并访问TCP和UDP),确保通过安全通道发送敏感信息。

检查底层网络API的使用

识别应用程序使用的网络API,并查看它是否使用任何底层网络API。

Apple建议:在您的应用程序中首选高级框架:“ATS不适用于您的应用程序对较低级别网络接口(如Network框架或CFNetwork)的调用。在这些情况下,您有责任确保连接的安全性。您可以通过这种方式构建安全连接,但错误既容易犯又代价高昂。通常最安全的是依赖URL加载系统”(参见来源)。

如果应用程序使用任何底层API(如NetworkCFNetwork),您应该仔细调查它们是否被安全使用。对于使用跨平台框架(例如Flutter、Xamarin等)和第三方框架(例如Alamofire)的应用程序,您应该分析它们是否根据其最佳实践进行安全配置和使用。

确保应用程序

  • 在执行服务器信任评估时验证质询类型和主机名以及凭据。
  • 不忽略TLS错误。
  • 不使用任何不安全的TLS配置(参见 测试TLS设置)

这些检查是指导性的,我们不能命名特定的API,因为每个应用程序可能使用不同的框架。请在检查代码时使用此信息作为参考。

测试明文流量

确保应用程序不允许明文HTTP流量。由于从iOS 9.0开始,默认情况下会阻止明文HTTP流量(由于应用程序传输安全(ATS)),但应用程序仍然可以通过多种方式发送它

  • 通过在应用程序的Info.plist中的NSAppTransportSecurity上将NSAllowsArbitraryLoads属性设置为true(或YES)来配置ATS以启用明文流量。
  • 检索Info.plist(参见 探索应用程序包)
  • 检查NSAllowsArbitraryLoads是否未设置为全局true或任何域。

  • 如果应用程序在WebView中打开第三方网站,那么从iOS 10开始,可以使用NSAllowsArbitraryLoadsInWebContent禁用为Web视图中加载的内容提供的ATS限制。

苹果警告:禁用ATS意味着允许不安全的HTTP连接。也允许HTTPS连接,并且仍然受到默认服务器信任评估的约束。但是,扩展的安全检查(如要求最低传输层安全(TLS)协议版本)将被禁用。如果没有ATS,您可以自由地放宽默认服务器信任要求,如“执行手动服务器信任身份验证”中所述。

以下代码段显示了应用程序全局禁用ATS限制的易受攻击的示例

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

应该考虑应用程序的上下文来检查ATS。应用程序可能必须定义ATS例外才能实现其预期目的。例如,Firefox iOS应用程序已全局禁用ATS。此例外是可接受的,因为否则应用程序将无法连接到任何不具备所有ATS要求的HTTP网站。在某些情况下,应用程序可能会全局禁用ATS,但为某些域启用它,例如安全地加载元数据或仍然允许安全登录。

ATS应该为此包含理由字符串(例如“该应用程序必须连接到由另一个不支持安全连接的实体管理的服务器。”)。

动态分析

拦截被测应用程序的传入和传出网络流量,并确保此流量已加密。您可以通过以下任何方式拦截网络流量

  • 使用拦截代理(如 ZAP Burp Suite捕获所有HTTP(S)和Websocket流量,并确保所有请求都是通过HTTPS而不是HTTP发出的。
  • 诸如Burp和 ZAP之类的拦截代理主要会显示与Web相关的流量(例如,HTTP(S)、Web Sockets、gRPC等)。但是,您可以使用Burp插件(如Burp-non-HTTP-Extension)或工具mitm-relay来解码和可视化通过XMPP和其他协议进行的通信。

由于证书固定,某些应用程序可能无法与Burp和ZAP等代理一起使用。在这种情况下,请查看 测试自定义证书存储和证书固定

有关更多详细信息,请参阅