通过加密解密算法检验数据库用户密码是否存在弱密码问题,可适用于主流的数据库产品(Oracle,MySQL,Postgres,SQLServer,达梦8,人大金仓8),解决传统通过碰库方式检测的效率低下和用户被锁的问题。
01
—
数据库密码存储图解说明
工具通过密码生成算法的方式,以最高的计算效率分析弱密码问题。以下是工具的性能效率测试统计。
测试项目 | 算法执行次数 | 执行时间(秒) | 验证速率(次/秒) | 备注 |
Oracle10g | 857,375 | 08 | 107,171 | 破译容易 |
Oracle11g | 857,375 | 12 | 71,447 | 破译容易 |
Oracle12c | 9,025 | 55 | 164 | |
Oracle19c | 9,025 | 52 | 173 | |
MySQL5 | 857,375 | 06 | 142,895 | 破译容易 |
MySQL8 | 9,025 | 31 | 291 | |
Postgres_md5 | 857,375 | 08 | 107,171 | 破译容易 |
Postgres_scram | 9,025 | 79 | 114 | |
DM8 | 857,375 | 06 | 142,895 | 破译容易 |
SQLServer | 857,375 | 08 | 107,171 | 破译容易 |
02
—
详细功能说明
在线模式:
通过online.json配置数据库连接信息,自动连接数据库并查询1次数据库用户表(对数据库性能无任何影响)获取用户信息后在本地进行checksum计算和校验,checksum匹配则说明密码匹配,记录匹配用户信息并最后生成报告,所有运算在本地服务器。
离线模式:
通过offline.json配置离线获取的用户和checksum信息,全部在本地进行checksum计算和校验,checksum匹配则说明密码匹配,记录匹配用户信息并最后生成报告,所有算力在本地服务器。
03
—
安装和部署
操作系统:CentOS Linux 6,7,8
软件包:libblkid libblkid-dev libblkid-devel openssl openssl-devel
JDK版本:jdk1.8以上
软件包安装:
# yum install libblkid libblkid-dev libblkid-devel openssl openssl-devel
创建用户
# useradd -g disk dbpass
# passwd dbpass
解压文件
# unzip -d /usr/local dbpass.zip
# chown -R dbpass:dbpass /usr/local/dbpass
许可证
# su - dbpass
$ cd /usr/local/dbpass
$ ./run.sh license
00DBD8843BDC41152C72B370FBC846A68FF70F29
记录并提交获取用户使用授权码,请妥善保持
6BCCF0A6AB0B62F473B466933AC8E6114947BF6D
获取的授权码用于程序执行
04
—
配置文件说明
参数配置文件 param.json
[{"PARALLEL":8}]
参数说明
PARALLEL:并行参数,同时运行的线程数量。
连接配置文件 online.json
[
{"NAME":"192.168.2.199_oradb","JAR_PATH":"/root/ojdbc6.jar","DRIVER":"oracle.jdbc.driver.OracleDriver","URL":"jdbc:oracle:thin:@//192.168.2.199/oradb","USER":"system","PASSWD":"abc123"}
{"NAME":"192.168.2.199_3306","JAR_PATH":"/root/mysql-connector-java-5.1.49.jar","DRIVER":"com.mysql.jdbc.Driver","URL":"jdbc:mysql://192.168.2.199:3306/d1?useSSL=false","USER":"u1","PASSWD":"abc123"}
]
参数说明
NAME:连接任务名称,可为任意易于识别字符串,可为空值。
JAR_PATH:数据库jdbc jar包完整路径,用于连接自动加载。
DRIVER:数据库jdbc驱动名称
URL:数据库连接串
USER:数据库用户
PASSWD:数据库密码
弱密码配置文件 pass.json(支持正则表达式)
[
{"NAME":"","TYPE":"TEXT","VALUE":"abc123"}
{"NAME":"","TYPE":"REGEX","VALUE":"abc[0-9a-bA-Z]{1,2}"}
]
参数说明
NAME:密码规则名称,可为任意易于识别字符串,可为空值。
TYPE:TEXT为字符串密码,REGEX为正则表达式密码集。
VALUE:具体密码串或正则表达式值
离线checksum文件 offline.json(通过数据库查询语句获取用户和checksum值)
[
{"NAME":"test","USER":"u1","CHECKSUM":"XXXXXXXXXXXXXXX"}
{"NAME":"test","USER":"u1","CHECKSUM":"YYYYYYYYYYYYYYY"}
]
参数说明
NAME:离线用户测试任务名称,可为任意易于识别字符串,可为空值。
USER:数据库用户名称。
CHECKSUM:数据库密码checksum值。
附不同数据库厂家,用户和checksum的查询语句
Oracle:
select name, nvl(password, spare4) checksum from sys.user$ where type# = 1
MySQL:
select concat_ws("@", user, host) user, hex(authentication_string) checksum from mysql.user where authentication_string is not null
SQL Server:
SELECT name, password_hash FROM sys.sql_logins
Postgres:
select rolname, rolpassword from pg_catalog.pg_authid where rolpassword is not null
DM:
select a.username, b.password from dba_users a, sysuser$ b where a.user_id = b.id
kingbase:
select rolname, rolpassword from pg_catalog.sysauthid where rolpassword is not null
05
—
任务运行
/usr/local/dbpass/run.sh online <param.json> <online.json> <passwd.json> <licence string>
在线模式:
$ /usr/local/dbpass/run.sh ONLINE param.json online.json passwd.json C474517AF70C9DD0DB5E14E6D4F6B91F98829AF7
/usr/local/dbpass/run.sh offline <param.json> <offline.json> <passwd.json> <licence string>
离线模式:
$ /usr/local/dbpass/run.sh OFFLINE param.json offline.json passwd.json C474517AF70C9DD0DB5E14E6D4F6B91F98829AF7
06
—
运行和生成excel报告
$ /usr/local/dbpass/run.sh ONLINE param.json online.json passwd.json C474517AF70C9DD0DB5E14E6D4F6B91F98829AF7
2022-03-29 10:58:02 Thread started, name: 192.168.2.199_oradb
2022-03-29 10:58:04 Thread done, name: 192.168.2.199_oradb, status: 0, total Computed: 35592, total User count: 24, total Found user: 0, total User error: 0.
Generate weak password report: online_report_2022_03_29_10_58_08.xlsx
任务汇总表
弱密码样式配置表
被检出弱密码信息表