实现PROXY穿越(1):流程和NTLM算法

  最近忙,事比较多,活多了,还要降薪,唉。没什么时间看书,将以前的一些技术blog也移到这里。NTLM在去年年底和今年年初研究过一阵子,写了总结和例子程序。里面涉及很多算法,在网上查了很久。下面是以前的博客


  最近想实现一个通过PROXY穿越的网络编程,将相关的内容进行一下汇总。很多东西来自网络共产主义,也应该为共产主义有所回馈。

 

HTTP PROXY 穿越的流程
 
    从第一个HTTP请求到200 Connected established,一共有6个步骤『PROXY需要校验,如果Proxy不需要验证,非常简单,直接供步骤一跳到步骤六,不再做描述』。下面以HTTP的CONNECT方法为例子,GET和POST的实现是类似的。

步骤一:
  C --》 P : HTTP/1.1 CONNECT …… Connect:keep-Alive

步骤二:
  C 《--  P :HTTP 407 Connect: close
  在这里,PROXY给出三个Proxy-Auchenticate参数。Negotiate, Kerberos、NTLM的算法要求,其中NTLM根据后面交互的flags,有v1和v2两种算法。
  Negotiate是一个ssp,它会根据用户的环境选择其它合适的具体SSP(更像是一个重定向器,协商):NTLM或者kerberos。 NTLM 是一个比较老的SSP,但支持广泛,Kerberos是新的比较好的SSP,但不支持NT4.0以及之前版本。用户一般不直接调用NTLM或者 Kerberos,而是调用Negotiate。Negotiate的策略是,如果用户系统不支持Kerberos,或者没有提供支持Kerberos的 信息,则Negotiate会默认返回NTLM给客户端。
  根据Connect的字段,客户端需要Close TCP连接,重新建立一条新的连接,发送步骤三的数据包。

步骤三:
  C --》 P : HTTP/1.1 CONNECT NTLMSSP …… Connect:keep-Alive
  选择NTLM算法,向P发送经过base64处理的type1 message,带有用户的HOST名字『机器名字』和域名,例如我的机器HOST为YJY-WEI,域名为GDCTC。这些通过获取计算机的信息得到。如果在LINUX或者其他操作系统,可以填为NULL、NULL。

步骤四
  C 《--  P :HTTP 407 Connect: Keep-Alive
  P通过经过base64加密的信息给出type2 Message,其中包含nonce,提供给客户端计算,并给出NTLM算法的特性,这个特定由步骤三给出的NTLM flags,P来进行选择,可以指定使用NTLM使用v1还是v2。

步骤五:
  C --》 P : HTTP/1.1 CONNECT NTLMSSP …… Connect:keep-Alive
  C根据NTLM算法计算nonce、user、passwd,给出type3Message,并经过base64扰码给P送去。

步骤六:
  C --》 P : HTTP/1.1  200
  Connection建立,可以传递非HTML格式的内容 。

相关算法:NTLM
    如果通过网络抓包,一般采用NTLM和kerberos。我们的第一个目的是通过NTLM实现通信。需现对NTLM算法有所了解。

  windows的登录。按从弱至强可使用LM、NTLM、NTLM v2,kerberos。
  • LM网络认证协议是很多年前Microsoft和IBM合作开发操作系统是开发的,比较薄弱,经常被用作攻击工具获得windows的密码。他的薄弱基于以下原因:
  • LM无法辨别大小写字母,在密码哈希将所有字母都被转换成大写字谜,但包含不同类型字符的密码是难破译的。
  • LM将长于7为的密码分为两块,分别处理。攻击者可分别攻击LMmima的两个部分。因此创建一个长于7位的密码不能是密码更安全。
  • LM密码不能长于14个字符,但是长密码是更安全的密码。
  • LM协议使用DES,DES是所有加密协议中较弱的一个协议。

默认情况下,Windows Server 2003钱的操作系统会创建、贮存一个LM hash和一个NTLM hash。此外,网络认证是传送一个LM喝NTLM版本的相应。这些因素使得LM较容易攻击,破解,通过破解LM hash值得到账户密码。通过消除LM hash的存贮,有很多方法可用于加强密码安全。
  Windows NT引入NT LAN Manager认证协议。和LM不同,NTLM能辨别大小写字母。NTLM为整个密码生成一个MD4哈希(不分为7个字符的块)。虽然NTLM支持更长的字符,但是Window NT用户 界面不支持超过14位字符的密码,因此实际上这也是NT密码的长度。Windows 2000以后的版本能支持更长的密码,知道最到128位字符。
  NTLMv2支持信息的保密性和完整性。用独立密钥和HMAC-MD5算法,NTLMv能提供128位加密和NTLMv会话安全性。当配置NTLMv作为唯一允许协议时,LM的响应将不会被发送。
  计算机升级到Windows 2000及以上版本,更常用Kerberos认证协议。Kerberos协议被认为是专家级的强协议。协议的很多部分是专门针对那些有名的认证攻击而开 发。区别Kerberos协议和NTLM的一个办法就是,NTLM是为应用于可信任网络而开发的,而Kerberos是为了应用于不可信任网络而开发。但 是需要注意如果驱动器是由服务器IP地址而不是计算机名映射,Kerberos不可用,LM或NTLM可用。

 

相关链接:我的网络通信相关文章

NTLM的实现:

  • 实现PROXY穿越(16):NTLM的PROXY穿越
  • 实现PROXY穿越(15):NTLM Session Security
  • 实现PROXY穿越(14):NTLM type3 Message
  • 实现PROXY穿越(13):NTLM type2 Message
  • 实现PROXY穿越(12):NTLM type1 Message
  • 实现PROXY穿越(11):NTLMv2 session response
  • 实现PROXY穿越(10):NTLMv2 response
  • 实现PROXY穿越(9):NTLMv1 response
  • 实现PROXY穿越(8):NT-Hash的实现
  • 实现PROXY穿越(7):MD4和MD5
  • 实现PROXY穿越(6):LM-Hash的实现
  • 实现PROXY穿越(5):DES算法之三
  • 实现PROXY穿越(4):DES算法之二
  • 实现PROXY穿越(3):DES算法之一
  • 实现PROXY穿越(2):Base64算法
  • 实现PROXY穿越(1):流程和NTLM算法

你可能感兴趣的:(算法,windows,加密,网络,session,Microsoft)