传统基于关键字正则表达式的SQL注入攻击检测、XSS攻击检测方法容易误杀,且对于注释变形、字符串语法变形等高级攻击规避方法的检测效果差。
语义分析拦截引擎基于实际SQL语句、XSS语句词法、语法分析结合威胁等级综合判断攻击行为,解决了对于高级黑客变形手段的攻击检测、拦截问题。
一、开源项目分析
Libinjection 一个轻量级的开源C语言开发编写的sql注入攻击检测库。有速度快以及低误报,低漏报,速度快体现在该库全程比较耗性能的就二分查找算法,库本身没有内存申请,使用的内存大小十分稳定,单线程等诸多优点。
1、技术原理
Liblinjection通过对用户的输入进行词法分析,生成指纹,然后通过二分查找算法,在特征库中进行匹配,匹配到则报SQL注入漏洞。
其核心思想一为转换,Libinjection通过将输入预处理,将sqli攻击解析为sql原始查询串,将输入转换为一套自己能够识别的语言;二为预演,Libinjection预设SQL注入发生在3中情况内(直接注入sql语句、在单引号内注入sql、在双引号内注入sql)
2、Liblinjection运作流程
- 初始化变量state
- 通过libinjection_is_sqli()函数进行具体分析(在下面详细分析)
- 如果存在issqli,则将SQL注入识别特征复制进fingerprint变量并返回,如果不存在则将fingerprint变量设置为空并返回。