ProxySQL SQL 注入引擎

2022-11-13,,,

ProxySQL 2.0.9 引入了 libsqlinjection 作为识别可能的 SQL 注入攻击的机制。

启用 S​​QL 注入检测

要启用 SQL 注入检测,只需要启用变量 mysql-automaticdetectsqli

SQL 注入检测和防火墙白名单

即使启用了变量 mysql-automaticdetectsqli,SQL 注入引擎也不会检查所有的查询操作。因为,SQL 注入引擎不会检查防火墙白名单允许的操作。因为它已经是被认为是安全的,所以就不会检查。

换句话说,如果启用了 SQL 注入的自动检测(mysql-automaticdetectsqli=1):

    如果防火墙白名单是关闭的,SQL 注入引擎会分析所有的操作。
如果防火墙白名单是启用的,SQL 注入引擎只会分析白名单之外的操作,并且会以"DETECTING"模式为用户执行,实际上: - 模式为"OFF"的用户,所有的操作都被认为是白名单上的。 - 模式为"PROTECTING"的用户,不在白名单的操作会被拒绝。 表 mysqlfirewallwhitelistsqlifingerprints libsqlinjection 解析查询,生成查询的指纹,并确定该指纹是已知的 SQL 注入攻击还是可能的攻击。 尽管 libsqlinjection 能够检测到很多 SQL 注入,但是不幸的是,它还会产生很多误报。 将 SQL 注入检测与防火墙白名单结合使用可以大大减少误报(所有列入白名单的查询都不会由 SQL 注入引擎处理),这是减少误报数量的最佳方法。 减少误报数量的另一种方法是将 libsqlinjection 生成的某些指纹列入白名单。可以在表中将指纹列入白名单 mysqlfirewallwhitelistsqlifingerprints: CREATE TABLE mysql_firewall_whitelist_sqli_fingerprints (
active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
fingerprint VARCHAR NOT NULL,
PRIMARY KEY (fingerprint) ) active:定义是否为活动 fingerprint:是 libsqlinjection 生成的指纹,我们希望(暂时)禁用它,允许查询与指定的指纹匹配 目前获取指纹的唯一方法是通过错误日志,ProxySQL 会将打印指纹和失败的查询。例如: 2019-11-28 16:17:23 MySQL_Session.cpp:3323:handler(): [ERROR] SQLinjection detected with fingerprint of 'Eoknk' from client pinkys_dbu@192.168.56.104 . Query listed below:
SELECT * FROM users WHERE username='asdsad' AND password='e2a521bc01c1ca09e173bcf65bcc97e9' 如果觉得这是正常的查询,那么可以使用 mysqlfirewallwhitelist_rules 将其加入白名单 INSERT INTO mysql_firewall_whitelist_sqli_fingerprints VALUES (1, \'Eoknk\'); mysqlfirewallwhitelistsqlifingerprints 是防火墙的一部分,因此,使用跟防火墙白名单一样的命令,将其载入到当前运行时: LOAD MYSQL FIREWALL TO RUNTIME mysqlfirewallwhitelistsqlifingerprints 对应运行时使用的表为 runtimemysqlfirewallwhitelistsqli_fingerprints 。

ProxySQL SQL 注入引擎的相关教程结束。

《ProxySQL SQL 注入引擎.doc》

下载本文的Word格式文档,以方便收藏与打印。