介绍
在管理在线服务器时,安全是一个非常复杂的问题。虽然可以配置防火墙,fail2ban策略,安全服务和锁定应用程序,但很难确定您是否有效阻止了每个攻击。 基于主机的入侵检测系统(HIDS)通过收集有关计算机文件系统和配置的详细信息来工作。然后它存储此信息以引用和验证系统的当前状态。如果在已知良好状态和当前状态之间发现更改,则可能是您的安全已被破坏的迹象。 在Linux上流行的基于主机的入侵检测系统的 绊索 。该软件可以跟踪许多不同的文件系统数据点,以便检测是否发生了未授权的更改。 在本文中,我们将讨论如何在Ubuntu 12.04安装上安装和配置tripwire。由于入侵检测系统的性质,最好在创建服务器后立即通过本指南,以便您可以验证文件系统是否干净。安装Tripwire
幸运的是,tripwire可以在Ubuntu的默认存储库中找到。 我们可以安装它apt-get
通过键入:
sudo apt-get update
sudo apt-get install tripwire
此安装将通过相当多的配置所需的软件包运行。 首先,它将配置作为依赖关系拉入的邮件应用程序。如果要配置电子邮件通知,请选择“互联网站点”。 它会询问您是否要在安装过程中选择密码。对这两个提示都选择“是”。它会询问是否可以重建配置文件。选择“是”。它会问一个类似的问题关于策略文件。再次,回答“是”。 接下来,您将被要求选择并确认网站密钥密码。 Tripwire使用两个密钥来保护其配置文件。
- 网站键 :此键是用来固定配置文件。我们需要确保配置文件不被修改,否则我们的整个检测系统都不能被信任。由于相同的配置文件可以用于多个服务器,因此可以跨服务器使用此密钥。
- 地方重点 :该键用于每台机器上运行的二进制文件。这是必要的,以确保我们的二进制文件不经未经我们同意运行。
初始化数据库
安装后,必须初始化和配置安装。与大多数安全程序一样,tripwire附带通用但严格的默认值,可能需要对您的特定安装进行微调。 首先,如果您在安装期间没有选择“是”来创建策略文件,则可以通过发出以下命令来执行此操作:sudo twadmin --create-polfile /etc/tripwire/twpol.txt
系统将提示您输入之前配置的网站密码。 这将创建从我们在指定的纯文本之一的加密策略文件
/etc/tripwire/
目录下。这个加密文件是tripwire在运行其检查时实际读取的。 我们现在可以初始化tripwire将用来验证我们的系统的数据库。这使用我们刚刚启动的策略文件,并检查其中指定的点。 因为这个文件还没有为我们的系统量身定做,所以我们会有很多警告,误报和错误。我们将使用这些作为参考,稍微调整我们的配置文件。 初始化数据库的基本方法是运行:
sudo tripwire --init
这将创建我们的数据库文件,并抱怨我们必须在配置中调整的事情。 因为我们想保存结果以通知我们的配置决定,我们可以抓取任何提到文件的实例,并将其放在tripwire配置目录中的文件中。我们可以运行检查,并将列入一个名为文件
test_results
在我们的绊索config目录:
sudo sh -c 'tripwire --check | grep Filename > test_results'
如果我们查看此文件,我们应该看到如下所示的条目:
less /etc/tripwire/test_results
Filename: /etc/rc.boot
Filename: /root/mail
Filename: /root/Mail
Filename: /root/.xsession-errors
. . .
配置策略文件以匹配系统
现在我们有一个列出tripwire的文件列表,我们可以浏览我们的策略文件并编辑它以摆脱这些误报。 使用root权限在编辑器中打开纯文本策略:sudo 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
文件系统被列为进行检查。
(
rulename = "Devices & Kernel information",
severity = $(SIG_HI),
)
{
/dev -> $(Device) ;
/proc -> $(Device) ;
}
但是,这将检查其下的每个文件。我们不是特别想要的。相反,我们将删除此规范,并添加配置选项下的所有目录中
/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
是在一个单独的文件系统,除非指定它不会进入。要让tripwire检查这一点,我们可以在这里明确命名:
{ /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实际读取的加密策略文件来实现它:
sudo twadmin -m P /etc/tripwire/twpol.txt
创建之后,我们必须重新初始化数据库以实现我们的策略:
sudo tripwire --init
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/tripit.twd
The database was successfully generated.
你早些时候收到的所有警告都应该消失了。如果还有警告,你应该继续编辑
/etc/tripwire/twpol.txt
文件,直到他们都不见了。
验证配置
如果你的数据库初始化没有抱怨任何文件,那么你的配置应该匹配你的系统在这一点上。但是我们应该检查一下,看看tripwire报告是什么样的,如果没有真正的警告: 检查的基本语法是:sudo tripwire --check
您应该会看到一个报告输出到您的屏幕,指定在您的系统上没有发现错误或更改。 一旦完成,您可以相当确信您的配置是正确的。我们应该清理我们的文件,以从我们的系统中删除敏感信息。 我们可以删除
test_results
我们创建的文件:
sudo rm /etc/tripwire/test_results
我们可以做的另一件事是删除实际的纯文本配置文件。我们可以安全地做到这一点,因为它们可以使用我们的密码从加密文件中随意生成。 我们要重新生成纯文本文件所需要做的就是将encripted文件传递给twadmin,这与我们生成加密版本的方式大致相同。我们只是管道它到一个纯文本文件:
sudo sh -c 'twadmin --print-polfile > /etc/tripwire/twpol.txt'
现在,通过将文本版本移动到备份位置进行测试,然后重新创建:
sudo mv /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
sudo sh -c 'twadmin --print-polfile > /etc/tripwire/twpol.txt'
如果它工作正常,您现在可以安全地删除纯文本文件:
sudo rm /etc/tripwire/twpol.txt
sudo rm /etc/tripwire/twpol.txt.bak
设置电子邮件通知
我们将配置tripwire每天运行,并实施自动通知。在此过程中,我们可以测试当我们更改系统时如何更新数据库。 我们将使用mail
命令给我们的通知邮件到我们的邮箱。这当前没有安装在我们的系统上,所以我们必须从存储库下载它。 这给了我们一个很好的机会,看看tripwire如何对系统的变化做出反应。 安装这样的文件:
sudo apt-get install mailutils
现在我们已经安装了该命令,让我们测试我们的系统发出tripwire报告的能力。此报告也将有警告和更改,因为我们刚刚安装新软件没有告诉tripwire:
sudo tripwire --check | mail -s "Tripwire report for `uname -n`" your_email@domain.com您应该在您的电子邮件中收到一个报告,其中包含您刚刚安装的新邮件软件的详细信息,以便发送邮件!这是好的。这意味着tripwire正在拾取文件系统中的更改,我们的邮件软件也正常工作。 我们现在应该“okay”我们做的软件更改,通过交互式检查更新数据库。 我们可以通过键入:
sudo tripwire --check --interactive
这将运行与正常相同的测试,但最后,而不是输出报告到屏幕,它被复制到一个文本文件,并使用默认编辑器打开。 这份报告包含了每个文件的变化。事实上,在我的机器上,生成的报告是2,275行长。这个数量的信息在真正的安全问题的情况下是非常有用的,但在我们的情况下,它通常可能不是太有趣的大部分。 重要的部分是靠近顶部。在介绍一些信息后,您应该看到一些带有复选框的行,每个添加或修改的文件:
Rule Name: Other binaries (/usr/sbin)
Severity Level: 66
-------------------------------------------------------------------------------
Remove the "x" from the adjacent box to prevent updating the database
with the new values for this object.
Added:
[x] "/usr/sbin/maidag"
Modified:
[x] "/usr/sbin"
. . .
这些复选框表示您要更新数据库以允许这些更改。您应该搜索每个包含“x”的框,并验证这些是您所做的更改或可以更改。 如果您不满意更改,您可以从框中删除“x”,该文件将不会在数据库中更新。这将导致此文件在下次运行时仍然标记tripwire。 在确定哪些文件更改正常后,您可以保存并关闭文件。 此时,它将要求您的本地密码,以便tripwire可以更新其数据库文件。 如果我们接受所有的更改,如果我们重新运行此命令,报告应该现在更短,并列出没有更改。
使用Cron自动化Tripwire
现在我们已经验证所有这些功能都是手动工作的,我们可以设置一个cron作业,每天早上执行一次tripwire检查。 我们将使用root的crontab,因为对系统cronjob的编辑可能会被系统更新擦除。 通过发出以下命令检查root是否已有crontab:sudo crontab -l
如果crontab存在,你应该管道它到一个文件,以备份它:
sudo sh -c 'crontab -l > crontab.bad'
之后,我们可以通过键入以下命令来编辑crontab:
sudo crontab -e
如果这是你第一次运行crontab,它会问你想要使用哪个编辑器。如果您没有其他编辑器的偏好,nano通常是一个安全的选择。 然后,您将被带到一个文件,我们可以自动化tripwire。由于我们将每天运行tripwire,我们只需要决定我们想要什么时间运行。通常,服务在非高峰时间运行,以不中断繁忙时间。 我们需要使用的格式
min hour * * * command
。我们要使用的命令是我们以前用来邮寄我们的报告的命令。我们不需要使用sudo,因为这将以root身份运行。 要让tripwire每天上午3:30运行,我们可以在我们的文件中放置一行:
30 3 * * * /usr/sbin/tripwire --check | mail -s "Tripwire report for `uname -n`" your_email@domain.com您可以根据自己的偏好进行调整。
结论
您现在应该有一个自动入侵检测系统,它会向您发送有关文件系统更改的报告。您应定期查看电子邮件报告,并在检测到更改时采取措施,无论是更新tripwire数据库以确保更改,还是调查可疑活动。
作者:Justin Ellingwood