许多系统都受简单密码的保护。这并不理想,因为在许多情况下,密码很容易被攻击者破解、重复使用或滥用。本节将探讨有关密码的攻击和防御。
什么决定了强密码?密码有多复杂?它有多少个字符?特殊字符的数量?
著名漫画创作者xkcd.com在下面的漫画中精彩地展示了密码是如何被攻击的。回顾一下,让我们进一步讨论。
来自XKCD的漫画:https://xkcd.com/936/
如果我们考虑第一个密码Tr0ub4dor&3,此密码将符合大多数密码策略规则,例如包含大写字母、数字、特殊字符和 11 个字符的长度。然而这个密码有一些问题,它是:
我们可以通过简单的方式大大增加密码的熵,而不是选择具有这些负面因素的密码。如果我们考虑密码正确的马电池主食我们看到密码得到了周到的改进:
像这样的密码称为密码短语,通常比具有一定复杂性的简单单词更好。考虑如何改进密码,使其变得更强,并符合密码策略规则,例如特殊字符和大写字母!您甚至可以在密码中使用空格,使密码短语的输入更加自然。
多年来,写下密码一直被认为是一种不好的做法,但真的是这样吗?在多个在线服务中使用相同的密码存在很大的风险,如果其中一个平台被黑客入侵怎么办?然后该密码就会被泄露,攻击者可以在使用该密码的所有其他服务中重复使用该密码。
为了解决这个问题,建议不要在多个服务中重复使用相同的密码。这对用户来说真的很困难,因为他们不仅需要使用唯一的密码,而且同时需要创建强大且可靠的密码!密码管理器通过为用户提供尽可能安全的方式在文件、数据库或其他系统中写下密码来帮助解决此问题,使密码易于访问并确保它们在不同服务中强大且唯一。
正确实施后,密码管理器将:
对于我们的用户来说,写下密码比让他们重复使用密码的风险要低得多。是的,这不是一个完美的解决方案,因为密码管理器可能会受到损害,但它被认为是一种更安全的方法。
如果密码本身可以被终结怎么办?总有人每天无法输入更长的密码作为密码。造成这种情况的原因可能有多种,例如:
不需要用户提供密码的系统的开发和实施正在迅速发展。如果我们允许用户使用密码,而不是要求用户使用密码进行身份验证,会怎样:
这方面存在挑战,但就安全性而言,我们真的会让问题变得更糟,还是对我们的用户来说更好?我们必须记住,我们并不是要实现完美的安全系统,它们通常是遥不可及且无法实现的,因此我们必须仔细考虑如何限制威胁,同时让用户的生活更轻松。密码并不完美,无密码解决方案也不是完美的。您将为您的用户实施哪一种?
据我们了解,无论使用哪种解决方案来验证用户,其帐户仍然存在重大风险,可以实施其他解决方案来帮助降低风险。
多重身份验证允许解决方案不仅根据用户的密码来验证用户,而且同时要求用户提供第二个因素来证明他们是谁。
可以通过多种不同的方式来询问第二因素。这里有一些例子:
上述所有内容不仅需要知道密码,还要求提供第二项(因素)。
此类解决方案有时被认为对用户来说非常具有侵入性。为了帮助解决这个问题,可以应用 DAC ("Discretionary Access Control") 的概念。 DAC 允许登录解决方案考虑是否使用多因素代码来挑战用户。例如,只有当用户满足以下条件时才需要使用多因素:
当攻击者遇到应用程序和服务时,可能有机会进行密码猜测。密码猜测是一种涉及攻击者通过网络与应用程序交互、尝试不同用户名和密码组合的列表的活动。
密码猜测使攻击者有机会找到用户名和密码组合较弱的帐户。
如果攻击者成功找到可登录的有效帐户,则会向攻击者提供新的机会。考虑现在向攻击者提供什么样的功能和数据。以下是攻击者成功猜测某人密码的一些示例:
许多网络服务都有内置的管理员帐户,有些甚至自安装以来默认密码就没有更改。对于网络上的每个服务,攻击者可以尝试使用默认凭据登录。此外,攻击者还可以尝试典型密码和弱密码。以下是一些典型密码和弱密码的示例。请注意,它们全部以感叹号结尾,以破坏密码策略:
Password | Comment |
---|---|
Summer2021! | Many people, including helpdesks of companies, perform password resets and set the password to the season of the year and the year we are currently in. |
W3schools123! | The name of the company is often used as peoples passwords. The number 123 and ! at the end is selected by users to pass password policies and make it a bit more complex. |
Rosalynn2006! | Rosalynn, perhaps someone's child? Users often use something of personal affection as their passwords. Names of children and perhaps the year they were born is very popular. |
Qwerty123456! | A seemingly random password? This password is someone pressing keyboard keys in order, then using numbers to do the same thing. |
THC-Hydra (https://github.com/vanhauser-thc/thc-Hydra) 是一个允许我们轻松配置用户名和密码列表以尝试多种不同服务的工具。它支持多种协议进行攻击,例如:
要使用 THC-Hydra 来定位例如 FTP,可以使用以下命令:
hydra -L common_usernames.txt -P common_passwords.txt ftp://localhost/
此命令使用常用用户名和常用密码列表来针对本地主机或您选择的 IP 地址上的 FTP 服务尝试每个用户名和密码。
攻击者使用的常见攻击是凭证填充。这涉及攻击者下载庞大的凭据数据库并针对网络服务测试适用的凭据。当第三方服务被黑客攻击、数据库被盗然后泄露到互联网上供任何人下载时,就会发生凭证泄露。
不幸的是,许多用户在不同的服务上重复使用相同的密码,使得凭证填充攻击对组织变得非常有效。
密码猜测是一种在线攻击,而密码破解是一种离线攻击。它涉及攻击者首先从目标窃取密码表示。
密码通常表示为密码哈希。哈希是一种通过单向函数发送用户密码来存储用户密码的方法,除非使用密码破解,否则密码无法逆转。
如果攻击者能够从系统检索凭据,则这些凭据可能会通过加密或哈希来受到保护。散列是一种单向函数,旨在不会反转为其原始值。
密码破解涉及使用计算能力,即 CPU ("Central Processing Unit") 和 GPU ("Graphical Processing Unit"),尝试创建与从系统检索到的受保护凭据相匹配的密码猜测。
通过探索和发现应用程序,有时您可能会遇到未受身份验证保护的应用程序。这些应用程序对于攻击者的探索很有用,例如利用搜索字段寻找敏感信息。
网络上的许多应用程序可以自由地探索,有时为攻击者提供他们正在寻找的确切数据。
在执行网络映射和端口扫描练习时,应探索每个发现的系统和服务。
通常,攻击者已经在使用环境中用户的凭据。例如,如果攻击者破坏了某人的计算机系统,他们可以重新使用系统已在使用的凭据。
这为攻击者提供了更多的机会。考虑现在可能被滥用的所有应用程序。例如:
一旦攻击者能够访问访问控制背后的应用程序,漏洞和数据通常会很丰富。
系统中的凭证也可以通过不同的方式提取,通常涉及系统的管理员访问权限。 Mimikatz (https://github.com/gentilkiwi/mimikatz) 就是这样一个工具,它试图从系统中转储凭证。