
DShield Sensor Log Collection with ELK
这是对 Scott Jensen 在 ISC Storm Center 网站上以 BACS 论文形式首次发布的内容及其在 Github 上发布的脚本的一个分支和重大更新。
https://github.com/fkadriver/Dshield-ELK
https://isc.sans.edu/diary/DShield+Sensor+Monitoring+with+a+Docker+ELK+Stack+Guest+Diary/30118
这是一份关于如何使用 DShield-SIEM 进行分析的良好参考:https://isc.sans.edu/diary/30962/
这里概述了如何使用 DShield 传感器进行日志收集。
https://github.com/bruneaug/DShield-SIEM/blob/main/Troubleshooting/DShield-SIEM-Flow.png
这个 docker 是专门为与 DShield 蜜罐 配合使用而定制构建的,用于收集和解析日志并汇总数据,以便于研究目的的搜索。建议的安装方式是将 DShield 传感器安装在运行 PI Raspbian OS 的树莓派上,或安装在运行 Ubuntu 24.04 LTS 的系统上,该系统可以位于你的网络中,也可以位于你选择的云平台上。
注意:按照下面的说明,这必须安装在单独的服务器上。
注意:要更新 ELK 服务器组件,请按照以下步骤操作:
https://github.com/bruneaug/DShield-SIEM/blob/main/README.md#download-github-update
以用户 ($) 账户安装 docker:````
sudo apt-get install ca-certificates curl gnupg network-manager txt2html
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Note: You may need to take the next line, remove the backlash () and put everythin in a single line in Notepad to run this echo.
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt upgrade
sudo reboot (if update were applied)
sudo apt-get install -y jq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin pip
sudo systemctl enable docker
sudo systemctl start docker.service
确认 docker 服务正在运行<br>````
sudo systemctl status docker.service
将以下 ELK 服务器名称 es01 kibana fleet-server heartbeat logstash filebeat filebeat01
添加到 /etc/hosts 中 IP 地址和服务器名称之后:
````
sudo vi /etc/hosts
在 /etc/hosts 中 ELK 服务器 IP 地址之后添加以下内容<br>
127.0.0.1 sensor es01 ...<br>
192.168.25.80 sensor es01 ...<br>````
es01 kibana fleet-server heartbeat logstash filebeat filebeat01
编辑 sysctl.conf 文件:
````
sudo vi /etc/sysctl.conf
将以下内容添加到文件底部:<br>````
vm.max_map_count=262144
添加并保存它。这是在使用 Docker 时用于 Elasticsearch 的。
sudo iptables -nL

# 配置并安装 DShield ELK
使用用户 ($) 账户,运行以下命令:<br>````
git clone https://github.com/bruneaug/DShield-SIEM.git
mkdir scripts
mv DShield-SIEM/AddOnScripts/*.sh scripts
chmod 754 scripts/*.sh
cd ~/DShield-SIEM
注意:安装前,你可以编辑 .env(可用 ls -la 查看)文件来进行任何所需的更改。
- 当前 elastic 的 默认密码 是 student
.env 中的 Memory Limits 是 docker 将为每个 ELK 容器分配的最大内存。
Elasticsearch 默认为 3GB,但如果你的资源充足,可以扩大。
编辑 .env 文件并为自己的 ELK Stack 进行配置
````
vi .env
- 如果需要更改,请更新 **.env** 文件中的以下变量,以匹配您的 ELK 服务器 DNS 信息、主机名、IP 地址和默认 elastic 密码: <br>
- HOSTNAME="ubuntu"
- DNS_SERVER="9.9.9.9"
- IPADDRESS="192.168.25.231"
- ELASTIC_PASSWORD=student
- ES_MEM = Elasticsearch -> 4g, KB_MEM = Kibana -> 2g
- 如果您想更改默认的 nameserver 信息以及目标地址的本地专用网络位置(即 DShield 传感器映射 - 当前设置为 **加拿大渥太华**),请在加载 docker 之前编辑以下目录中的文件:<br>````
cd logstash/pipeline
编辑 heartbeat.yml,将传感器 IP(名为 PI)改为你自己的传感器 IP。Kibana heartbeat 会检查你的服务状态,并判断它们是否可用。
请更新此 IP 和主机名,以反映你的传感器。
注意:如果你有多个传感器需要监控,可以复制并添加同样的 5 行内容。
这可以在 Observability -> Uptime Monitors 中查看。

这一行是传感器 IP 地址。如果它在连接 TCP 12222 时未收到响应,界面会将其标记为停机。
这是由 ELK 服务器发起的,用于检查传感器的响应。
请更新这一行:hosts: ["192.168.25.165"]
````
vi ~/DShield-SIEM/heartbeat/heartbeat.yml
脚本 **change_perms.sh** 将在开始安装 docker 组件之前配置部分文件。<br>
该脚本还会将仪表板查询中使用的 IP 地址更新为你的 ELK 堆栈的 IP。<br>````
~/scripts/change_perms.sh
~/scripts/get_researchers.sh
现在执行 docker compose 来构建 ELK 服务器应用。
这将构建:Kibana、Elasticsearch、elastic-agent、Logstash 并加载 Cowrie 解析器、配置文件和仪表板。
````
sudo docker compose up -d
安装完成
<img width="375" height="354" alt="image" src="https://assets.kitploit.com/production/public/readmes/50066/b192e2cc430ca7eaa43934ebde637400b29d23212dce39e81f521b0806df1bc0.png" />
# 将 ca.crt 添加到服务器受信任证书
- 将 ca.crt 添加到服务器受信任证书列表```
sudo cp /var/lib/docker/volumes/dshield-elk_certs/_data/ca/ca.crt /usr/local/share/ca-certificates/dshield.crt
```
- 更新受信任的证书 ```
sudo update-ca-certificates
```
### 向 Kibana 添加仪表板与 SIEM 签名
这会将 DShield SIEM 仪表板和 SIEM 签名加载到 Kibana 中。<br>```
~/scripts/dashboard-setup.sh
```
### Docker 目录列表
此命令显示在安装了所有 Elasticsearch 组件后正在使用的 docker 目录列表。<br>
随着数据添加到 Elasticsearch,您还可以使用以下命令或在 ELK 中监控可用于存储的磁盘量。<br>````
sudo du --human-readable --max-depth 1 --no-dereference --one-file-system /var/lib/docker

使用 netstat,这 4 个服务现在应该正在监听。
```
netstat -an | grep '80|9200|9300|8220|5601|5044|5066|5067|5068|9600'
您应该看到的输出如下:<br>
<pre>
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN ---> Local CyberChef
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN ---> Kibana Web Access
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN ---> Local Attack Navigator
tcp 0 0 0.0.0.0:8220 0.0.0.0:* LISTEN ---> elastic-agent Service
tcp 0 0 0.0.0.0:9200 0.0.0.0:* LISTEN ---> Elasticsearch Service
tcp 0 0 0.0.0.0:9300 0.0.0.0:* LISTEN ---> Elasticsearch Cluster Service
tcp 0 0 0.0.0.0:5044 0.0.0.0:* LISTEN ---> Logstash Data Collection
tcp 0 0 0.0.0.0:5066 0.0.0.0:* LISTEN ---> Metricbeat Stack Node Information
tcp 0 0 0.0.0.0:5067 0.0.0.0:* LISTEN ---> Filebeat Stack Node Information
tcp 0 0 0.0.0.0:5068 0.0.0.0:* LISTEN ---> Filebeat Stack Node Information (Process ISC Threat Intel to Logstash)
tcp 0 0 0.0.0.0:9600 0.0.0.0:* LISTEN ---> Logstash Stack Node and Pipeline Information
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::5601 :::* LISTEN
tcp6 0 0 :::8080 :::* LISTEN
tcp6 0 0 :::8220 :::* LISTEN
tcp6 0 0 :::9200 :::* LISTEN
tcp6 0 0 :::9300 :::* LISTEN
tcp6 0 0 :::5044 :::* LISTEN
tcp6 0 0 :::5066 :::* LISTEN
tcp6 0 0 :::5067 :::* LISTEN
tcp6 0 0 :::5068 :::* LISTEN
tcp6 0 0 :::9600 :::* LISTEN
</pre>
# 在Kibana中加载默认Filebeat模板
这将安装默认模板和仪表板,可用于存储来自远程DShield传感器的netflow数据。<br>
为了让Logstash开始存储数据,必须执行以下命令。第一步是登录filebeat:<br>````
sudo docker exec -ti filebeat bash
接下来,运行此 Filebeat 命令将模板加载到 Kibana:
````
./filebeat setup -e
# 访问 Kibana 界面
在 docker 完成所有 ELK docker 组件的安装后,现在该使用你的 Ubuntu 服务器 IP 登录 ELK 栈了。<br>
- 使用用户名: **elastic** 和默认密码_如果尚未更改_: **student** 登录 Kibana。<br>
Web 访问: https://serverIP

# 配置 ELK 栈管理
为了查看 ELK 栈的健康状态,需要导航到:管理 -> 栈监控 来配置栈监控。<br>
- 仅当安装没有自动设置栈监控时,才需要执行此步骤。<br>
- 选择 "_或者,设置为自身监控_"<br>
- 监控当前已关闭 -> 选择:_开启监控_<br>


# 配置 fleet-agent
fleet-agent(这是一个运行在 ELK 栈上的 elastic-agent)将用于摄取威胁情报。<br>
- 从下拉菜单中选择 管理 → Fleet →设置 → 编辑输出 (操作)<br>
- 通过 SSH 登录服务器<br>
- 将 ca.crt 证书复制到 /tmp<br>````
sudo cp /var/lib/docker/volumes/dshield-elk_certs/_data/ca/ca.crt /tmp
- 输出将如下所示:<br>
673FB617E15CCCE73F9B647EF99449642A19CFC1D75BF5772047DA99DB950844
- 获取 Elasticsearch CA 证书内容以应用于高级 YAML 配置。请手动键入该命令,因为它无法很好地复制<br>````
sudo cat /tmp/ca.crt | sed -r 's/(.*)/ \1/g'
Follow the example from the Troubleshooting fleet-server-examples guide URL above for the correct format.
sed will add the 4 spaces with the previous command against the CA certificate
After adding the certificate information, save and apply these settings.
Followed by Save and deploy

Under Settings, configure the Fleet server hosts by either edit or Add Fleet Server configured as follows:

Next phase is to Select Agent Policy → Add Agent → Enroll in Fleet → Add Fleet Server

We are going to need this information to setup our fleet server.
Login via SSH to the fleet-server and make sure the fleet-server is running before setting up our agent:
````
sudo docker exec -ti fleet-server bash
./elastic-agent status (check it is running)
./elastic-agent restart (if it doesn't appear to be running, force a restart, and recheck the status)
这是一个需要复制到 fleet 服务器的示例。请确保 fleet 服务器的 Elasticsearch 地址为:https://es01:9200<br>
将加粗部分添加到 port=8220 之后,因为我们的证书是自生成的。这将确保 agent 能接受更新。<br>
令牌(token)和指纹(fingerprint)将与这个示例不同<br>
复制下方的 elastic-enrol agent,并将这两行替换为你自己的服务器上的内容,其余保持不变。<br>
<pre>
--fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE3MzEwOTcwODU3MzI6VjMyLU13cmFUOUM1eUFvMUhVUFl5QQ \
--fleet-server-es-ca-trusted-fingerprint=0D9A25F4C147EB3A496253525DF6F039CF3C19776E64A1F77CEFCCD08B76BC61 \
</pre>
在登录 fleet-agent 后,将 elastic-agent 注册到你的 fleet-agent:
使用此模板来安装你的证书,并确保替换为你自己的<br>
fleet-server-service-token & fleet-server-es-ca-trusted-fingerprint<br>````
elastic-agent enroll \
--url=https://fleet-server:8220 \
--fleet-server-es=https://es01:9200 \
--fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE3MzEwOTcwODU3MzI6VjMyLU13cmFUOUM1eUFvMUhVUFl5QQ \
--fleet-server-policy=fleet-server-policy \
--fleet-server-es-ca=/certs/es01/es01.crt \
--fleet-server-es-ca-trusted-fingerprint=0D9A25F4C147EB3A496253525DF6F039CF3C19776E64A1F77CEFCCD08B76BC61 \
--fleet-server-port=8220 \
--certificate-authorities=/certs/ca/ca.crt \
--fleet-server-cert=/certs/fleet-server/fleet-server.crt \
--fleet-server-cert-key=/certs/fleet-server/fleet-server.key \
--elastic-agent-cert=/certs/fleet-server/fleet-server.crt \
--elastic-agent-cert-key=/certs/fleet-server/fleet-server.key \
--fleet-server-es-cert=/certs/fleet-server/fleet-server.crt \
--fleet-server-es-cert-key=/certs/fleet-server/fleet-server.key
这将替换你当前的设置。是否要继续? [Y/n]: Y

已成功注册 Elastic Agent。
从当前位置验证它是否已正确安装
````
./elastic-agent status
./elastic-agent restart (if you got what appears to be errors, force a restart and check the status)

既然 Fleet Server 已连接,请关闭此窗口,然后继续下一步。

在 Elastic Management → Fleet 中,刷新 Agents,就会显示以下内容:

服务器现在已准备好安装 Threat Intel Agents,以便在 Security(SIEM 部分)中针对蜜罐日志使用。<br>
下一步是选择 Agent policies → Fleet Server Policy → Add integration:<br>
使用此 Dashboard 查看 elastic-agent 收集的指标:<br>

- 选择并添加 AlienVault OTX(需要 API 密钥)<br>
- 选择 AbuseCH(需要 API 密钥)<br>
- 选择 Threat Intelligence Utilities<br>
- Elasticsearch<br>
- 选择 Kibana<br>
- 选择 Docker<br>

# Fleet Server 策略示例

- 在 Elastic Management → Installed Integration 中<br>
- 依次选择每个已安装的集成,然后选择 Settings,并启用 _保持策略为最新_ 选项卡:<br>

## 配置 Security → Rules
- 选择 Rules → Detection rules (SIEM) → Add Elastic rules
- 在 Search Tags 下:Rule Type: Threat Intel(至少添加以下 4 条规则)
- 安装并启用这 4 条规则
- Threat Intel Indicator Match - Cowrie(自定义规则,当 docker 加载所有 ELK 栈组件时加载并启用)
- Threat Intel Windows Registry Indicator Match
- Threat Intel Hash Indicator Match
- Threat Intel URL Indicator Match
- 你可以浏览这些规则,并启用你想要针对蜜罐数据尝试的其他规则。<br>

## 查看规则在 Alert trend 中捕获的活动
如果上述某些威胁情报已添加到 elastic-agent,并且在初始安装期间已将 cowrie* 添加到 Management -> Advanced Settings,那么现在即可跟踪与 ELK 栈 SIEM 部分警报趋势匹配的规则。<br>
这是 Management → Stack Management → Advanced Settings 的输出<br>

如果有任何威胁情报匹配,SIEM 将显示以下可进行调查的活动:<br>


# 在 DShield Sensor 上设置 Filebeat - 将日志发送到 ELK
下一步是将 Filebeat 软件包添加到 DShield Sensor,以将日志发送到 Elasticsearch。<br>
使用以下步骤,通过此参考 [3] 中的命令安装 Filebeat:<br>````
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
echo "deb https://artifacts.elastic.co/packages/oss-8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
sudo apt-get update
安装后,我们对 filebeat 设置 hold,这样你可以在不更改 filebeat 版本的情况下更新传感器。filebeat
版本应始终与 Elasticsearc/Kibana docker 版本匹配。
Linux - X86_64```
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.19.15-amd64.deb
sudo apt install ./filebeat-8.19.15-amd64.deb
sudo apt-mark hold filebeat
<ins>PI - aarch64</ins>```
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.19.15-arm64.deb
sudo apt install ./filebeat-8.19.15-arm64.deb
sudo apt-mark hold filebeat
为了更新filebeat,届时你需要移除该保留。在移除之前,请先检查filebeat上是否设有保留。
```
sudo apt-mark showhold
sudo apt-mark unhold filebeat
如果您想在 DShield 传感器上使用 Zeek,请查看这些安装[步骤](https://github.com/bruneaug/DShield-SIEM/blob/main/AddOn/Configure_Zeek_DShield_Sensor.md)
### 云传感器设置 - Filebeat -> 家庭路由器 -> Logstash
要从云传感器连接到本地 ELK Stack,您需要执行以下操作:
- 将家庭路由器配置为 NAT 到您的 ELK Stack 本地 IP 地址<br>
- 从传感器使用路由器 IP 地址连接到您的家庭路由器(我建议为您的家庭 IP 添加一个主机名,以防其发生变化)<br>
- 最终连接应如下所示:传感器 -> NAT 路由器 IP -> ELK Stack
### 将所有传感器文件传输到 DShield 传感器
按照此 URL 下载与 DShield 传感器相关的所有文件<br>
https://github.com/bruneaug/DShield-Sensor````
git clone https://github.com/bruneaug/DShield-Sensor.git
sudo cp ~/DShield-Sensor/filebeat/filebeat.yml /etc/filebeat/filebeat.yml
output.logstash:<br>
hosts: ["192.168.25.23:5044"]<br>
#hosts: ["logstash.com:5044"]<br>
### Filebeat 故障排查````
sudo su -
filebeat test config
预期输出: Config OK
````
filebeat test output
预期输出:
<pre>
logstash: 192.168.25.231:5044...
connection...
parse host... OK
dns lookup... OK
addresses: 192.168.25.231
dial up... OK
TLS... WARN secure connection disabled
talk to server... OK
</pre>
## 启动 Filebeat````
sudo systemctl enable filebeat
sudo systemctl start filebeat
sudo systemctl status filebeat
Filebeat 使用一个名为 log.json 的文件来跟踪它已处理的事件,如果该文件被删除,那么当 filebeat 重启时,之前发送到 Elasticsearch 的所有事件都将被重新处理。
该文件的位置:
sudo su -````
cd /var/lib/filebeat/registry/filebeat
如果你的 ELK 服务器已重建,并且你计划重新发送所有日志,_请停止 filebeat,删除 log.json 并重新启动 filebeat_。
这通常需要一段时间才能在 ELK Stack 仪表板中追上进度。如果你想确认它是否正在将日志发送到 ELK Stack,你可以<br>
- tail -f log.json
- 在仪表板中查找过去 30 天的日志,同时等待它追赶进度
# 界面 - Logs DShield Sensor Overview
要访问仪表板,请选择 Analytics -> Dashboard -> **[Logs DShield Sensor] Overview**<br>

## 将 ca.crt 添加到工作站浏览器
按照此[页面](https://github.com/bruneaug/DShield-SIEM/blob/main/AddOn/Workstation_Browser_CA_Certificate.md)中的步骤,将 ELK 服务器使用的 ca.crt 添加到 Kibana。<br>

# 有用的 Docker 命令
请参阅此页面,获取有用的 docker 命令列表。<br>
https://github.com/bruneaug/DShield-SIEM/edit/main/Troubleshooting/docker_useful_commands..md
# 有关通过 Console 使用 Elastic 的信息
这些命令从 Dev Tool -> Console 运行<br>
GET _nodes/http?pretty (获取所有节点的列表和信息)<br>
GET _security/_authenticate<br>
GET /_cat/nodes?v=true<br>
# 学生编写的 DShield 分析脚本和代码
以下是 BACS 项目学生编写的一些脚本和代码,用于辅助日志分析。<br>
Jesse La Grew [cowrieprocessor](https://github.com/jslagrew/cowrieprocessor)<br>
jrjobe [DShield-Cowrie-json-Parser](https://github.com/jrjobe/DShield-Cowrie-json-Parser)<br>
ham-sauce [vt_cowrie](https://github.com/ham-sauce/vt_cowrie)<br>
NickTheSecurityDude [dshield-honeypot-scripts](https://github.com/NickTheSecurityDude/dshield-honeypot-scripts/tree/main) 和 [LinkedIn 帖子](https://www.linkedin.com/pulse/how-i-used-honeypot-track-analyze-cyberattacks-nicholas-gilbert-jcste)<br>
Josh Gilman [DShieldKickStarter](https://github.com/iamjoshgilman/DShieldKickStarter)<br>
kcustom11 [dshield-azure](https://github.com/kcustom11/dshield-azure) Azure Terraform<br>
Boggby [ec2-honeypot-template](https://github.com/Boggby/ec2-honeypot-template)<br>
amelete11235
[homelab](https://github.com/amelete11235/homelab/blob/main/Installing%20DShield%20SIEM%20on%20a%20Raspberry%20Pi%205%20-%208%20GB%20RAM/Installing%20DShield%20SIEM%20on%20a%20Raspberry%20Pi%205%20-%208%20GB%20RAM.md) DShiel SIEM 树莓派 5<br>
William Constantino [Cowrie logfile_investigation(使用 Python)](https://github.com/JJWCons/log-scripts/blob/main/logfile_investigation.py)<br>
William Constantino [Cowrie single_multi_IP(使用 Python)](https://github.com/JJWCons/log-scripts/blob/main/single_multi_IP.py)<br>
Steven C. Peterson [DShield Model Context Protocol](https://github.com/datagen24/dsheild-mcp)<br>
Nathan Smisson [dshield-tooling](https://github.com/neurohypophysis/dshield-tooling)<br>
# 参考文献
[1] https://isc.sans.edu/tools/honeypot/<br>
[2] https://www.elastic.co/downloads/beats/filebeat<br>
[3] https://www.elastic.co/guide/en/beats/filebeat/8.8/setup-repositories.html#_apt<br>
[4] https://isc.sans.edu/diary/DShield+Honeypot+Activity+for+May+2023/29932<br>
[5] https://isc.sans.edu/diary/DShield+Sensor+JSON+Log+to+Elasticsearch/29458<br>
[6] https://isc.sans.edu/diary/DShield+Sensor+JSON+Log+Analysis/29412<br>
[7] https://github.com/jslagrew/cowrieprocessor/blob/main/submit_vtfiles.py<br>
[8] https://handlers.sans.edu/gbruneau/elastic.htm<br>
[9] https://www.elastic.co/guide/en/fleet/current/secure-connections.html<br>
[10] https://www.docker.elastic.co/<br>
[11] https://github.com/gchq/CyberChef<br>
[12] https://github.com/mitre-attack/attack-navigator/pkgs/container/attack-navigator