第3章〓口令攻防 通过本章学习,可以达到以下目标:  理解口令的概念,掌握口令攻防的技术及方法。  掌握NTPWEdit、Hydra、Crunch等口令攻击工具的基本使用方法。  从对远程暴力破解Windows远程桌面用户口令的防御案例中体会多层次防御方法。  重视对口令的管理,增强对口令攻击的防范意识。 3.1口令攻防概念 3.1.1口令的概念 口令是身份认证的一个组成部分,是操作系统及众多网络应用的第一道防线。口令的作用是向目标系统提供唯一标识个体身份的机制,从而保证目标系统的安全及不同用户的访问权限控制。 口令攻击是指黑客以口令为攻击目标,破解合法用户的口令或避开口令验证过程,然后冒充合法用户潜入目标系统,随心所欲地窃取、破坏和篡改目标系统的信息,直至完全控制目标系统。口令攻击是黑客实施网络攻击的最基本、最重要、最有效的方法之一。 3.1.2口令的分类及验证方式 1. 静态口令 静态口令是指用户登录系统的口令是在注册时一次性产生的,在下一次用户修改之前的使用过程中总是固定不变的。静态口令一般存储在目标系统的数据库中,有的口令在目标系统中会以文件形式存在,如Windows系统的登录口令。在登录网络系统时,用户输入的用户名和口令通过网络传输给服务器,服务器将其与系统中保存的用户名和口令进行查询及匹配,检查是否一致,从而实现对用户的身份验证。 静态口令从软件设计角度最简单易行,但是由于口令在被用户修改前的静态不变特性,使得其安全性较低。此外,如果用户设计的口令过于简单,则很容易被攻击者猜测出来; 如果口令过于复杂,那么用户又难以记忆口令,甚至经常忘记口令。当前互联网时代有太多的网络系统需要用户登录,一个用户需要记忆多个不同口令也不现实,因此往往会在多个系统中重复使用同一个或少数几个口令。在这种情况下,如果某用户的口令在一个系统中被攻击者破解,攻击者可能会使用口令去其他系统中“碰运气”,这无疑增加了口令被泄露的风险。 2. 动态口令 动态口令也称为一次性口令,是指根据专门的算法生成一个不可预测的随机字符组合,使得用户每次登录系统时的口令都是变化的。动态口令现在被广泛运用在网上银行、电子商务、大型门户网站等领域。例如,手机短信认证就是动态口令应用最广泛的场合之一。手机短信密码就是以手机短信形式请求包含6位或更多位随机数的动态口令,身份认证系统以短信形式发送随机的6位或8位密码到用户的手机上,同时将此口令存储到服务器中作为该用户的最新口令; 用户在登录或交易认证时输入此动态口令进行验证。此外,短信验证要求在约定时间内完成(如60s),超过时间阈值后,身份认证系统会发送新的短信来等待用户验证,从而确保更高的安全性。又如,在网站登录时,除了用户名和密码登录外,还可能会加入随机变化的图片验证码,这个验证码也可以看成是一个动态口令。 动态口令应用形式还有动态口令卡、动态口令硬件等,被广泛应用在网上银行交易、高考成绩查询及志愿填报等领域。动态口令卡上有横纵坐标及对应的数字,根据服务器反馈的坐标,输入相应的数字进行验证。动态口令硬件外观如U盘,是一种内置电源、密码生成芯片和显示屏,根据专门的算法每隔一定时间自动更新动态口令的专用硬件。 动态口令不仅提高了口令安全性,而且使得用户避免了记忆复杂口令。 3.1.3口令攻击的主要方法 1. 离线攻击 离线攻击一般是指对存储口令的文件或数据库载体直接进行攻击。破解的难度主要取决于口令的加密方式、加密算法、复杂度等。相对于在线攻击,离线攻击破解成功的可能性更大。此外,部分离线攻击是破坏或初始化口令文件。 2. 在线攻击 在线攻击一般是指通过网络访问常规的系统登录入口、模拟入口或非常规入口攻击用户口令。常规登录入口,如系统的登录窗口,通过人工输入进行口令攻击。模拟入口,如利用木马程序操控键盘和鼠标事件输入字符串来进行口令攻击,或者通过网络连接来进行口令攻击。本书后面将有案例介绍通过网络连接来破解Windows远程桌面的用户名和密码,以及通过Burp Suite工具重放攻击DVWA靶场网站的登录用户名和密码。此外,还有中间人攻击等其他非常规入口破解用户口令。 3. 弱口令攻击 弱口令主要是指两类口令,一是某些系统出厂设置的默认口令,如123456、888888、admin或空口令; 二是仅包含简单数字和(或)字母组合的简单口令,如123456、a123456、5201314、1qaz2wsx、1q2w3e4r、admin123、admin、password、princess等。 4. 猜测攻击 使用口令猜测程序进行攻击。在详细了解目标对象的社会背景后,根据用户的姓名缩写、生日、身份证号后6位、所在省市缩写、单位缩写、电话号码等要素,口令猜测程序可以列举出几百种可能的口令,并在很短的时间内完成猜测攻击。 5. 字典攻击 字典是一个存储口令的列表文件。字典攻击实际上是指口令来源是字典文件,其内容为自定义的弱口令集合或通过穷举法生成的口令集合。口令既可以是明文,也可以是密文。 6. 暴力(穷举)攻击 暴力攻击是一种口令攻击方式,口令来源可以是口令字典,也可以是程序化即时生成的口令集合,其原理是对所有可能的口令集合进行穷举式的逐一测试。例如,已知口令是6位长度的数字组合,则口令集合是{000000,000001,000002,…,999999},即有106个字典就一定能覆盖正确的口令,从而完成暴力攻击。理论上没有攻不破的口令,攻破只是一个时间的问题。如果有速度足够快的计算机能尝试字母、数字、特殊字符所有的组合,则最终能破解所有的口令。 7. 生日攻击 生日攻击是一种密码学攻击手段,利用概率论中生日问题的数学原理,攻击者可找到哈希函数碰撞。生日悖论的一个结论是只要一个班里达到23个人,至少有两人生日日期相同的概率就大于 50%。将长度不固定的明文C1使用特定哈希函数,生成固定长度输出的消息摘要(哈希值)H1,那么存在一个概率能找到另一个明文C2对应的哈希值H2等同于H1。攻击者只要找到这样的明文C2,就可以假冒成明文C1的身份通过系统验证。抵御生日攻击的方法是消息摘要的长度足够长(如128bit以上),则哈希函数碰撞的概率就足够小。 8. 社会工程学 社会工程学是一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行欺骗,从而入侵被骗者的计算机系统的一种攻击方式。后来延伸到真实社会当中,欺骗者通常以人际交往方式套取用户的秘密和口令,从而收集信息对被害人进行渗透。避免此类攻击的对策是加强用户防御意识。 3.1.4口令攻击的防御方法 口令攻击的防御方法主要从技术角度和用户管理角度两方面考虑。 1. 技术角度 (1) 口令长度尽量不少于8位。 (2) 尽量避免使用生日、电话号码、身份证号、完整的英文单词等有意义的口令。 (3) 不要使用常见弱口令,尽量使用强口令。强口令尽可能地包含多样的字符串组合,如大小写字母、数字、特殊字符的组合。 (4) 系统中的口令必须使用口令的消息摘要进行存储和验证,禁止明文存储和验证。 (5) 口令可使用摘要加盐机制,即系统中存储的口令摘要(哈希值)不是原始口令明文生成的摘要,而是在原始口令明文基础上附加了固定字符串或随机字符串后生成的摘要,附加的字符串又称为盐(salt),此方法可以更好地抵抗暴力攻击。 (6) 系统应采用验证码、多次登录失败禁用账户等方式防止自动化攻击。 (7) 有条件的系统尽量采用动态口令验证机制。 2. 用户管理角度 (1) 不要将口令写到纸上或存于计算机文件中。 (2) 尽量不要在不同系统上使用同一口令。 (3) 为防止他人窃取口令,在输入口令时应确认无人在身边。 (4) 定期改变口令,如每隔2~6个月要改变一次。 3.2Windows系统口令攻防 3.2.1Windows系统口令机制 SAM(Security Accounts Manager,安全账户管理器)是Windows操作系统的用户账户数据库,所有用户的登录名及口令等相关信息都保存在这个文件中。系统在保存SAM信息之前对SAM信息进行了压缩处理,因此,SAM文件中的信息不可读取。此外,在系统运行期间,SAM文件被系统锁定,也不允许复制。即使是管理员账号(account)也无法打开。SAM数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用注册表编辑器并设置适当权限查看SAM中的内容。SAM数据库默认保存在C:\Windows\System32\config目录下的SAM文件中,在这个目录下还包括一个Security文件,是安全数据库的内容,两者有较少的关系。SAM数据库中包括所有组和账户的信息,包括密码Hash、账户的SID等。 1. Windows系统的两种口令加密机制 Windows系统的SAM文件中保存着两类口令值,一个是LanMan版本的散列值(LM),另一个是NT版本的散列值(NTLM)。 (1) LM散列算法。 LM散列算法处理用户口令的过程是将用户口令分成两半,每一半都是7个字符(不足7个字符的以0x00补齐),然后分别对这两个口令进行加密,并将加密后得到的散列值串连在一起,从而得到最终的LM散列值。 (2) NTLM散列算法。 NTLM散列值由两部分组成: 一部分是通过变现DES算法,使用密码的大写OEM格式作为密钥(分成2个KEY,每个KEY为7字节,用0补足14字节),通过DESECB方式获得一个128位的密钥,加密特殊字符串"KGS!@#$%"获得一个16字节长度的值; 另一部分则是使用MD4对密码的Unicode形式进行加密,以此获得一个散列值。 2. Windows系统的两种口令加密机制比较 (1) LM安全性。 LM算法将14字节的密码分为两组分别进行加密,使得两组密文可以分别破解,并且明文空间从9514减少到957。LM算法不区分密码的大小写字符,使得明文空间从957减少到697。LM算法不像其他散列算法一样包含随机的初始向量,这使得用空间换取时间的字典攻击(如彩虹表)等成为可能。LM安全性较差,Windows XP及以前版本系统使用LM存储账户密码散列值。 (2) NTLM安全性。 NTLM算法的安全性较LM有所提升,这是因为其明文空间扩展到了95128,采用暴力破解的时间复杂度大大增加。但是,NTLM散列和LM散列一样,都没有在算法中附加随机数据的加盐机制,所以仍然会受到暴力攻击。同时,由于NTLM的明文空间较大,其字段占用的空间也会呈几何级数增长,破解时间自然也较LM要长很多。 视频讲解 3.2.2实验五: 本地破解Windows用户口令 1. 实验目的 (1) 掌握使用U盘制作Windows PE系统启动盘的方法。 (2) 掌握使用NTPWEdit等工具破解Windows 7口令的原理及方法。 2. 实验任务与要求 (1) 使用U盘制作Windows PE系统启动盘。 (2) 对计算机设置开机启动顺序,并优先加载Windows PE。 (3) 在Windows PE中使用NTPWEdit等工具破解Windows口令。 3. 实验原理(技术) (1) Windows口令SAM文件在当前Windows系统运行时是被锁定的,也不允许复制,因此需要脱机并加载其他操作系统破解。本实验无须拆卸硬盘,先制作Windows PE系统启动盘,并优先启动该启动盘,在Windows PE系统中读取并破解SAM文件。 (2) NTPWEdit 是一款Windows用户登录密码设置工具,支持破解Windows XP/7/10,以及Windows 2003/2008/2012系统。NTPWEdit破解的主要原理是在 Windows PE 环境中加载Windows操作系统中的 C:\Windows\System32\config\SAM 用户配置文件,对该配置文件中存储的原有用户登录密码进行删除或设置新登录密码后,再采用同样的算法加密并覆盖原有登录密码。 4. 实验仪器设备(环境条件) (1) 攻击机。 Windows PE和NTPWEdit工具。 (2) 靶机。 实体机Windows或虚拟机VMware Workstation 15.5+Windows。 (3) 空白U盘。 图31制作Windows PE 启动盘 5. 实验过程 (1) 制作Windows PE 启动盘。 使用空白U盘制作Windows PE 启动盘并自带NTPWEdit工具,Windows PE 启动盘软件可以使用老毛桃、大白菜、深度等,制作如图31所示。 (2) 设置系统启动顺序。 首选从U盘启动,而非硬盘启动。例如,某主机BIOS中设置U盘(KingstonDataTraveler 3.0)为第一启动设备并保存,如图32所示。 图32设置U盘为第一启动设备 (3) 清除原密码。 重新启动主机,从U盘的Windows PE系统启动后,找到密码清除工具NTPWEdit并启动。可见SAM文件路径被自动找到为C:\Windows\System32\config\SAM,先单击“打开”按钮,然后左边用户列表中就显示所有的本地用户,如Administrator、Guest等。选中需要重置密码的用户Administrator,再单击“更改密码”按钮,在弹出的对话框中输入两次新密码。此时,保存密码并重新启动,即可清除SAM文件中的旧密码并生成新密码,如图33所示。 图33使用NTPWEdit重置Windows用户密码 视频讲解 3.2.3实验六: 远程暴力破解Windows远程桌面用户登录密码 1. 实验目的 (1) 掌握使用Hydra工具远程暴力破解Windows远程桌面用户登录密码的方法。 (2) 掌握使用Crunch工具制作自定义规则的密码字典的方法。 (3) 掌握远程破解防范方法,体会口令强度的重要性。 2. 实验任务与要求 (1) 已知靶机用户名为administrator,密码为996,只需要对密码进行破解。因此,使用Kali上的Crunch工具制作密码字典,并了解有关命令的用法。例如,密码为3位数字组合,字典文件能够覆盖从000,001,…,998,999的字符串组合。 (2) 使用Kali上的Hydra工具,结合自制的密码字典,远程暴力破解Windows远程桌面用户登录密码。 3. 实验原理(技术) (1) 远程桌面协议(Remote Desktop Protocol,RDP)是用于远程控制系统较流行的通信协议之一,适用于大多数Windows系统,通过提供图形用户界面,允许用户远程访问服务器或其他计算机。Windows远程桌面连接使用RDP协议,默认使用TCP 3389端口。 (2) Hydra是一款开源的暴力破解密码工具,在Kali Linux上是默认安装的,可以对多种网络服务的账号和密码进行远程暴力破解。Hydra支持的网络服务或协议有SMB、RDP、SSH、FTP、POP3、Telnet、MySQL等。 (3) Crunch是一个创建密码字典的工具,按照指定的规则生成密码字典。使用Crunch工具生成的密码可以输出到屏幕,保存到文件或另一个程序。密码字典强大到包含有正确的用户名和密码,是暴力破解成功的前提条件。 4. 实验仪器设备(环境条件) (1) 攻击机。 虚拟机VMware Workstation 15.5+Kali Linux 2021,网络连接使用NAT模式,IP地址为192.168.88.129/24。 (2) 靶机。 虚拟机+Windows 7,网络连接使用NAT模式,IP地址为192.168.88.130/24,用户名为administrator,密码为996。 5. 实验过程 1) 攻击前 (1) 确认靶机开启远程桌面服务。 在靶机上开启Windows远程桌面服务如图34所示。 图34在靶机上开启Windows远程桌面服务 (2) 使用Crunch制作口令字典文件。 在Kali中使用命令crunch 3 3 1234567890 o /usr/share/wordlists/digit3.txt,即可生成一个最短3位、最长3位且字符为全数字的1000个口令字典,即000,001,…,998,999,其中包含正确的密码996。输出的字典为/usr/share/wordlists/digit3.txt文本文件,每个口令占一行,如图35所示。 图35使用Crunch制作口令字典文件 Crunch的有关语法格式如下。 #crunch min-len max-len [ charset string ] [options] Crunch的几个重要参数如下。  minlen,口令最短长度。  maxlen,口令最长长度。  charset string,口令所选的字符集,该字符集可自定义,也可用Crunch自带的charset.lst文件,包含数字、大小写字母、特殊字符等,部分字符集如图36所示。  o,输出字典文件。 图36Crunch自带的charset.lst文件部分内容 2) 攻击 (1) 使用Hydra(命令行程序)进行暴力破解。 由于已知用户名是administrator,因此只需要测试破解密码即可。使用命令hydra 192.168.88.130 rdp l administrator P /usr/share/wordlists/digit3.txt V,成功破解出正确密码996,如图37所示。 图37使用Hydra(命令行程序)对登录密码进行暴力破解 Hydra的有关语法格式如下。 # hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT] Hydra的几个重要参数如下。  server,目标IP。  s ,使用非默认端口。  l ,指定特定用户名破解。  L ,加载用户名字典。  p ,指定特定密码破解。  P ,加载密码字典。  C ,使用冒号分隔格式“登录名:密码”来代替L/P参数。  S,采用SSL链接。  o ,指定结果输出文件。  t ,设置同时运行的线程数,默认为16。  w