GBT 22239-2019《信息安全技术 网络安全等级保护基本要求》中,8.1.4安全计算环境—身份鉴别项中要求包括:
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,并其中一种鉴别技术至少应使用密码技术来实现。
弱口令/空口令对应身份鉴别项中要求a),所以安全控制点为身份鉴别a。
GBT 28448-2019《信息安全技术 网络安全等级保护测评要求》中,测评单元(L3-CES1-01)
该测评单元包括以下要求:
a)测评指标:应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。
b)测评对象:终端和服务器等设备中的操作系统(包括宿主机和虚拟机操作系统)、网络设备(包括虚拟网络设备)、安全设备(包括虚拟安全设备)、移动终端、移动终端管理系统、移动终端管理客户端、感知节点设备、网关节点设备、控制设备、业务应用系统、数据库管理系统、中间件和系统管理软件及系统设计文档等。
c)测评实施包括以下内容:
1)应核查用户在登录时是否采用了身份鉴别措施;
2)应核查用户列表确认用户身份标识是否具有唯一性;
3)应核查用户配置信息或测试验证是否不存在空口令用户;
4)应核查用户鉴别信息是否具有复杂度要求并定期更换。
弱口令/空口令属于测评单元(L3-CES1-01)中测评实施的第3、4项,故定测评单元为L3-CES1-01.3。
查看系统是否采用了简单数字组合、常规等简单易猜解或空账户口令,如应用系统、中间件、数据库登录口令、服务器远程管理账户口令、guest账户、Axis2弱口令。
目前,账号仍然是最主要的用户身份认证方式,但由于安全意识的淡薄,很多人仍在使用弱口令。而一旦泄漏,所有的安全防范机制都将形同虚设。
弱口令没有严格的准确的定义,通常认为容易被人猜测到或者被破解工具破解的口令均为弱口令。比如仅简单的纯数字、简单的数字与字母组合的口令,123456、123qwe等。
弱口令的产生与个人习惯与相关安全意识有关,为了避免忘记密码,通常会使用非常容易记住的密码,或者直接采用系统默认的密码等。使用弱口令可导致直接被猜解后登录系统。
此代码为某系统后台的登录代码,可以看出用户名是admin、密码为admin888,这应该是管理员为了避免忘记密码,使用了一个非常容易记住的密码,安全意识不够。若攻击者使用弱口令TOP100对此系统进行爆破,就可以登录成功,获得后台权限。
所有可能存在未授权访问类的服务都有可能出现弱口令:
弱口令一般由以下依据组成:
1.中国常用名TOP500,常见组合;
2.姓名的全拼+数字;
3.姓全拼+名的首字母+数字;
4.姓名首字母+数字;
5.工号;
6.习惯性的利用键盘分布或者Shift+键盘布局;
7.特殊节日、纪念日、年月;
8.好记的数字组合、字母组合;
9.特殊含义的单词、好记的特殊字符组合、特殊含义的字母用数字替换等。
针对网站的弱口令,可以先手工进行猜解几个可能的弱口令,判断系统是否做了登录失败次数限制,若没有做此限制,就可以使用爆破工具进行爆破。收集相关信息,使用社工字典生成等工具创建针对该系统的字典,可对用户名、密码同时爆破,也可通过猜测的用户名登录失败后,系统返回的信息判断该账号是否存在,再针对存在的用户名进行密码爆破。
但现在很多网站为了防止系统遭受暴力破解、DDOS攻击、识别用户身份等攻击,会使用验证码机制。通常在网站的用户注册、密码找回、登录等页面处使用验证码,但当这些验证码具有一定的规律性并且没有做好对应的防护措施时会导致攻击者通过爆破等方式猜解/绕过验证码机制,可导致任意用户注册、批量注册无用账户、重置任意用户密码、获取系统权限等危害。
常见的验证码主要有图片验证码、邮件验证码、短信验证码、滑动验证码和语音验证码。
1. 短信验证码绕过
a. 短信验证码暴力破解
大部分情况短信验证码由4-6位纯数字组成。首先可以先抓取服务器向填写的手机号发送短信验证码的请求包,查看返回包中是否有明文的验证码,若有可直接使用。若没有可先判断验证码为4为还是6位,且判断系统是否对验证码的失效时间和尝试失败次数做限制,若没有攻击者就可以通过尝试对这个区间内所有的数字进行暴力破解。
比如,若验证码为4位,先抓取验证码验证请求包,发送至BurpSuite的Intruder模块,将验证码的范围设置为0000-9999,对验证码进行暴力破解。
b. 短信验证码重复使用:
某些系统会将验证码在客户端生成而非在服务器生成。针对此类验证码,当客户端需要和服务器进行交互发送验证码时,可借助浏览器工具或抓包工具查看客户端与服务器进行交互的详细信息,可在返回包中查看到验证码。
使用验证码识别工具(pkav、验证码识别接口);
1. 后台常见弱口令
2. 中间件常见弱口令
3. 数据库常见弱口令
4. 端口服务类弱口令
3389、FTP、POP3、RDP、SMB、SNMP、TELNET、phpmyadmin、ssh、system等:https://github.com/estell-yf/Dict/tree/master/%E7%AB%AF%E5%8F%A3%E6%9C%8D%E5%8A%A1
5. 网络设备弱口令
6. 其他弱口令
1. SNETCraker—超级弱口令检查工具
下载地址:https://github.com/shack2/SNETCracker
工具特点:
2. WebCrack——网站后台弱口令扫描工具
下载地址:https://github.com/yzddmr6/WebCrack
使用WebCrack可以对特定后台程序进行批量的弱口令爆破,当我们有一批统一程序的后台时,可以采用此工具或类似工具进行自动化的爆破。导入URL后可以直接爆破,需提前搜集好后台地址。
3. hydra—弱口令爆破工具
下载地址:
Linux:https://www.thc.org/releases/hydra-8.3.tar.gz
Windows:https://github.com/ory/hydra
hydra是著名黑客组织thc的一款开源的自动化的爆破工具,可以在线破解多种密码,已集成到kali中。
支持:POP3、SMB、RDP、SSH、FTP、Telnet、Mysql、AFP、Cisco AAA、Cisco auth、CVS、FTP、MSSQL、NCP、NNTP、Oracle、PCNFS、IRC、LDAP等。
4. Go-x-crack—一款GO编写的常见服务的弱口令扫描工具
下载地址:https://github.com/netxfly/x-crack
支持Windows、Linux双用的弱口令爆破工具
支持:FTP、SSH、SMB、MySQL、MSSQL、PostgreSQL、Redis等。
5. domainWeakPasswdCheck—域账号弱口令审计工具
下载地址:https://github.com/chroblert/domainWeakPasswdCheck
需要满足以下条件:
6. WeblogicWeakPwd—Weblogic弱口令批量检测工具
下载地址:https://github.com/rabbitmask/WeblogicWeakPwd
WeblogicWeakPwd最终版仍有欠缺,在异常处理这块还需要完善,尤其是遇到非web logic的URL,所以推荐预识别中间件,可用之前发布过的weblogic识别脚本(https://github.com/rabbitmask/WhoIsWeblogic)进行识别,另外,因为多进程模块自有的小bug,尽可能在非交互界面下使用——使用命令窗口执行。
7. pydictor—字典创建工具
下载地址:https://github.com/LandGrey/pydictor
中文版使用地址:https://github.com/LandGrey/pydictor/blob/master/README_CN.md
pydictor是一个使用python语言开发,遵循GPLv3协议的开源命令行工具,功能强大、简洁实用、适用场景多。
特点:
1.完全使用python原生库写成不需要额外安装其他任何的python模块;
2.同时支持python2.7+和python3.4版本,支持Windows、Linux、macOS;
3.可自定义化程度高,留出很多可配置规则的文件;
8. 在线字典创建工具—针对单个账户的密码生成
利用https://www.bugku.com/mima/、https://www.bugku.com/mima/两个社工库密码生成工具,根据相关信息,生成一份具有针对性的密码字典。
9. 白鹿社工字典生成器—社工弱口令
下载地址:https://github.com/x311/BaiLu-SED-Tool
依据此类社工弱口令组合的规律,编写成此款灵活和易用兼顾的字典生成器。
10. BurpSuite模块
a. jsEncrypter扩展——解决密码被加密处理问题
客户端JS文件对密码做加密处理发送给服务端,推荐使用BurpSuite的扩展工具—jsEncrypter:https://github.com/bit4woo/reCAPTCHA)。
b. reCAPTCHA扩展-验证码处理
利用第三方识别服务识别验证码:https://github.com/bit4woo/reCAPTCHA)
测试案例1:某系统未设置验证码,使用BurpSuite的Intruder模块对用户名进行爆破;
测试案例2:使用工具对某系统开放的服务进行弱口令爆破;
测试案例3:利用验证码验证一次反复使用的缺陷,绕过验证码机制;
系统登录界面如下图,无任何验证码机制。
使用BurpSuite的Intruder模块,设置用户名为变量,密码为123456,使用“用户名TOP500”字典进行爆破,发现大量密码为123456的弱口令用户。
使用超级弱口令检查工具,爆破出系统的Memcached用户名和密码均为弱口令。
确认验证码有效性。分别输入错误的验证码、正确的验证码,查看系统返回信息,判断系统验证码有效。
抓包,提交空验证码,返回信息如下图,验证后台是否对验证码进行了验证。
修改为错误的验证码,提示如下,说明后台对验证码也进行验证。
判断验证码是否存在过期的问题。刷新网页,获取新的验证码,将新的验证码继续输入到刚才抓取的数据包中。这时输入的是正确的验证码,系统应该返回用户名与密码不正确。
返回用户名与密码不正确
将用户名或密码随意更改一下,再进行提交,正常来说,系统应该返回验证码不正确,但系统返回信息与之前相同,为“用户名与密码不正确”。说明验证码被重复使用,一次验证反复使用,不存在过期的情况,
输入正确验证码,对用户名、密码进行爆破。
爆破成功。
弱口令会导致:
1. 口令强制安全策略
在口令生成的时候,需要满足一定的安全策略,才会被系统接受,比如:
(1)口令长度大于8位;
(2)口令应该为以下四类字符的组合:大写字母、小写字母、数字、特殊字符,每类字符至少包含一个;
(3)口令中不应该包含本人、父母、子女或配偶的姓名、出生日期、纪念日、登录名等与本人相关的信息,以及字典中的单词;
(4)口令不应该为用数字或符号代替某些字母的单词;
(5)口令不应该为连续的某个字符或重复某些字符的组合;
(6)不使用空口令或系统缺省口令;
(7)口令不得使用键盘上连续的数字、字母或字符;
(8)新密码不得与旧密码重复;
2. 口令管理安全策略
常见的口令安全管理策略,主要有:
(1)定期修改密码,如每三个月修改一次;
(2)建立统一账号登录系统;
(3)双因子认证;
(3)验证码机制;
以上的口令生成策略、口令管理策略并不能完全规避弱口令的生成,比如: