REDELK的安装和使用

0x00 前言简介

红队的SIEM有两个主要目标:

  1. 通过创建一个集中管理中心,收集和丰富来自多个 teamservers的所有相关操作日志,增强了红队人员的可用性和概述。这对于在操作中进行历史搜索以及提供操作的可预览视图(例如蓝队)非常有用。特别适用于多场景、多teamservers、多成员和多时间操作。此外,查看所有屏幕截图、IOC、键盘输出等简单方法
  2. 通过一个集中管理中心收集和丰富来自重定向器的所有流量日志来发现蓝队。使用特定的查询,现在可以检测到蓝团队正在探测您的基础结构设施。

   项目地址:https://github.com/outflanknl/RedELK

0x01 体系架构概述

以下是RedELK如何运行的体系架构概述。

redelk使用典型的组件filebeat(传送)、logstash(过滤)、elasticsearch(存储)和kibana(查看)。rsync用于teamserver数据的第二次同步:日志、键盘输入、截图等。nginx用于对kibana进行身份验证,并在操作员浏览器中以简单的方式提供截图、beaconlogs、键盘输入。

一组python脚本用于大量丰富日志数据,以及用于Blue Team检测。

0x02  安装和配置

执行安装需要几个重要步骤。每个步骤都需要执行:

1.生成密钥和包

我们需要生成用于加密重定向器/ teamservers和redelk服务器之间的filebeat流量的TLS密钥对。

配置./certs/config.cnf以包含TLS证书的正确详细信息。在该文件中列出正确的IP(IP.1)或DNS(DNS.1)名称非常重要!这些需要指向RedELK服务器的IP或DNS。否则,您的TLS设置将不起作用,Logstash将启动失败并严重崩溃,日志中存在隐藏的错误。

完成后,运行:initial-setup.sh   ./certs/config.cnf这将创建一个CA,为redirs,teamserver和elkserver之间的安全通信生成必要的证书,并为Elkserver到TeamServer的安全rsync身份验证生成一个ssh密钥对。

它还生成teamservers.tgz、redirs.tgz和elkserver.tgz,其中包含每个组件的安装包。您需要将这些TGZ文件复制到相关的系统中(TeamServers,redirs-en,将用作RedELK中心节点的系统)

只有在需要使用新的TLS密钥时才需要重新运行此初始设置。如果是这种情况,请删除./certs/redelkCA.*和./certs/elkserver.*文件,并重新运行initial-setup.sh  ./certs/config.cnf

2.重定向器安装的配置

目前仅支持haproxy服务器

作为红队基础设施部署过程的一部分,在重定向器上复制并解压缩redirs.tgz。行:install-redir.sh$filebeatid$scenarioname$ip/dns:port

  • $ FilebeatID是filebeat中重定向器的标识符。
  • $ ScenarioName是重定向器用于攻击方案的名称。
  • $ip/dns:port是filebeat日志发送的IP或DNS名称和端口的信息,这将是redelk服务器的IP/dns。即使使用默认端口(TCP/5044),也需要将其作为参数提供。

此脚本将设置时区(默认为Europe / Amsterdam,但您可以在脚本中更改此内容),安装filebeat和依赖项,安装所需证书,修改filebeat配置并启动filebeat。

(1).HAProxy细节

RedELK需要修改默认的haproxy配置才能记录更多详细信息。

在“默认值”部分:

log-format frontend:%f/%H/%fi:%fp\ backend:%b\ client:%ci:%cp\ GMT:%T\ useragent:%[capture.req.hdr(1)]\ body:%[capture.req.hdr(0)]\ request:%r

在“前端”部分:

declare capture request len 40000
http-request capture req.body id 0
capture request header User-Agent len 512
(2).HAProxy配置文件示例

下面的配置是haproxy的一个运行示例。这适用于默认的Cobalt Strike配置文件

log 127.0.0.1 local2 debug
  maxconn 2000
  user haproxy
  group haproxy

defaults
  log     global
  mode    http
  option  httplog
  option  dontlognull
  retries 3
  option redispatch
  timeout connect  5000
  timeout client  10000
  timeout server  10000
  log-format frontend:%f/%H/%fi:%fp\ backend:%b\ client:%ci:%cp\ GMT:%T\ useragent:%[capture.req.hdr(1)]\ body:%[capture.req.hdr(0)]\ request:%r

frontend www-https
  option http-buffer-request
  declare capture request len 40000
  http-request capture req.body id 0
  capture request header User-Agent len 512
  log /dev/log local2 debug
  bind :::443 v4v6 ssl crt /etc/letsencrypt/live/haproxy.pem 
  reqadd X-Forwarded-Proto:\ https
  acl path_cs path -m beg /dpixel
  acl path_cs path -m beg /submit.php
  acl path_cs path_reg  ^/[0-z][0-z][0-z][0-z]$ 
  use_backend cobaltstrike-https if path_cs
  default_backend www-decoy
  timeout client 1m

frontend www-http
  mode http
  option http-buffer-request
  declare capture request len 40000
  http-request capture req.body id 0
  capture request header User-Agent len 512
  log /dev/log local2 debug
  bind :::80 v4v6
  reqadd X-Forwarded-Proto:\ http
  acl path_cs path -m beg /dpixel
  acl path_cs path -m beg /submit.php
  acl path_cs path_reg  ^/[0-z][0-z][0-z][0-z]$ 
  use_backend cobaltstrike-http if path_cs
  default_backend www-decoy
  timeout client 1m

backend www-decoy
  mode http
  http-request set-header Host localhost
  server localhost localhost:80

backend cobaltstrike-https
  option forwardfor
  server teamserver ${FQDNteamserver}:443 check ssl verify none

backend cobaltstrike-http
  option forwardfor
  server teamserver ${FQDNteamserver}:80
3.Teamserver安装和配置

在Cobalt Strike TeamServer上复制并解压缩teamservers.tgz,作为红队基础设施部署过程的一部分。运行:install-teamserver.sh$filebeatid$scenarioname$ip/dns:port

  • $ FilebeatID是filebeat中teamserver的标识符。
  • $ ScenarioName是teamserver用于攻击方案的名称。
  • $ip/dns:port是filebeat日志发送的IP或DNS名称和端口的信息,这将是redelk服务器的IP/dns。即使使用默认端口(TCP/5044),也需要将其作为参数提供。
如果已经安装了filebeat,则此脚本将发出警告(这一点很重要,因为elk和filebeat有时对于版本相同非常挑剔),设置时区(默认为Europe / Amsterdam,但您可以在脚本中更改此内容),安装filebeat和依赖项,安装所需书,修改filebeat配置,启动filebeat,创建本地用户'scponly'并通过scp,sftp,rsync将该用户限制为基于ssh密钥的身份验证。
4.RedELK安装和配置
(1).安装

作为红队基础设施部署过程的一部分,在RedELK服务器上复制并解压缩elkserver.tgz。

运行:install-teamserver.sh(不需要参数)

此脚本将设置时区(默认为Europe / Amsterdam,但您可以在脚本中更改此内容),安装logstash,elasticsearch,kibana和依赖项,安装所需证书,部署logstash配置和所需的自定义ruby扩展脚本,下载GeoIP数据库,安装Nginx,配置Nginx,使用先前生成的SSH密钥创建本地用户'redelk',在TeamServers上安装用于rsyncing远程日志的脚本,安装用于创建屏幕截图缩略图的脚本,安装RedELK配置文件,安装crontab文件用于RedELK任务,安装GeoIP elasticsearch插件并配置模板,安装python扩展脚本,最后安装python蓝队检测脚本。

还没有完成。需要在/etc/cron.d/redelk中手动输入teamservers的详细信息,并在/etc/redelk中调优配置文件(请参见下面的部分)

(2).配置

在/etc/redelk目录中的ELK服务器上,您可以找到几个可用于调整RedELK实例的文件,以获得更好的丰富功能和更好的警报。有些是必须的,有些则可选的

必须性配置:

  • /etc/redelk/alarm.json.conf:警报运行所需的详细信息。这包括用于在线服务的API密钥(Virus Total,IBM X-Force等)以及通过电子邮件发送警报所需的SMTP详细信息。如果不在此文件中输入您的详细信息,将导致REDELK无法使用其报警功能。

建议性配置:

  • /etc/redelk/iplist_redteam.conf:红队的公共IP地址,每行一个。便于识别红队成员进行的测试。在此处包含地址 的设置是将redirhaproxy- *索引中的适用记录设置一个标记。
  • /etc/redelk/iplist_customer.conf:目标的公共IP地址,每行一个。在此处包含地址的设置是将为redirhaproxy- *索引中的适用记录设置一个标记。
  • /etc/redelk/iplist_unknown.conf:您尚不确定的网关的公共IP地址,但不希望再次收到警告。每行一个。在此处包含地址的设置将为redirhaproxy- *索引中的适用记录设置一个标记
  • /etc/redelk/rogue_useragents.conf:用户代理在访问C2后端时出现已知错误。已经包含了一个基本的UAs列表,如curl,python-urllib和Blue Teamers喜欢使用的一些其他工具。该列表还包含即时消息工具的UAs列表,例如WhatsApp,Skype和Slack。当C2使用IM在分析员之间共享时非常有用。请随意将UAs添加到此列表中。
  • /etc/redelk/known_testsystems.conf:已知测试系统的beacon特征。您可能想要添加有关您自己的测试系统的信息。每行一个。此处包含数据的配置将在rtops- *索引中为适用记录设置一个标记。要将身份验证更改为nginx,请更改/etc/nginx/htpasswd.users以包含您的首选凭据。或者在初始设置之前对/redelk/elkserver/etc/nginx/htpasswd.users文件进行配置。

不建议编辑的其他配置文件:

  • /etc/redelk/abusbotnetc2ip.conf:由abuse.ch列出的已知c2 ip地址的自动更新列表
  • /etc/redelk/abussslcert.conf:由abuse.ch列出的c2 tls证书,c2已知的自动更新哈希列表。
  • /etc/redelk/roguedomains.conf :来自多个来源的已知坏域的自动更新列表。
  • /etc/redelk/torexitnodes.conf :已知TOR出口节点IP地址的自动更新列表。
  • /etc/redelk/known_sandboxes.conf:已知AV沙箱系统的beacon特征。每行一个。此处包含数据的配置将在rtops- *索引中为适用记录设置一个标记。随着越来越多的沙箱具有完全随机的名称,因此这不再具有真正的相关性。
  • /etc/redelk/redteamdomains.conf:攻击性基础设施使用的域列表。由于还没有进行报警编码来检查,因此不需要编辑此文件。
如果在初始安装之前更改这些文件,这些更改将包含在.tgz包中,并可用于未来的安装。这些文件可以在/redelk/elkserver/etc/redelk中找到。
 

0x03日常用法

RedELK有两个主要使用场景:

1.红队运行概述

(1).首次登录

浏览到RedELK服务器的IP地址,并使用Nginx的凭据登录(默认为redelk:redelk)。您现在位于Kibana界面中。

您可能需要在此处执行两项操作:查看仪表盘,或者查看并搜索更详细的数据。您可以使用左侧栏上的按钮(默认Kibana功能)在这些视图之间切换。

(2).仪表盘

单击左侧的仪表盘图标,您将得到2个选项:Traffic和Beacon

(3).详细查找和搜索数据

单击“发现”按钮以更详细地查看和搜索数据。完成后,单击要使用的时间范围,然后单击“打开”按钮,使用其中一个准备好的视图搜索。

(3).Beacon数据

当选择搜索“TimelineOverview”时,您将看到一个易于使用的Cobalt Strike团队服务器数据视图,如果您愿意,可以使用Beacon事件的时间线。该视图包括您想要的相关列,例如时间戳、测试场景名称、用户名、BeaconID、主机名、操作系统和操作系统版本。最后,将显示来自Cobalt Strike的完整消息

 

您可以根据自己的喜好修改此搜索。此外,因为它是elasticsearch,您可以使用搜索栏搜索此索引中的所有数据。

单击记录的详细信息将显示完整的详细信息。可用性的一个重要字段是beaconlogfile字段。此字段是一个超链接,链接到该记录的完整Beacon日志文件。它允许您在更大的窗口中查看Beacon记录并在其中使用CTRL + F.

 

(4).截图

Redelk提供了一种简单的方法,可以查看从您的目标中生成的所有截图。选择“截图”搜索以获取此详细信息。我们添加了两个很大的可用性内容:缩略图和完整图片的超链接。缩略图可以快速滚动并给您一个直接的印象:通常你记得截图是什么样子的。

(5).键盘输入

和截图一样,简单地概述所有键盘输入操作非常方便。此搜索为您提供了第一行内容,以及指向完整键盘输入日志文件的超链接。

(6).IOC数据

为了快速获得所有IOC的列表,Redelk提供了一个简单的概述。只需使用“iocs”搜索即可获得此列表。这将显示来自Cobalt Strike的所有IOC数据,包括来自文件和服务的数据。

您可以通过点击顶部栏中的“报告”按钮快速导出此列表,以生成此精确视图的CSV。

(7).下载

RedELK提供了一种简单的方法来查看在红队运行期间下载的每个文件。您可以通过“下载”搜索找到此信息。现在可以获得所有下载文件的列表,包括所有相关的元数据,这些都是可搜索的。但更重要的是,您还可以直接从Web浏览器下载实际文件。由于RedELK从每个TeamServer收集所有数据时,这意味着您在整个操作中拥有来自每个TeamServer的所有下载文件。不再需要使用Cobalt Strike客户端登录(并同步)到每个TeamServer。

2.蓝队检测
(1).Aproach
为了检测蓝队活动:
  1. Elasticsearch中存储的数据
  2. 在线服务提供蓝队可能因OPSEC配置不当而放置的一些信息。
(2).配置文件
FSD
(3).检查
FSD

0x04  hood使用

redelk使用典型的组件filebeat(传送)、logstash(过滤)、elasticsearch(存储)和kibana(查看)。rsync用于teamserver数据的第二次同步:日志、键盘输入、截图等。nginx用于对kibana进行身份验证,并在操作员浏览器中以简单的方式提供截图、beaconlogs、键盘输入.

一组python脚本用于大量丰富日志数据和蓝队检测。

更多细节描述如下:

1.脚本

如果您想在elk服务器的hood下查看,请查看/etc/cron.d/redelk中的redelk cron文件。它在/usr/share/redelk/bin/中启动几个脚本。有些脚本是为了丰富内容,另一些则用于警告。这些脚本的配置是通过/etc/redelk/中的配置文件完成的。logstash中还进行了大量的扩展(包括为截图生成超链接等)。您可以直接从/etc/logstash/conf.d/中的logstash配置文件中检查出来。
2.日志

在安装过程中,所有安装操作都记录在当前工作目录的日志文件中。

redelk在TeamServer和redelk服务器上的操作期间生成的日志。您可以在/var/log/redelk中找到这些日志。除了所有典型的elasticsearch、logstash等日志之外,您可能只需要将其用于故障排除。

redelk使用典型的组件filebeat(传送)、logstash(过滤)、elasticsearch(存储)和kibana(查看)。rsync用于teamserver数据的第二次同步:日志、键盘输入、截图等。nginx用于对kibana进行身份验证,并在操作员浏览器中以简单的方式提供截图、beaconlogs、键盘输入。

一组python脚本用于大量丰富日志数据,以及用于Blue Team检测。

posted @ 2019-08-14 22:28  渗透测试中心  阅读(1333)  评论(0编辑  收藏  举报