freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

经验分享 | 关于“入侵检测”的一些想法
PgHook 2018-06-13 08:30:20 544730
所属地 湖南省

*本文原创作者:PgHook,属于FreeBuf原创奖励计划,未经许可禁止转载

离开长沙的时候写了一篇文章“左右互博:站在攻击者的角度来做防护”(freebuf上可以找到),一晃已经是三年了。这三年接触了很多东西,自己也有过很多想法,但实际上去做的却很少。花了很多时间,做了一款插件化的漏洞扫描器,这里不做介绍。这里主要介绍的是另外一个想法(这些年做的最有成就感的事情),我把它理解为真正意义上的“入侵检测”。

很多安全人员对“入侵检测”这个东西都是持吐槽的态度(记得发“使用Pfsense+Snorby构建入侵检测系统”出来后,有好些人吐槽“不觉得用nmap扫描一下  然后一大堆告警还值得牛逼  那么多告警没人看的”,印象深刻啊!),光有吐槽还不够,我们还要想着怎么去改变。只有不断的改进,这个世界才有可能不断的进步变好。 

0x00、前面的废话

“入侵检测”,从字面上的意思来解释就是“对入侵行为的检测”。但目前市面上的商业产品和开源产品实际上都是对“攻击行为的检测”,入侵行为日志往往淹没在攻击行为日志里面去了,实在是有些鸡肋。

0x01、我想要成为的样子


1.png

上面那张图就是我想要表达的想法(通过流量镜像,将请求数据全量保存,响应存在异常才保存)。

通过分析网络中的请求和响应,来判断漏洞的存在(攻击者前脚发现漏洞,我们可以实现实时发现,并溯源)。

正常的漏洞检测过程(将漏洞poc打向服务器,根据服务器的响应判断漏洞是否存在)。

2.png

站在守护者的角度,我也能够将请求和响应拿到,然后来做判断。

0x02、效果A(发现漏洞的存在)

我目前做的是“检测http响应数据(基于关键字)”,检测出问题然后关联http请求。

3.png

案例一、Directory:(目录遍历漏洞)

http响应里面出现Directory:,关联http请求,下面是部分详细数据(我把http请求头里面的字段都做了切割)。

 4.png

5.png案例二:”\system”(这是一个误报,只是攻击行为)

6.png7.png

案例三、svn信息泄露漏洞

8.png

案例四、远程命令执行漏洞

9.png10.png

案例五、文件读取漏洞

11.png

通过上面几个案例,大家会发现这种对只针对http响应做关键字匹配的检测,还是会存在一些的误报。如果对http请求也做检测,如果http请求和响应都存在异常,那基本就可以90%确定问题了。 

0x03、效果B(监控文件下载行为)

我为什么想要去实现这个了?

1、  很多时候管理员部署应用的时候,都喜欢打个包上传,然后解压部署,往往忘记了删除压缩包,导致源代码泄漏。

2、  很多时候黑客攻击,想要窃取数据,也会通过打包下载的方式。

那怎么去实现“监控文件下载的行为”(这里我们只讨论http)?

其实答案很简单啦,多抓几个文件下载的数据包,看下就知道了。http响应里面有一个字段叫“Content-Type”,通过这个字段我们就可以知道文件的类型。

例如:

Content-Type 内容为“application/zip”,说明下载的文件类型为zip。

Content-Type 内容为“application/x-gzip”,说明下载的文件类型为gz。 

这里给大家提供个Content-Type内容对应的文件列表,方便大家查找。

https://github.com/hosom/file-extraction/blob/master/scripts/file-extensions.bro

12.png

我这边实现了一个zip的(只是存储下了http响应头,理论上整个文件都可以保存下来。)

13.png

详细如下:

14.png

实现过程:捕获到响应数据包,判断头部是否存在“Content-Type”字段,存在且内容为“application/zip”,然后把http请求数据包关联起来就行存储到Elasticsearch中去。

题外话:

如果实现了从流量中提取整个文件,那可以接入一些病毒检测引擎,对文件做安全检测。

0x04、扩展

除http外的协议

1、ssh:  ssh登录判断,从流量中判断是否登录成功(这个目前还真不知道怎么去实现)。

2、dns:  获取dns请求(这里可以结合现在比较流行的威胁情报来玩)

15.png

无意中在github中发现一个有意思的开源项目(可以结合起来玩)。

xsec ip database为一个恶意IP和域名库(Maliciousip database),它获取恶意IP和域名的方式有以下几种:

通过爬虫定期拉取网络中公开的恶意ip库(可能过增加新爬虫的方式订阅新的IP库)

支持与自有的其他安全产品联动(HIDS、WAF、蜜罐、防火墙等产品),实时更新IP库

https://github.com/netxfly/xsec-ip-database

0x05、怎么去实现上面的效果(拿http协议举例子)

要“成为想要的样子”需要做如下的工作:

A、 流量镜像(这个比较好弄,直接在网络设备上可配置)

B、 从流量中提取http请求数据和http响应数据

C、 组合http请求数据(一般出现在post请求中,tcp会分段)

D、 组合http响应数据

E、  解压缩http响应数据(很多都做了gzip压缩,需要解压)

F、  检测http请求和http响应数据(安全检测,也可以说是对数据的分析,判断数据是否异常。)

G、 关联http请求和http响应

PS:心里累,一堆问题,总是一次又一次把自己之前的观点(B到G)给推倒。

这里我不做介绍了,怕误导大家,因为我也没完全弄明白。

写的程序也还有些bug如:

1、如请求和响应关联不上

2、请求(响应)数据包没组合起来3

3、响应数据包没有解压

……

0x06、不该写的部分

攻击和防守总是在互相促进,如果我是攻击者,肯定会想办法去躲避这个检测。其实也很简单,检测都是基于数据是明文传输的基础上的。如果对http响应数据进行一些简单的编码再传输(dns隧道木马就是这样做的,它会对执行命令的结果进行编码后传输。),这样肯定会加大检测的难度。

16.png

这种明文传输的命令执行,肯定是很容易从流量中检测到的。

17.png

这里我们将命令执行结果做了一次编码,然后再传输,这样就加大了检测难度了。这样我们就需要对响应数据包进行编码的识别了,效率大大降低,成本将大大提高。 

0x07、后面的废话

这套系统是我用python写的,目前实行了一些功能(上面提到的基本都有了),不过还存在很多bug。本打算开源出来,一想没必要,不懂的拿来也没法用好,没法改进,能看懂的,有了上面我提供的思路下面的逻辑图,基本上也能弄出来。

下面是精简化的逻辑图(python为开发语言,redis为缓存,Elasticsearch为存储,Kibana为前端展示):

18.png

PS:该写的不该写的都写了,写的不好,发现错别字,请不要大惊小怪,理解万岁!

*本文原创作者:PgHook,属于FreeBuf原创奖励计划,未经许可禁止转载

# ids # 入侵检测
本文为 PgHook 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
入侵检测专栏
PgHook LV.2
酱油工程师
  • 1 文章数
  • 5 关注者
左右互博:站在攻击者的角度来做防护
2015-03-24
文章目录