永别了 SQL 注入 长亭科技 陈宇森 SQL 注入攻击是? • SQL注入(SQL injection),是发生于应用 程序数据库层的安全漏洞。 简而言之,是在输入的字 符串之中注入SQL指令, 在设计不良的程序当中忽 略了检查,那么这些注入 进去的指令就会被数据库 服务器误认为是正常的SQL 指令而运行,使得服务器 遭到破坏或是入侵。 SQL 注入攻击的危害 • 数据库信息泄漏 • 数据库被恶意操作 • 服务器被入侵 SQL 注入攻击的危害范围 • wooyun 平台一共有 61201 条漏洞记录,与 SQL 注入相关的有 19250 条记录 • 多年上榜OWASP TOP 10 • 我们目前的客户没有一家没有 SQL 注入漏洞 SQL 注入防范点 • 开发阶段的安全编码 • 应用和数据库的中间层 • 网络应用防火墙(WAF) 问题背景和现有方法 libdejector • • BlackHat 2005, Hansen and Patterson • 定义了一个安全的 SQL subset 作为标准 • 在 SQL context 中判断是否是合法输入 • 对环境要求极高 问题背景和现有方法 基于规则的系统:开源的ModSecurity, 各家硬 件WAF,云WAF等 • • 使用最普遍,最简单,在忽视误报率的情况 下,漏报率可以做到一个比较低的水平 • 更新慢,反应慢,人工规则容易出错 • 很容易绕过,无法针对应用 问题背景和现有方法 libinjection • • BlackHat 2012,提出的新思路 • 将输入进行 SQL 词法分析 • 对词法分析结果进行归类和合并,使用 85000 条数据进行训练 • 思路很好,可惜误报太高,太工程化处理, 总体结果很乱 问题的复杂性 从用户输入中检测 SQLi 是一个很难的问题 • • SQL 本身是图灵完全的,也就是说可以在 SQL中实现任意算法 • 1992 SQL 规范: 625 页文本 • 多种实现 MYSQL, Oracle SQL, MS SQL, PostgreSQL等等。 问题的复杂性 SQL 的多样性和复杂性比想象中多得多 • • 没有一家 SQL 完整实现 SQL 规范 • 各种不同的扩展,语法,规则,甚至 bugs • 递归注释,数字、字符串都不能用正则完整 表达 问题的复杂性 BlackHat 2005, Hanson 和 Pattersn 从理论 上证明了,任何基于正则的输入验证系统,都 存在以下两个情况至少有一个为真 • • 可以构造一个安全的正常请求,但是被验证 系统标记为危险/不正常 • 可以构造一个不正常的攻击请求,但是验证 系统标记为正常请求 测试集 • 测试集的数据来自真实互联网流量,从约 5000 万条网站流量数据选取 • 测试集数据由 35860 条 HTTP 请求构成,其中 SQL 注入 3019 条,正常请求 32841 条,每个请 求标注经过人工确认无误。随机从全部数据中选 取,限制在预处理后至少包含一个 SQL 关键词 • 删除所有其他攻击类型,XSS,LFI,RFI,RCE 等 国内云WAF测试结果 2015年2月 误报率 漏报率 ⼚厂商A 3.41% 9.77% ⼚厂商B 78.39% 2.42% ⼚厂商C 57.14% 1.56% 我们的目标 • 在我们苛刻的数据集中进行测试,误报率和漏 报率均小于1% 尝试的方法和思路 • 机器学习相关方法 • 语义分析相关方法 数据预处理 • 攻击数据可能使用各种编码。 • 例如,url encode、base64、json、 querystring,甚至 php serialize、unicode escape 和 html encode 等等。 • 一个精心构造的注入攻击可能同时使用多种编码, 这无疑增大了注入防范的难度。 • 也正因此,对数据进行解码预处理变得非常重要。 编码情况统计 • 在包含复杂请求的苛刻数据集上,对注入攻击的 编码深度、数目和比例进行分析的结果如下: Depth Count Percentage 1 163 5.40% 2 2569 85.09% 3 232 7.68% 4 9 0.30% 5 2 0.07% SUM 2975 98.54% 编码情况统计 • 对于全部流量数据,在去重后大小约为1100万的数据 集上对编码深度、数目和比例进行分析的结果如下: Depth Count Percentage ⽆无编码 675w 61.39% 1 274w 24.92% 2 181w 16.50% 3 21w 1.92% 4 8.9w 0.81% 编码情况统计 • 该数据集上,各种编码方式的统计结果如下: Encoder Count Percentage php serialize 15496 0.14% json 107682 0.98% url encode 1350637 12.28% base64 1997110 18.16% querystring 4388661 39.90% utf7 1410 0.01% html 30499 0.28%
2015-《永别了SQL注入-陈宇森》
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。
本文档由 张玉竹 于 2022-04-07 17:49:49上传分享