基于TADK的SQLI检测

根据开放web应用安全项目(OWASP)的统计,SQL注入(SQL injection, SQLI) 是web应用程序排名第一的威胁。攻击者通过将恶意SQL查询插入用户输入框来从后端数据库窃取关键信息从而危害web应用程序。传统检测SQLI是利用黑名单过滤机制,使用正则表达式将某些关键字列入黑名单或非法语句。

但这种方法只能检测到已知的攻击,对新的攻击没有效果。此外,规则库的维护和更新也需要专业的知识,门槛相对较高。并且通常情况下用户需要花费一定的费用来获得商业版的规则库。近年来,基于机器学习的检测方法逐渐流行起来,但是对于切词(tokenization),特征提取 (feature extraction) 还没有比较高效的解决方案。

再加上业界一般多采用较为复杂的神经网络来训练模型,导致推理速度难以达到实际部署的要求。目前,比较主流的SQLI检测产品比如Modsecurity都是基于Libinjection库实现的。Libinjection定义了SQLI的28个token 类型,如图1所示。

Libinjection将输入的数据依据图1的定义逐个字符进行分析转换,之后就会得到SQLI的识别特征,或者说指纹 (fingerprint),然后通过二分查找算法,在特征库中进行匹配,匹配到则报SQLI攻击。为了降低特征库的规模以提升二分查找的效率,Libinjection会对原始生成的fingerprint进行压缩,最终库的规模维持在8000+条fingerprint。整个处理流程如图2所示。

图1. Libinjection定义的SQLI token 类型

图2. Libinjection 的SQLI检测流程

Libinjection的分词器 (tokenizer) 采用了很多分支判断,因而CPU的执行效率很低。Intel推出的高性能流量分析开发套件 (Traffic Analytic Development Kit, TADK) 的词法分析库Lexical Parser (LP) 对此进行了优化,提出了基于确定有穷自动机 (DFA) 的tokenizer。

图3 描述了LP切词的整个流程。开发人员基于SQL语法解析过程 (branch based) 定义了一套新的语法并形成Profile文件。其语法可简单的描述为定义不同的状态 (普通状态或带有输出token的状态) 及在当前状态下输入任意字符跳转的下一个状态。

利用DFA Compiler (TADK 提供的Profile 解析器) 生成如图4所示的DFA 状态转移表。该状态转移表描述了在每一个当前状态下输入任意字符的状态转移行为。

图5所示的DFA engine基于此状态转移表可以快速的获得输出token序列。

图3. TADK LP的tokenizer

图4. SQLI 的DFA状态转移表

图5. SQLI的DFA engine

输出的token 序列包含了不同类型的token在原始输入SQL查询语句中出现的次数及位置。为了方便将token序列转化成特征向量,我们将token 从字符类型映射成数值类型。no1&1o1转化为: [7,11,8,12,8,11,8]

特征计算的方法可以简单描述为给定一个滑动窗口,在该窗口内,累加每个token数值与其他token数值之间的距离乘以相应的权重得到该token数值的特征值。TADK 的特征提取 (Feature Extraction) 模块利用AVX512进行优化,取得了非常优秀的计算性能。经过特征提取得到最终的特征向量为: [0,0,0,0,0,0 0,100,436,0,0,250,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]。

TADK提供了训练好的SQLI 检测的参考模型——基于Intel oneDAL 的随机森林模型 (Random Forest, RF model) 。该模型是个二分类模型,class 0表示正常的SQL查询语句; class 1表示SQLI攻击。

由于只有28个特征(经过特征选择后更少) ,构建小规模 (比如只需要16棵决策树,树的深度为10) 的RF 模型即可获得较高的精确度。由于该RF模型相对神经网络来说非常简单,再利用oneDAL提供的优化加速,因而能获得超过3个数量级的性能提升。TADK提供的SQLI 检测流程如图6所示。经过Benchmarking测试,TADK的SQLI方案相较Libinjection具备高检出率,低误报率和低延迟的优势。该结果也表明TADK的方案有着较高的实际部署价值。

图6. TADK 的SQLI检测流程

TADK 21.08 发布包提供了SQLI检测的应用代码 (sqli_detection) 及参考模型, 用户可以快速测试sqli_detection的效果。步骤如下 (Linux 平台) :

>> sh tadk_v21.08.sh

>> cd tadk_v21.08/

>> make

>> ./build-root/install-root/bin/sqli_detection -I “id = 1 AND 1 = 1”

>>  

结果表示模型以0.84的概率判定 “id = 1 AND 1 = 1” 是SQLI攻击,符合预期。此外,TADK也提供了将该SQLI检测方法集成到Modsecurity的patch。图7演示了Nginx+Modsecurity搭建的WAF效果图。

图7. 基于TADK 的WAF实现图

转载须知

DPDK与SPDK开源社区

公众号文章转载声明

推荐阅读

SPDK动态负载均衡

2021美国峰会系列二 | SPDK与云原生

基于英特尔平台的三星5G核心网高性能UPF 305 Gbps解决方案

SPDK 负载均衡初探

基于DPDK的设备虚拟化框架

点点“赞”“在看”,给我充点儿电吧~

基于TADK的SQLI检测相关推荐

  1. 10分钟内基于gpu的目标检测

    10分钟内基于gpu的目标检测 Object Detection on GPUs in 10 Minutes 目标检测仍然是自动驾驶和智能视频分析等应用的主要驱动力.目标检测应用程序需要使用大量数据集 ...

  2. 基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5、yolop、yolox)

    基于YOLO的目标检测界面化部署实现(支持yolov1-yolov5.yolop.yolox) 代码下载地址:下载地址 安装 操作系统:Win10.Win7.Ubuntu16.04(其他操作系统没有测 ...

  3. 基于YOLO的手部检测和计数实现(课程设计,训练和测试)(1)

    基于YOLO的手部检测和计数实现(课程设计)支持YOLOV3和YOLOV3-TINY 训练测试代码.数据集.测试视频下载地址:下载地址 环境要求: * Python 3.7 * PyTorch > ...

  4. 连通域最小外接矩形算法原理_基于分割的文本检测算法之PSENet/PAN/DBNet

    1. 文本检测难点 文本内包含文本,艺术字体,任意方向 ,曲线文字 ,多语言,其他环境因素等是文本检测中的难点 2. 分割 问题1: 语义分割模型是对pixel进行分类,所以理论上讲,可以检测不规则的 ...

  5. 视觉SLAM如何基于深度学习闭环检测?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 请问有做视觉SLAM基于深度学习闭环 ...

  6. 基于机器学习的入侵检测系统

    导 语 在过去十年中,机器学习技术取得了快速进步,实现了以前从未想象过的自动化和预测能力.随着这一技术的发展促使研究人员和工程师为这些美妙的技术构思新的应用.不久,机器学习技术被用于加强网络安全系统. ...

  7. 快速完整的基于点云闭环检测的激光SLAM系统

    我原来总结过LOAM_Livox,这篇文章主要是解决LOAM在长时间运行的时累计误差的问题.本文提出的方法计算关键帧的2D直方图,局部地图patch,并使用2D直方图的归一化互相关(normalize ...

  8. 人工智能阴影检测与去除,实现一种基于反射的阴影检测与去除方法

    人工智能阴影检测与去除,实现一种基于反射的阴影检测与去除方法(特约点评:人工智能阴影检测与去除,实现一种基于反射的阴影检测与去除方法对于阴影检测与去除任务提供了新的思路,这个创新点趣说人工智能必须推荐 ...

  9. 基于机器视觉的缺陷检测汽车零部件

    https://www.toutiao.com/a6713860404323287566/ 基于机器视觉的缺陷检测汽车零部件 1. 缺陷检测的意义 汽车行业是支撑我国实体经济发展的重点行业,目前我国是 ...

  10. 深度神经网络在基于视觉的目标检测中的应用

    简 介: 目标检测是计算机视觉的一个重要应用方向,深度神经网络的提出极大地帮助基于视觉的目标检测提高了准确度.自2014年以来,深度神经网络在基于视觉的目标检测中被广泛应用,出现了多种算法.本文分别讨 ...

最新文章

  1. Elasticsearch 与 Kafka 整合剖析
  2. 【笔记】微软OneNote使用笔记,OneNote备份问题
  3. 剑指offer:约瑟夫环的问题
  4. QT的QScriptValueIterator类的使用
  5. java future用法_纯干货:Java学习过程中的21个知识点和技术点
  6. Google Maps API 调用实例
  7. 电脑上玩 Google纵横
  8. 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
  9. android开发需要root吗,已经2017年了,Android手机还需要root吗?
  10. @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它
  11. C++实现模板方法模式--问卷调查实战
  12. flutter常见报错处理
  13. 1——man elf的翻译——ELF header (Ehdr)
  14. 百度架构师手把手教深度学习之心得
  15. HashMap遍历方法和实现原理分析
  16. 西安公交车路线汇总(2)
  17. [ BZOJ 2757 ]Blinker的仰慕者
  18. Unity3D中Isometric Tilemap功能实践
  19. 一个列子让你弄懂SpringBoot实现后台框架的搭建
  20. MongoDB简单入门篇及其Spring Boot整合

热门文章

  1. 阿里云主要产品有哪些?有什么用?
  2. 三、段地址与偏移地址
  3. 在excel中如何筛选重复数据_如何将Excel重复数据筛选出来?简单技巧有三种!...
  4. 参考文献的序号如何设置
  5. unknownhostexception错误解决方案
  6. 如何向下属布置工作任务,5个步骤,布置工作任务更清晰
  7. git的版本回溯(git想要退回到之前写过的某一个版本)
  8. java 线程优先级_Java线程优先级
  9. SPSS多元线性回归分析看标准化还是非标准化系数?
  10. 高德地图两点间距离计算函数