Back to Fscan

fscan 增强指纹库

webscan/fingerprint/README.md

2.1.25.5 KB
Original Source

fscan 增强指纹库

概述

fscan现在集成了FingerprintHub的Web指纹库,实现双指纹库并行识别,识别能力提升12.5倍

指纹库规模

基础指纹库 (原有)

  • 正则规则: 242条 (RuleDatas)
  • MD5指纹: 30条 (Md5Datas)
  • 特点: 国内OA/WAF为主,轻量高效
  • 文件: rules.go (硬编码)

增强指纹库 (新增)

  • 指纹数量: 3,139条
  • 来源: FingerprintHub v4.0
  • 特点: 国内外主流应用,社区维护
  • 文件: web_fingerprint_v4.json (1.3MB)

总计

基础指纹:  272条
增强指纹:  3,139条
─────────────────
总计:      3,411条
提升倍数:  12.5x

技术实现

架构设计

┌─────────────────────────────────────┐
│  fingerprint_scanner.go             │
│  InfoCheck() 统一入口                │
└─────────────────────────────────────┘
            │
            ├─> 基础指纹库
            │   ├─ matchByRegex()  (242条)
            │   └─ matchByMd5()     (30条)
            │
            └─> 增强指纹库
                └─ MatchEnhancedFingerprints() (3139条)
                    ├─ matchWords()    (关键词匹配)
                    ├─ matchRegex()    (正则匹配)
                    └─ matchFavicon()  (icon hash)

核心特性

1. 多种matcher类型

go
支持的matcher类型:
- word:     关键词匹配 (大小写可选)
- regex:    正则表达式匹配
- favicon:  图标hash匹配

2. Condition逻辑

go
- or:  任一条件满足即匹配 (默认)
- and: 所有条件都满足才匹配

3. Part选择

go
- body:    响应体匹配 (默认)
- header:  响应头匹配

4. 性能优化

  • 正则缓存: 编译后的正则表达式缓存
  • Lazy加载: 首次调用时才加载JSON
  • Embed内嵌: 编译时打包,无需外部文件

使用示例

基本用法

go
import "github.com/shadow1ng/fscan/webscan/fingerprint"

// 自动加载并匹配
body := []byte("<html>...</html>")
headers := "Server: nginx/1.18.0"

// 计算 favicon hash(同时支持 mmh3 和 MD5 格式)
faviconData := []byte{...} // 从 /favicon.ico 下载的数据
favicon := fingerprint.CalculateFaviconHashes(faviconData)

matched := fingerprint.MatchEnhancedFingerprints(body, headers, favicon)
// 返回: ["nginx", "wordpress", ...]

指纹格式示例

WordPress指纹:

json
{
  "id": "wordpress",
  "info": {
    "name": "wordpress",
    "tags": "detect,tech,wordpress"
  },
  "http": [{
    "matchers": [{
      "type": "word",
      "words": [
        "/wp-content/themes/",
        "/wp-includes/"
      ],
      "case-insensitive": true
    }]
  }]
}

禅道OA指纹 (AND条件):

json
{
  "id": "zentao",
  "http": [{
    "matchers": [{
      "type": "word",
      "words": [
        "/zentao/theme",
        "zentaosid"
      ],
      "condition": "and"
    }]
  }]
}

Favicon Hash指纹:

json
{
  "id": "openemr",
  "http": [{
    "matchers": [{
      "type": "favicon",
      "hash": ["1971268439"]
    }]
  }]
}

验证结果

测试用例

bash
$ go run test_enhanced_fingerprint.go

✅ 增强指纹库加载成功

测试1 - WordPress识别:
  匹配结果: [wordpress]
  ✅ WordPress指纹匹配成功

测试2 - Nginx识别:
  匹配结果: [nginx]
  ✅ Nginx指纹匹配成功

测试3 - 禅道OA识别:
  匹配结果: [zentao-system zentao]
  ✅ 禅道指纹匹配成功

文件说明

文件大小说明
web_fingerprint_v4.json1.3MBFingerprintHub指纹库
enhanced.go~7KB增强指纹匹配引擎
rules.go~150KB基础指纹库(原有)
fingerprint_scanner.go~3KB统一入口(修改)

性能影响

编译后二进制

  • 旧版本: ~30MB
  • 新版本: ~57MB (+27MB)
  • 原因: embed了1.3MB JSON + 引擎代码

运行时性能

  • 内存: 首次加载 +2MB (JSON解析)
  • 速度: 正则缓存后无明显影响
  • 并发: 两套指纹库并行匹配

与原有指纹库的对比

维度基础指纹库增强指纹库
数量272条3,139条
来源内置FingerprintHub
格式Go代码JSON
扩展性需改代码社区更新
覆盖范围国内OA/WAF国内外全栈
Favicon
版本提取✅ (待实现)
Condition简单AND/OR
Part固定可选

后续计划

已实现功能

  • Favicon自动下载和hash计算 ✅
  • 使用mmh3算法计算favicon hash ✅
  • 并发指纹匹配(~267μs/3000+规则)✅
  • Version extractor(通用版本提取)✅
  • 指纹优先级排序(favicon > regex > word)✅

待实现功能

  • 支持加载外部JSON文件

潜在改进

  • 支持更多matcher类型 (status, size, binary)
  • 指纹库热更新机制
  • 匹配结果包含CPE信息

参考资料


License

增强指纹库来自FingerprintHub项目,遵循其原始License。