安全解决方案

59 阅读22分钟

SIEM

安全信息和事件管理 (SIEM) 是一种安全解决方案,它从各种类型的日志源收集日志,将它们的格式标准化为一致的格式,将它们关联起来,并使用检测规则检测恶意活动。

安全信息和事件管理 (SIEM)提供

  • 集中式日志收集
  • 日志规范化
  • 日志相关性分析
  • 实时警报
  • 仪表盘和报表
    • 警报要点
    • 系统通知
    • 健康警报
    • 失败登录尝试列表
    • 已接收事件计数
    • 触发的规则
    • 访问量最高的域名

日志源

Windows

Windows 会记录所有可通过事件查看器查看的事件。它会为每种类型的日志活动分配一个唯一的 ID

Linux

Linux 操作系统会存储所有相关日志,例如事件、错误、警告等。这些日志随后会被导入到 SIEM 系统中进行持续监控。Linux 存储日志的一些常见位置包括:

  • /var/log/httpd:包含 HTTP 请求/响应和错误日志。
  • /var/log/cron:与 cron 作业相关的事件存储在此位置。
  • /var/log/auth.log 和 /var/log/secure:存储与身份验证相关的日志。
  • /var/log/kern:此文件存储与内核相关的事件。

Web服务器

监控所有进出Web服务器的请求/响应对于防范任何潜在的Web攻击至关重要。Linux通常,所有与 apache 相关的日志都写入 /var/log/apache 或 /var/log/httpd。

防火墙

防火墙类型特点
Stateless Firewall(无状态防火墙)- 基本的数据包过滤(Basic Filtering)- 不记录之前的连接状态(No Track of Previous Connections)- 处理速度快,适用于高速网络(Efficient for High-Speed Networks)
Stateful Firewall(有状态防火墙)- 根据连接状态和通信模式识别流量(Recognize Traffic by Patterns)- 支持复杂的访问控制规则(Complex Rules)- 持续监控网络连接状态(Monitor Network Connections)
Proxy Firewall(代理防火墙)- 可以检查数据包中的具体内容(Deep Packet Inspection)- 提供内容过滤(Content Filtering)- 提供应用层控制(Application Control)- 可解密并检查 SSL/TLS 加密流量(SSL Inspection)
Next-Generation Firewall(下一代防火墙,NGFW)- 提供高级威胁防护(Advanced Threat Protection)- 集成入侵防御系统(IPS,Intrusion Prevention System)- 利用启发式分析(Heuristic Analysis)识别异常行为- 支持 SSL/TLS 解密和检测

Windows Defender防火墙

打开 Windows 搜索并输入“Windows Defender”

  1. 专用网络: 这包括防火墙连接到家庭网络时需要应用的配置。
  2. 访客或公共网络: 这包括防火墙连接到公共或不受信任的网络(例如咖啡店、餐厅或类似场所)时要应用的配置。例如,连接到公共网络时,可以进行以下配置。防火墙您可以设置阻止所有传入网络连接,仅允许必要的传出连接。这些设置将应用于公共网络,在使用家庭私有网络时不会生效。

查看创建入站和出站规则的可用选项

Linux iptables 防火墙

Netfilter

  • iptables: 这是许多系统中应用最广泛的实用程序。Linux采用 Netfilter 框架,该框架提供各种功能来控制网络流量。
  • nftables: 它是“iptables”工具的后继者,增强了数据包过滤和NAT功能。它也基于Netfilter框架。
  • firewalld: 此实用程序也基于 Netfilter 框架运行,并具有预定义的规则集。它的工作方式与其他实用程序不同,并带有不同的预置网络区域配置。

ufw

通过提供一个更简洁的界面,简化了在“iptables”(或其后续版本)中使用复杂语法编写规则的繁琐过程,对初学者更加友好。基本上,无论你需要在“iptables”中编写什么规则,都可以通过ufw使用一些简单的命令来定义,ufw会自动将你所需的规则配置到“iptables”中。

查看防火墙状态

sudo ufw status

启用防火墙

sudo ufw enable

关闭防火墙

sudo ufw disable

查看详细状态

sudo ufw status verbose

查看带编号的规则

sudo ufw status numbered

重新加载规则

sudo ufw reload

重置所有规则

会删除所有配置

sudo ufw reset

默认拒绝所有入站

sudo ufw default deny incoming

默认允许所有出站(推荐)

sudo ufw default allow outgoing

默认拒绝所有出站(一般不用)

sudo ufw default deny outgoing

默认允许所有入站(不推荐)

sudo ufw default allow incoming

开放 HTTP

sudo ufw alllow 80/tcp

开放 HTTPS

sudo ufw allow 443/tcp

开放 SSH

sudo ufw allow 22/tcp

开放 WireGuard

sudo ufw allow 51820/udp

开放 MySQL(仅内网使用更安全)

sudo ufw allow 3306/tcp

开放 Redis

sudo ufw allow 6379/tcp

拒绝 SSH

sudo ufw deny 22/tcp

拒绝所有 UDP 53

sudo ufw deny 53/udp

删除指定规则

sudo ufw delete allow 80/tcp

删除编号

sudo ufw delete 3

允许某 IP

sudo ufw allow from 1.2.3.4

允许某网段

sudo ufw allow from 192.168.1.0/24

允许某 IP 访问 SSH

sudo ufw allow from 1.2.3.4 to ant port 22 proto tcp

查看支持的应用

sudo ufw app list

查看应用详情

sudo ufw app info Nginx Full

开启日志

sudo ufw logging on

关闭日志

sudo ufw logging off

设置日志等级

sudo ufw logging low  
sudo ufw logging medium  
sudo ufw logging high  
sudo ufw logging full

查看日志

sudo tail -f /var/log/ufw.log

IDS

仅有防火墙并不能保证网络绝对安全。

即使攻击者成功绕过了防火墙,通过一个看起来合法的连接进入网络,之后仍然可能在网络内部执行恶意活动。

例如:

  • 窃取数据
  • 横向移动(Lateral Movement)
  • 提权(Privilege Escalation)
  • 安装后门
  • 部署勒索软件

这些行为发生在连接已经建立之后,而防火墙通常无法持续监控连接建立后的具体行为。

这种安全解决方案就是:

IDS(Intrusion Detection System,入侵检测系统) 。

可以把网络安全比喻成一栋办公大楼。防火墙就像大楼门口的保安(Gatekeeper)检查谁可以进入?谁可以离开?如果发现陌生人没有权限,就拒绝进入。

但是,攻击者伪装成员工,成功骗过保安进入大楼。进入后,他开始偷资料,破坏设备,非法进入其他办公室。这时怎么办?安装在大楼各处的监控摄像头(Surveillance Cameras)。摄像头不会阻止别人行动,而是持续监控,发现异常行为,报警通知保安,这就是 IDS 的工作方式。

部署模式

HIDS(Host Intrusion Detection System,主机入侵检测系统)

HIDS 安装在每一台主机上,负责检测该主机上的安全威胁。仅负责检测与特定主机相关的潜在安全威胁。它们提供主机活动的详细可见性。然而,主机入侵检测系统在大型网络中的管理可能具有挑战性,因为它们资源密集,并且需要在每台主机上进行管理。

NIDS(Network Intrusion Detection System,网络入侵检测系统)

NIDS 不安装在主机上。它部署在网络的重要位置。它们监控所有相关主机的网络流量,以检测可疑活动。它提供了一个集中式的网络检测视图。

检测模式

Signature-Based IDS(基于特征的 IDS)

每种攻击都有自己独特的特征(Signature),IDS 会把这些特征保存到数据库中。它能更有效地检测已知威胁。然而不能检测Zero-day Attack(零日攻击)。零日攻击没有任何先前的特征(模式),也不会保存在系统中。

Anomaly-Based IDS(基于异常的 IDS)

学习网络或系统的正常行为 Baseline(基线),并检测是否存在任何偏离正常行为的情况。基于异常的检测入侵检测系统还可以检测零日攻击,因为它们不依赖于现有的特征码进行检测。它们通过将当前状态与正常行为(基线)进行比较来检测网络或系统内部的异常情况。然而,这种类型的入侵检测系统可能会产生大量 False Positive(误报)(将良性活动标记为恶意活动),因为大多数合法程序的性质与恶意程序相似。手动定义正常行为通过微调可以减少基于异常检测产生的误报。

Hybrid IDS(混合型 IDS)

结合了:

  • Signature-Based
  • Anomaly-Based

混合型数据库入侵检测系统将采用基于特征的检测技术。入侵检测系统如果遇到新的威胁,它可以利用基于异常的检测方法。

Snort

Snort 是使用最广泛的开源工具之一入侵检测系统Snort 是一款于 1998 年开发的解决方案。它使用基于特征码和异常的检测方法来识别已知威胁。这些威胁定义在 Snort 工具的规则文件中。该工具的软件包中预装了多个内置规则文件,其中包含各种已知的攻击模式。Snort 的内置规则可以检测大量恶意流量。但是,可以配置 Snort 来检测默认规则文件未涵盖的特定类型的网络流量。可以根据自身需求创建自定义规则来检测特定流量。如果内置检测规则无法检测到对系统或网络有害的流量,也可以禁用它们,并定义一些自定义规则。

Snort 模式

模式说明使用场景
Packet Sniffer Mode(数据包嗅探模式)只读取并显示网络数据包,不进行任何攻击检测或分析。可将数据包显示在终端,也可以输出到文件。主要用于网络监控和故障排查。网络管理员发现网络延迟或异常,需要查看网络流量内容来定位问题。
Packet Logging Mode(数据包日志模式)将网络流量保存为 PCAP(Packet Capture) 文件,供后续分析。既可以保存所有流量,也可以保存检测结果。常用于取证分析。安全团队调查一起网络攻击,需要查看历史网络流量,分析攻击过程和根本原因。
Network Intrusion Detection System (NIDS) Mode(网络入侵检测模式)Snort 的核心模式。实时监控网络流量,根据规则库(Signature)匹配已知攻击特征,发现攻击后立即生成告警。企业需要持续监控网络,及时发现 SQL 注入、端口扫描、恶意软件通信等攻击行为。

安装

sudo apt install snort -y

查看版本

snort -v

规则格式

在安装 Snort 时,需要指定:

  • 网络接口(Network Interface)
  • 网络范围(Network Range)

正常运行 Snort 时,它只会捕获发送到本机的网络流量。

但是,如果希望使用 Snort 来监控整个网络并检测网络中的入侵行为,则必须将主机的网络接口设置为混杂模式(Promiscuous Mode) 。

ls命令列出 Snort 主目录中的所有文件和文件夹:

$ ls /etc/snort/
Intro_to_IDS.pcap      gen-msg.map       snort.conf         threshold.conf
classification.config  reference.config  snort.debian.conf  unicode.map
community-sid-msg.map  rules             snort.lua

例如,一条规则可以检测来自任何 IP 地址和端口、到达其所属网络(网络范围在 Snort 的配置文件中定义)任意端口的 ICMP 数据包(通常用于 ping 主机)。一旦检测到此类流量,Snort 就会生成“Ping 检测”警报。

  • 操作: 此项指定规则触发时要执行的操作。在本例中,我们设置的操作是当流量与此规则匹配时发出“警报”。

  • 协议: 这指的是与此规则匹配的协议。在本例中,我们使用“ICMP”协议来ping主机。

  • 源 IP: 此设置确定流量的来源 IP 地址。由于我们希望检测来自任何源 IP 的流量,因此将其设置为“any”。

  • 源端口: 这决定了流量的来源端口。由于我们希望检测来自任何源端口的流量,因此我们将其设置为“any”。

  • 目标 IP: 此参数指定匹配流量的目标 IP 地址;它会生成警报。在本例中,我们使用了“$HOME_NET”。这是一个变量,我们在 Snort 的配置文件中将其值定义为整个网络的 IP 地址范围。

  • 目标端口: 这指定流量将到达的端口。由于我们希望检测到达任何端口的流量,因此我们将其设置为“any”。

  • 规则元数据: 每条规则都包含一些元数据。这些元数据定义在规则末尾的括号内。其组成部分如下:

    • 消息 (msg): 此消息描述触发主题规则时显示的消息。消息应指示检测到的活动类型。在本例中,我们使用了“检测到 Ping 请求”。
    • 签名 ID (sid): 每条规则都有一个唯一的标识符,用于将其与其他规则区分开来。此标识符称为签名 ID (sid)。在本例中,我们将 sid 设置为“10001”。
    • 规则修订(rev): 此设置用于指定规则的修订号。每次规则被修改时,其修订号都会递增,这有助于跟踪规则的更改。

规则创建

上面解释的示例规则粘贴到 Snort 规则目录中的自定义local.rules文件中。

sudo nano /etc/snort/rules/local.rules

在文件中已有的规则之后添加以下规则:

alert icmp any any -> 127.0.0.1 any (msg:"Loopback Ping Detected"; sid:10003; rev:1;)

alert tcp any any -> $HOME_NET 22 (msg:"SSH Connection Detected"; sid:1000002; >

文件编辑成功后,按下“Ctrl+X”,系统会询问是否要按“Y”保存更改。按下“Y”保存更改。

编辑snort.lua并添加新的规则文件 local.rules

sudo nano /etc/snort/snort.lua

修改为

ips =
{
    variables = default_variables,

    include = /etc/snort/rules/local.rules
}

规则测试

启动 Snort 工具来检测规则文件中定义的任何入侵行为

sudo snort -q -l /var/log/snort -i lo -A alert_fast -c /etc/snort/snort.lua

如果环回接口名称不是 “lo”, 请将其替换为正确的接口名称。

以静默模式启动 Snort,监听本机回环接口 lo,使用 /etc/snort/snort.lua 配置文件,并将告警以 alert_fast 格式记录到 /var/log/snort

尝试 ping 一下环回地址,看看这条规则是否有效:

ping 127.0.0.1

下面的截图显示了当我们 ping 主机的回环 IP 地址时,Snort 生成的“检测到回环 Ping”警报。这表明我们的规则运行正常。

在 PCAP 文件上运行 Snort

sudo snort -q -l /var/log/snort -r Task.pcap -A alert_fast -c /etc/snort/snort.lua

systemd 服务

生产环境推荐把 Snort 做成 systemd 服务,这样可以:

  • ✅ 开机自动启动
  • ✅ 崩溃后自动重启(可配置)
  • ✅ 不需要一直开着 SSH
  • ✅ 使用 systemctl 管理
  • ✅ 使用 journalctl 查看日志

创建: sudo nano /etc/systemd/system/snort.service

内容:

[Unit]
Description=Snort 3 NIDS
After=network.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/sbin/snort -q -l /var/log/snort -i eth0 -A alert_fast -c /etc/snort/snort.lua
Restart=on-failure
RestartSec=5

User=root
Group=root

[Install]
WantedBy=multi-user.target

注意: ExecStart 中的 /usr/sbin/snort 要根据你的实际安装路径修改

先确认:which snort

重新加载 systemd

sudo systemctl daemon-reload

启动服务

sudo systemctl start snort

开机自启

sudo systenctl enable snort

查看状态

sudo systemctl start status

Wazuh

Wazuh 是一个安全平台,可为端点和云工作负载提供统一的 XDR 和 SIEM 保护。该解决方案由一个通用代理和三个核心组件组成:Wazuh 服务器、Wazuh 索引器和 Wazuh 控制面板。

硬件需求很大程度上取决于受保护端点和云工作负载的数量。该数字有助于估算需要分析的数据量以及需要存储和索引的安全警报数量。

下表列出了快速入门部署的推荐硬件配置:

AgentsCPURAMStorage (90 days)
1–254 vCPU8 GiB50 GB
25–508 vCPU8 GiB100 GB
50–1008 vCPU8 GiB200 GB

对于规模较大的环境,建议采用分布式部署。Wazuh 服务器和 Wazuh 索引器均支持多节点集群配置,从而实现高可用性和负载均衡。

安装 Wazuh

下载并运行Wazuh安装助手

curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh && sudo bash ./wazuh-install.sh -a

助手完成安装后,输出结果会显示访问凭据以及确认安装成功的消息

如果安装的过程中出现以下报错:

ERROR: Your system does not meet the recommended minimum hardware requirements of 4Gb of RAM and 2 CPU cores. If you want to proceed with the installation use the -i option to ignore these requirements.

使用 -i 忽略硬件检查

sudo bash ./wazuh-install.sh -a -i

INFO: --- Summary ---
INFO: You can access the web interface https://<WAZUH_DASHBOARD_IP_ADDRESS>
    User: admin
    Password: <ADMIN_PASSWORD>
INFO: Installation finished.
分步安装

ERROR: Port 443 is being used by another process. Please, check it before installing Wazuh.

443端口被占用,如果这些服务不能关闭,那么不能使用 wazuh-install.sh -a 官方一键安装,因为它要求 Dashboard 直接绑定 443。

改用官方的分步安装:

  • 安装 Wazuh Indexer
  • 安装 Wazuh Manager
  • 安装 Wazuh Dashboard
  • 修改 Dashboard 监听端口(例如 5601 或 8443)
安装 Wazuh Indexer

生成SSL证书

下载wazuh-certs-tool.sh脚本和config.yml配置文件。这将创建用于加密 Wazuh 中央组件之间通信的证书。

curl -sO https://packages.wazuh.com/4.14/wazuh-certs-tool.sh
curl -sO https://packages.wazuh.com/4.14/config.yml

编辑./config.yml并替换节点名称和 IP 地址。需要对所有 Wazuh 服务器、Wazuh 索引器和 Wazuh 控制面板节点执行此操作。根据需要添加任意数量的节点字段。

nodes:
  # Wazuh indexer nodes
  indexer:
    - name: node-1
      ip: "<indexer-node-ip>"
    #- name: node-2
    #  ip: "<indexer-node-ip>"
    #- name: node-3
    #  ip: "<indexer-node-ip>"

  # Wazuh server nodes
  # If there is more than one Wazuh server
  # node, each one must have a node_type
  server:
    - name: wazuh-1
      ip: "<wazuh-manager-ip>"
    #  node_type: master
    #- name: wazuh-2
    #  ip: "<wazuh-manager-ip>"
    #  node_type: worker
    #- name: wazuh-3
    #  ip: "<wazuh-manager-ip>"
    #  node_type: worker

  # Wazuh dashboard nodes
  dashboard:
    - name: dashboard
      ip: "<dashboard-node-ip>"

运行./wazuh-certs-tool.sh命令创建证书

bash ./wazuh-certs-tool.sh -A

ERROR: The IP 72.61.209.145 is public.

wazuh-install 和 wazuh-certs-tool 会检查 IP 是否为私有地址,如果发现是公网 IP,就直接退出。官方不推荐核心组件之间通过公网 IP 通信。对于确实需要使用公网 IP 的场景,可以修改脚本,注释掉这段检查

grep -n "The IP .* is public" wazuh-certs-tool.sh

sed -n '530,550p' wazuh-certs-tool.sh

nano wazuh-certs-tool.sh 按:Ctrl + W 输入:cert_checkPrivateIp 然后按 Enter。把

for ip in "${all_ips[@]}"; do
    isIP=$(echo "${ip}" | grep -P "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")
    if [[ -n "${isIP}" ]]; then
        if ! cert_checkPrivateIp "$ip"; then
            common_logger -e "The IP ${ip} is public."
            exit 1
        fi
    fi
done

只修改这一行:if ! cert_checkPrivateIp "$ip"; then 改成if false && ! cert_checkPrivateIp "$ip"; then 其余几行完全不要动:

image.png

for ip in "${all_ips[@]}"; do
    isIP=$(echo "${ip}" | grep -P "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")
    if [[ -n "${isIP}" ]]; then
        if false && ! cert_checkPrivateIp "$ip"; then
            common_logger -e "The IP ${ip} is public."
            exit 1
        fi
    fi
done

修改后重新执行:bash ./wazuh-certs-tool.sh -A

压缩所有必要文件

tar -cvf ./wazuh-certificates.tar -C ./wazuh-certificates/ .
rm -rf ./wazuh-certificates

将文件复制wazuh-certificates.tar到所有节点,包括 Wazuh 索引器、Wazuh 服务器和 Wazuh 控制面板节点。可以使用该scp实用程序完成此操作

对于单节点,安装完 wazuh-indexer 后执行:

mkdir -p /etc/wazuh-indexer/certs

tar -xf /root/wazuh-certificates.tar \
    -C /etc/wazuh-indexer/certs

chmod 500 /etc/wazuh-indexer/certs
chmod 400 /etc/wazuh-indexer/certs/*
chown -R wazuh-indexer:wazuh-indexer /etc/wazuh-indexer/certs

如果安装官方默认,希望最后目录变成indexer.pem indexer-key.pem 则替换上面的tar命令,不需要修改plugins.security.ssl.http.pemcert_filepath

tar -xf ./wazuh-certificates.tar -C /etc/wazuh-indexer/certs/ ./$NODE_NAME.pem ./$NODE_NAME-key.pem ./admin.pem ./admin-key.pem ./root-ca.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME.pem /etc/wazuh-indexer/certs/indexer.pem
mv -n /etc/wazuh-indexer/certs/$NODE_NAME-key.pem /etc/wazuh-indexer/certs/indexer-key.pem

然后查看:

ls -l /etc/wazuh-indexer/certs

image.png

节点安装

如果缺少以下软件包,请运行以下命令进行安装:

apt-get install debconf adduser procps

添加 Wazuh Repository

# 如果缺少以下软件包
apt install gnupg apt-transport-https

# 安装 GPG 密钥
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg

# 添加 Repository
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list

# 更新
apt update

安装 Wazuh Indexer 软件包

apt -y install wazuh-indexer

配置 Wazuh 索引器 编辑nano /etc/wazuh-indexer/opensearch.yml并替换以下值:

  1. network.host设置此节点用于 HTTP 和传输流量的地址。节点将绑定到此地址并将其用作发布地址。接受 IP 地址或主机名。config.yml使用与创建 SSL 证书时相同的节点地址。
  2. node.name:文件中定义的 Wazuh 索引器节点的名称config.yml。例如,node-1.
  3. cluster.initial_master_nodes:主节点候选节点名称列表。这些名称在config.yml文件中定义。根据你的定义,取消注释 <master_name>``node-2和 <master_name> 行,更改名称,或添加更多行。node-3``config.yml
  4. discovery.seed_hosts:列出所有符合主节点资格的节点的地址。每个元素可以是 IP 地址或主机名。如果你将 Wazuh 索引器配置为单节点,则可以将此设置注释掉。对于多节点配置,请取消注释此设置并设置每个符合主节点资格的节点的 IP 地址。
  5. plugins.security.nodes_dn:列出所有 Wazuh 索引器集群节点的证书的专有名称。
  6. 修改节点证书 image.png

用并启动 Wazuh 索引器服务

systemctl daemon-reload
systemctl enable wazuh-indexer
systemctl start wazuh-indexer
systemctl status wazuh-indexer

集群初始化

indexer-security-init.sh在任何Wazuh 索引器节点上运行 Wazuh 索引器脚本,以加载新的证书信息并启动单节点或多节点集群

/usr/share/wazuh-indexer/bin/indexer-security-init.sh

image.png

运行以下命令以确认安装成功。将  <WAZUH_INDEXER_IP_ADDRESS> 替换为 Wazuh 索引器的 IP 地址,并在提示时输入密码 admin:

curl -k -u admin https://<WAZUH_INDEXER_IP_ADDRESS>:9200

image.png

安装 Wazuh Server
apt -y install wazuh-manager
apt-get -y install filebeat

下载预配置的Filebeat配置文件

curl -so /etc/filebeat/filebeat.yml https://packages.wazuh.com/4.14/tpl/wazuh/filebeat/filebeat.yml

编辑nano /etc/filebeat/filebeat.yml配置文件并替换以下值:

  1. hosts要连接的 Wazuh 索引器节点列表。可以使用 IP 地址或主机名。默认情况下,主机设置为 localhost 。请根据实际情况替换为自己的 Wazuh 索引器 IP 地址。hosts: ["127.0.0.1:9200"]。

    如果你有多个 Wazuh 索引节点,可以使用逗号分隔地址。例如:hosts: ["10.0.0.1:9200", "10.0.0.2:9200", "10.0.0.3:9200"]

创建 Filebeat 密钥库以安全地存储身份验证凭据

filebeat keystore create

将默认用户名和密码添加admin到admin密钥库中

echo admin | filebeat keystore add username --stdin --force
echo admin | filebeat keystore add password --stdin --force

下载 Wazuh 索引器的警报模板

curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/v4.14.6/extensions/elasticsearch/7.x/wazuh-template.json

chmod go+r /etc/filebeat/wazuh-template.json

安装 Filebeat 的 Wazuh 模块

curl -s https://packages.wazuh.com/4.x/filebeat/wazuh-filebeat-0.5.tar.gz | tar -xvz -C /usr/share/filebeat/module

部署证书

mkdir -p /etc/filebeat/certs

tar -xf /root/wazuh-certificates.tar \
    -C /etc/filebeat/certs \
    ./wazuh-1.pem \
    ./wazuh-1-key.pem \
    ./root-ca.pem

mv /etc/filebeat/certs/wazuh-1.pem /etc/filebeat/certs/filebeat.pem
mv /etc/filebeat/certs/wazuh-1-key.pem /etc/filebeat/certs/filebeat-key.pem

chmod 500 /etc/filebeat/certs
chmod 400 /etc/filebeat/certs/*
chown -R root:root /etc/filebeat/certs
ls -l /etc/filebeat/certs/

配置 Wazuh 索引器连接

使用 wazuh-keystore 工具将 Wazuh 索引器用户名和密码保存到 Wazuh 管理器密钥库中。将 WAZUH_INDEXER_USERNAME 和 WAZUH_INDEXER_USERNAME 替换为Wazuh 索引器用户名和密码

echo '<INDEXER_USERNAME>' | /var/ossec/bin/wazuh-keystore -f indexer -k username
echo '<INDEXER_PASSWORD>' | /var/ossec/bin/wazuh-keystore -f indexer -k password

编辑nano /var/ossec/etc/ossec.conf以配置索引器连接 默认情况下,索引器设置中配置了一个主机。其设置0.0.0.0如下所示

<indexer>
  <enabled>yes</enabled>
  <hosts>
    <host>https://0.0.0.0:9200</host>
  </hosts>
  <ssl>
    <certificate_authorities>
      <ca>/etc/filebeat/certs/root-ca.pem</ca>
    </certificate_authorities>
    <certificate>/etc/filebeat/certs/filebeat.pem</certificate>
    <key>/etc/filebeat/certs/filebeat-key.pem</key>
  </ssl>
</indexer>

此处替换0.0.0.0为 Wazuh 索引器节点 IP 地址或主机名。可以在 Filebeat 配置文件中找到此值/etc/filebeat/filebeat.yml。

确保 Filebeat 证书和密钥名称与证书文件中的名称匹配/etc/filebeat/certs

如果你运行的是 Wazuh 索引器集群基础架构,请<host>为每个节点添加一个条目。例如,在双节点配置中

<hosts>
  <host>https://10.0.0.1:9200</host>
  <host>https://10.0.0.2:9200</host>
</hosts>

启动 Wazuh 管理器

systemctl daemon-reload
systemctl enable wazuh-manager
systemctl start wazuh-manager
systemctl status wazuh-manager

启动 Filebeat 服务

systemctl daemon-reload
systemctl enable filebeat
systemctl start filebeat
filebeat test output

image.png

Wazuh 服务器节点已成功安装。

安装 Wazuh Dashboard

安装软件包依赖项

apt install -y debhelper tar curl libcap2-bin #debhelper version 9 or later

安装 Wazuh 控制面板

apt -y install wazuh-dashboard

配置 Wazuh 控制面板

编辑nano /etc/wazuh-dashboard/opensearch_dashboards.yml文件并替换以下值:

  1. server.host此设置指定 Wazuh 控制面板服务器的主机。要允许远程用户连接,请将此值设置为 Wazuh 控制面板服务器的 IP 地址或 DNS 名称。此值0.0.0.0将接受主机的所有可用 IP 地址。
  2. server.port设置没有被占用端口。例如:5601
  3. opensearch.hosts:用于所有查询的 Wazuh 索引器实例的 URL。Wazuh 控制面板可以配置为连接到同一集群中的多个 Wazuh 索引器节点。节点地址可以用逗号分隔。例如: ["https://10.0.0.2:9200", "https://10.0.0.3:9200","https://10.0.0.4:9200"]

部署证书

mkdir -p /etc/wazuh-dashboard/certs

tar -xf /root/wazuh-certificates.tar \
    -C /etc/wazuh-dashboard/certs \
    ./dashboard.pem \
    ./dashboard-key.pem \
    ./root-ca.pem

chmod 500 /etc/wazuh-dashboard/certs
chmod 400 /etc/wazuh-dashboard/certs/*
chown -R wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs

启动 Wazuh 控制面板服务

systemctl daemon-reload
systemctl enable wazuh-dashboard
systemctl start wazuh-dashboard
systemctl status wazuh-dashboard

编辑nano /usr/share/wazuh-dashboard/data/wazuh/config/wazuh.yml文件,并将内容替换<WAZUH_SERVER_IP_ADDRESS>为 Wazuh 服务器主节点的 IP 地址或主机名。

hosts:
   - default:
      url: https://<WAZUH_SERVER_IP_ADDRESS>
      port: 55000
      username: wazuh-wui
      password: wazuh-wui
      run_as: true

使用你的用户凭据访问 Wazuh Web 界面admin。这是 Wazuh 索引器的默认管理员帐户,可以使用它访问 Wazuh 控制面板。

  • 网址:https://<WAZUH_DASHBOARD_IP_ADDRESS>
  • 用户名:admin
  • 密码:admin

为了确保 Wazuh 安装安全,建议更改默认凭据,以保护基础架构免受潜在攻击

使用 Wazuh 密码工具更改所有内部用户的密码。

/usr/share/wazuh-indexer/plugins/opensearch-security/tools/wazuh-passwords-tool.sh --api --change-all --admin-user wazuh --admin-password wazuh

image.png

安装 Wazuh 代理

Wazuh代理程序是跨平台的,运行在你想要监控的端点上。它与Wazuh服务器通信,通过加密和经过身份验证的通道近乎实时地发送数据。

可以按照 Wazuh 控制面板中的说明部署新代理 image.png

确认uname -m CPU 架构,如果输出:x86_64则对应:DEB amd64。如果输出:aarch64则对应:DEB aarch64。

image.png

如果 Wazuh Agent 和 Wazuh Manager 在同一台 VPS 上,Server address 可以写 127.0.0.1

image.png

然后在目标机器上运行上述生成的的命令

如果在安装 agent 时出现以下报错:Wazuh Manager 和 Wazuh Agent 软件包互相冲突,不能同时安装

wazuh-agent conflicts with wazuh-manager

wazuh-manager (version 4.x.x-x) is present and installed.

dpkg: error processing archive ./wazuh-agent_x.x.x_amd64.deb (--install):
 conflicting packages - not installing wazuh-agent

Wazuh Manager

负责:

  • 接收 Agent 数据
  • 分析日志
  • 执行规则匹配
  • 生成安全告警
  • 管理 Agent

Wazuh Agent

负责:

  • 采集本机数据
  • 收集系统日志
  • 监控文件变化
  • 收集安全事件
  • 发送数据给 Manager
                 Dashboard
                      |
                      |
                  Indexer
                      |
                      |
                  Manager
                      |
        ----------------------------
        |                          |
      Agent                     Agent
    Linux主机                  Windows主机

单机部署情况下

一台 VPS
├── Wazuh Indexer
├── Wazuh Manager
├── Wazuh Dashboard
└── Filebeat

这已经是一套完整 Wazuh 平台。不需要再安装 Agent。

漏洞扫描器

已认证扫描与未认证扫描

已认证扫描未经认证的扫描
必须向漏洞扫描器提供目标主机的凭据。漏洞扫描器不需要主机凭据;它只需要 IP 地址。
识别攻击者在访问主机后可以利用的漏洞。识别可被无法访问目标主机的外部攻击者利用的漏洞。
它通过扫描目标系统的配置和已安装的应用程序,提供对目标系统的更深入的了解。它资源消耗较少,而且设置简单。
例如,通过向漏洞扫描器提供凭据来扫描内部数据库。例如,扫描面向公众的网站,查找任何用户都可以利用的漏洞。

内部扫描与外部扫描

内部扫描外部扫描
从网络内部进行。从网络外部进行。
它着重分析网络内部可能被利用的漏洞。它着重研究可以从网络外部利用的漏洞。
识别攻击者进入网络后可能利用的漏洞。识别网络外部攻击者可利用的漏洞。

漏洞扫描工具

Nessus

Nessus 于 1998 年作为开源项目开发,后于 2005 年被 Tenable 收购,成为专有软件。它拥有丰富的漏洞扫描选项,被众多大型企业广泛使用。Nessus 提供免费版和付费版。免费版提供的扫描功能有限,而商业版则提供高级扫描功能、无限次扫描以及专业支持。Nessus 需要部署在企业内部进行管理。


Qualys

Qualys 于 1999 年开发,是一款基于订阅的漏洞管理解决方案。除了持续漏洞扫描外,它还提供合规性检查和资产管理功能。它会在持续监控过程中自动发出漏洞警报。Qualys 的最大优势在于它是一个云平台,这意味着无需额外的成本或精力来维护和管理它。


Nexpose

Nexpose 由 Rapid7 于 2005 年开发,是一款基于订阅的漏洞管理解决方案。它持续发现网络中的新资产并对其进行漏洞扫描,并根据资产价值和漏洞影响程度给出漏洞风险评分。此外,它还提供针对各种标准的合规性检查。Nexpose 提供本地部署和混合(云端和本地)部署模式。


OpenVAS

OpenVAS 是一个开源软件脆弱性评估这是由 Greenbone Security 开发的解决方案。它提供基本功能,并可通过其数据库扫描已知漏洞。虽然它不如商业工具全面,但也能体验到完整漏洞扫描器的功能。它适用于小型组织和个人系统。

  • 日常排查:先用 nmap -sV -sC 快速了解目标资产。
  • 基础漏洞验证:根据需要使用 --script vuln 或针对性的 NSE 脚本。
  • 正式漏洞扫描与报告:使用 OpenVAS(或其商业版 Greenbone)进行全面评估。
安装

OpenVAS 的安装过程可能非常繁琐,因为它有很多依赖项。我们将使用 Docker 来安装 OpenVAS

  • 从 Ubuntu 官方仓库安装

sudo apt install docker.io

  • 从 Docker 官方 APT 仓库安装

sudo apt install docker-ce docker-ce-cli containerd.io

  • 脚本安装

curl -fsSL https://get.docker.com/ | sh

运行以下命令来安装包含所有依赖项的 OpenVAS 容器

sudo docker run -d -p 443:443 --name openvas immauss/openvas

启动 Docker 容器

sudo docker start openvas

访问 OpenVAS

完成上述安装过程后,可以通过打开任意浏览器并在地址栏中输入以下内容来访问 OpenVAS Web 界面:

https://127.0.0.1

进入 OpenVAS 的登录页面。 

输入正确的登录凭据后,将打开以下仪表板。

  • 用户名:admin
  • 密码:admin

执行漏洞扫描

第一步是在 OpenVAS 控制面板中创建一个任务。填写此任务的详细信息并执行它以运行漏洞扫描。

点击仪表盘上“Scan”选项内的“Tasks”选项:

由于我们尚未执行任何扫描,因此此页面上不会显示任何任务。要创建任务,请单击星形图标,然后单击屏幕截图中高亮显示的“New Task”选项:

输入任务名称,然后点击屏幕截图中高亮显示的“Scan Target”选项:

输入实验室机器的名称及其 IP 地址,然后单击“Create”:

有多种扫描选项可供选择。每种扫描选项都有其扫描范围;可以仔细阅读每种扫描类型的详细信息并进行相应选择,然后点击“Create”按钮:

任务已创建,将显示在“Tasks”仪表板上。要启动扫描,请点击任务“Actions”选项中的播放按钮:

扫描需要几分钟时间才能完成。扫描完成后,其状态将显示为“Done”。“Tasks”仪表板中的可视化图表将显示一些数字,指示发现的漏洞的严重程度。要查看扫描详情,需要单击任务名称:

要查看扫描过程中发现的所有漏洞的详细信息,可以单击表示在目标主机中发现的漏洞数量的数字:

现在,已经列出了这台机器中发现的所有漏洞及其严重程度。还可以点击其中任何一个漏洞查看更多详细信息:

1.png

与其他漏洞扫描器一样,OpenVAS 允许我们将扫描结果导出为报告。你可以从“Tasks”控制面板获取任意格式的报告。

CVE

已公开披露的漏洞

  • CVE前缀: 每个CVE数字带有前缀“CVE起初。
  • 年份: 每个年份的第二部分CVE数字包含发现年份(例如,2024)。
  • 任意数字: 最后一部分CVE包含四个或更多任意数字的数字(例如,9374)

CVSS

通用漏洞评分系统

CVSS Score RangeSeverity Levels
0.0-3.9Low
4.0-6.9Medium
7.0-8.9High
9.0-10Critical