当前位置:网站首页>密码密钥硬编码检查
密码密钥硬编码检查
2022-07-13 18:48:00 【InfoQ】
1. 密钥的重要性
1.1. 看风
1.2. 保密通信模型
- 保密通信模型

1.3. 密钥的重要性
- 古典密码学(1949年之前)
- 数据的安全主要是基于算法的保密。
- 不适合大规模生产
- 不适合较大的或者人员变动较大的组织
- 用户无法了解算法的安全性
- 近代密码学(1949-1975)
- 数据的安全基于密钥,而不是算法的保密。
- 现代密码学(1976-)
1.4. 密钥泄露的危害
- 《2020数据泄露调查报告(DBIR)》
- 使用偷窃的信用凭证、利用员工误发送、员工误配置是数据泄露的主要威胁。内部员工操作不规范、没有养成良好的工作行为习惯以及疏忽大意等已成为多起严重网络安全事件发生的根本原因。

- 《2021数据泄露调查报告(DBIR)》
- 61%的数据泄露涉及凭证数据,凭证的泄露是信息泄露的主要途径,防止凭证泄露对信息保护有着重要的作用。

- 《2022数据泄露调查报告(DBIR)》凭证是发起攻击的最重要的手段。

- 凭证和个人数据是黑客最喜欢获取的两类数据
- 报告指出:我们长期以来一直认为,凭证是犯罪分子最喜欢的数据类型,因为它们对于伪装成系统上的合法用户非常有用。就像谚语中披着羊皮的狼一样,它们的行为在攻击之前显得无害。

2. 密码密钥硬编码的检查
2.1. 香农熵(Shannon entropy)

- P(x_i)P(xi) : 指的是单个样本变量所属的变量种类的个数占据所有变量个数的比例。
/**
* Base on shannon entropy return bits of entropy represented in string.
*
* @param str input string
* @return entropy
*/
public static double getShannonEntropy(String str) {
int num = 0;
Map<Character, Integer> pi = new HashMap<Character, Integer>();
// count char in string
char cx;
for (int l = 0; l < str.length(); ++l) {
cx = str.charAt(l);
if (pi.containsKey(cx)) {
pi.put(cx, pi.get(cx) + 1);
} else {
pi.put(cx, 1);
}
num = num + 1;
}
double entropy = 0.0;
for (Map.Entry<Character, Integer> entry : pi.entrySet()) {
cx = entry.getKey();
double p = (double) entry.getValue() / num;
entropy = entropy + p * (Math.log(p) / Math.log(2));
}
return -entropy;
}复制- 同等长度的字符串,通常密钥的熵值更高
- 密钥为避免彩虹攻击,在取值上更加的离散,会尽量采用不重复的字符。就像我们为了增加密码的复杂性,要求长度不小于8,必须包含大小写、特殊字符、以及数字一样的道理。所以密钥的熵值会比一般的文本要高的多。我们就是利用这点来识别字符串是否是密钥。
2.2. 工具的检查逻辑

2.2.1. 输入文件转换
- 输入文件分类
- 我们需要检查的文本文件进行分类,通常包括以下几种类型:
- 程序语言:C、C++、Java、Python、Go、Js等;
- 有统一格式的文件:属性文件、yaml、csv、json、xml等;
- 文本文件:没有固定格式的文本文件。
- 输入文件转换程序语言:通过各语言的语法解析器,解析成抽象语法树,提取语法树中的等于字符串的常量,以及对应的变量名;有统一格式的文件:照格式转换成变量名和字符串常量值;文本文件:采用token的方式分割成一个个的token,变成一个各的字符串常量。
2.2.2. 密码密钥检查
- 检查配置选项主要包括以下内容:

- 检查硬编码的口令:检查变量名中包含:password、passwd、pwd的变量,且变量等于字符串常量;正则表达式可以设置成为:".*(password|passwd|pwd)$"。
- 检查GitHub的个人凭证:检查字符串常量;这个凭证是以"ghp_"开头的,跟随长度为36的字符串,且每个字符可以为数字和字母;正则表达式可以设置成为:“ghp_[0-9a-zA-Z]{36}”。
2.2.3. 密码密钥过滤
- 密码密钥熵值的计算
- 前面讨论过密码密钥的特点,可以通过检测密码密钥的信息熵的方式来降低误报。有些密码密钥设定了最低的阈值,但还是有很多密码密钥并未给出具体的阈值,这个就需要通过经验积累来设定,目前业界也有通过机器学习来完善这个阈值的设定。
- 污点分析
- 在代码中,对于口令的变量的取名上,很多并不会遵守可读性和可维护性来设定变量名,通过前面正则表达式的方式来查找硬编码密码的方式,会造成很多的漏报。这里还可以通过污点分析的方法,来推导出密码是否采用了硬编码。例如检查jdbc连接的密码参数,查看该参数是否为字符串常量。
2.2.4. 报告输出
2.2.5. 参考工具
- 华为云代码检查 CodeCheck:https://www.huaweicloud.com/product/codecheck.html

3. 参考
- 柯克霍夫原则: https://en.wikipedia.org/wiki/Kerckhoffs's_principle
- 香农信息熵:https://en.wikipedia.org/wiki/Entropy_(information_theory)
- Verizon 2022年数据泄露报告:https://www.verizon.com/business/resources/reports/dbir/2022/master-guide/
- Verizon 2021年数据泄露报告: https://www.verizon.com/business/resources/reports/dbir/2021/master-guide/
- Verizon 2020年数据泄露报告: https://www.verizon.com/business/resources/reports/dbir/2020/master-guide/
- GitHub 秘密扫描:https://docs.github.com/cn/code-security/secret-scanning/about-secret-scanning)
边栏推荐
- Day102. Shangyitong project
- 第三讲:股票买卖 III
- Win11安全中心删除的文件如何恢复?
- No one really thinks that chatting robots are difficult -- using Bert to load the pre training model to get Chinese sentence vectors
- Win11本地用户和组怎么管理?Win11创建用户管理员的方法
- Shell script learning record
- [binary tree] find elements in the contaminated binary tree
- Install MySQL database in CentOS system
- PG运维篇--服务启停
- Huawei switch SEP double half ring design scheme and detailed configuration steps
猜你喜欢

我用开天平台做了一个城市防疫政策查询系统,你不试试?

Wechat classroom appointment of applet completion works applet graduation project (4) opening report

浅谈——对技术转型做管理的看法

Deeply uncover Alibaba cloud's asynchronous task capability of function computing

How does win11 share folders? Win11 method of creating shared folder

Fibonacci heap - Analysis and Implementation

手把手教你安装CUDA

linux下连接redis报错Could not connect to Redis at 192.168.164.118:6379: Connection refused

【深入浅出玩转FPGA8------亚稳态】
![[today in history] July 13: the father of database passed away; Apple buys cups code; IBM chip Alliance](/img/2d/c23a367c9e8e2806ffd5384de273d2.png)
[today in history] July 13: the father of database passed away; Apple buys cups code; IBM chip Alliance
随机推荐
Common DOS commands
Response. Write specific introduction
Install MySQL database in CentOS system
第三讲:股票买卖 III
PG运维篇--服务启停
Inclined stack - principle and Implementation
集合系列开篇:为什么要学集合?
Leetcode (Sword finger offer) - 45 Arrange the array into the smallest number
Anaconda下配置TensorFlow环境(小白包会)
【无标题】
What is fastmixer cash virtual currency encryption mixer?
【历史上的今天】7 月 13 日:数据库之父逝世;苹果公司购买 CUPS 代码;IBM 芯片联盟
杰理之对箱左右声道设置【篇】
Leetcode 735 planetary collision [stack simulation] the leetcode road of heroding
Wechat classroom appointment of applet completion works (5) assignment
CVPR | self enhanced unpaired image defogging based on density and depth decomposition
泰山OFFICE技术讲座:奇怪的Times New Roman字体的高度
Jerry's phone book synchronization Bluetooth may have no sound [chapter]
Linear table concept
【ES6】let、const关键字和解构赋值