小安:(挥手)小白,发呆呢?

小白:我是在思考!……IPS到底是怎么检测到恶意攻击的呢?

小安:这个问题,要从IPS规则库说起。

小白:哦,原来IPS防护是靠它。

小安:也不全是。IPS规则库就像一本字典,收录了各种各样的攻击行为和网络威胁,IPS引擎检测到数据包后,会去这本“字典”里查找,如果找到了就立即拦截。

小白:这么厉害,这本“字典”我也想拥有!

IPS规则长啥样?

all enable http [80,8080] (msg_cn:"SQL注入攻击选择语句检测";uricontent:"select";nocase;

pcre:"/[\x00-\x20\xA0\x2B\x2F\x29\x27\x22\d](and|or|union)[\x00-\x20\xA0\x2B\x2F\x28\x23\x2D][^&]{0,50}select[\x00-\x20\xA0\x2B\x2F\x28\x23\x2D\x5B].+[\x00-\x20\xA0\x2B\x2F\x29\x5D]from[\x00-\x20\xA0\x2B\x2F\x28\x23\x2D\x5B]./isU";)

这条规则翻译成我们的语言就是:规则有效,匹配基于http协议的SQL注入攻击,如果在报文URI中检测到包含and、or或union后接select……from等SQL命令的关键字,即命中此规则,并生成相应的告警信息和日志。

所以,这条规则的作用是识别一些请求中可能存在的恶意SQL查询语句,如果匹配了这条规则,IPS引擎就会判定这次请求附带了攻击指令, 从而引擎可以执行策略预定义的动作进行防护。

这本字典怎么查?

图1 IPS规则匹配流程

正常操作时,用户向服务器发起一个请求,服务器收到请求后返回给客户端一个消息,包含用户需要的内容。而攻击者为了获取用户隐私信息或服务器信息,会在前后端之间进行拦截,修改用户原本要传过去的参数,变为自己想要获取的信息,进行网络攻击。以上面提到的SQL注入攻击为例。

图2

图2是一个输入姓名查询信息的平台,攻击者在姓名信息grady后面增加了字符’union select ……,这些字符包含在报文中传递给了IPS引擎,被解析为图4内容。如果没有开启这条规则,在有注入的接口上,攻击者可以通过这些字符,查询到数据库中其他的数据表,从而获取隐私信息。

图3

图4

IPS引擎从流经的报文中,解析出各种关键字段,但它并不能判断是否存在攻击指令,需要在IPS规则库里查找。如果此时开启了这条规则,这次请求就能匹配到相应规则,说明其中存在攻击指令。IPS引擎会告知设备阻断这个行为,并生成一条日志。

IPS规则的局限性

通过前面的叙述,我们可以总结出这两个定义:

IPS规则:一些符号文字组合形成的判断依据,表示某一种漏洞或针对漏洞的某一种攻击形式。

IPS规则库:一系列规则打包形成,放入设备后是不可变的数据,描述多种攻击形式。

规则是引擎判断的依据,引擎解析出数据包的流量后与规则进行匹配,能匹配到规则,说明报文中可能存在攻击;不能匹配到规则,有两种可能:

  • 确实没有攻击行为。
  • 攻击手法更加先进,超出了规则的覆盖范围。

安全研究团队的日常工作,就是不断与攻击者进行技术对抗,研究更多、更高级的攻击方式,让规则覆盖最大可能性。

那么,是否只要规则库足够强大,就能覆盖所有可能的攻击呢?在现实运维工作中,面对庞大的数据流量,除了基于性能要做一些功能上的取舍外,还需要解决特殊报文和绕过的问题。

1、规则匹配顺序问题

凭感觉,根据危险等级进行规则匹配,高危的优先匹配,低危的后续匹配,好像是理所应当。实际上,规则没有这么智能,先匹配哪些规则,后匹配哪些规则,完全听从引擎的调用。为了避免先匹配到低危特征,而放过了高危攻击者的情况,引擎需要支持基于优先级顺序的规则匹配。

2、规则数量问题

网络攻击层出不穷,攻击手段和系统漏洞不断更迭,规则数量也随之与日俱增。一方面,规则数量过多,会造成性能压力;另一方面,如果限制规则数量,又会放过很多攻击者。

3、逃逸技术问题

逃逸技术,是攻击者为了躲避现有检测机制,想出的绕过方式。比如编码变化,攻击者为了隐匿自己的行踪,对攻击行为层层加码,使用多次base64编码、URL编码、unicode编码等。你可能会觉得,这几种编码不复杂呀,很容易就能解码。但经过多次选择甚至混合编码后,引擎就难以破解了,绕过了规则有限的检测方式。

尽管存在以上局限,基于IPS规则的防护方式,还是目前安全产品主要使用的防护方式之一。在更高级的防护方式中,融入了基于语义、深度学习等技术的安全能力,这也是IPS未来的发展方向。

【安全科普】揭秘IPS之网络攻击的“字典”相关推荐

  1. 科普揭秘!U盘跟固态硬盘SSD有什么关系?

    在平时工作和生活中,U盘和固态硬盘SSD现在已经是必不可少的数据存储设备了.其中,U盘应该用的是相对更多.有些人,还把U盘成为Mini SSD.这种说法准确吗?本文咱们就一起来对比看一下: U盘的种类 ...

  2. python简述文件的操作步骤_Python之文件操作

    一.文件操作步骤 1.有个文件 2.打开文件 3.操作文件:读.写 4.关闭文件 f=open('users.txt','a+') #打开文件 f.flush() f.seek(0)#指针从头开始 p ...

  3. NSM和入侵检测掌握IDS规则和警报的指南

    第1章:网络安全监视简介 再次问好!我是托尼·罗宾逊(Tony Robinson),那个您可能会或可能不会怀疑他是否只是在那里写书和提供漫画救济的家伙.最近,我被要求撰写有关如何解释IDS / IPS ...

  4. 读后笔记之《[科普文] 什么是网络流量劫持?揭秘详解黑客劫持的攻击手段与防御方法》

    最近在整理个人的文件,把曾经写的的文章上传在这,权当做是云备份了. 电脑上显示这篇文章的最后修改时间是2014年11月11日,有种莫名的注孤生的节奏呀. ----------------------- ...

  5. 【揭秘】ips细胞CRO服务

    iPS细胞相关实验服务 由血液细胞重编程得到iPS细胞是一个经典实验,但由于实验周期长.涉及实验方法多.实验繁琐,对于没有受到过系统培训的人员,还是有一定难度的.现在,您可以选择我们的iPS细胞相关实 ...

  6. 揭秘苹果手机IOS系统各种微信双开方式与对比【技术科普】

    极致签名 - 专注于高端IOS签名服务,UDID一对一签名定制服务,支持任意应用https://www.jizhiwangluo.cn/sign/ 现如今一提到IOS系统多开.分身,很多人已经深恶痛绝 ...

  7. 科普长文揭秘生命为何会具有主观能动性

    来源:混沌巡洋舰 动物的免疫系统依赖于被称为巨噬细胞的白细胞吞噬并吞噬入侵者.这些细胞有着坚定的决心和热情: 在显微镜下,你可以看到一个像球状的巨噬细胞在玻璃片上追逐一个细菌,它的猎物试图通过红细胞的 ...

  8. [免费专栏] 车联网基础理论之车联网安全车端知识科普

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 基础理论专栏长期更新,本篇最新内容请前往: [车联网安全自学 ...

  9. 山东大学软件学院网络攻击与防范2022-2023林丰波100词详解

    本篇博客仅对100词作解释,干背的话会发现真的很难背完,可以结合攻防思路来看这一份提纲,没必要连着看. 比如攻击流程从信息收集到最后隐藏撤退,中间相关的流程和工具都是什么 防守呢?常识类?Linux类 ...

最新文章

  1. postfix邮箱服务
  2. MATLAB中简单的数据库操作
  3. iphone手机型号获取
  4. PDB调试Python程序
  5. 少拿游戏来骗我,虚幻引擎5上的《黑客帝国》全新体验,画面帅到爆
  6. 人工智能的前景:更高智慧的体的诞生
  7. 复旦大学在职MBA项目2011年度学费调整通知
  8. 使用guava带来的方便
  9. 数字图像处理(极简) 第一章 概述(docx)
  10. selenium自动化测试登录qq空间遇到的错误
  11. 前端学习——Web版自定义2048+移动端适应
  12. 一文道尽Flutter最新最全的学习资料
  13. matlab怎样求线性方程组,MATLAB线性方程组求解
  14. 进存销管理系统(仓库管理系统)
  15. 微信社群怎么做?-螳螂SCRM系统社群营销轻松裂变
  16. Oracle读书列表
  17. mac DBeaver连接mysql 驱动失败问题
  18. 纪中9日游(2019.7.5~7.13)
  19. 服务器客服获取小程序头像,微信小程序自动获取微信用户头像
  20. 最全最详细的APP运营推广策划方案

热门文章

  1. Intellij IDEA 的激活方法
  2. Oracle对话框列间距太近,如何调整MathType矩阵行列间距
  3. 年会抽奖源码html js,js年会抽奖程序
  4. oracle转trs,TRS数据库数据的导入导出2.doc
  5. Python语言系统学习21:作品——简易计算器
  6. 当BiocManager废了
  7. 打印当前页面指定元素中的内容
  8. B-010 详细解析电源滤波电容的选取与计算
  9. K - Period(周期)
  10. 输入一串字符,并判断其中英文字符和数字字符的个数——C语言实现(C语言练习)