浅析红蓝对抗中攻击方基础设施的日志聚合和监控

在红蓝对抗中,基本证明,CC防御,监控我们用于攻击所使用的基础设施与我们所实施的攻击一样重要。在谨防方开始调查时快速躲藏攻击方意味着能够保持我们的交互式命令和操纵(C2)会话与销毁我们的基础设施之间的差异。假如你基本阅读过史蒂夫和我写的红队基础设施Wiki文档,这么你就懂我们是热衷于使用大量分布式基础架构的忠实粉丝,同时在任何方面我们都会使用到重定向器。当我们拥有包含基础设施的资产多于20个时,监控就变得越来越艰难。幸运的是,那个咨询题在特别久往常就能够用rsyslog解决了。在这篇文章中,我们将介绍怎么使用rsyslog监视分布式的攻击基础架构,来关心我们实现更快的反应动作。
设计方案
Rsyslog遵循服务器/客户端架构。我们将配置专用的主机作为rsyslog服务器,接收日志信息并解析日志猎取故意义的事件。我们的团队服务器和Web服务器将充当客户端并将其日志转发到日志服务器。
能够将Rsyslog配置为从很多不同的程序转发日志。实质上,假如工具可以输出有规律的格式化日志,则能够经过rsyslog将数据记录到中央服务器。在这篇文章中,我们将专注于使用Apache日志来讲明那个概念。
这是攻防实验室的设置:
实验室设置
TLS设计注意事项
默认事情下,rsyslog是以明文协议传输的; 然而,它也支持SSL / TLS加密。使用TLS配置本文所描述的监控设置需要执行其他步骤,包括需要在转发日志的每个主机上生成计算机证书。你实际操作的设置步骤大概需要增加一些复杂性,也大概不需要。
以下是需要思量的几个因素:
· 传输的数据有多敏感?不过web流量吗?
· 对于目标的任何元数据都不应泄露?
· 资产的生命周期怎么?每次基础架构公布时,重新配置TLS大概是一项重大工作。
· 你能编写部署足本吗?
· 假如日志记录服务器被黑客发觉,你是否预料到这些攻击者大概会尝试发送虚假的日志内容?
有关使用TLS设置rsyslog的更多信息,请查看官方文档。
使用Syslog聚合日志
关于rsyslog的设置讲明,Gary Rogers 的GitHub中有详细的介绍。本文中提供的步骤也是基于Gary的博文内容,但要满脚我们的需求需要做一些修改。每个主机都需要设置; 日志服务器接收日志同时客户端(即我们的有效载荷服务器和Cobalt Strike团队服务器)将日志发送到日志记录服务器。在实际的操作设置中,日志记录服务器应独立于任何攻击基础架构,同时应充分加强防护以防止日志被篡改。
日志记录服务器设置
任何安装了rsyslog的*nix主机都能够使用此设置,然而本文的演示中,我们使用的是Debian 9主机。
默认事情下,rsyslog经过UDP发送消息。为了落低日志消息在传输过程中丢失的大概性,我们将在我们的设置中使用TCP来作为传输协议。这需要在端口514上启用TCP,并将下面这行内容添加到/etc/rsyslog.conf 文件中:
$InputTCPServerRun 514
接下来,我们需要设置在本地主机上采集访咨询和错误日志。将下面这行添加到同一具文件的底部:
local4.* /var/log/apache2/combined_access.log
重新启动服务让应用更改生效:
创建文件/var/log/apache2/combined_access.log和/var/log/apache2/combined_error.log。确保rsyslog能够写入文件。
日志记录客户端安装程序
在配置主机时,需要设置每个客户端。重定向器和有效载荷服务器的设置步骤与Cobalt Strike团队服务器的步骤略有不同。
有效载荷日志记录客户端
创建/etc/rsyslog.d/apache.conf文件并插入以下文本:
# Default Apache Error Log$InputFileName /var/log/apache2/error.log
$InputFileTag apache-error-default:
$InputFileStateFile stat-apache-error
$InputFileSeverity info
$InputFileFacility local3
$InputRunFileMonitor
# Default Apache Access Log
$InputFileName /var/log/apache2/access.log
$InputFileTag apache-access-default:
$InputFileStateFile stat-apache-access
$InputFileSeverity info
$InputFileFacility local4
$InputRunFileMonitor
$InputFilePollInterval 1
假如你使用的不是基于Debian的发行版系统,则第4行和第12行会有所不同。这两行应该分别指向Apache错误和访咨询日志。
修改/etc/rsyslog.conf文件,并将以下文本添加到文件的底部:
$WorkDirectory /var/lib/rsyslog # where to place spool files$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
local3.* @@192.168.10.11 #replace with rsyslog server
local4.* @@192.168.10.11 #replace with rsyslog server
将最终两行的IP地址修改为你的rsyslog服务器的IP。
重启服务:
service rsyslog restartCobalt Strike团队服务器日志记录客户端
要将Cobalt Strike团队服务器的weblog活动日志发送到我们的rsyslog服务器,我们需要使用Aggressor那个足本将weblog中命中的数据大致格式化为与Apache相匹配的日志文件。使用agscript在你的团队服务器上执行此足本:
./agscript syslog-monitor /path/to/apache-style-weblog-output.cna创建/etc/rsyslog.d/cobalt.conf文件并插入以下文本:
# Default Cobalt Web Log$InputFileName /var/log/cobaltstrike/weblog.log
$InputFileTag cobalt-strike-weblog-default:
$InputFileStateFile stat-apache-access
$InputFileSeverity info
$InputFileFacility local4
$InputRunFileMonitor
$InputFilePollInterval 1
修改/etc/rsyslog.conf文件,并将以下文本添加到文件的底部:
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
local4.* @@192.168.10.11 #replace with rsyslog server
将第4行的日志路径修改为你的团队服务器上的weblog.log路径,并将最终一行的IP地址修改为你的rsyslog服务器的IP。
重启服务:
service rsyslog restart演示
下面是配置的组合访咨询日志的演示:
日志记录示例
请注意,Apache日志记录的默认日志格式为:
[时刻戳] [客户端主机名] [InputFileTag]:[Apache请求数据]
日志解析和监控
如今我们有数据流入了我们的rsyslog服务器,我们需要一种简单的想法从日志中提取故意义的事件数据。我们能够而且真的应该在攻击运行时审查原始日志,但我们没有理由忽视一些重要的事件。
在业内基本有特别多种想法能够针对日志设置有效的告警。出于本文的目的,我们会演示怎么设置Apache将我们的有效载荷托管日志发送到Papertrail,以便我们能够留意到谨防方的探测行为。
Papertrail设置
我们首先需要一具Papertrail帐户。值得庆幸的是,Papertrail提供了相当不错的免费套餐!一旦我们登录后,我们就能够添加我们的第一具系统。设置步骤很简单。Papertrail还为我们提供了将我们的rsyslog直截了当发送到云提供商的命令。我们首先需要按照上面的“客户端安装”部分来配置rsyslog猎取Apache access.log。
Papertrail设置
一旦我们成功运行提供的安装足本,我们的日志就会开始与Papertrail举行同步,我们会收到一条“Logs received from: our host”的提示。
经过日志同步,我们能够导航到Papertrail中的“事件”选项卡。在那个地点,我们将找到rsyslog转发到Papertrail实例的所有信息。屏幕底部有一具易于使用的搜索栏,我们能够在其中查询所有或特定的日志记录服务器。
在那个地点,我们搜索所有的“GET”请求来命中我们的重定向器。
值得注意的是,Papertrail会保留近两天的日志,接着将其归档。遗憾的是,归档日志无法在Papertrail中搜索到。然而,Papertrail经过允许我们依照你的查询设置警报来弥补这一点!Papertrail支持很多警报平台,如SMS,Slack,HipChat等。更多细节能够在那个地点找到。
让我们来看看针对我们的有效载荷的任何命中规则的示例告警。
首先,在搜索栏中执行搜索。搜索完成后,挑选“保存搜索”。我们将在下面的窗口中看到提示。
创建Papertrail告警
为搜索输入一具吸引人的标题,接着挑选“保存并设置告警”按钮。接着会跳转到一具挑选告警平台的页面。
告警平台挑选
关于那个设置,我们那个地点使用Slack,因为Slack很棒。单击“Slack”图标,系统会提示我们输入Slack WebHook URI。输入URI后,挑选你的时刻间隔,接着挑选“保存”。算是如此!我们完成了配置。一旦我们的警报触发,我们将在Slack通道中收到提示,如下图所示:
Slack告警示例
正如我们所看到的,DDoS防护,当谨防方的请求命中我们的有效载荷URI时,我们每分钟都会收到告警。尽管使用rsyslog和Papertrail,我们能够做的不止有效载荷命中检测这件情况。我们能够利用我们的想象来告警端口探测,SSH登录尝试,电子邮件日志等情况。我们能够使用rsyslog做特别多情况,接着导入到Papertrail并设置告警。
总结
在本文中,我们介绍了怎么使用rsyslog设置日志聚合以及怎么创建故意义的告警来检测攻击基础架构的高价值操作。Rsyslog提供了一种简单的机制,能够将日志转发到集中式服务器或第三方日志聚合服务,如Papertrail。在整个评估过程中积极监控整个分布式的红队攻击基础架构,使我们可以更快的做出响应,高防cdn,并在开始销毁基础架构元素时更改攻击策略。
注:这篇文章由Steve Borosh(@ 424f424f)和Jeff Dimmock(@bluscreenofjeff)共同撰写。
版权保护: 本文由 主页 原创,转载请保留链接: /web/183085.html