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