[IDS] 安装 Tripwire 并将文件差异检测结果通知 Chatwork (Ubuntu 22.0.4)

您好,
来自零信任
系统解决方案部门的河合。
新年快乐!
希望今年也能继续努力工作。
这次,我想使用开源的托管式入侵检测系统“ Tripwire ”,以便在检测到任何文件篡改时自动通知Chatwork。这似乎
非常实用,因为服务器上那些不常被修改的文件和目录的变化很难被注意到。虽然全面部署比较困难,但实现起来并不难。
什么是 Tripwire?
Tripwire是一款入侵检测 (IDS) 工具,更准确地说,是一款文件篡改检测工具,它可以监控预定义目录中的文件,并允许您查看和接收检测结果通知。它是
Tripwire 公司的产品,提供免费的开源软件 (OSS) 版本和付费版本。这次我们将使用开源软件版本(该版本不具备入侵防御系统 (IPS) 功能)。
手册页: https://linux.die.net/man/8/tripwire
安装
■ 验证环境
Ubuntu 24.04 LTS Tripwire 2.4.3.7.0 Python 3.12.3 # 用于通知
■安装和初始设置
$ sudo apt update $ sudo apt install tripwire
安装过程就这么简单。
安装过程中会显示一些提示,请选择合适的设置并继续。
*此方法假设您使用的是纯本地主机环境。
▼ 选择用途。这次我们选择了“仅限本地” ,请选择
“互联网站点”
▼ 通知邮件地址的域名。如果您没有特定的域名,example.com 。本次我们暂不使用此域名。

▼ 出于安全考虑,请为 Tripwire 创建密钥对。选择
“是” (详情请参阅 twfiles(5): https://linux.die.net/man/5/twfiles )


▼ 初始配置,是


▼ 输入密码(建议记下来)。输入两次以确认。

▼ 安装完成后,

请继续进行策略文件设置。
策略设置
“ twpol.txt ”是策略文件,我们将对其进行编辑。
为了安全起见,请事先做好备份。
$sudo cp /etc/tripwire/twpol.txt /etc/tripwire/twpol_org.txt $sudo nano /etc/tripwire/twpol.txt
由于检测内容较长我们仅针对
“/var/www/html”及以下目录。 *如果您想使用与本文相同的内容,请复制粘贴以下内容。
# 全局变量定义 @@section GLOBAL TWBIN = /usr/sbin; TWETC = /etc/tripwire; TWVAR = /var/lib/tripwire; # 文件系统定义 @@section FS # Tripwire 二进制文件 ( rulename = "Tripwire 二进制文件", severity = 100 ) { $(TWBIN)/siggen -> $(ReadOnly) ; $(TWBIN)/tripwire -> $(ReadOnly) ; $(TWBIN)/twadmin -> $(ReadOnly) ; $(TWBIN)/twprint -> $(ReadOnly) ; } # Apache 文档根目录 ( rulename = "Apache 文档根目录", severity = 100 ) { /var/www/html/ -> $(IgnoreNone)-SHa; } # 策略文件结束
完成策略编辑后,应用并初始化该策略。
输入您在上方初始设置提示中设置的密码短语。
如果显示以下内容,则表示设置正确。
$ sudo twadmin --create-polfile /etc/tripwire/twpol.txt 请输入您的站点密码: 已写入策略文件:/etc/tripwire/tw.pol $ sudo tripwire --init 请输入您的本地密码: 正在解析策略文件:/etc/tripwire/tw.pol 正在生成数据库... *** 正在处理 Unix 文件系统 *** 已写入数据库文件:/var/lib/tripwire/hamchan.twd 数据库已成功生成。.
基本设置完成。
我们来检查一下。
$ sudo tripwire --check 正在解析策略文件:/etc/tripwire/tw.pol *** 正在处理 Unix 文件系统 *** 正在执行完整性检查... 已写入报告文件:/var/lib/tripwire/report/hamcha-20241025-135438.twr 开源 Tripwire(R) 2.4.3.7 完整性检查报告 报告生成者:root 报告创建时间:2024年10月25日 星期五 下午1:54:38 JST 数据库上次更新时间:从未 =================================================================================== 报告摘要: ==================================================================================== 主机名:hamchan 主机 IP 地址:127.0.1.1 主机 ID:无 使用的策略文件:/etc/tripwire/tw.pol 使用的配置文件:/etc/tripwire/tw.cfg 使用的数据库文件:/var/lib/tripwire/hamchan.twd 使用的命令行:tripwire --check ======================================================================================= 规则摘要: ========================================================================================================================== ------------------------------------------------------------------------------- 部分:Unix 文件系统 ------------------------------------------------------------------------------- 规则名称 严重级别 添加 删除 修改 --------- -------------- ----- ------- -------- Tripwire Binaries 100 0 0 0 Apache Document Root 100 0 0 0 (/var/www/html) 扫描对象总数:7 发现违规总数:0 ===================================================================================== 对象摘要: ==================================================================================== ------------------------------------------------------------------------------ # 章节:Unix 文件系统 ------------------------------------------------------------------------------ 无违规。 =================================================================================== 错误报告: ==================================================================================== 无错误 ------------------------------------------------------------------------------ *** 报告结束 *** 开源 Tripwire 2.4 部分版权归 Tripwire, Inc. 所有,2000-2018。Tripwire 是 Tripwire, Inc. 的注册商标。本软件不提供任何担保;详情请使用 --version 参数。本软件为自由软件,仅在特定条件下方可重新分发或修改;详情请参阅“复制”部分。保留所有权利。完整性检查完成。.
系统将输出一份报告,汇总扫描对象的数量等信息。
接下来,我们尝试检测文件差异。
检测差异
首先,在下面的 HTML 文件中输入“test”并进行编辑。
须藤纳米 /var/www/html/test.html
当我再次运行扫描时, 已修改部分显示了已更改的目录和文件的摘要
# 摘录 ======================================================================================= 规则摘要: ================================================================================================================================== ------------------------------------------------------------------------------- 章节:Unix 文件系统 ------------------------------------------------------------------------------- 规则名称 严重级别 添加 删除 修改 --------- -------------- ----- ------- -------- Tripwire 二进制文件 100 0 0 0 * Apache 文档根目录 100 0 0 2 (/var/www/html) 扫描对象总数:7 发现违规总数:2 ============================================================================= 对象摘要: ===================================================================================== --------------------------------------------------------------------------- # 部分:Unix 文件系统 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ 规则名称:Apache 文档根目录 (/var/www/html) 严重级别:100 ------------------------------------------------------------------------------- 已修改:"/var/www/html" "/var/www/html/test.html"
在这种情况下,我们可以看到
/var/www/html 目录下的 test.html 文件被修改了另外,如果文件所有者或权限发生更改,也会被检测到。
接下来,我们创建一个新文件。
sudo touch /var/www/html/ransom.sh
再次运行扫描。
--------------------------------------------------------------------------------- 章节:Unix 文件系统 --------------------------------------------------------------------------------- 规则名称 严重级别 添加 删除 修改 -------- -------------- ----- ------- ------- Tripwire 二进制文件 100 0 0 0 * Apache 文档根目录 100 1 0 2 (/var/www/html) 扫描对象总数:8 发现违规总数:3 =================================================================================== 对象摘要: ================================================================================== --------------------------------------------------------------------------- # 部分:Unix 文件系统 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ 规则名称:Apache 文档根目录 (/var/www/html) 严重级别:100 ------------------------------------------------------------------------------- 添加:"/var/www/html/ransom.sh" 修改:"/var/www/html" "/var/www/html/test.html"
“已添加”字段值为 1,因此我们可以看到
/var/www/html/ransom.sh ”文件已被创建查看报告后,可以立即发现,一个意外的文件被放置了。真是方便。
计划执行和报告通知
Tripwire 具有电子邮件通知功能,但这次我想向您展示如何通知 Chatwork。
首先,设置一个定时任务(cron job)。
常规检查会输出一个二进制报告,请将其保存为文本文件并保存到您选择的路径。
您可以根据您的环境和用途设置执行间隔。
sudo crontab -e 0 0 * * * /usr/sbin/tripwire --check > /home/hamchan/$(date +\%Y\%m\%d)_report.txt # *输出时会添加日期(yyyymmdd)。 $ echo $(date) Fri Oct 25 02:47:26 PM JST 2024 $ echo $(date +\%Y\%m\%d) 20241025
接下来,我们将创建用于 Chatwork 通知的 Python 代码。
import requests import subprocess import os from glob import glob # Chatwork API 设置 API_TOKEN = 'xxxxxxxx' # Chatwork API 令牌 ROOM_ID = 'xxxxxxxx' # 目标群组 ID ENDPOINT = f'https://api.chatwork.com/v2/rooms/{ROOM_ID}/messages' HEADERS = { 'X-ChatworkToken': API_TOKEN, } # 返回最新 Tripwire 报告文件路径的函数 def get_latest_tripwire_report(): report_files = glob('/home/hamchan/*_report.txt') if report_files: return max(report_files, key=os.path.getmtime) # 获取最新文件 return None # 读取文件并将其作为文本返回的函数 def get_report_content(report_path): with open(report_path, 'r', encoding='utf-8') as file: return file.read() # 将文件内容以文本形式返回 # 将文件名和路径发送到 Chatwork def send_chatwork_message(message): payload = {'body': message} response = requests.post(ENDPOINT, headers=HEADERS, data=payload) if response.status_code == 200: print('通知已发送到 Chatwork。') else: print(f'通知失败:{response.status_code}, {response.text}') if __name__ == '__main__': latest_report_path = get_latest_tripwire_report() if latest_report_path: report_content = get_report_content(latest_report_path) # 获取报告内容 send_chatwork_message( f"[info][title]Tripwire 报告已保存到[/title]\n" f"{latest_report_path}[/info]\n\n" f"\n{report_content}" ) else: send_chatwork_message("未找到最近的 Tripwire 报告。")
我把它设置成了一个定时任务。
为了测试,我设置成在 Tripwire 报告输出后 2 分钟发送通知。
sudo crontab -e 2 0 * * * /usr/bin/python3 /home/hamchan/tripwire_test/chatwork_notification.py
▼ 通知内容

如下。
现在,即使放置了可疑文件,您也能收到通知。我认为这比完全不在文件夹中放置任何文件要安全得多。
请尝试一下。
完全的
4