Windows安全问答
问题列表:
1.工具(WCE)是如何能够获得用户口令的HASH甚至明文的?. 1
3. 在线登录(联系到DC)的情形下Windows通过什么方式保护用户的登录信息(HASH)?. 2
4. 在离线登陆(联系不到DC)的情形下Windows如何保护用户的登录信息?. 3
5. Vista(Windows Server 2008)和以后的操作系统是否有对NTLM的加强?. 3
6.为什么微软不发布一个产品更新来解决这些工具带来的风险?. 4
7. 微软提供哪些建议来减低规避用户登录信息被盗的风险?. 4
1.工具(WCE)是如何能够获得用户口令的HASH甚至明文的?
回答:
获取口令hash的方法:
- WCE必须运行在管理员的帐号下才可以读到所需要的内容。
- 根据操作系统的版本,WCE会用不同的方法找到lsass.exe进程中存储口令HASH的地址. 他们用的方法是反向工程来分析lsass.exe里面用的数据结构。这些数据机构都是内存中的数据结构.
- 计算出HASH的地址以后WCE就通过ReadProcessMemory()或者在lsass.exe进程中注入机器代码来读取内存的内容并显示出来。
有关WCE,它的作者有一个非常详细的说明在下面的PDF文档中. https://www.ampliasecurity.com/research/WCE_Internals_RootedCon2011_ampliasecurity.pdf.
获取明文口令的方法:
当用户在Windows上提供用户名和登录证明(口令或PIN码)进行登录的时候,口令和PIN码是通过明文来提供的. 具体的验证协议需要把它们变成协议里规定的格式再来使用.同时为了兼容一些协议,比如Digest, 当前的Windows还允许用可逆的方式来来加密用户口令并存在内存中。
- WCE必须运行在管理员的帐号下才可以读到所需要的内容。
- 根据操作系统的版本,WCE会用不同的方法找到lsass.exe进程中存储加密口令和加密key的地址. 他们用的方法是反向工程来分析lsass.exe里面用的数据结构。这些数据机构都是内存中的数据结构.
- 计算出加密口令和加密key的地址以后WCE就通过ReadProcessMemory()或者在lsass.exe进程中注入机器代码来读取内存的内容。
- 得到加密口令和加密key后用反向工程方法的到的解密方法来进行解密,得到明文口令
注:
Windows从来不会把口令以明文的方式存储在内存或磁盘上,只存了可逆加密过的口令.当协议要明文口令的时候,Windows会把这些口令解密并提供给相应的协议.
这种保护并不能阻止有系统级别访问权限的攻击者利用操作系统同样的方式获得这些口令并用于非法的目的.一个攻击者可以通过反向工程的方式用和操作系统同样的办法得到明文口令.这也是WCE获得明文口令的方法.
2.攻击者使用WCE必须满足什么条件?
回答:
要同时满足下面的三个条件:
1. 攻击者必须能够在系统上以某种方式登录,比如远程桌面或者本地登陆(桌面切换).
2. 攻击者必须能用本地管理员的帐号登陆.
3. 在被攻击的系统上必须有活跃用户的登录(有logon session在), 而且只有活跃用户的帐号可能被攻击.如果用户登出或者机器重启,那么WCE或其它hash截取工具无法获得他们的登录信息.
3. 在线登录(联系到DC)的情形下Windows通过什么方式保护用户的登录信息(HASH)?
回答:
首先用户的口令是不会用明文的方式存在内存或磁盘上的.Windows会在内存中保留口令的Hash.这是为了实现SSO(Single Sign On).
注: SSO(Single Sign On)意思是在一个环境中只要登陆一次就可以用登陆过的用户访问环境中的资源.比方说用户登陆了桌面系统后就可以访问文件服务器上的文件或者从邮件服务器收发电子邮件,而不需要对每次访问文件或收发邮件都要提供用户名和口令.
针对NTLM, 在XP上会有LM hash和NT hash. LM hash是以用户口令为key(56位)的DES("KGS!@#$%")结果. NT hash是MD4(Unicode(password)).
Windows Vista(Windows Server 2008)和以后的操作系统上,用户登录后在内存仍然有LM hash和NT hash,但是在SAM和AD中只保存NT hash(也就是MD4(Unicode (password))).
针对Kerberos,在XP上会用128位RC4-HMAC保护,在Windows Vista(Windows Server 2008)和以后的操作系统可以使用AES256-CTS-HMAC-SHA1-96来保护.
注:
Windows Vista(Windows Server 2008)以后的操作系统包括Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2.
4. 在离线登陆(联系不到DC)的情形下Windows如何保护用户的登录信息?
回答:
对于离线登录,由于无法联系到DC,用户的登录信息是缓存到磁盘才可以验证用户的登录的.在磁盘上的登录信息不是明文,而是口令的Hash.
对于Windows XP, 用户的离线登陆信息是用MD4(username + MD4(password)来保护.
Windows Vista(Windows Server 2008)和以后的操作系统会使用标准的离线密码存储PBKDF2协议. PBKDF2的全称是(Password-Based Key Derivation Function 2),它是美国国家标准与技术研究院推荐的离线密码存储方式. 保护的方式是先进行MD4(username + MD4(Unicode(password)), 结果再用SHA1进行1024次hash,每次hash还会用用户名作为salt.
在用户登陆后,为了SSO,这些用户的NTLM和kerberos使用的登录信息(通过用户输入的口令计算出来)是放在内存中,具体方式请看问题3的解答.
注:
我们可以用通过设置注册表值
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\Winlogon\ CachedLogonsCount=0
来禁用离线登录.这样Windows不会在磁盘上保留用户的登录信息.
5. Vista(Windows Server 2008)和以后的操作系统是否有对NTLM的加强?
回答:
Vista(Windows Server 2008)和以后的操作系统缺省不再在SAM和AD数据库中保留LM hash,而只保留NT hash.
6.为什么微软不发布一个产品更新来解决这些工具带来的风险?
回答:
用户登陆口令的盗取并不能通过一个产品更新来解决. 如果一个产品更新能解决这个问题,那么它需要防御并阻止恶意用户完成下面一个或全部任务.
找到系统中用户的登陆信息的存储位置 : 当前的安全讨论社区和攻击者对Windows的安全内核研究的比较深.如果更改加密方法或者设置迷惑攻击者或同时进行,这不会太有效,因为通过反向工程安全专家们会比较快的发现并更新攻击的方法.长期看,迷惑攻击者的方式不会有效.
抽取登陆信息 (HASH 或口令 ): 这些工具都必须使用本地管理员的帐号才能够运行. 本地的管理员对本地的计算机,包括内存,磁盘和处理器有完全的控制权。
虽然加密和隐藏口令的方法可以改变,但是对操作系统本身来讲,它仍然需要有一个方法获得这些信息来给用户提供SSO(Single Sign On)。如果一个攻击者有了本地管理员的权限,那么他可以使用跟操作系统一样的执行权限来执行他的代码,也就可以用操作系统同样的方法获得这些信息. 真正有效的阻止方法是避免攻击者获得本地管理员的权限,限制普通用户加入本地的管理员组,这个方法是现在就能有效地做到的.
注: SSO(Single Sign On)意思是在一个环境中只要登陆一次就可以用登陆过的用户访问环境中的资源.比方说用户登陆了桌面系统后就可以访问文件服务器上的文件或者从邮件服务器收发电子邮件,而不需要对每次访问文件或收发邮件都要提供用户名和口令.
重用登陆信息 (HASH 或口令 ): 如果有机器被攻陷的话(恶意用户掌握管理员),Single Sign On(SSO)在给用户带来好的访问体验的同时也会带来受攻击的风险.为了给用户提供Single Sign On的便利,用户的登陆信息必须以某种方式被操作系统存在内存里,在用户访问资源时提供HASH或口令的重用. 如果不这样做,在一个分布式系统里, 用户需要无数次的提供用户名和口令以访问各种资源.另外,一些键盘记录工具或者其他类似的登陆信息盗取工具仍然可以获得这些登陆信息.
微软仍然会以各种方式给用户提供建议来避免这些风险(例如https://www.microsoft.com/en-us/download/details.aspx?id=36036),但是通过单一的一个系统更新不能解决一次解决所有的问题。
7. 微软提供哪些建议来减低规避用户登录信息被盗的风险?
回答: 下面的链接提供了一个完整的文档.
https://www.microsoft.com/en-us/download/details.aspx?id=36036
8. Windows的安全级别获得了什么认证?
回答: Windows通过了国际通用的信息系统安全认证Common Criteria.
Windows 通过了“Common Criteria for Information Technology Security Evaluation” 级别EAL4+的认证. CCITSE 是国际上通用的信息系统安全认证.
下面是通过认证的链接.
https://www.commoncriteriaportal.org/products_OS.html#OS
另外微软提供了下面的信息来帮助管理员如何配置系统以符合安全标准. https://technet.microsoft.com/en-us/library/dd229319.aspx