人工智能安全-6-SQL注入检测

这篇具有很好参考价值的文章主要介绍了人工智能安全-6-SQL注入检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 提纲

  • 概述
  • SQL注入方法
  • SQL注入的检测方法
  • SQL语句的特征提取
  • 天池AI上的实践

1 概述

SQLIA:SQL injection attack SQL 注入攻击是一个简单且被广泛理解的技术,它把 SQL 查询片段插入到 GET 或 POST 参数里提交到网络应用。
由于SQL数据库在Web应用中的普遍性,使得SQL攻击在很多网站上都可以进行。并且这种攻击技术的难度不高,但攻击变换手段众多,危害性大,使得它成为网络安全中比较棘手的安全问题。

1.1 当前发展水平与现状

SQLIA 被大量关注并有丰富的文献。
基于端到端的网站应用架构的 5 个关键层:

  • 客户端
  • 网络应用防火墙(WAF)
  • 网络应用
  • 数据库防火墙
  • 数据库服务器

sql注入检测方法,人工智能安全,人工智能,安全,sql

2 SQL注入方法

发生于Web+数据库的应用架构中。
Web页面存在注入点,如一个登录页面:
sql注入检测方法,人工智能安全,人工智能,安全,sql
假如对登录用户身份进行合法性验证的SQL语句为:

select * from user where name = ‘{$name}’ and password ={$password}

攻击者即使没有该网站的用户账号和密码,也可能绕过账号验证而获得相应登录权限。
只需在登录提交表单中,用户名输入一个随意的字符串,如asndfas,密码框输入1 or 2=2。从而生成如下的注入SQL:

select * from user where username='asndfas' and passwd=1 or 2=2

由于2=2的条件恒成立,因此SQL执行的结果是返回user表中的所有记录。

利用注入SQL语句来进行数据库结构的猜测。例如攻击者想知道数据库中是否存在指定的表或表的字段名,在确定用户名/密码为bbb/2345的情况下,可以构建如下SQL语句来检查users表中是否存在emails字段:

select * from users where username='bbb' and passwd=2345 and exists(select emails from users)

攻击者可以执行一些数据库操作,导致数据丢失。在密码框中输入2345; drop table tmp,从而形成了如下的注入SQL,其中注入的分号是将SQL指令分成多条指令执行。

select * from users where username='bbb' and passwd=2345; drop table tmp

当用户bbb具有数据库执行drop table的权限时,这条语句会实现删除tmp表的操作。也可以使用update等语句对数据表信息进行修改。由此会产生严重的数据库安全问题。

3 SQL注入的检测方法

SQL注入的检测通常要对输入的内容进行校验,其中较为有效的是对请求数据格式或者内容进行规则处理。目前主要的检测方法有:

  • 针对特定类型的检查;
  • 对特定格式的检查;
  • SQL预编译的防御方法;
  • 机器学习方法。

3.1 针对特定类型的检查

考虑到SQL注入是在特定的Web页面输入框中实现的,每个输入有其特定的格式要求。因此可以对页面变量的数据类型、数据长度、取值格式、取值范围等进行检查。例如:

where id = {$id}

对于输入的id进行类型检查。只有当这些要求都通过检查之后,才把请求发送到数据集执行。

优点:

  • 对有特定数据格式输入可以起到防SQL注入的作用。

缺点:

  • 局限性较大:只能对特定数据格式输入起作用,存在较大的遗漏或不准确;
  • 工作量较大:对每个网页程序接口输入都进行格式判断。

3.2 对特定格式的检查

对于格式有明确要求的输入,如邮箱或电话等,可以采用正则表达式过滤方法,排除不符合要求的变量。
一些常见的注入也可以采用正则表达式过滤方法。例如对于

' or 1 = 1

这样的注入,可以用如下正则表达式进行过滤:

('\s+)? or\s +[[:alnum:]] +\s * = \s * [[:alnum:]]+\s *(--)?

只要拒绝符合该正则表达式的输入即可达到防止SQL注入的目的。

优点:

  • 可以过滤已知的各种注入方法。

缺点:

  • 不能过滤未知的注入;
  • 这种方法也会将带有符合过滤正则表达式的合法输入过滤掉,例如用户博客中的某一个句子带有’ or 1 = 1 --,那么这个句子会被错误过滤掉。

3.3 SQL预编译的防御方法

SQL预编译的基本思想是创建SQL语句模板,将参数值用“?”代替,例如:

select from table where id = ?

然后通过语法树分析、查询计划生成、缓存到数据库。这种方式不论输入内容包含什么,总是被当作字符串。这样用户传进来的参数只能被视为字符串用于查询,而不会被嵌入SQL中去执行语法分析。

一些Web框架如Hibernate、MyBatis等已经实现了参数化查询,是目前比较有效防止SQL注入的方法。

3.4 机器学习方法

机器学习方法把SQL注入检测看作一个二分类问题,从而按照机器学习的一般流程进行设计。主要环节包括:

  • 训练数据集收集与标注;
  • 特征提取;
  • 分类器选择与训练;
  • 执行分类。

4 SQL语句的特征提取

使用机器学习进行SQL注入的检测,首先需要解决SQL语句特征表示的问题。主要的方法有基于图论的方法,基于文本分析的方法。

4.1 基于图论的方法

基于图论的方法把SQL查询建模成标记图,进而生成以标记为节点、节点间的交互为带权边的图,利用该图实现SQL语句的转换和表示。

4.1.1 节点标记

定义SQL语句中的标记(Token),把SQL中的关键字、标识符、操作符、分隔符、变量以及其他符号都称为标记。
一条SQL查询,无论是真正的查询还是注入的查询,都是一个标记序列。
检测的基本思路就是,对真正查询和注入查询的序列进行特征提取,然后在特征空间中构建识别注入查询的分类器模型。

定义映射表
sql注入检测方法,人工智能安全,人工智能,安全,sql
sql注入检测方法,人工智能安全,人工智能,安全,sql
sql注入检测方法,人工智能安全,人工智能,安全,sql

sql注入检测方法,人工智能安全,人工智能,安全,sql

对于一条SQL语句,使用token对照表进行转换,同时对语句做特殊处理:

  • (1) 对能够匹配的括号对进行删除;对不能匹配的括号给予保留,并转化成标记;
  • (2)可以删除空注释(包含只有空白字符的注释),但非空注释必须保留。这是因为攻击者通常在注入代码中嵌入空注释来做混淆(例如/**/ OR / ** /1/ ** / = / ** /1),企图绕过检测。

两个例子:
(1)

 select * from books where price>20.5 and discount<0.8

规范化为:

 SELECT STAR FROM USRTBL WHERE USRCOL GT DEC AND USRCOL LT DEC

(2)

select count(*), sum(amount) from orders order by sum(amount)

规范化为:

SELECT COUNT STAR CMMA SUM USRCOL FROM USRTBL ORDER BY SUM USRCOL

最终,构建了686个不同的标记。每个标记都被看作最终数据集中的一个属性(维度)。

4.1.2 图的构建

可以构造的图种类包括:有向图/无向图, 含权图/无权图。

定义(标记图):标记图是一个有权图 G = ( V , E , w ) G = (V, E, w) G=(V,E,w),其中 V V V的每个顶点对应一个规范化序列中的标记, E E E是边的集合, w w w是一个定义边权重的函数。如果 t i t_i ti t j t_j tj在一个长度为 s s s个标记的滑动窗口中同时出现,则称在标记 t i t_i ti t j t_j tj间有一条权重为 w i j w_{ij} wij的边。如果在滑动过程中, t i t_i ti t j t_j tj间已经有一条边了,则它的权重要加上新的权重。

定义(无向图):在无向标记图中,如果标记 t i t_i ti t j t_j tj中有一条边,那么它具有对称的权重 w i j = w j i w_{ij} = w_{ji} wij=wji。如果在同一个长度为 s s s个标记的滑动窗口中出现了 t i t_i ti t j t_j tj,不进行权重累加。

定义(有向图):在有向标记图中,当一个长度为 s s s个标记的窗口滑过时,如果 t i t_i ti出现在 t j t_j tj之前,则认为 t i → t j t_i \rightarrow t_j titj形成一条权重为 w i j w_{ij} wij的边。边 t i → t j t_i \rightarrow t_j titj t j → t i t_j \rightarrow t_i tjti的权重是独立计算的。

计算含权图中两个节点间连接权重的两种加权方法如下:
(1)在 s s s滑动窗口内,每个标签具有相同的权重;
(2)在 s s s滑动窗口内,离得近的标签权重大,离得远的标签权重小。
例:第一个标记在滑动窗口内与后续标记的连接关系及权重,下面例子每个边的权重置为1, 生成的是无权图:
sql注入检测方法,人工智能安全,人工智能,安全,sql

下面例子每个边的权重根据距离目标标记的远近按比例进行设置, 生成的是含权图:
sql注入检测方法,人工智能安全,人工智能,安全,sql

最终,对一个SQL查询可以转换成为标记图:
sql注入检测方法,人工智能安全,人工智能,安全,sql

进一步对该图提取特征,可以是节点的度/入度/出度/紧密度等,从而将一个查询转换成为SQL标记的特征向量。而后可以使用各类分类器进行训练。

4.2 基于文本分析的方法

由于注入内容是一种文本信息,其语法基本遵循SQL语言,而非扎乱无章的内容。从这点看,它与自然语言类似。因此,可以尝试按照自然语言文本分类的方式来进行SQL注入的检测。
把SQL语句注入的请求信息进行分割,按照逻辑顺序进行切分,在逻辑上存在间隔的地方加上空格。 例如:

--post-data "Login='and'1'='1~~~&Password='and'1'='1~~~&ret_page='and'1'='1~~~&qu
 erystring='and'1'='1~~~&FormAction=login&FormName=Login" 

转化为:

-post-data "Login=' and '1'='1~~~&Password=' and '1'='1~~~&ret_page=' and '1'='1~~~&querystring=' 
and '1'='1~~~&FormAction=login&FormName=Login” 

把这些从Web日志中提取出来的字符串按照标点符号进行切分,最终获得其中的词汇特征集。这样的做法是把这些字符串当作文本来处理。
接下来,采用普通的文本分类技术,使用信息增益、方差阈值等特征选择方法选择有利于分类的Top K K K个特征,从而完成文本向量空间的构建。
从文本的角度,当然也可以把文本分类中的经典神经网络用来进行SQL注入的检测。例如Text CNN等。

5 天池AI上的实践

数据集是来自一个网站收集的链接请求,只有normal/attack两类,分别对应于标签0/1。该数据集共480条记录,有注入记录339条,正常记录141条。以下两条记录分别是注入和非注入样本。
基本思路是,把整个训练文本集进行切分,转换称为tf-idf向量,然后使用各类分类器进行训练和测试。
(1)数据处理部分
‘’’
train_data = pd.read_csv(“train.txt”, header = None, sep = “,”)
test_data = pd.read_csv(“test.txt”, header = None, sep = “,”)
train_data.dropna(inplace = True) #删除有缺失值的行
test_data.dropna(inplace = True)

(2)文本-向量转换处理,使用sklearn提供的TfidfVectorizer完成向量表示。
(3)构建分类器,测试性能
- 可以实现神经网络模型等更多分类器进行测试

sql注入检测方法,人工智能安全,人工智能,安全,sql

在线实验入口:
https://tianchi.aliyun.com/course/990文章来源地址https://www.toymoban.com/news/detail-755176.html

到了这里,关于人工智能安全-6-SQL注入检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能】对研究方法,智能模拟,学科范畴,涉及学科,研究范畴,安全问题,实现方法,人工智能与人类差距等方面的详细讲解

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 用来研究人工智能的主要物质基础以及能够实现人工智能技术平台的机器就是计算机,人工智能的发展历史是和

    2024年02月16日
    浏览(47)
  • 【网络安全】SQL注入--堆叠注入

    堆叠注入就是可以同时执行多条语句,危害较大,利用此漏洞可以进行删库或者修改数据库信息 查询存在多少字段 使用联合查询获取表名 使用联合查询获取字段名称 使用堆叠注入添加账号密码

    2023年04月09日
    浏览(49)
  • 探索人工智能:深度学习、人工智能安全和人工智能编程(文末送书)

    人工智能知识对于当今的互联网技术人来说已经是刚需。但人工智能的概念、流派、技术纷繁复杂,选择哪本书入门最适合呢? 这部被誉为人工智能“百科全书”的《人工智能(第3版)》,可以作为每个技术人进入 AI 世界的第一本书。 购书链接,限时特惠5折 这本书是美国

    2024年02月03日
    浏览(118)
  • 【网络安全】SQL注入--宽字节注入

    宽字节注入,在 SQL 进行防注入的时候,一般会开启 gpc,过滤特殊字符。 一般情况下开启 gpc 是可以防御很多字符串型的注入,但是如果数据库编码不 对,也可以导致 SQL 防注入绕过,达到注入的目的。如果数据库设置宽字节字 符集 gbk 会导致宽字节注入,从而逃逸 gpc 前提

    2023年04月13日
    浏览(60)
  • 基于人工智能的苹果成熟度检测

    一、 选题的背景 苹果在采摘期被采摘后,需要工人进行手工对苹果的成熟度进行分类,这耗费了大量的人力与物力,而且相近成熟度难以区分,存在分类颗粒度过粗,分类过程存在较为强烈的主观因素等问题。 在这里,我们提出了基于深度学习的苹果成熟度识别方案,这是

    2024年04月13日
    浏览(58)
  • SQL注入的一些示例及解决SQL注入的方法

    SQL注入是一种常见的网络攻击手段,攻击者通过把SQL命令插入到Web表单提交或输入框后面,盗取数据库信息,甚至控制数据库服务器。解决SQL注入的方法如下: 1、使用参数化查询: 参数化查询是一种预编译查询,该查询将参数和SQL语句分开,从而允许程序将参数值与SQL语句

    2023年04月09日
    浏览(42)
  • 人工智能安全:利用人工智能自动化攻击防御

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着人工智能技术的快速发展,大量的个人数据、敏感信息存储在互联网上,人工智能攻击日益猖獗。为了保护个人隐私与数据安全,人工智能安全技术应运而生。人工智能安全技术主要通过模拟人类思维,检测和防御人工

    2024年02月16日
    浏览(68)
  • 人工智能|机器学习——基于机器学习的舌苔检测

    基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔质等舌象特征,了解人体内的体质信息从而对症下药。 传统中医的舌诊主要依赖

    2024年02月22日
    浏览(70)
  • 人工智能与人类智能的未来:人工智能在安全领域的挑战

    人工智能(Artificial Intelligence, AI)是一门研究如何让计算机自主地完成人类常见任务的科学。人工智能的发展历程可以分为以下几个阶段: 人工智能的诞生:1950年代,人工智能诞生于美国伯克利大学的阿尔弗雷德·图灵(Alan Turing)和亨利·阿兹朗(Herbert A. Simon)的脑海中。他们提出

    2024年02月19日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包