使用 Tripwire 监控文件

LinuxBeginner
立即练习

介绍

在本实验中,你将学习如何使用 Tripwire 这一强大的基于主机的入侵检测系统(HIDS)来监控文件完整性。Tripwire 的工作原理是为系统文件创建一个基准数据库,然后定期扫描这些文件以检测任何新增、删除或修改操作。这一过程对于识别未经授权的更改和维护系统安全至关重要。

你将体验整个操作流程,从初始的安全密钥配置到自定义监控策略、创建基准、检测更改以及审查报告。

这是一个引导式实验,提供了逐步指导以帮助你学习和练习。请仔细遵循说明完成每个步骤并获得实践经验。历史数据表明,这是一个初学者级别的实验,完成率为 87%。它获得了学习者 95% 的好评率。

配置 Tripwire 密钥

欢迎来到本实验。为了节省时间,tripwire 软件包已预装在你的环境中。你的首要任务是配置 Tripwire 用于保护其数据库和配置文件的加密密钥。这些密钥可以确保攻击者无法通过篡改 Tripwire 自身的文件来掩盖其行踪。

  1. 首先,通过检查版本来验证 Tripwire 是否已安装。

    tripwire --version

    你应该能看到显示已安装 Tripwire 版本的输出。

    Tripwire(R) 2.4.3.7
    (i686-pc-linux-gnu)
    ...
  2. 接下来,使用 twadmin 手动生成加密密钥。你需要创建一个「站点密钥」(site key)和一个「本地密钥」(local key)。站点密钥用于保护策略和配置文件,而本地密钥用于保护本地机器上的数据库。

    首先,生成站点密钥:

    sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key

    如果密钥文件已存在,系统会提示你是否覆盖。输入 y 并按回车键确认。

    当提示输入站点密钥密码(passphrase)时,输入 labex-password 并按回车。然后再次输入密码进行确认。

    注意:出于安全考虑,密码输入是隐藏的——你在输入时不会看到任何字符,但系统仍在接收你的输入。

  3. 接下来,生成本地密钥:

    sudo twadmin --generate-keys --local-keyfile /etc/tripwire/$(hostname)-local.key

    同样,如果提示覆盖现有密钥文件,输入 y 并按回车。

    当提示输入本地密钥密码时,输入 labex-password 并按回车。再次输入密码确认。请记住,密码输入是隐藏的。

    输入密码后,两个密钥都将生成并保存在 /etc/tripwire/ 目录中。密钥生成过程可能需要几分钟时间。

自定义监控策略

在创建初始数据库(基准)之前,你需要配置 Tripwire 应该监控哪些文件和目录。由于默认策略文件存在兼容性问题,可能会在初始化期间导致段错误(segmentation faults),因此你将创建一个简化的策略,重点关注核心系统文件和你的项目目录。

  1. 首先,为原始策略文件创建一个备份。

    sudo cp /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
  2. 创建一个新的简化策略文件,避开有问题的虚拟文件系统。

    sudo nano /etc/tripwire/twpol-simple.txt
  3. 将以下内容添加到文件中。此简化策略会监控关键系统文件和你的项目目录,同时避开可能导致初始化错误的路径:

    #
    ## Simplified Tripwire Policy File for Lab Environment
    #
    
    @@section GLOBAL
    TWBIN = /usr/sbin;
    TWETC = /etc/tripwire;
    TWVAR = /var/lib/tripwire;
    
    @@section FS
    
    SEC_CRIT      = $(IgnoreNone)-SHa ;
    SEC_BIN       = $(ReadOnly) ;
    SEC_CONFIG    = $(Dynamic) ;
    SEC_LOG       = $(Growing) ;
    SEC_INVARIANT = +tpug ;
    SIG_LOW       = 33 ;
    SIG_MED       = 66 ;
    SIG_HI        = 100 ;
    
    (
      rulename = "Tripwire Binaries",
      severity = $(SIG_HI)
    )
    {
        $(TWBIN)/siggen         -> $(SEC_BIN) ;
        $(TWBIN)/tripwire       -> $(SEC_BIN) ;
        $(TWBIN)/twadmin        -> $(SEC_BIN) ;
        $(TWBIN)/twprint        -> $(SEC_BIN) ;
    }
    
    (
      rulename = "Tripwire Data Files",
      severity = $(SIG_HI)
    )
    {
        $(TWVAR)/$(HOSTNAME).twd    -> $(SEC_CONFIG) -i ;
        $(TWETC)/tw.pol             -> $(SEC_BIN) -i ;
        $(TWETC)/tw.cfg             -> $(SEC_BIN) -i ;
        $(TWETC)/$(HOSTNAME)-local.key  -> $(SEC_BIN) ;
        $(TWETC)/site.key           -> $(SEC_BIN) ;
        $(TWVAR)/report             -> $(SEC_CONFIG) (recurse=0) ;
    }
    
    (
      rulename = "Critical system files",
      severity = $(SIG_HI)
    )
    {
        /bin            -> $(SEC_BIN) ;
        /sbin           -> $(SEC_BIN) ;
        /etc/passwd     -> $(SEC_CONFIG) ;
        /etc/shadow     -> $(SEC_CONFIG) ;
    }
    
    (
      rulename = "Lab Project Files",
      severity = $(SIG_HI)
    )
    {
      /home/labex/project        -> $(SEC_BIN) ;
    }
  4. 保存文件并退出 nano:按 Ctrl + O,然后按回车,最后按 Ctrl + X

  5. 用你的简化版本替换原始策略文件。

    sudo cp /etc/tripwire/twpol-simple.txt /etc/tripwire/twpol.txt

你现在已经创建了一个简化的监控策略,它可以在实验环境中可靠地运行。在下一步中,你将使用此策略创建初始数据库。

初始化 Tripwire 数据库

准备好简化策略后,你现在可以创建 Tripwire 数据库了。该数据库作为系统「已知良好」的基准快照。Tripwire 将把文件的当前状态与此基准进行比较,以检测任何更改。

  1. 首先,使用新的站点密钥重新创建配置文件以确保兼容性。

    sudo twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key /etc/tripwire/twcfg.txt

    系统会提示你输入站点密钥密码。输入 labex-password 并按回车。

  2. 将简化策略文件转换为 Tripwire 使用的已签名二进制格式。

    sudo twadmin --create-polfile /etc/tripwire/twpol.txt

    同样,在提示时输入你的站点密钥密码(labex-password)。

  3. 初始化数据库。此命令会扫描策略中指定的所有文件和目录,并记录它们的加密签名和属性。

    sudo tripwire --init

    系统会提示你输入本地密钥密码。输入 labex-password 并按回车。

  4. 在初始化过程中,你可能会看到关于数据库文件最初不存在的警告:

    #### Warning: File system error.
    #### Filename: /var/lib/tripwire/68b1139d06fc790d9895e107.twd
    #### No such file or directory
    #### Continuing...

    对于第一次初始化,这是正常且符合预期的。该过程将继续并创建数据库文件。

  5. 过程完成后,验证数据库文件是否已创建。

    ls -l /var/lib/tripwire/

    你应该看到一个以机器主机名命名且扩展名为 .twd 的文件(例如 68b1139d06fc790d9895e107.twd)。该文件的存在确认了你的基准数据库已成功建立。

    total 8
    -rw-r--r-- 1 root root 4164 Aug 29 11:00 68b1139d06fc790d9895e107.twd
    drwxr-xr-x 2 root root    6 Nov 11  2021 report

你的 Tripwire 系统现在已使用基准数据库正确初始化。以后运行完整性检查时,将检测到对受监控文件的任何更改。

检测并报告文件更改

既然 Tripwire 已经有了基准,你就可以测试它检测更改的能力了。你将在项目目录中创建一个新文件,看看 Tripwire 如何检测受监控区域的修改。

  1. 首先,在 project 目录中创建一个新文件。这是你在监控策略中明确添加的目录。

    touch ~/project/test_file.txt
  2. 完成更改后,运行完整性检查。Tripwire 将扫描系统并将其与基准数据库进行比较。

    sudo tripwire --check

    系统会提示你输入本地密钥密码。输入 labex-password 并按回车。

  3. 扫描完成后,Tripwire 将生成一份报告并在控制台打印摘要。摘要将突出显示新增或修改的对象。你应该看到类似以下的输出:

    ===============================================================================
    Rule Summary:
    ===============================================================================
    
      Rule Name                       Severity Level    Added    Removed  Modified
      ---------                       --------------    -----    -------  --------
      Tripwire Binaries               100               0        0        0
      Critical system files           100               0        0        0
    * Tripwire Data Files             100               1        0        0
    * Lab Project Files               100               1        0        1
      (/home/labex/project)
    
    Total objects scanned:  16
    Total violations found:  3
    
    ===============================================================================
    Object Summary:
    ===============================================================================
    
    -------------------------------------------------------------------------------
    Rule Name: Lab Project Files (/home/labex/project)
    Severity Level: 100
    -------------------------------------------------------------------------------
    
    Added:
    "/home/labex/project/test_file.txt"
    
    Modified:
    "/home/labex/project"
  4. 报告显示 Tripwire 检测到了:

    • 新增(Added):项目目录中的新文件 test_file.txt
    • 修改(Modified)/home/labex/project 目录本身(因为其内容发生了变化)
    • Tripwire 数据文件(Tripwire Data Files):数据库文件也被标记为「新增」,因为这是初始化后的第一次检查

此输出确认 Tripwire 已成功检测到你所做的文件系统更改。

审查完整性报告

--check 命令提供的摘要是一个很好的概览,但为了进行详细分析,你可以查看完整的报告文件。这些报告以二进制格式存储,必须使用 twprint 工具读取。

  1. 首先,列出报告目录的内容以查找最新报告的名称。报告的文件名中包含时间戳。

    sudo ls -lt /var/lib/tripwire/report/

    输出将列出报告文件,最新的排在最上面。记下其文件名,通常遵循 hostname-YYYYMMDD-HHMMSS.twr 格式。

    total 4
    -rw------- 1 root root 3456 Aug 29 11:02 68b1139d06fc790d9895e107-20250829-110252.twr
  2. 使用 twprint 命令以人类可读的格式查看报告。将 [REPORT_FILENAME] 替换为你从上一个命令中记下的实际文件名。

    sudo twprint --print-report --twrfile /var/lib/tripwire/report/[REPORT_FILENAME]

    例如:

    sudo twprint --print-report --twrfile /var/lib/tripwire/report/68b1139d06fc790d9895e107-20250829-110252.twr
  3. 详细报告显示的信息与摘要相同,但带有额外的元数据:

    Report created on:            Fri Aug 29 11:02:52 2025
    Database last updated on:     Never
    
    Host name:                    68b1139d06fc790d9895e107
    Host IP address:              172.18.0.8
    Policy file used:             /etc/tripwire/tw.pol
    Configuration file used:      /etc/tripwire/tw.cfg
    Database file used:           /var/lib/tripwire/68b1139d06fc790d9895e107.twd
    Command line used:            tripwire --check

    报告提供了关于每项更改的全面细节,包括时间戳、文件属性和校验和。这种级别的细节对于取证分析以了解系统中究竟发生了哪些变化至关重要。

  4. 你还可以通过使用 --verbose 标志来查看带有文件属性的更详细版本:

    sudo twprint --print-report --verbose --twrfile /var/lib/tripwire/report/[REPORT_FILENAME]

    这将显示额外的信息,如文件权限、所有权、大小以及针对每个检测到的更改的各种加密哈希值。

了解如何阅读这些报告对于系统管理员调查潜在的安全事件和维护系统完整性至关重要。

总结

在本实验中,你学习了使用 Tripwire 进行文件完整性监控的基础知识。你成功配置了 Tripwire 的安全密钥,自定义了监控策略以包含特定的项目目录,并建立了系统文件状态的基准数据库。

此外,你还通过故意修改文件、运行完整性检查以检测这些更改以及分析详细报告来了解变更内容,练习了系统管理员的核心工作流程。这些技能是维护系统安全和检测未经授权活动的基础。