[论文复现] 用机器学习实现社工字典生成工具 Password Guessing using Random Forest
字数 1875 2025-08-19 12:41:48

基于随机森林的口令猜解模型RFGuess教学文档

1. 概述

RFGuess(Password Guessing using Random Forest)是2023年8月发表的一种新型口令猜解模型,首次将传统机器学习模型应用于口令猜解问题。该模型克服了传统统计模型过拟合和深度学习模型需要庞大训练集的缺点,在三种应用场景下都达到了较好的效果。

2. 口令猜解的应用场景

2.1 拖网猜解(Trawling guessing)

  • 定义:攻击者没有特定目标,试图猜出尽可能多的密码
  • 现有模型
    • 统计模型:PCFG(概率上下文无关文法)、Markov模型
    • 深度学习模型:FLA、基于GAN的PassGAN

2.2 基于PII的定向猜解(Targeted guessing based on PII)

  • PII定义:个人可识别信息(Personal Identifiable Information),如姓名、生日、手机号、身份证号等
  • 特点:针对特定用户,在线猜解场景下尝试次数有限
  • 发展历程
    • 早期:基于长度匹配的Targeted Markov模型
    • 改进:基于类型的TarGuess-Ⅰ模型(2016)

2.3 基于密码复用的定向猜解(Targeted guessing based on password reuse)

  • 定义:已知用户曾用密码,通过变换(插入、删除、leet变换等)猜测新密码
  • 现有模型
    • 统计模型:TarGuess-II
    • 深度学习模型:Pass2Path

3. RFGuess核心思想

3.1 Markov模型基础

  • 基本假设:密码中每个字符只与前n个字符相关
  • 问题转化:将口令猜解转化为多分类问题
    • 特征:前n个字符
    • 类别:当前字符
  • 优势:低维特征适合集成学习方法

3.2 随机森林实现

  • 组成:多个决策树组成,通过投票决定最终预测
  • 决策树划分方法
    • ID3:信息增益
    • C4.5:信息增益率
    • CART:Gini指数(本文选择)
  • Gini指数:集合中随机两样本类别不同的概率

4. 特征提取方法

4.1 基本思想

4.1.1 基于长度(length-based)的方法

  • 适用场景:拖网猜解
  • 编码方式
    • D:数字段
    • L:字母段
    • S:特殊字符段
    • 下标表示长度
  • 示例Password123! → L8D3S1

4.1.2 基于类型(type-based)的方法

  • 适用场景:基于PII的定向猜解
  • 编码方式
    • N:姓名(N1全名,N2姓氏,N3名字)
    • B:生日(B1 YYYYMMDD,B2 MMDD)
  • 示例zhangsan0908 → N1B2 或 N2N3B2

4.2 拖网猜解特征提取

  1. 字符编码:4维向量

    • 维度1:字符类型(0特殊字符,1数字,2大写字母,3小写字母)
    • 维度2:序列值(a-z:1-26,数字1-9:1-9)
    • 维度3:键盘行数
    • 维度4:键盘列数
  2. 数据元(Datagram)构建

    • 使用6元Markov模型
    • 示例:pass123456的数据元集合:
      • BsBsBsBsBsp
      • BsBsBsBspa
      • ...
      • passEsEs
    • (Bs=开始符号,Es=结束符号)
  3. 最终特征向量:26维

    • 6字符×4维=24维
    • 附加2维:
      • 数据元在密码中的位置
      • 数据元在LDS段中的位置
  4. 标签:下一个字符的4维编码

4.3 基于PII的定向猜解特征提取

  1. PII Tag编码

    • 示例:N1→1001,N2→1002,B1→2001
    • 一个密码可能有多种表示方式(Representation/Rep)
  2. 选择最优Rep

    • 选择频率最高的编码
    • 每次选择后将该编码频数减一
  3. 特征向量构建

    • 将PII Tag转为4维向量(Tag类型、值、键盘行列数)
    • 示例:N1→(1000, 1, 0, 0)
    • 最终仍构建为26维向量

5. 工具实现

5.1 工具流程

  1. 数据集
  2. 转化为特征向量
  3. 训练模型
  4. 生成规则
  5. 生成字典
  6. (可选)测试准确率

5.2 准确率对比

数据集 字典大小 工具准确率 论文准确率
50% PII-12306 → 50% PII-12306 1000 25.07% 28.89%

6. 参考资料

  1. 原论文:Password Guessing using Random Forest
  2. 代码仓库:RFGuess GitHub
  3. 配套PPT:RFGuess PPT
基于随机森林的口令猜解模型RFGuess教学文档 1. 概述 RFGuess(Password Guessing using Random Forest)是2023年8月发表的一种新型口令猜解模型,首次将传统机器学习模型应用于口令猜解问题。该模型克服了传统统计模型过拟合和深度学习模型需要庞大训练集的缺点,在三种应用场景下都达到了较好的效果。 2. 口令猜解的应用场景 2.1 拖网猜解(Trawling guessing) 定义 :攻击者没有特定目标,试图猜出尽可能多的密码 现有模型 : 统计模型:PCFG(概率上下文无关文法)、Markov模型 深度学习模型:FLA、基于GAN的PassGAN 2.2 基于PII的定向猜解(Targeted guessing based on PII) PII定义 :个人可识别信息(Personal Identifiable Information),如姓名、生日、手机号、身份证号等 特点 :针对特定用户,在线猜解场景下尝试次数有限 发展历程 : 早期:基于长度匹配的Targeted Markov模型 改进:基于类型的TarGuess-Ⅰ模型(2016) 2.3 基于密码复用的定向猜解(Targeted guessing based on password reuse) 定义 :已知用户曾用密码,通过变换(插入、删除、leet变换等)猜测新密码 现有模型 : 统计模型:TarGuess-II 深度学习模型:Pass2Path 3. RFGuess核心思想 3.1 Markov模型基础 基本假设 :密码中每个字符只与前n个字符相关 问题转化 :将口令猜解转化为多分类问题 特征:前n个字符 类别:当前字符 优势 :低维特征适合集成学习方法 3.2 随机森林实现 组成 :多个决策树组成,通过投票决定最终预测 决策树划分方法 : ID3:信息增益 C4.5:信息增益率 CART:Gini指数(本文选择) Gini指数 :集合中随机两样本类别不同的概率 4. 特征提取方法 4.1 基本思想 4.1.1 基于长度(length-based)的方法 适用场景 :拖网猜解 编码方式 : D:数字段 L:字母段 S:特殊字符段 下标表示长度 示例 : Password123! → L8D3S1 4.1.2 基于类型(type-based)的方法 适用场景 :基于PII的定向猜解 编码方式 : N:姓名(N1全名,N2姓氏,N3名字) B:生日(B1 YYYYMMDD,B2 MMDD) 示例 : zhangsan0908 → N1B2 或 N2N3B2 4.2 拖网猜解特征提取 字符编码 :4维向量 维度1:字符类型(0特殊字符,1数字,2大写字母,3小写字母) 维度2:序列值(a-z:1-26,数字1-9:1-9) 维度3:键盘行数 维度4:键盘列数 数据元(Datagram)构建 : 使用6元Markov模型 示例: pass123456 的数据元集合: BsBsBsBsBsp BsBsBsBspa ... passEsEs (Bs=开始符号,Es=结束符号) 最终特征向量 :26维 6字符×4维=24维 附加2维: 数据元在密码中的位置 数据元在LDS段中的位置 标签 :下一个字符的4维编码 4.3 基于PII的定向猜解特征提取 PII Tag编码 : 示例:N1→1001,N2→1002,B1→2001 一个密码可能有多种表示方式(Representation/Rep) 选择最优Rep : 选择频率最高的编码 每次选择后将该编码频数减一 特征向量构建 : 将PII Tag转为4维向量(Tag类型、值、键盘行列数) 示例:N1→(1000, 1, 0, 0) 最终仍构建为26维向量 5. 工具实现 5.1 工具流程 数据集 转化为特征向量 训练模型 生成规则 生成字典 (可选)测试准确率 5.2 准确率对比 | 数据集 | 字典大小 | 工具准确率 | 论文准确率 | |--------|----------|------------|------------| | 50% PII-12306 → 50% PII-12306 | 1000 | 25.07% | 28.89% | 6. 参考资料 原论文: Password Guessing using Random Forest 代码仓库: RFGuess GitHub 配套PPT: RFGuess PPT