[张洪飞 朱海涛 王骏]
数字时代,口令、密码与我们如影随行,生活中众多场景都需要验证口令和密码。口令和密码时常混用或等同,然而,二者是有区别的。中国科学院院士、密码学家王小云曾通俗解释说,当你输入一串字符,如果不经过任何处理直接送到服务器来验证,它一定不是密码,只是一个口令。如果输进去的字符,通过密码算法运算得出另外一个结果,这个结果可以验证你是否是合法的用户时,这个口令就变成了密码[1]。《中华人民共和国密码法》对密码的定义是采用特定变换的方法对信息等进行保护、认证的技术、服务和产品。
口令安全是信息系统安全运行和业务数据安全的重要保障。然而,由于网络安全意识不强、管理不到位,代码缺陷、技术约束不健全,政务信息系统口令安全隐患时有发生。以镇江市电子政务外网核心网络设备全流量样本分析为例,2021 年全年共有政务信息系统口令安全隐患192条/批次,其中弱口令28 条、口令明文存储/传输94 条、多次登陆尝试60 条。作者作为设区市电子政务外网网络安全工程师,直接处置、协助指导多个政务信息系统口令安全隐患整改,提出了系统的管理对策与技术对策。
普通人对无规律随机字符串记忆能力有限,一般不超过9 位,加之记忆惰性,弱口令现象普遍存在。弱口令是指易于被破解或被猜中的口令,例如123456、admin、111111、5201314、a123456、abc123、iloveyou 等仅包含简单数字和字母的口令。还有部分口令看起来复杂,但符合键盘分布规律,例如q1w2e3r4t5y6、qazwsx、gfrtyhbv、12qwaszx,实际上还是弱口令。信息系统批量开通的用户默认密码也是弱口令。弱口令容易被暴力破解,直接危害信息系统及数据安全。
用户口令未作任何形式密码运算,直接明文存储,隐患有三,首先口令明文存储,用户数据库一旦被泄露,明文口令将直接暴露;其次,明文口令在传输过程中易被监听获取;最后,数据库运维人员可直接浏览用户敏感口令信息,不利于程序开发与数据库运维分权操作,存在运维风险。2011 年,天涯网、CSDN、人人网等泄露超过8 000万条用户名及明文口令[2]。为方便记忆,普通网民往往会在多个不同网站使用相同口令。用户数据库通常包含用户名、手机号号码等信息,口令信息如果明文存储,一旦用户数据库泄露,不法分子通过“撞库”攻击方式,将进一步放大口令明文存储危害。2014 年,12306 网站13 万多条用户信息泄露事件的主要原因就是口令明文存储与泄露,黑客利用多个网站泄露的用户名与明文口令,通过自动化登陆工具登陆12306 网站获取用户个人信息[3]。
通过加密算法,明文口令转换成加密密文。若密码算法过于简单,密文就容易被破解。不安全的密码算法有BASE64、MD5、SHA1。
(1)BASE64 编码经过简单二进制转换,适合HTTP环境下传递较长的标识信息,BASE64 编码不能直接阅读,形似密文,例如,“zhenjiang”的BASE64 编码为“emhlbmppYW5n”。BASE64 编码可人工逆向计算还原,也可通过在线工具傻瓜式还原,例如站长之家(CHINAZ.COM)的“站长工具>Base64 编码解码”。
(2)MD5 是一种单向散列算法,由图灵奖得主、著名密码学家R.L.Rivest 在1992 年提出,散列摘要长度为128 位,很难逆向破解。通过密文字典可检索出密文对应的口令,例如CMD5 网站(www.cmd5.com)通过穷举字符组合的方式,创建了明文密文对应查询数据库。该站宣称记录约90 万亿条,查询成功率95%以上,1-6 位大小写字母+数字+特殊字符、8 位小写字母+数字组合口令对应密文已100%收集。
(3)SHA-1 是一种密码散列算法,于1995 年发布,该算法散列摘要长度为160 位,散列值通常呈现为40 个十六进制字数。与MD5 相比,SHA-1 安全性更高些,但运行速度略低。王小云教授带领的研究小组于2004 年、2005 年先后破解了MD5 与SHA-1 算法。
未限制登陆失败次数,黑客可以采用暴力破解方式获取口令。暴力破解一般利用爆破或渗透测试工具,通过大量猜测和穷举方式尝试获取用户口令。常见的猜测、穷举方法有二,其一是利用网络上已公开的弱口令集,其二是通过社会工程方法获取目标用户基本信息后使用口令生成器生成口令字典进行尝试破解。未限制登陆失败次数,为黑客暴力破解一个用户或多个用户的口令提供可乘之机。
口令策略是口令管理的有效手段。口令策略通常包含:(1)口令长度,限定口令最小长度及最大允许长度;(2)口令强度要求,口令必须包含的字符类型及种类要求;(3)重复口令使用限制,禁止用户重复使用指定数量的旧口令;(4)口令有效期,限定口令的有效期,口令到期后强制用户修改口令;(5)登陆失败次数限制,用户登陆失败达到指定次数后阻止用户在特定时间内再次登陆。
强口令通常包含大写字母、小写字母、数字以及特殊符号等,长度不低于8 位,不类似于以前使用过的密码,不包含个人姓名、登录名、常见人名、宠物名等,不是键盘上连续敲击的字符串。为了便于记忆,口令设置可采用中文句法的口令助记策略。用户设置口令时,选择一句对用户本人有意义,不包含个人敏感信息,其他人不太可能用到的中文语句,利用预定义规则或基于用户的选择,将其转换为用户口令[4]。例如,助记语句是“我和她相识于2008”,可转换得到口令为“w&Txsy2008”、“i&SHExsy2008”。口令是否符合强度要求,也可借助互联网在线密码安全性检测程序。
口令要妥善保存,不得将口令转告他人;若确因工作需要,必须对外告知口令,要掌握、控制口令知晓范围,提醒、监督口令合规使用,必要时可通过安全设备采取账户限源访问;对外提供口令时,可将口令修改为临时口令并约定使用期限,到期后及时作更换。用户口令登记与整理不得使用互联网上运行的办公电脑整理编辑,可采取手工填写方式,填写内容至少包括密码更换时间、使用人等信息。重要口令登记表应存放在密码柜中,不得将密码贴在办公桌上或记在易被发现的记事本上。
从笔者实践来看,为保障信息系统用户口令安全,常见的技术对策有:口令强度检测、口令加密、限制登陆失败次数、部署数字证书、限源访问等。
信息系统,尤其是大型信息系统,用户类型众多、数量庞大,再严格的行政管理措施也无法保证每一个用户设置、更改用户口令时一定会设置强口令,唯有通过技术手段,在用户登陆、设置、更改等环节设置口令强度检测,从源头上杜绝弱口令的产生与使用。从程序编码角度来说,进行弱口令检测简便易行,通过一条密码强度检测的正则表达式和几行代码即可实现。以PHP 程序设计语言为例:
加密算法可分为对称密钥算法、公钥算法和散列算法。口令设置的主要意义是确认用户身份,因此口令加密多采用散列算法。校验用户身份时只需采用相同加密,校验密文是否相同即可确认用户身份。常见的散列算法有MD5、SHA 系列、PBKDF2。散列算法很难逆向破解,几乎不可能根据口令密文直接推导还原出口令明文。破解散列密文的常见方式有暴力破解、密文字典、彩虹表等。暴力破解通过穷举明文口令计算散列密文正向碰撞。密文字典通过预先存储的“明文-密文”数据库字典反向检索出口令明文,密文字典需要惊人的存储空间。彩虹表通过预先计算的散列链,以一定的计算量降低存储空间,是目前破解散列密文的常用方式。
为防范“彩虹表”、“密文字典”,可采用附加“盐值”的散列算法。国内知名Discuz!论坛用户口令加密方采用常用的MD5 算法,“盐值”为长度为6Byte 的随机数,表达式是MD5(MD5(明文口令)||salt)[5]。各类编程语言一般自带各种加密算法与函数,以PHP 为例,函数password_hash(string $password,PASSWORD_BCRYPT,["cost"=>$cost])自动生成盐值,设置hash 递归次数为11,可有效防范“彩虹表”暴力破解。例如“zhenjiang”对应的密文可以为:
对于用户登陆失败次数达到一定数量,例如6 次以上的,暂停此用户登陆尝试或启用图形类验证码,可有效防范暴力破解,是常见的账户保护策略。登陆失败提示信息不要区分用户名错误和密码错误。用户登陆界面须防范用户口令跨站脚本攻击(XSS),例如在登陆界面设置随机数的MD5 码作为提交页面来源验证暗口令,通过会话(session)等方式传输到用户口令检测页面。检测页面在检查用户口令正确性之前首先检查暗口令是否正确,如不正确,说明存在跨站脚本攻击,应停止检查该用户登陆信息。
HTTP 协议在客户端和网站服务器之间以明文传输信息,存在信息泄露被篡改、流量劫持、钓鱼攻击等隐患,不适合传输用户名、密码、信用卡号等敏感信息。微信公众号API 接口调用在2017 年12 月就强制要求使用加密传输的HTTPS,不再支持HTTP。部署HTTPS 数字证书,自动激活浏览器中显示“锁”型安全标志,可实现口令及客户数据的加密传输,保障数据传输安全。中央人民政府、阿里巴巴、百度、京东等门户网站使用通用公钥证书,采用RSA256 及AES256 加密算法。
其它措施主要包括多因子登陆、密文变形、日志分析、密码应用评估、限源访问等。
(1)多因子登陆:用户登陆验证环节,增加短信验证、数字证书、手机令牌等登陆因子。防范暴力破解,可增加图形验证码等因子。
(2)密文变形:借鉴密码算法中的置换与替换思路,对通用密码算法产生的密文进行简单的替换或置换。密文校对时,只需采用同样的替换或置换方法。简单密文变形,有效提升破解难度,可防范“密文字典”及彩虹表破解方式。
(3)日志分析:用户每次登录,无论成功、失败,记录登录时间、ip 地址、浏览器版本、登录成功与否等。登录信息可用于用户登录频率、使用环境、是否合规等分析;
(4)定期商用密码应用安全性评估:《商用密码管理条例》(修订草案征求意见稿)第三十八条规定:非涉密的关键信息基础设施、国家政务信息系统等网络与信息系统,其运营者应当使用商用密码进行保护,自行或委托开展商用密码应用安全性评估[6]。评估密码应用的合规性、正确性和有效性。
(5)限源访问:指根据用户分布特点,合理设置防火墙、安全网关访问策略,阻断非目标用户访问。例如,镇江市政府网站群内容发布后台仅面向本市政务单位,通过设置白名单访问策略,阻断市外用户访问,有效降低安全风险;
笔者在2021 年上半年处置一例政务信息系统口令隐患问题。该系统是多年前建设的综合性业务系统,政务部门用户数12603 个。由于机构整合、岗位调整、人员变动等原因,众多用户账户处于停用状态,逐一核对用户信息难度较大,为尽快完成口令隐患整改,以行政管理对策为辅助、技术对策为主。为此,行政上通知各用户单位限期整改弱口令。技术上分析密文值,发现大量密文相同的用户,例如密文同为“7B21848AC9AF35BE0DDB2D6B9FC 3851934DB8420”的用户12368 个,密文同为“7C4A8D 09CA3762AF61E59520943DC26494F8941B”的用户160个,密文同为“96DF87DDD01EA68DD2E880888DCBD0 82B3089935”的用户5 个。上述密文显著特征是长度40位16 进制字符,符合SHA-1 算法密文特征。通过在线SHA-1 密文反查,上述3 个密文对应的口令明文分别是“11111”、“123456”、“88983035”。密文值相同且超过2 个的用户以及近半年未登录的用户口令集中批量替换成强口令密文。结合口令隐患整改实践,笔者认为,解决政务信息系统口令安全问题,三分管理,七分技术,重在技术对策。一切忽略人性的管理手段都会失效,一切没有技术手段保障的管理措施都会失效[7]。技术对策配置合理、科学,可有效降低口令管理难度,起到事半功倍的作用。