URLSession |认证挑战响应| NTLM

时间:2017-10-12 06:59:49

标签: ios nsurlsession urlsession

我知道How to Respond to an Authentication Challenge就像我们NTLM Authentication一样,因为有3个选项。

  • 提供身份验证凭据。
  • 尝试在没有凭据的情况下继续。
  • 取消身份验证请求。

但是我想知道这里的想法,当我们选择第一个选项Provide authentication credentials时,我们会传递用户名和密码URLCredential是否存在凭据泄漏的可能性,是否可以通过凭证,屏幕背后发生了什么? Apple网络API如何将凭据发送到服务器?

是的,我们可以设置服务器域,故障计数等策略,但从安全角度来看是否安全?来自中间人攻击(MIMA)或其他什么?

2 个答案:

答案 0 :(得分:2)

也许我发布问题的方式尚不清楚,但我从应用凭据安全的角度来看NTLM Authentication并且经过大量的Google后,我发现,NTLM是如何工作的,而且非常有趣看到该客户端不与服务器共享密码。以下是步骤。

enter image description here

  1. 客户端向服务器发出请求。
  2. 服务器需要验证用户,因为没有身份,因此服务器生成16个字节的随机数,称为挑战并将其发送给客户端。
  3. 客户端使用用户密码对此挑战进行哈希并将其返回给称为响应的服务器,它还包括用户名作为纯文本和质询发送给客户端。
  4. 服务器将所有内容发送到域控制器,并使用用户名从安全帐户管理器数据库中检索用户密码的哈希值并对挑战进行哈希处理。
  5. 域控制器将响应共享回服务器,如果它们相同则验证成功,否则失败。
  6. 因此,有趣的部分是网络API不与服务器共享密码,这意味着它非常安全。

    我希望它会帮助其他人For More

答案 1 :(得分:1)

有多种类型的挑战,您的问题的答案取决于您所谈论的挑战类型。每个挑战都有一个保护空间,它基本上可以说明您正在响应的挑战类型。

回答您关于最常见保护空间的问题:

  • 基于密码的基本身份验证(NSURLAuthenticationMethodHTTPBasic):您传递的凭据以明文形式发送到服务器(HTTP)或通过会话密钥(HTTPS)加密。
  • 摘要式身份验证(NSURLAuthenticationMethodHTTPDigest):您传递的凭据使用服务器提供的随机数进行加密散列,并且只会通过网络发送生成的散列令牌。
  • NTLM身份验证(NSURLAuthenticationMethodNTLM):您传递的凭据使用服务器发送的随机数进行加密哈希处理,并且只会通过网络发送生成的哈希令牌。
  • 客户端证书身份验证(NSURLAuthenticationMethodClientCertificate):证书将发送到服务器,但不会发送到私钥数据。客户端使用私钥对先前的TLS握手数据进行签名,以使服务器验证客户端是否确实拥有与该证书关联的私钥。
  • 服务器证书验证NSURLAuthenticationMethodServerTrust):如果您传递从服务器获得的证书,您必须先验证它,否则您有效地减少了HTTP的安全级别(即任何服务器都可以发送任何证书,并且在与服务器通信时,您会说要信任该证书)。

上面的列表涵盖了最常见的保护空间。 Kerberos是它自己的动物,我对它的运作方式一无所知。此外,还有“表单”保护空间,它只是自定义身份验证的占位符,您可以在应用程序代码的各个部分中使用,但实际上并未以任何有意义的方式支持。

值得注意的是,如果攻击者可以更改传输中的数据,则Basic,Digest和NTLM身份验证不会提供针对中间人攻击的保护,因为提供的身份验证令牌不依赖于请求的其余部分以任何方式。因此,这些仅适用于加密通道(HTTPS)。