如何使用 Tripwire 检测 Ubuntu VPS 上的服务器入侵行为

金钱(警告)

** 状态:** 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。

** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。

介绍


当管理在线服务器时,安全性是一个非常复杂的问题,虽然可以配置防火墙、 fail2ban 策略、安全服务和锁定应用程序,但很难确定是否有效地阻止了每个攻击。

基于主机的入侵检测系统(HIDS)通过收集有关您的计算机文件系统和配置的详细信息而工作,然后存储这些信息以参考并验证系统的当前状态。

Linux 上的一个受欢迎的基于主机的入侵检测系统是 tripwire. 该软件可以跟踪许多不同的文件系统数据点,以检测是否发生了未经授权的更改。

在本文中,我们将讨论如何在 Ubuntu 12.04 安装上安装和配置 tripwire. 由于入侵检测系统的性质,在创建服务器后不久就最好通过本指南运行,以便您可以验证文件系统是否干净。

安装Tripwire


幸运的是,Tripwire可以在Ubuntu的默认存储库中找到,我们可以通过键入apt-get来安装它:

1sudo apt-get update
2sudo apt-get install tripwire

此安装将通过相当小的配置所需的包。

首先,它将将被拖入的邮件应用程序配置为依赖性. 如果您想配置电子邮件通知,请选择互联网网站

它会问你是否想在安装过程中选择密码短语。 选择对这两个提示。 它会问它是否可以重建配置文件。 选择。 它会问有关策略文件的类似问题。 再次回答

接下来,您将被要求选择并确认网站密钥密码。Tripwire 使用两个密钥来保护其配置文件。

  • site key: 此密钥用于保护配置文件. 我们需要确保配置文件没有被修改,否则我们的整个检测系统无法被信任. 由于相同的配置文件可以用于多个服务器,此密钥可以用于服务器。
  • 本地密钥: 此密钥用于每个机器运行二进制。

您将首先选择并确认网站密钥的密码,然后为本地密钥。

初始化数据库


安装后,您必须初始化和配置您的安装. 与大多数安全程序一样,Tripwire配有通用但严格的默认值,可能需要为您的特定安装精心调整。

首先,如果您在安装过程中没有选择来创建策略文件,您可以通过发出命令现在这样做:

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

您将被提示使用您之前配置的网站密码。

这会从我们在 /etc/tripwire/ 目录中指定的简单文本中创建一个加密的策略文件。

现在我们可以初始化 tripwire 将使用的数据库来验证我们的系统,这使用了我们刚刚启动的策略文件,并检查了内部指定的点。

由于这个文件尚未针对我们的系统定制,我们将有很多警告,假阳性和错误. 我们将使用这些作为一个参考,在一瞬间调整我们的配置文件。

启动数据库的基本方法是运行:

1sudo tripwire --init

这将创建我们的数据库文件,并抱怨我们必须在配置中调整的东西。

由于我们希望保存结果以通知我们的配置决策,我们可以捕捉它提到文件的任何实例,并将其放入 tripwire 配置目录中的文件中。

1sudo sh -c 'tripwire --check | grep Filename > test_results'

如果我们查看这个文件,我们应该看到类似于此的条目:

1less /etc/tripwire/test_results

1Filename: /etc/rc.boot
2Filename: /root/mail
3Filename: /root/Mail
4Filename: /root/.xsession-errors
5. . .

配置策略文件以匹配您的系统


现在我们有一个关闭 tripwire的文件列表,我们可以通过我们的策略文件,并编辑它来摆脱这些假阳性。

使用 root 权限在编辑器中打开简单文本策略:

1sudo nano /etc/tripwire/twpol.txt

搜索在 test_results 文件中返回的每个文件. 评论你发现匹配的所有行。

启动脚本部分,你应该评论/etc/rc.boot一行,因为这在Ubuntu系统中不存在:

(
  rulename = "Boot Scripts",
  severity = $(SIG_HI)
)
{
        /etc/init.d             -> $(SEC_BIN) ;
        #/etc/rc.boot            -> $(SEC_BIN) ;
        /etc/rcS.d              -> $(SEC_BIN) ;

在我的系统上需要评论的/root主目录中有很多文件. 任何在你的系统上不存在的东西都应该评论:

(
  rulename = "Root config files",
  severity = 100
)
{
        /root                           -> $(SEC_CRIT) ; # Catch all additions to /root
        #/root/mail                     -> $(SEC_CONFIG) ;
        #/root/Mail                     -> $(SEC_CONFIG) ;
        #/root/.xsession-errors         -> $(SEC_CONFIG) ;
        #/root/.xauth                   -> $(SEC_CONFIG) ;
        #/root/.tcshrc                  -> $(SEC_CONFIG) ;
        #/root/.sawfish                 -> $(SEC_CONFIG) ;
        #/root/.pinerc                  -> $(SEC_CONFIG) ;
        #/root/.mc                      -> $(SEC_CONFIG) ;
        #/root/.gnome_private           -> $(SEC_CONFIG) ;
        #/root/.gnome-desktop           -> $(SEC_CONFIG) ;
        #/root/.gnome                   -> $(SEC_CONFIG) ;
        #/root/.esd_auth                        -> $(SEC_CONFIG) ;
        #/root/.elm                     -> $(SEC_CONFIG) ;
        #/root/.cshrc                   -> $(SEC_CONFIG) ;
        /root/.bashrc                   -> $(SEC_CONFIG) ;
        #/root/.bash_profile            -> $(SEC_CONFIG) ;
        #/root/.bash_logout             -> $(SEC_CONFIG) ;
        /root/.bash_history             -> $(SEC_CONFIG) ;
        #/root/.amandahosts             -> $(SEC_CONFIG) ;
        #/root/.addressbook.lu          -> $(SEC_CONFIG) ;
        #/root/.addressbook             -> $(SEC_CONFIG) ;
        #/root/.Xresources              -> $(SEC_CONFIG) ;
        #/root/.Xauthority              -> $(SEC_CONFIG) -i ; # Changes Inode number on login
        #/root/.ICEauthority                -> $(SEC_CONFIG) ;
}

我检查的最后一部分是抱怨在/proc文件系统中的文件描述器. 这些文件不断变化,所以如果我们把配置留下来,会经常触发虚假阳性。

设备和内核信息部分中,您可以看到/proc文件系统列为要检查的。

1(
2  rulename = "Devices & Kernel information",
3  severity = $(SIG_HI),
4)
5{
6        /dev            -> $(Device) ;
7        /proc           -> $(Device) ;
8}

相反,我们会删除此规格,并为我们想要检查的 /proc 下的所有目录添加配置选项:

{
        /dev                    -> $(Device) ;
        #/proc                  -> $(Device) ;
        /proc/devices           -> $(Device) ;
        /proc/net               -> $(Device) ;
        /proc/tty               -> $(Device) ;
        /proc/sys               -> $(Device) ;
        /proc/cpuinfo           -> $(Device) ;
        /proc/modules           -> $(Device) ;
        /proc/mounts            -> $(Device) ;
        /proc/dma               -> $(Device) ;
        /proc/filesystems       -> $(Device) ;
        /proc/interrupts        -> $(Device) ;
        /proc/ioports           -> $(Device) ;
        /proc/scsi              -> $(Device) ;
        /proc/kcore             -> $(Device) ;
        /proc/self              -> $(Device) ;
        /proc/kmsg              -> $(Device) ;
        /proc/stat              -> $(Device) ;
        /proc/loadavg           -> $(Device) ;
        /proc/uptime            -> $(Device) ;
        /proc/locks             -> $(Device) ;
        /proc/meminfo           -> $(Device) ;
        /proc/misc              -> $(Device) ;
}

虽然我们在这个部分的文件,我们也想做一些与/dev/pts文件系统。Tripwire不会默认地检查这个位置,因为它被告知检查/dev,而/dev/pts是在一个单独的文件系统,它不会进入除非指定。

{
        /dev                    -> $(Device) ;
        /dev/pts                -> $(Device) ;
        #/proc                  -> $(Device) ;
        /proc/devices           -> $(Device) ;
        /proc/net               -> $(Device) ;
        /proc/tty               -> $(Device) ;
        . . .

我们会评论的最后一件事是/var/run/var/lock的行,以便我们的系统不会标志服务的正常文件系统变化:

(
  rulename = "System boot changes",
  severity = $(SIG_HI)
)
{
        #/var/lock              -> $(SEC_CONFIG) ;
        #/var/run               -> $(SEC_CONFIG) ; # daemon PIDs
        /var/log                -> $(SEC_CONFIG) ;
}

保存并关闭文件,当你完成编辑。

现在我们的文件已经配置了,我们需要通过重新创建 tripwire 实际阅读的加密策略文件来实现它:

1sudo twadmin -m P /etc/tripwire/twpol.txt

创建后,我们必须重新启动数据库以执行我们的策略:

1sudo tripwire --init

1Please enter your local passphrase:
2Parsing policy file: /etc/tripwire/tw.pol
3Generating the database...
4*** Processing Unix File System ***
5Wrote database file: /var/lib/tripwire/tripit.twd
6The database was successfully generated.

如果仍然有警告,您应该继续编辑您的 /etc/tripwire/twpol.txt 文件,直到它们消失。

检查配置


如果您的数据库初始化没有抱怨任何文件,那么您的配置应该匹配您的系统,但我们应该运行一个检查,看看 tripwire 报告看起来是什么样子,如果真的没有警告:

一个检查的基本语法是:

1sudo tripwire --check

您应该在屏幕上看到一份报告输出,说明您的系统没有发现任何错误或更改。

一旦完成,您可以相当自信,您的配置是正确的. 我们应该清理我们的文件一点,从我们的系统中删除敏感信息。

我们可以删除我们创建的 test_results 文件:

1sudo rm /etc/tripwire/test_results

我们可以做的另一个事情是删除实际的简单文本配置文件,我们可以安全地做到这一点,因为它们可以通过我们的密码从加密文件中生成。

我们所要做的就是将加密文件传送到twadmin,就像我们要生成加密版本一样。

1sudo sh -c 'twadmin --print-polfile > /etc/tripwire/twpol.txt'

现在通过将文本版本移动到备份位置,然后重新创建它来测试:

1sudo mv /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
2sudo sh -c 'twadmin --print-polfile > /etc/tripwire/twpol.txt'

如果它正常工作,您现在可以安全地删除简单文本文件:

1sudo rm /etc/tripwire/twpol.txt
2sudo rm /etc/tripwire/twpol.txt.bak

设置电子邮件通知


我们将配置 tripwire 每天运行,并实施自动通知,在此过程中,当我们对我们的系统进行更改时,我们可以测试如何更新数据库。

我们将使用邮件命令将我们的通知发送到我们的电子邮件地址. 此信息目前尚未安装在我们的系统上,因此我们将不得不从存储库中下载。

这给了我们一个很好的机会,看看Tripwire如何对系统的变化做出反应。

安装此类文件:

1sudo apt-get install mailutils

现在我们已经安装了这个命令,让我们对我们的系统发送 tripwire 报告的能力进行测试. 这个报告也将有警告和更改,因为我们刚刚安装了新的软件而没有告诉 tripwire:

sudo tripwire --check | mail -s "Tripwire report for `uname -n`" [email protected]

您应该很快在电子邮件中收到一份报告,详细介绍您刚刚安装的新邮件软件,以便发送消息! 这很好。这意味着 tripwire正在收集文件系统的更改,我们的邮件软件也在工作。

我们现在应该通过进行交互式检查来更新数据库来对我们所做的软件更改进行OK

我们可以通过键入这样做:

1sudo tripwire --check --interactive

这将运行与正常一样的测试,但最终,而不是将报告输出到屏幕上,它被复制到文本文件并使用默认编辑器打开。

事实上,在我的机器上,生成的报告长达2275行.这种信息量在真正的安全问题的情况下非常有帮助,但在我们的情况下,它通常可能对大多数人来说并不太有趣。

在一些介绍信息之后,您应该看到每个添加或修改的文件的几个行检查框:

 1Rule Name: Other binaries (/usr/sbin)
 2Severity Level: 66
 3-------------------------------------------------------------------------------
 4
 5Remove the "x" from the adjacent box to prevent updating the database
 6with the new values for this object.
 7
 8Added:
 9[x] "/usr/sbin/maidag"
10
11Modified:
12[x] "/usr/sbin"
13. . .

这些检查框表明您想要更新数据库以允许这些更改,您应该搜索每个包含x的框,并验证这些是您所做的更改,或者您没事的。

如果你对一个更改不满意,你可以从框中删除x,并且该文件不会在数据库中更新,这将导致该文件在下一次运行时仍然标记 tripwire。

一旦你决定哪个文件的更改是好的,你可以保存和关闭文件。

在此时,它将要求您的本地密码,以便 tripwire 更新其数据库文件。

如果我们接受了所有更改,如果我们重新运行这个命令,报告现在应该更短,没有列出任何更改。

自动化Tripwire与Cron


现在我们已经验证了所有这些功能都是手动操作的,我们可以设置一个 cron 任务,每天早上执行 tripwire 检查。

我们将使用 root 的 crontab,因为系统 cronjob 的编辑可以通过系统更新被删除。

检查 root 是否已经有 crontab 通过发出此命令:

1sudo crontab -l

如果有 crontab,您应该将其导入到文件中以备份:

1sudo sh -c 'crontab -l > crontab.bad'

之后,我们可以通过键入编辑 crontab:

1sudo crontab -e

如果这是你第一次运行crontab,它会问你想要使用哪个编辑器. 如果你没有对另一个编辑器的偏好,nano通常是一个安全的选择。

之后,您将被带到一个文件中,我们可以自动化 tripwire. 由于我们每天都会运行 tripwire,我们只需要决定我们想要它运行的时间。

我们需要使用的格式是min hour * * * 命令。我们想要使用的命令是我们以前用来发送我们的报告的相同格式。

为了让Tripwire每天下午3点30分运行,我们可以在我们的文件中放置这样的行:

30 3 * * * /usr/sbin/tripwire --check | mail -s "Tripwire report for `uname -n`" [email protected]

您可以根据自己的喜好调整。

结论


您现在应该有一个自动入侵检测系统,它会向您发送有关文件系统变化的报告. 您应该定期检查电子邮件的报告,并在发现变化时采取行动,无论是在更新 tripwire 数据库以修复更改,还是调查可疑活动。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus