CN115828224B - 一种Go语言密码误用自动化检测方法及装置 - Google Patents

一种Go语言密码误用自动化检测方法及装置 Download PDF

Info

Publication number
CN115828224B
CN115828224B CN202211429754.XA CN202211429754A CN115828224B CN 115828224 B CN115828224 B CN 115828224B CN 202211429754 A CN202211429754 A CN 202211429754A CN 115828224 B CN115828224 B CN 115828224B
Authority
CN
China
Prior art keywords
password
misuse
program file
cryptographic
api
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211429754.XA
Other languages
English (en)
Other versions
CN115828224A (zh
Inventor
贾世杰
李文清
刘丽敏
郑昉昱
马原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN202211429754.XA priority Critical patent/CN115828224B/zh
Publication of CN115828224A publication Critical patent/CN115828224A/zh
Application granted granted Critical
Publication of CN115828224B publication Critical patent/CN115828224B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种Go语言密码误用自动化检测方法,所述方法包括:对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合;获取Go项目程序文件;基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果;综合所有密码误用规则下所述程序文件的密码误用检测结果,得到所述程序文件的密码误用检测结果。本发明弥补目前尚无面向Go语言密码误用检测工作的现状,为开发者选择密码算法以开发应用程序提供指导。

Description

一种Go语言密码误用自动化检测方法及装置
技术领域
本发明涉及面向Go语言的密码误用检测领域,尤其涉及一种Go语言密码误用自动化检 测方法及装置。
背景技术
随着《密码法》的颁布实施,人们对密码的认识逐渐加深、应用范围逐渐扩大,密码所 发挥的基石作用更加凸显。密码通过提供机密性、完整性、真实性、不可否认性等功能,构 成信息系统安全的基石,是保障网络空间安全最有效、最可靠、最经济的关键核心技术。密码技术只有得到正确、有效应用,才能发挥安全支撑作用。
常见的密码误用自动化检测方法主要以静态代码审计工具和动态代码审计工具为主。由 于动态分析基于代码的运行,而API底层代码极其复杂,运行时的日志路径变幻莫测,并且 相关工具强依赖于底层和Hook策略,前端Fuzz爬虫很难保证对代码功能的覆盖率,从而易 导致漏报现象。因此,目前主流的检测方法是具备较高覆盖率和较低漏报率的静态代码审计工具,此类工具通常会将源代码文件解析为相应的中间代码以提取信息流,继而建立起每一 个程序执行点与其前驱或后继执行点在执行顺序上的对应关系(即流图),根据流图反映的 所有可行路径以及运动规律来警报密码误用情况。
污点分析技术(taint analysis)是静态代码审计的一种实践方法,它通过跟踪敏感数据以 分析(用户定制的)信息流策略是否被有效实施。污点分析原理基于一个三元组<源,汇聚 点,无害处理/过滤器>(<soures,sinks,sanitizers/filters>),旨在分析程序中的由污点源(taint soures)引入的数据/变量是否能不经无害处理(sanitizer)地直接传播到污点汇聚点(taint sinks),若能,则被认为系统产生了隐私数据泄露或危险数据操作等安全问题;否则可证明 系统信息流安全。
已有工作普遍存在密码误用规则梳理不清晰、落地性不强等缺点,存在密码误用规则重 复或疏漏的情况;再者,已有工作主要面向C/C++、Java等编程语言设计检测工具,而针对其他新型编程语言(如Go语言等)的研究工作却相对较少。由于各类编程语言具有不同的 编程特色,其所提供的对应密码库的接口也不尽相同,从而会暴露出不同的使用安全性问题 (如在Java库中需要谨慎处理的ECB模式问题,在Go语言密码库中就不存在,因为Go语 言通过简单地删除不安全的方法来迫使开发人员使用最佳实践),因此需要针对新型编程语 言设计定制化的密码误用自动化检测方案。
发明内容
本发明提供了一种基于污点分析技术的Go语言密码误用自动化检测方法及装置,考虑 Go密码库所提供API的特殊性,实现了密码误用自动化检测功能,弥补目前尚无面向Go语 言密码误用检测工作的现状,为开发者选择密码算法以开发应用程序提供指导。
为了实现密码误用自动化检测的目标,本发明采用以下技术方案:
一种Go语言密码误用自动化检测方法,所述方法包括:
对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合;
获取Go项目程序文件;
基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所述密码误用规则集合 中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果;
综合所有密码误用规则下所述程序文件的密码误用检测结果,得到所述程序文件的密码 误用检测结果。
进一步地,所述密码误用规则包括:不要使用安全强度过低的密码算法、建议优先使用 推荐及非常推荐的密码算法、不要在RSA中使用PKCS#1-v1.5填充算法和不要使用Go密码 库弃用的不安全密码API实现中的至少一种;
所述基于模式匹配技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码 误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级;
将所述程序文件转换为SSA中间代码格式形式;
通过模式匹配技术对所述密码算法与SSA中间代码格式形式的程序文件进行匹配,获取 所述程序文件所使用密码算法的安全等级;
根据所述程序文件所使用密码算法的安全等级,得到该密码误用规则下所述程序文件的 密码误用检测结果。
进一步地,所述密码误用规则包括:不要使用安全强度过低的密码算法和建议优先使用 推荐及非常推荐的密码算法中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码 误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等 级密码算法的所述密码API作为不安全密码API;
获取所述程序文件的密钥初始信息;
将所述程序文件转换为SSA中间代码格式形式;
将所述不安全密码API作为污点汇聚点,且将所述密钥初始信息作为污点源,进行后向 污点分析,以判断是否触发所述污点源;
在未触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为 未触发密码误用;
在触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为所 述不安全密码API对应的安全等级。
进一步地,所述将所述不安全密码API作为污点汇聚点,且将所述密钥初始信息作为污 点源,进行后向污点分析,以判断是否触发所述污点源,包括:识别所述不安全密码API的 密码算法;
从所述污点汇聚点出发,利用SSA表单的信息流追踪所述不安全密码API的密码算法的 参数;
判断所述信息流是否触发所述污点源。
进一步地,所述密码误用规则包括:不要使用安全强度过低的密码算法、建议优先使用 推荐及非常推荐的密码算法和不要使用HTTP链接中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码 误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等 级密码算法的所述密码API作为不安全密码API;
获取所述程序文件的独立加密原语;
将所述程序文件转换为SSA中间代码格式形式;
将所述不安全密码API作为污点汇聚点,且将所述独立加密原语作为污点源,进行后向 污点分析,以判断是否触发所述污点源;
在未触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为 未触发密码误用;
在触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为所 述不安全密码API对应的安全等级。
进一步地,所述将所述不安全密码API作为污点汇聚点,且将所述独立加密原语作为污 点源,进行后向污点分析,以判断是否触发所述污点源,包括:
识别所述不安全密码API的密码算法;
从所述污点汇聚点出发,利用SSA表单的信息流追踪所述不安全密码API的密码算法的 参数;
判断所述信息流是否触发所述污点源。
进一步地,所述密码误用规则包括:不要使用不安全的PRNG、不要使用可预测/静态密 钥、不要在密钥派生算法中使用同一口令或盐值和在CTR、OFB、GCM和XTS工作模式中的IV唯一,且在CBC、CFB工作模式中的IV随机中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码 误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等 级密码算法的所述密码API,作为不安全密码API;
获取所述程序文件的参数初始信息;
将所述程序文件转换为SSA中间代码格式形式;
将所述不安全密码API作为污点汇聚点,将所述参数初始信息作为污点源,且设置一随 机数发生器作为过滤器,进行后向污点分析,以判断是否触发所述污点源;
针对每一路径,在遇到所述参数初始信息对应的参数配置指令之前,如果检测到被标记 为过滤器的随机数发生器,则进行清除污点标记、清除本路径以及检测下一路径,直至所有 路径检测完毕;
判断所述信息流是否触发所述污点源;
在被所述过滤器清除污点标记的情况下,该密码误用规则下所述程序文件的密码误用检 测结果为未触发密码误用;
在未被所述过滤器清除污点标记且触发所述污点源的情况下,该密码误用规则下所述程 序文件的密码误用检测结果为所述不安全密码API对应的安全等级。
进一步地,所述密码误用规则包括:不要使用不安全的SSL/TLS协议、不要在SSL/TLS 协议中使用不安全的密码套件和不要在SSL/TLS协议中跳过证书/主机名验证中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码 误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等 级密码算法的所述密码API,作为不安全密码API;
获取所述程序文件中与SSL/TLS协议相关的特定参数配置;
将所述程序文件转换为SSA中间代码格式形式;
将所述SSL/TLS协议初始化指令作为污点源,且将所述SSL/TLS协议中的特定参数作 为污点汇聚点,进行前向污点分析,以判断是否触发所述污点汇聚点;
在未触发所述污点汇聚点的情况下,该密码误用规则下所述程序文件的密码误用检测结 果为未触发密码误用;
在触发所述污点汇聚点的情况下,该密码误用规则下所述程序文件的密码误用检测结果 为所述与SSL/TLS协议相关的安全性问题。
一种Go语言密码误用自动化检测装置,所述装置包括:
规则生成模块,用于对编程语言密码库所提供的密码API进行梳理,得到密码误用规则 集合;
文件获取模块,用于获取Go项目程序文件;
误用检测模块,用于基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所 述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码 误用检测结果;
结果生成模块,用于综合所有密码误用规则下所述程序文件的密码误用检测结果,得到 所述程序文件的密码误用检测结果。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实 现如上述Go语言密码误用自动化检测方法。
一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机程 序,所述计算机程序由所述处理器加载并执行,以实现上述Go语言密码误用自动化检测方 法。
一种计算机程序产品,当所述计算机程序产品在计算机设备上运行时,使得计算机设备 执行如上述Go语言密码误用自动化检测方法。
与现有技术相比,本发明通过分析NIST等密码标准协会及相关论文,对经典密码库中 的密码算法分类分级,为开发者在应用程序开发中的密码算法选择提供有效指导,避免选择 不安全或不推荐使用的密码算法,实现密码应用安全建设工作的正确性、有效性;结合了 Go密码库所提供API的特殊性,设计定制化的密码误用规则,填补了目前尚无面向Go语言 的密码误用检测工作的空白;利用污点分析技术,实现对密码设备应用程序源代码中密码误 用自动化检测,对密码应用安全性评估(密评)领域具有重要支撑、推进作用。
附图说明
图1为本发明的方法流程图。
图2为API模式识别分析器的构造与使用过程示意图。
图3为密钥长度分析器的构造与使用过程示意图。
图4为嵌套密码操作分析器的构造与使用过程示意图。
图5为数据随机性分析器的构造与使用过程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下参照各附图/表,对本发明 作进一步详细说明。
本发明对目标编程语言密码库所提供的API梳理密码误用规则,将污点分析三元组的抽 象概念具象到面向Go语言的密码误用检测方案中,采用污点分析技术审查信息流信息,解 构程序间的静态依赖关系,提出并构建污点分析器以覆盖全部的密码误用规则。
本发明的的Go语言密码误用自动化检测方法,如图1所示,包括以下步骤。
步骤1:对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合。
密码误用规则可以为密码误用识别提供依据,通过对经典密码库密码算法分类分级,识 别Go应用程序中不安全或者不推荐使用的密码算法,进而梳理与Go密码库强耦合的密码误用规则。
步骤1.1:对经典密码库密码算法分类分级。
一示例中,对经典密码库密码算法分类分级,包括对密码算法的算法类型分类,以及对 密码算法的安全强度和安全漏洞两个方面安全分级。在密码算法类型方面,根据与密码算法 结合使用的密钥类型进行分类,具体分为三个基本类别:对称密码算法、非对称密码算法和密码杂凑算法。在密码算法安全强度方面,需破解密码算法所需的计算量大小(单位是比特 (bit))。一般来说,对称密码算法的安全强度与密钥长度相当,公钥密码算法的安全强度显 著小于密钥长度。NIST SP 800-57提供了以最低安全强度应用加密保护的预计时间框架。首 先,目前估计最大安全强度小于112比特(如80比特)的密码算法不再被认为是足够安全 的;其次,具有112比特安全强度的密码算法目前被认为在2030年之前是安全的,之后它们 只能用于遗留应用程序来处理已受加密保护的数据;另外,密码算法的安全强度在2031年 及以后至少应达到128比特;在密码算法安全漏洞方面,需探究密码算法具体的应用场景、 应用模式等,本发明也将已被公开的密码实现漏洞考虑在内。
如表1所示,本发明梳理了典型密码库中所支持的密码算法,根据其算法类型进行分类, 根据其算法安全强度和安全漏洞两个方面进行安全分级。本发明将常见密码库中所支出的密 码算法分为以下4种级别:(1)不安全的密码算法;(2)可接受但不推荐的密码算法;(3) 推荐的密码算法;(4)非常推荐的密码算法。
表1典型密码库的密码算法分类分级汇总
本示例中所述的不安全的密码算法,是指安全强度低于112比特或已被破解为“不安全” 的密码算法,此外还包括在特定情况下被披露为易受攻击的密码算法。其中,安全强度小于 112比特的密码算法,包括对称密码DES和2TDEA,非对称密码算法RSA-512、RSA-1024 和DSA-1024等。被破解的杂凑算法包括MD4、MD5、SHA-1和RIPEMD-160等;在特定场 景下易受攻击的密码算法,包括易遭到生日攻击64位分组密码Blowfish、CAST5、TEA、 XTEA等,在加密应用中易受攻击的流密码RC4等。
本示例中所述的可接受但不推荐的密码算法是指目前具有112比特安全强度且没有安全 漏洞的密码算法,此外还包括已被更安全密码实现替代的密码算法。其中,具有112比特安 全强度的密码算法包括非对称密码算法RSA-2048、DSA-2048和ECDSA-P224,密码杂凑算 法SHA-224、SHA-512/224和SHA3-224等;已被更安全密码实现替代的密码算法包括对称 密码算法3TDEA(提供112比特安全强度),比AES性能差的Twofish,比ChaCha20性能差的Salsa20,比HMAC-SHA256加密强度弱的HMAC-MD5(基于杂凑算法的MAC的加密强 度取决于底层散列函数的属性)。
本示例中所述的推荐的密码算法是指目前不低于128比特安全强度且没有安全漏洞的密 码算法,包括对称密码算法AES(提供三种不同密钥长度:128、192和256比特)和ChaCha20-Poly1305(一种无需硬件加速即可提供快速的软件性能的AEAD(带有附加数据的身份验证加密)算法),底层加密原语安全强度不低于112比特(如SHA-224、SHA- 512/224、SHA3-224和SHA-256等)的杂凑算法及其上层嵌套的HMAC算法。
本示例中所述的非常推荐的密码算法包括能够提供更高性能、安全强度达到128比特的 我国商用密码算法(如SM2、SM3、SM4、SM9等),同等安全强度下,SM2算法在用私钥签名时,速度远超RSA算法。我国的商用密码算法逐渐被纳入ISO/IEC国际标准,并得到 《密码法》的支持推荐。
步骤1.2:针对Go项目中的密码误用情况分类,归纳了密码误用情况。
一示例中,归纳了六种密码误用情况,具体描述如下:
1)使用安全强度不达标的密码算法;
2)对密码操作中的随机性配置不充分,包括密钥、口令、盐值、IV等;
3)使用不安全的填充算法;
4)使用不安全的HTTP链接;
5)错误配置SSL/TLS协议;
6)使用被官方密码库弃用的不安全API实现。
步骤1.3:面向Go语言梳理密码误用规则,覆盖了密码误用情况。
一示例中,本发明面向Go语言梳理了12条规则,规则覆盖了上述六种密码误用情况。 需要说明的是,由于不同编程语言的密码库API的封装格式不同,以及后续所采用的密码误 用检测分析技术不同,本发明与已有相关工作梳理的密码规则描述部分相同,而部分有所差 异。
表2面向Go语言的密码误用检测规则
如表2所示,本发明总结了面向Go语言的密码误用检测规则,需要说明的是,由于不 同编程语言的密码库API的封装格式不同,以及后续所采用的密码误用检测分析技术不同, 本发明与已有相关工作梳理的密码规则描述部分相同,而部分有所差异。本发明将密码误用 情况划分为以下12条规则:
1)R-01指禁用不安全的密码算法(如DES、2TDEA、RSA-512、MD4和MD5);
2)R-02作为安全指南,指导开发人员优先使用“推荐”以及“非常推荐的”的密码算法;
3)R-03关注密钥派生的随机性程度,不允许应用程序使用不安全的伪随机数生成器 (PRNG),即官方Go密码库提供的已被预测的math/rand,推荐安全强度较高的crypto/rand。 此外,由于crypto/rand所提供的API并没有为开发人员提供PRNG种子配置,因此本发明 不考虑不可预测的PRNG种子;
4)R-04同样关注密钥派生的随机性程度,要求加密密钥应由应用程序随机生成,而不 能硬编码在程序中;
5)R-05指在密钥派生算法中重复使用同一口令或盐导致随机性骤降的做法。Go官方密 码库中提供的密钥派生函数包括Argon2、HKDF、PBKDF2和scrypt,要求开发人员配置不 可预测的口令和盐值。此外,由于相关密钥派生函数提供的API不需要开发人员配置迭代次 数,因此本发明不考虑迭代要求(例如>1000次);
6)R-06关注对称分组密码算法中初始化向量(IV)的配置情况。Go官方密码库提供的操 作模式包括CTR、OFB、GCM、XTS、CBC和CFB,皆使用IV或唯一计数器块序列来随机 化密文。具体地,CTR、OFB、GCM和XTS模式中的IV(或计数器)应保证唯一,而CBC 和CFB模式中的IV要求更高,应保证随机生成;
7)R-07指RSA使用的不安全填充算法。Go官方密码库为RSA提供的填充算法包括PKCS#1-v1.5和最佳非对称加密填充(OAEP)。其中,不推荐使用可恢复RSA私钥的 PKCS#1-v1.5填充格式,推荐使用OAEP;
8)R-08旨在说明HTTPS比HTTP更安全,建议使用安全的数据通信方式;
9)R-09关注应用程序SSL/TLS协议的配置情况,不建议应用程序采用弱SSL/TLS协议(如SSLv1.1、TLSv1.0),以免遭受BEAST、BREACH和CRIME攻击等;
10)R-10同样关注应用程序SSL/TLS协议的配置情况,禁止使用SSL/TLS协议中的不 安全密码套件,包括在C/S场景中易受填充攻击的CBC模式(如AES-CBC)和弱密码DES、RC4等,应该使用被标记为“推荐”的密码套件;
11)R-11同样关注应用程序SSL/TLS协议的配置情况,不允许绕过证书验证或接受所有 主机名;
12)R-12关注官方Go加密库已弃用的不安全实现,包括已不再提供128位安全性的bn256包,Curve25519包中被X25519函数取代的ScalarMult函数,被最新官方Go密码库冻结的pkcs12包。
步骤2:获取Go项目程序文件。
Go语言是Google在2009年开发的一种新型编程语言,它将goroutines和channel形式 的并发原语内置化,实现了一个轻量级进程并发的、支持CPU异步执行的简单编程模型, 使得开发系统的性能大幅提升。Go语言提供的官方密码库主要包括Go标准库(即crypto/...) 和补充存储库(即golang.org/x/crypto/...),帮助开发人员构建安全实用的应用程序。
一示例使用Go项目中的程序文件,以验证本发明的技术方案。
步骤3:基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所述密码误用 规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测 结果。
如表3所示,本发明定义了Go密码库API在污点分析器中所扮演的source、sink或filte 角色,鉴于多数大型项目中的API调用数量远小于变量定义数量,本发明考虑率先识别所有 可能被误用的密码API,这些密码API在SSA表单中具有特定类型的指令(即*ssa.Call和 *ssa.UnOp)。
表3Go密码库的API及其在污点分析器中所扮演的source、sink或filte角色
/>
基于上述表3构建污点分析器以覆盖全部的密码误用规则,利用污点分析技术实现密码 误用的自动化检测。污点分析技术首先需将Go项目的程序文件转换为统一的中间代码格式 ——SSA(静态单一赋值)形式,其次使用模式匹配技术直接识别密码API,同时定位污点 分析技术所需的程序执行点(即污点源/污点汇聚点),最后使用Go官方库的分析包,根据既定污点分析器启动后向或前向分析,并对违背既定密码误用规则的不安全信息流路径报告 误用信息。
该后向污点分析是指相应污点源(即密码API参数)在污点汇聚点之前创建,后向污点 分析执行从污点汇聚点到污点源的后向污点分析。相关分析器(即“密钥长度分析器”,“嵌 套密码操作分析器”,“数据随机性分析器”)在执行完识别密码API操作后,从被识别到的 污点汇聚点(密码API调用)出发,利用SSA表单的信息流追踪其参数,直至找到污点源。
该前向污点分析是指相应污点源在污点汇聚点之前创建,前向污点分析执行从污点源到 污点汇聚点的前向污点分析。“SSL/TLS配置分析器”在执行完相应API识别操作后,从被识别到的污点源(即结构体初始化指令)出发,利用SSA表单的信息流正向追踪指令,直至 找到污点汇聚点。
一实施例提出五种污点分析器,具体描述如下:
1)API模式识别分析器。该分析器不考虑污点分析,通过模式匹配技术直接识别不安全 API并发出警报,可识别一些已不再满足当前系统所能接受的最低安全性能但库中仍保留着 的旧密码操作,例如不安全的加密算法(DES、RC4等)、不安全的填充算法(PKCS#1-v1.5) 以及不被推荐使用的算法实现(bn256曲线等)。
其中,上述识别过程是识别在SSA表单中具有特定类型的指令,例如*ssa.Call、 *ssa.UnOp等,完成第一个污点分析器“API模式识别分析器”的密码误用API检测。
一示例如图2所示,API模式识别分析器的构造与使用过程如下:
Go项目的程序文件自转换为统一的SSA中间代码格式形式后,可通过模式匹配技术直 接识别密码API,一经识别立即发出弱密码误用警报。该过程将完成识别密码API操作,同 时警报表2中的规则R-01和R-02的部分误用情况,以及R-07和R-12的误用情况。
2)密钥长度分析器。该分析器以密钥初始信息为污点源,以不安全密码API为污点汇 聚点,采用污点分析技术识别密码误用情况并发出警报,可识别一些支持不同密钥长度的密 码算法,如支持RSA-512、RSA-1024和RSA-2048的RSA,支持DSA-1024、DSA-2048和DSA-3072的DSA。
一示例如图3所示,密钥长度分析器的构造与使用过程如下:
Go项目的程序文件自转换为统一的SSA中间代码格式形式后,可定位密钥长度分析器 所需的初始程序执行点(即不安全API),并将其标记为污点汇聚点,以密钥初始信息为污 点源,启动后向污点分析。当检测系统遇到密钥长度配置指令时,检查是否触发了被标记为 污点源的密钥长度,如果触发则说明密钥长度不达标,发出弱密钥安全强度警报,否则密钥 长度达标,清除污点标记并过滤此路径。该过程将警报表2中的规则R-01和R-02的部分误用情况。
3)嵌套密码操作分析器。该分析器以编程语言密码库提供的低级独立加密原语为污点 源,以不安全密码API为污点汇聚点,采用污点分析技术识别密码误用情况并发出警报,可 识别一些可能由密码库提供的低级独立加密原语的密码API,本发明将此类密码操作定义为 函数嵌套,包括分组密码的操作模式(CBC、GCM等)、ECDSA所配置的椭圆曲线(P224、 P256等)以及HMAC中的哈希算法选项(SHA-1、SHA-256等)。
一示例如图4所示,嵌套密码操作分析器的构造与使用过程如下:
Go项目的程序文件自转换为统一的SSA中间代码格式形式后,可定位嵌套密码操作分 析器所需的初始程序执行点(即不安全API),并将其标记为污点汇聚点,以独立加密原语 为污点源,启动后向污点分析。当检测系统遇到独立加密原语指令时,检查是否触发了被标记为污点源的低级独立加密原语(即密码库中提供的相关API),如果触发则说明独立加密 原语等级不达标,发出弱密码警报,否则独立加密原语等级达标,清除污点标记并过滤此路 径。该过程将警报表2中的规则R-01和R-02的部分误用情况,以及R-08的误用情况。4) 数据随机性分析器。该分析器以随机性发生器函数为过滤器(例如PRNG、哈希函数),以必要参数初始信息为污点源,以相关密码API为污点汇聚点,警报从污点源到污点汇聚点中 未被过滤的路径,可识别一些需要借助参数(例如密钥、密码、盐和IV)以满足随机性需求的密码算法。
一示例如图5所示,数据随机性分析器的构造与使用过程如下:
Go项目的程序文件自转换为统一的SSA中间代码格式形式后,可定位数据随机性分析 器所需的初始程序执行点(即不安全API),并将其标记为污点汇聚点,以随机数发生器为 过滤器,以参数初始信息为污点源,启动后向污点分析。如果检测系统在遇到参数配置指令 之前,检测到被标记为过滤器的随机数发生器,则说明参数数据具备随机性,清除污点标记 并过滤此路径;否则,如果检测系统不经过滤地检测到参数配置指令,则立即发出参数不随机警报。该过程将警报表2中的规则R-03、R-04、R-05和R-06的误用情况。
5)SSL/TLS配置分析器。该分析器以SSL/TLS的结构体初始化指令为污点源,以参数 配置为污点汇聚点,分析特定参数配置,警报与SSL/TLS协议相关的安全性问题,包括低安 全性的协议版本、不安全的密码套件、跳过证书/主机名验证等。
一示例中,SSL/TLS配置分析器的构造与使用过程如下:
Go项目的程序文件自转换为统一的SSA中间代码格式形式后,可定位SSL/TLS配置分 析器所需的初始程序执行点(即SSL/TLS的结构体初始化指令),并将其标记为污点源,以 特定参数为污点汇聚点,启动前向污点分析。当检测系统遇到特定参数配置指令时,检查是 否配置错误,如果配置错误,则发出与SSL/TLS协议相关的安全性警报,否则清除污点标记并过滤此路径。该过程将警报表2中的规则R-09、R-10和R-11的误用情况。
步骤4:综合所有密码误用规则下所述程序文件的密码误用检测结果,得到程序文件的 密码误用检测结果。
本发明基于密码误用规则集合中设定的密码误用规则,并结合上述步骤3对每一密码误 用规则的判断方法,得到程序文件的密码误用检测结果。
一示例中,在密码误用规则集合包括上述所有密码误用规则的情况下,可以通过API模 式识别分析器、密钥长度分析器、嵌套密码操作分析器、数据随机性分析器以及SSL/TLS配 置分析器的检测结果得到程序文件的密码误用检测结果。
另一示例中,在密码误用规则集合仅包括上述表2中的规则R-07至R-11的情况下,可 以通过API模式识别分析器、嵌套密码操作分析器、SSL/TLS配置分析器得到程序文件的密码误用检测结果。
综上所述,本发明通过对经典密码库所支持密码算法的安全性进行分类分级,可以制定 与Go语言强耦合的密码误用规则,从而设计基于污点分析技术的密码误用自动化检测方法 及系统,对基于Go语言开发的应用程序提供一种全面直观的密码应用安全性评估机制。
本发明公开了一种Go语言密码误用自动化检测装置,包括:规则生成模块、文件获取 模块、误用检测模块以及结果生成模块。该Go语言密码误用自动化检测装置可以为计算机 设备,也可以设置在计算机设备中。其中,规则生成模块,用于对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合;文件获取模块,用于获取Go项目程序文件;误用检测模块,用于基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所述密 码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果;结果生成模块,用于综合所有密码误用规则下所述程序文件的密码误用检测结果, 得到所述程序文件的密码误用检测结果。
有关装置模块的具体执行过程、有益效果等阐述,请参见上述方法实施例的介绍说明, 此处不多赘述。
在示例性实施例中,还提供了一种计算机设备,所述计算机设备包括存储器和处理器, 所述存储器中存储有计算机程序,所述计算机程序由所述处理器加载并执行,以实现上述 Go语言密码误用自动化检测方法。
在示例性实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述 计算机程序被处理器执行时实现如上述Go语言密码误用自动化检测方法。
在示例性实施例中,还提供了一种计算机程序产品,当所述计算机程序产品在计算机设 备上运行时,使得计算机设备执行如上述Go语言密码误用自动化检测方法。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可 以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保 护范围应以权利要求书所述为准。

Claims (10)

1.一种Go语言密码误用自动化检测方法,其特征在于,所述方法包括:
对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合;其中,所述对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合,包括:
对经典密码库密码算法分类分级;
针对Go项目中的密码误用情况分类,归纳密码误用情况;
结合经典密码库密码算法分类分级结果,面向Go语言梳理密码误用规则,以得到密码误用规则集合;其中,所述密码误用规则集合覆盖所述密码误用情况;
获取Go项目程序文件;
基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果;其中,
所述基于模式匹配技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
将Go项目的程序文件转换为统一的SSA中间代码格式形式;
基于所述统一的SSA中间代码格式形式,通过模式匹配技术识别密码API,并一经识别后发出弱密码误用警报;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
将Go项目的程序文件转换为统一的中间代码格式,所述统一的中间代码格式为静态单一赋值形式;
使用模式匹配技术直接识别密码API,同时定位污点分析技术所需的程序执行点;
使用Go官方库的分析包,根据既定污点分析器启动后向或前向分析,并对违背既定密码误用规则的不安全信息流路径报告误用信息;
综合所有密码误用规则下所述程序文件的密码误用检测结果,得到所述程序文件的密码误用检测结果。
2.如权利要求1所述的方法,其特征在于,所述密码误用规则包括:不要使用安全强度过低的密码算法、建议优先使用推荐及非常推荐的密码算法、不要在RSA中使用PKCS#1-v1.5填充算法和不要使用Go密码库弃用的不安全密码API实现中的至少一种;
所述基于模式匹配技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级;
将所述程序文件转换为SSA中间代码格式形式;
通过模式匹配技术对所述密码算法与SSA中间代码格式形式的程序文件进行匹配,获取所述程序文件所使用密码算法的安全等级;
根据所述程序文件所使用密码算法的安全等级,得到该密码误用规则下所述程序文件的密码误用检测结果。
3.如权利要求1所述的方法,其特征在于,所述密码误用规则包括:不要使用安全强度过低的密码算法和建议优先使用推荐及非常推荐的密码算法中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等级密码算法的所述密码API作为不安全密码API;
获取所述程序文件的密钥初始信息;
将所述程序文件转换为SSA中间代码格式形式;
将所述不安全密码API作为污点汇聚点,且将所述密钥初始信息作为污点源,进行后向污点分析,以判断是否触发所述污点源;
在未触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为未触发密码误用;
在触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为所述不安全密码API对应的安全等级。
4.如权利要求3所述的方法,其特征在于,所述将所述不安全密码API作为污点汇聚点,且将所述密钥初始信息作为污点源,进行后向污点分析,以判断是否触发所述污点源,包括:识别所述不安全密码API的密码算法;
从所述污点汇聚点出发,利用SSA表单的信息流追踪所述不安全密码API的密码算法的参数;
判断所述信息流是否触发所述污点源。
5.如权利要求1所述的方法,其特征在于,所述密码误用规则包括:不要使用安全强度过低的密码算法、建议优先使用推荐及非常推荐的密码算法和不要使用HTTP链接中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等级密码算法的所述密码API作为不安全密码API;
获取所述程序文件的独立加密原语;
将所述程序文件转换为SSA中间代码格式形式;
将所述不安全密码API作为污点汇聚点,且将所述独立加密原语作为污点源,进行后向污点分析,以判断是否触发所述污点源;
在未触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为未触发密码误用;
在触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为所述不安全密码API对应的安全等级。
6.如权利要求5所述的方法,其特征在于,所述将所述不安全密码API作为污点汇聚点,且将所述独立加密原语作为污点源,进行后向污点分析,以判断是否触发所述污点源,包括:
识别所述不安全密码API的密码算法;
从所述污点汇聚点出发,利用SSA表单的信息流追踪所述不安全密码API的密码算法的参数;
判断所述信息流是否触发所述污点源。
7.如权利要求1所述的方法,其特征在于,所述密码误用规则包括:不要使用不安全的PRNG、不要使用可预测/静态密钥、不要在密钥派生算法中使用同一口令或盐值和在CTR、OFB、GCM和XTS工作模式中的IV唯一,且在CBC、CFB工作模式中的IV随机中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等级密码算法的所述密码API,作为不安全密码API;
获取所述程序文件的参数初始信息;
将所述程序文件转换为SSA中间代码格式形式;
将所述不安全密码API作为污点汇聚点,将所述参数初始信息作为污点源,且设置一随机数发生器作为过滤器,进行后向污点分析,以判断是否触发所述污点源;
针对每一路径,在遇到所述参数初始信息对应的参数配置指令之前,如果检测到被标记为过滤器的随机数发生器,则进行清除污点标记、清除本路径以及检测下一路径,直至所有路径检测完毕;
判断信息流是否触发所述污点源;
在被所述过滤器清除污点标记的情况下,该密码误用规则下所述程序文件的密码误用检测结果为未触发密码误用;
在未被所述过滤器清除污点标记且触发所述污点源的情况下,该密码误用规则下所述程序文件的密码误用检测结果为所述不安全密码API对应的安全等级。
8.如权利要求1所述的方法,其特征在于,所述密码误用规则包括:不要使用不安全的SSL/TLS协议、不要在SSL/TLS协议中使用不安全的密码套件和不要在SSL/TLS协议中跳过证书/主机名验证中的至少一种;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
基于安全强度和安全漏洞,对经典密码库中密码算法进行安全分级,并将使用不安全等级密码算法的所述密码API,作为不安全密码API;
获取所述程序文件中与SSL/TLS协议相关的特定参数配置;
将所述程序文件转换为SSA中间代码格式形式;
将所述SSL/TLS协议初始化指令作为污点源,且将所述SSL/TLS协议中的特定参数作为污点汇聚点,进行前向污点分析,以判断是否触发所述污点汇聚点;
在未触发所述污点汇聚点的情况下,该密码误用规则下所述程序文件的密码误用检测结果为未触发密码误用;
在触发所述污点汇聚点的情况下,该密码误用规则下所述程序文件的密码误用检测结果为所述与SSL/TLS协议相关的安全性问题。
9.一种Go语言密码误用自动化检测装置,其特征在于,所述装置包括:
规则生成模块,用于对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合;其中,所述对编程语言密码库所提供的密码API进行梳理,得到密码误用规则集合,包括:
对经典密码库密码算法分类分级;
针对Go项目中的密码误用情况分类,归纳密码误用情况;
结合经典密码库密码算法分类分级结果,面向Go语言梳理密码误用规则,以得到密码误用规则集合;其中,所述密码误用规则集合覆盖所述密码误用情况;
文件获取模块,用于获取Go项目程序文件;
误用检测模块,用于基于模式匹配技术或污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果;其中,
所述基于模式匹配技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
将Go项目的程序文件转换为统一的SSA中间代码格式形式;
基于所述统一的SSA中间代码格式形式,通过模式匹配技术识别密码API,并一经识别后发出弱密码误用警报;
所述基于污点分析技术,判断所述程序文件是否触发所述密码误用规则集合中的任一密码误用规则,以得到该密码误用规则下所述程序文件的密码误用检测结果,包括:
将Go项目的程序文件转换为统一的中间代码格式,所述统一的中间代码格式为静态单一赋值形式;
使用模式匹配技术直接识别密码API,同时定位污点分析技术所需的程序执行点;
使用Go官方库的分析包,根据既定污点分析器启动后向或前向分析,并对违背既定密码误用规则的不安全信息流路径报告误用信息;
结果生成模块,用于综合所有密码误用规则下所述程序文件的密码误用检测结果,得到所述程序文件的密码误用检测结果。
10.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1-8中任一所述方法。
CN202211429754.XA 2022-11-15 2022-11-15 一种Go语言密码误用自动化检测方法及装置 Active CN115828224B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211429754.XA CN115828224B (zh) 2022-11-15 2022-11-15 一种Go语言密码误用自动化检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211429754.XA CN115828224B (zh) 2022-11-15 2022-11-15 一种Go语言密码误用自动化检测方法及装置

Publications (2)

Publication Number Publication Date
CN115828224A CN115828224A (zh) 2023-03-21
CN115828224B true CN115828224B (zh) 2023-08-29

Family

ID=85528283

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211429754.XA Active CN115828224B (zh) 2022-11-15 2022-11-15 一种Go语言密码误用自动化检测方法及装置

Country Status (1)

Country Link
CN (1) CN115828224B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116781327B (zh) * 2023-05-24 2024-01-16 中国科学院信息工程研究所 自动化密码应用安全漏洞挖掘方法、装置、介质及设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104484175A (zh) * 2014-12-16 2015-04-01 上海交通大学 Android应用程序密码学误用检测方法
CN108038381A (zh) * 2017-12-27 2018-05-15 中国人民解放军战略支援部队信息工程大学 一种密钥安全性检测方法及系统
CN108123956A (zh) * 2017-12-27 2018-06-05 中国人民解放军战略支援部队信息工程大学 基于Petri网的密码误用漏洞检测方法及系统
CN114707152A (zh) * 2022-02-23 2022-07-05 北京邮电大学 联盟链智能合约的安全漏洞检测方法及装置
CN114756872A (zh) * 2022-04-28 2022-07-15 杭州孝道科技有限公司 基于go语言的注入式污点数据跟踪方法、装置和电子装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104484175A (zh) * 2014-12-16 2015-04-01 上海交通大学 Android应用程序密码学误用检测方法
CN108038381A (zh) * 2017-12-27 2018-05-15 中国人民解放军战略支援部队信息工程大学 一种密钥安全性检测方法及系统
CN108123956A (zh) * 2017-12-27 2018-06-05 中国人民解放军战略支援部队信息工程大学 基于Petri网的密码误用漏洞检测方法及系统
CN114707152A (zh) * 2022-02-23 2022-07-05 北京邮电大学 联盟链智能合约的安全漏洞检测方法及装置
CN114756872A (zh) * 2022-04-28 2022-07-15 杭州孝道科技有限公司 基于go语言的注入式污点数据跟踪方法、装置和电子装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Wenqing Li,et al..CryptoGo: Automatic Detection of Go Cryptographic API Misuses.《ACSAC '22: Proceedings of the 38th Annual Computer Security Applications Conference》.2022,318–331. *

Also Published As

Publication number Publication date
CN115828224A (zh) 2023-03-21

Similar Documents

Publication Publication Date Title
Rahaman et al. Cryptoguard: High precision detection of cryptographic vulnerabilities in massive-sized java projects
Chatzikonstantinou et al. Evaluation of cryptography usage in android applications
Ma et al. Cdrep: Automatic repair of cryptographic misuses in android applications
Shuai et al. Modelling analysis and auto-detection of cryptographic misuse in android applications
CN101419652B (zh) 一种软硬件结合的保护程序的方法
Cheval Apte: an algorithm for proving trace equivalence
CN113542253B (zh) 一种网络流量检测方法、装置、设备及介质
Muslukhov et al. Source attribution of cryptographic api misuse in android applications
CN109284585B (zh) 一种脚本加密方法、脚本解密运行方法和相关装置
CN115828224B (zh) 一种Go语言密码误用自动化检测方法及装置
CN109800574A (zh) 基于密码算法分析的计算机病毒检测方法及系统
Afrose et al. CryptoAPI-Bench: A comprehensive benchmark on Java cryptographic API misuses
IL265518B2 (en) Management of security vulnerabilities
EP3623980B1 (en) Ransomware encryption algorithm determination
CN112000967B (zh) 一种机密参数的生成方法及装置
Li et al. CipherXRay: Exposing cryptographic operations and transient secrets from monitored binary execution
EP3623981B1 (en) Index based ransomware categorisation
Bajpai et al. An empirical study of key generation in cryptographic ransomware
CN109145533B (zh) 一种使用随机密码保护代码的方法及装置
Sieck et al. Util:: lookup: Exploiting key decoding in cryptographic libraries
Feichtner A comparative study of misapplied crypto in Android and iOS applications
CN112115657A (zh) 一种防单一时间攻击的芯片安全仿真分析方法和装置
CN117376908A (zh) 一种基于tee的5g异常终端检测方法、装置及电子设备
Rahaman et al. CHIRON: deployment-quality detection of Java cryptographic vulnerabilities
CN103530555A (zh) 防止程序执行恶意操作的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant