前言
最近没啥事打开kali想玩玩没有用过的工具,就打开了Maltego,很早以前用过但没有深入的研究过,就去官网看看文档,对自己公司收集一些信息,发现画出来的图还不错,其中的关联关系表达较为清晰。刚好看到Maltego支持自定义的Transform,突然灵机一动,最近公司在研究攻击溯源图,那我能否通过自定义的Transform来生成一份攻击溯源图呢?
行动开始
我们从elasticsearch中抽取告警数据和日志数据来进行分析,所以这里先写好一个需要调用的es查询语句的class,由于Maltego本身是一个社工平台,一般不会由多个元素作为条件去溯源数据,所以本身的框架只支持引入一个上层变量,其他的变量需要手动输入,所以这里写的es查询语句中,我依照现有的数据把src_address字段写死。
1 | #!/usr/bin/python |
当发生了一个告警时,我们想要通过该告警去溯源整个事件发生的过程及影响范围,图例:我们检测到发生“主机扫描特定端口后发起针对该端口的攻击”,通过自定义Transform来查询发生该告警的源地址,Maltego支持任何脚本,因为Maltego直接调用系统命令执行脚本。
Transform代码如下:
1 | #!/usr/bin/python |
添加自定义Transform操作如下,“Entity Value”指的是上层实例的值作为参数传递进脚本进行查询,filed为自定义参数。
这里一共新增了6个我们需要用到的溯源逻辑
- 根据告警搜索源地址
- 根据源地址搜索告警
- 根据源地址和告警搜索域名
- 根据源地址和告警搜索目的地址
- 根据源地址和告警搜索目的端口
- 更具源地址和目的端口搜索目的地址
效果展示
通过定义好Transform最终溯源出下图,随着定义的Transform越来越多,能覆盖更多的溯源场景。总结
- 首先Maltego平台的绘图能力强,但是Transform只能引用上一层的“Entity Value”来做过滤条件,导致脚本无法自动产生多个过滤条件,所以无法直接使用Maltego来绘画溯源图,本文只是从Maltego借鉴其优点。
- Maltego在查询时有incoming和outgoing的概念,借此概念来绘制线条方向,点击实例时,incoming和outgoing线条加粗,可下钻到其他的实例查看相关信息,整个Detail view栏也是不错的功能,可以看到数据类型和该数据的来源。
- Maltego通过预定义脚本来查询数据并展示结果,如果通过封装的Transform实现对日志的图形化分析,效果会如何呢?