SQL注入检测(转载)

SQL注入检测(转载)

SQL注入常用于攻击Web应用程序,攻击者的输入值被传输到程序中的数据库中执行查询语句,从而形成SQL代码。SQL注入攻击实现简单且威胁程度高,被OWASP列为十大Web应用程序漏洞之一,且长期位居榜首。

SQL漏洞的产生主要是由于在编写代码时不恰当的使用API操作数据库以及缺乏有效的输入验证和过滤机制。SQL注入攻击一般可能造成以下损害:

资料表中的资料外泄

数据结构被黑客探知,得以做进一步攻击

数据库服务器被攻击,系统管理员账户被窜改

获取系统较高权限后,有可能得以在网页加入恶意链接、恶意代码以及Phishing等

经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统

攻击者利用数据库提供的各种功能操纵文件系统,写入Webshell,最终导致攻击者攻陷系统

破坏硬盘资料,瘫痪全系统

获取系统最高权限

网站主页被窜改

SQL注入方式主要有以下几种:

同义反复:将恶意代码插入到多个条件语句中,使SQL语句的条件子句部分总是为真,致使原条件失效,主要用于绕过身份验证。

逻辑错误查询:向被测系统提交错误的SQL语句,通过分析系统返回的错误信息来判断系统内部信息。

联合查询:通过在SQL语句中加入“UNION”求并集子句来获得额外信息。

复合查询:使用“;”将SQL查询、插入、删除等操作连接并执行。

存储过程:存储过程包含参数,在参数传递中存在SQL注入。

推理:构造条件互相对立的SQL语句,可分为条件盲注和时间盲注。

编码替换:利用ASCII编码、十六进制编码等方式转换语句进行注入。

按具体的攻击手段,常用的SQL注入方法大致有Union注入、Boolean注入、报错注入、时间注入、堆叠查询注入、二次注入、宽字节注入、Cookie注入、Base64注入、XFF注入等。

SQL注入攻击防范

SQL注入攻击防范主要有以下几种方法:

在服务端正式处理之前对提交数据的合法性进行检测

封装客户端提交信息

替换或删除敏感字符/字符串

屏蔽出错信息

使用SQL变量而不是用字符串建立SQL查询

目录最小化权限设置

修改或移除Web服务器上默认的危险命令

数据敏感信息非常规加密

使用其他更安全的方式连接SQL数据库

增强WAF的防御力

SQL注入检测

SQL注入攻击检测可根据入侵事件发生的前后进行区分,在入侵前可以对Payload进行检测等方式以预防SQL注入攻击。在入侵检测后可以通过对数据库、IIS日志等进行检查以进行判断。

传统的SQL注入检测方法通常根据经验提取特征,然后基于规则库匹配的方法来检测是否为SQL注入语句。其设计一般较为复杂,且规则模式更新频繁。在此采用机器学习的方式尝试对SQL注入语句进行检测。

CharCNN

CharCNN模型架构来源于Character-level Convolutional Networks for Text Classification这篇论文,大部分基于深度学习的文本分类网络模型大都从单词、短语、句子等层面或者对语义和语法结构进行分析建模,而CharCNN利用字符层面信息进行文本分类。由此可见,CharCNN较为适合类似于payload等这种由各种字符构成的短文本。

CharCNN模型结构:

CharCNN以一系列编码字符作为输入。通过为输入大小为的字母表,然后采用one-hot等编码方式对每个字符进行量化来完成编码。然后,将字符序列转换为固定长度的向量序列。长度超过固定长度的任何字符都将被忽略,并且不存在于字母表的字符都将转化为全零向量。由于字符编码顺序是向后的,因此最新读入的字符始终放在输出的开头,即要反向处理字符编码。

CharCNN论文中设计了两种类型的卷积,且它们都由6个卷积层和3个全连接层组成。除此之外,在3个全连接层之间加入2个Dropout层以实现模型正则化。

在此次SQL注入检测中,设计了如下字符表:

abcdefghijklmnopqrstuvwxyz0123456789-,;.!?:'\"/\\|_@#$%^&*~`+-=<>()[]{}

且对特殊字符采用特殊编码表示,并对字母数据一律采用小写字母表示。

在数据采集方面,SQLi检测的训练集包含了53739个SQL注入样本,48497个正常样本。测试集包含了5954个SQL注入样本,5406个正常样本。对数据进行预处理后,采用CharCNN进行约10轮epoch的训练。payload样本字符串取150个字符的测试结果如下:

AUC: 0.99689285

ACC: 0.99674296

Recall: 0.99378569

F1-score: 0.99688316

Precision: 1.00000000

样本字符串取300个字符在40次epoch后的测试结果如下:

AUC: 0.99904220

ACC: 0.99903169

Recall: 0.99882432

F1-score: 0.99907602

Precision: 0.99932784

Bi-LSTM

Bi-LSTM是Bi-directional Long Short-Term Memory的缩写,是由前向LSTM与后向LSTM组合而成。由于LSTM对句子进行建模时存在无法编码从后到前的信息的问题,故采用Bi-LSTM来更好的捕捉双向的语义依赖。

样本字符串取300个字符在50次epoch后的测试结果如下:

AUC: 0.99965558

ACC: 0.99964789

Recall: 0.99949614

F1-score: 0.99966403

Precision: 0.99983199

结果

经过测试,CharCNN模型在公司实时数据中可以检测出如下所示的SQL注入攻击:

%2C%28SELECT+2726+FROM+%28SELECT+EXP%28~%28SELECT+%2A+FROM+%28SELECT+CONCAT%280x7170766b71%2C%28SELECT+%28ELT%282726%3D2726%2C1%29%29%29%2C0x716a6b6a71%2C0x78%29%29x%29%29%29s%29

同时在未迭代的Bi-LSTM原始模型基础上检测出了如下类似蚁剑WebShell链接流量:

?a=Ev al ("Ex"&"e"&"cute(""Server.ScriptTimeout=3600:On Error Resume Next:Function bd(byVal s):For i=1 To Len(s) Step 2:c=M"&"i"&"d(s,i,2):If IsNumeric(M"&"i"&"d(s,i,1)) Then:Ex"&"e"&"cute(""""bd=bd&c"&"h"&"r(&H""""&c&"""")""""):Else:Ex"&"e"&"cute(""""bd=bd&c"&"h"&"r(&H""""&c&M"&"i"&"d(s,i+2,2)&"""")""""):i=i+2:End If""&c"&"h"&"r(10)&""Next:End Function:Response.Write(""""@*lxl*@""""):Ex"&"e"&"cute(""""On Error Resume Next:""""&bd(""""526573706F6E73652E577269746528224C584C2229"""")):Response.Write(""""*@lxl@*""""):Response.End"")")

在后期的模型迭代升级上,需要在训练集中加入现有模型误报和漏报的数据,以使模型更针对于实际网络环境下的数据。并可以结合模式匹配、专家规则等方式,以提高模型的检测效果。

参考文献

Zhang X, Zhao J, LeCun Y. Character-level convolutional networks for text classification[J]. arXiv preprint arXiv:1509.01626, 2015.

黄小丹. SQL注入漏洞检测技术综述[J]. 现代计算机, 2020, No.682(10):52-59.

陈小兵, 张汉煜, 骆力明, 等. SQL 注入攻击及其防范检测技术研究[D]. , 2007.

猎豹安全中心技术分享频道

海量日志分析的预处理

OSSEC-Execd功能模块分析

通过流量快速识别域名信息

从android源码看脱壳

Ossec-Agentd模块分析

猎豹移动DPIA系统开源

一种新的分词方法在机器学习中的应用

Ossec-Logcollector模块分析

Ossec-Agent-Syscheckd模块分析

Ossec Agent总结

HTTP走私漏洞分析

BurpSuite扩展插件使用分享

webshell连接工具流量分析

JDK7u21调用链分析

php函数中的那些坑

通过sqlmap源代码分析SQL注入漏洞检测流程

猎豹移动通过“全球首个隐私信息管理体系标准”ISO/IEC 27701认证

DGA域名检测

基于NSL-KDD数据集的网络入侵检测分析

采用HAN网络模型的WebShell检测

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容