数据库未授权如何拦截

wen 开源项目 35

本文目录导读:

数据库未授权如何拦截

  1. 网络边界拦截(最基础、最有效)
  2. 数据库自身配置加固(核心防线)
  3. 应用层身份验证加强
  4. 实时监控与主动阻断(应急拦截)
  5. 网络层深度包检测(DPI)
  6. 最佳实践行动清单
  7. 核心原则

针对数据库未授权访问的拦截,需要从网络层、应用层、数据库自身配置、以及监控应急几个维度构建纵深防御体系,以下是具体的拦截方案和最佳实践:

网络边界拦截(最基础、最有效)

这是阻止外部攻击者直接连接数据库的第一道防线。

  • 禁止数据库端口暴露在公网
    • 操作:检查防火墙/安全组策略,确保数据库端口(如 MySQL 3306、PostgreSQL 5432、Redis 6379、MongoDB 27017)仅对特定的应用服务器 IP 开放,严禁 0.0.0.0/0。
    • 拦截效果:直接阻断来自互联网的所有未授权连接请求。
  • 使用VPN/堡垒机
    • 操作:要求所有数据库操作必须通过 VPN 接入内网,或通过堡垒机(JumpServer)进行身份认证和审计。
    • 拦截效果:即使端口开放,未通过 VPN 或堡垒机认证的流量会被拒绝。
  • 部署WAF或数据库防火墙
    • 操作:在数据库前端部署专门的安全设备,配置白名单策略(只允许特定源IP、特定SQL语句类型通过)。
    • 拦截效果:可以检测并拦截暴力破解、SQL注入等尝试。

数据库自身配置加固(核心防线)

即使是内部网络,也必须假设网络可能被突破,需要数据库自身具备拦截能力。

  • 绑定监听地址
    • 操作:在数据库配置文件中,将 bind-address 设置为 0.0.1 或内网 IP,而不是 0.0.0
    • 配置文件示例(MySQL)
      [mysqld]
      bind-address = 127.0.0.1  # 仅允许本机访问
      # 或
      bind-address = 192.168.1.100 # 仅允许内网特定IP访问
  • 最小权限原则
    • 操作:删除或禁用默认管理员账户(如 root/dba),为每个应用创建专用账号,只授予该应用所需的数据库和表的 SELECT/INSERT/UPDATE/DELETE 权限,严禁使用 GRANT ALL
    • 命令示例
      -- 错误做法
      GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%';
      -- 正确做法
      GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'app_server_ip' IDENTIFIED BY 'strong_password';
  • 强制身份认证与密码策略
    • 操作:禁止使用 auth_socketunix_socket 插件(除非明确需要),启用密码复杂度检查(长度、字符类型),定期更换密码。
    • 拦截效果:防止弱口令被暴力破解。
  • 启用SSL/TLS加密
    • 操作:强制客户端使用 SSL 连接数据库。
    • 拦截效果:即使攻击者截获网络包,也无法解析通信内容,且无法通过重放攻击获取会话。
  • 关闭不必要的功能与账户
    • 操作:删除 test 数据库;禁用 local-infile(防止文件读取攻击);禁用 xp_cmdshell(SQL Server)等危险存储过程。

应用层身份验证加强

如果用户是通过 Web 应用间接访问数据库,需要在应用层进行拦截。

  • 强制强密码与多因素认证
    • 操作:应用登录页要求密码包含大小写、数字、特殊字符且长度≥12位,对管理员后台强制启用 MFA(如手机验证码、TOTP)。
    • 拦截效果:防止撞库和弱口令爆破。
  • 双因素认证(2FA)
    • 操作:对数据库管理工具(如 Navicat, DBeaver)或 API 接口启用 2FA。
    • 拦截效果:即使密码泄露,攻击者也无法在没有第二因子(如动态令牌)的情况下登录。

实时监控与主动阻断(应急拦截)

当网络、配置、身份认证都被突破时,需要依赖行为分析进行实时拦截。

  • 部署数据库审计系统
    • 操作:使用工具(如 MySQL Enterprise Audit, MongoDB Audit, 或第三方工具如 DataSunrise, Imperva)实时解析所有 SQL 语句。
    • 拦截规则
      • 检测到 SELECT * FROM user WHERE password = ...(弱口令尝试)。
      • 检测到 SELECT @@version(信息探测)。
      • 检测到大量失败的登录尝试(暴力破解)。
      • 配置自动阻断:当触发阈值时,审计系统会自动向防火墙发送指令封禁源IP,或直接 Kill 该连接。
  • 设置连接数/频率限制
    • 操作:在数据库或应用层限制单个IP的并发连接数和查询频率。
    • 拦截效果:防止慢查询耗尽资源和批量查询。

网络层深度包检测(DPI)

  • 操作:在核心交换机或防火墙上开启 DPI 功能,识别并拦截非数据库协议的流量(如 HTTP 请求连接 3306 端口)。
  • 拦截效果:防止利用端口复用或隧道工具绕过网络防火墙。

最佳实践行动清单

为了在实际操作中有效拦截未授权访问,建议按以下优先级执行:

  1. 立即执行(最紧急)

    • 检查所有云服务器的安全组:确保数据库端口(3306, 5432, 6379等)没有 0.0.0/0 的入站规则,如果发现,立刻删除。
    • 修改默认端口:将默认端口改为高位端口(如 3306 -> 13306),可以有效绕过批量扫描脚本。
  2. 日常加固(必须做)

    • 创建非 root 的专用应用账号,并授予最小权限。
    • 启用数据库的审计日志并配置告警。
    • 为数据库管理工具配置 SSH 隧道或 VPN,而不是直接暴露。
  3. 高级防御(可选但有效)

    • 部署数据库防火墙或 WAF。
    • 对管理后台启用 MFA。

核心原则

永远不要信任网络。 即使在内网,也可能存在横向移动攻击。 将数据库视为核心资产,默认拒绝所有访问,仅按需开放。

通过 “网络白名单 + 数据库最小权限 + 强身份认证 + 行为审计” 的组合策略,可以拦截绝大多数数据库未授权访问的企图。

抱歉,评论功能暂时关闭!