系统安全防护:工具与策略深度解析
在当今数字化时代,系统安全至关重要。黑客攻击手段层出不穷,为保障系统安全,我们需定期扫描磁盘,寻找新的 setuid 程序。黑客攻破系统后,有时会创建私有 setuid 外壳或实用程序,以便再次访问。我们可以使用
find
命令来查找此类文件,示例脚本如下:
/usr/bin/find / -user root -perm -4000 -print |
/bin/mail -s "Setuid root files" netadmin
此脚本会将所有设置为 root 的 setuid 文件列表发送给 “netadmin” 用户。实际使用时,可能需要更明确地指定要搜索的文件系统。
chroot 的有效使用
chroot
系统调用可将进程限制在特定目录中,禁止访问该目录之外或之上的文件,从而在进程被黑客攻破时限制其造成的损害。
chroot
命令是对该系统调用的简单封装,一些对安全敏感的守护进程内置了
chroot
支持,只需在配置文件中开启此模式。
不过,安全专家有时不赞成将
chroot
用于安全目的,因为使用不当或误解时,它可能会给管理员一种虚假的安全感。部分管理员会用
chroot
为自己不进行其他安全措施(如定期软件更新和严密安全监控)找借口。但这并非否定
chroot
,就像网络防火墙也有类似争议,但很少有专家会建议移除网络中的数据包过滤器。正确使用
chroot
并将其作为补充保护层,它仍是安全防护的有力工具。
以下是合理使用
chroot
的场景:
- 想在受限文件系统子树中运行非 root 守护进程(如 Apache 或 BIND),只要不存在权限提升漏洞,即使守护进程被攻破,攻击者也会被限制在子树内。
- 想将远程用户限制在特定的文件和命令集内。
但要让
chroot
在这些场景中发挥保护作用,需满足以下条件:
-
chroot
监狱中的所有进程都不以 root 权限运行,以 root 权限运行的进程总有能力突破
chroot
监狱。
- 不在监狱内使用 setuid root 执行。
-
chroot
环境应是最新且最小化的,仅包含支持预期任务所需的可执行文件、库和配置文件。
构建合适的
chroot
环境可能比较棘手,JailKit(olivier.sessink.nl/jailkit)包含多个脚本,可帮助创建
chroot
环境。
安全强力工具
有一些免费工具可自动化完成前面提到的一些耗时任务。
Nmap:网络端口扫描器
Nmap 是一款网络端口扫描器,主要功能是检查一组目标主机,查看哪些 TCP 和 UDP 端口有服务器在监听。由于大多数网络服务与“知名”端口号相关联,通过此信息能了解很多关于机器运行的软件。
运行 Nmap 可了解系统在外部攻击者眼中的样子。例如,在一个生产 Ubuntu 系统上运行的报告如下:
ubuntu$ nmap -sT ubuntu.booklab.atrust.com
Starting Nmap 4.20 ( http://insecure.org ) at 2009-11-01 12:31 MST
Interesting ports on ubuntu.booklab.atrust.com (192.168.20.25):
Not shown: 1691 closed ports
PORT STATE SERVICE
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
Nmap finished: 1 IP address (1 host up) scanned in 0.186 seconds
默认情况下,nmap 包含
-sT
参数,以正常方式尝试连接目标主机上的每个 TCP 端口。连接建立后,nmap 会立即断开连接,虽不礼貌但对编写良好的网络服务器无害。
从上述示例可知,主机 ubuntu 运行着两个可能未使用且历史上与安全问题相关的服务:portmap(rpcbind)和电子邮件服务器(smtp),攻击者很可能会探测这些端口以获取更多信息。
nmap 输出的
STATE
列显示端口状态,
open
表示有服务器监听,
closed
表示无服务器,
unfiltered
表示状态未知,
filtered
表示因中间数据包过滤器无法探测。nmap 只有在运行 ACK 扫描时才会将端口分类为
unfiltered
。
以下是一个更安全服务器的扫描结果:
ubuntu$ nmap -sT secure.booklab.atrust.com
Starting Nmap 4.20 ( http://insecure.org ) at 2009-11-01 12:42 MST
Interesting ports on secure.booklab.atrust.com (192.168.20.35):
Not shown: 1691 closed ports
PORT STATE SERVICE
25/tcp open smtp
80/tcp open http
Nmap finished: 1 IP address (1 host up) scanned in 0.143 seconds
此例中,该主机允许 SMTP(电子邮件)和 HTTP 服务器,防火墙阻止了对其他端口的访问。
除了直接的 TCP 和 UDP 探测,nmap 还有一系列不发起实际连接的隐蔽端口探测方法。多数情况下,nmap 用看起来像是来自 TCP 会话中间(而非开始)的数据包进行探测,并等待诊断数据包返回。这些隐蔽探测可能有助于绕过防火墙或避免被网络安全监控器检测到。若使用防火墙,用这些替代扫描模式进行探测是个好主意。
nmap 还能通过查看远程系统对 TCP/IP 的具体实现来猜测其运行的操作系统,有时甚至能识别开放端口上运行的软件。
-O
和
-sV
选项可分别开启这些功能。例如:
ubuntu$ sudo nmap -sV -O secure.booklab.atrust.com
Starting Nmap 4.20 ( http://insecure.org ) at 2009-11-01 12:44 MST
Interesting ports on secure.booklab.atrust.com (192.168.20.35):
Not shown: 1691 closed ports
PORT STATE SERVICE VERSION
25/tcp open smtp Postfix smtpd
80/tcp open http lighttpd 1.4.13
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.6.16 - 2.6.24
Nmap finished: 1 IP address (1 host up) scanned in 8.095 seconds
此功能对本地网络盘点很有用,但也可能被黑客利用。需注意,未经网络管理员许可,不要对他人网络运行 nmap。
Nessus:下一代网络扫描器
Nessus 于 1998 年由 Renaud Deraison 首次发布,是一款强大且实用的软件漏洞扫描器。它使用超过 31000 个插件来检查本地和远程安全漏洞。虽现在是闭源专有产品,但仍可免费使用,且新插件会定期发布,是应用最广泛、最全面的漏洞扫描器。
Nessus 不做任何假设,例如它会扫描运行在任何端口的 Web 服务器并检查其漏洞,不依赖所连接服务报告的版本号,而是尝试利用已知漏洞来检测服务是否易受攻击。
使用 Nessus 需要一定的设置时间(它需要一些典型系统上未安装的软件包),但很值得。Nessus 系统包括客户端和服务器,服务器作为数据库,客户端处理 GUI 展示。Nessus 服务器和客户端在 Windows 和 UNIX 平台上都有。其模块化设计便于第三方添加新的安全检查,活跃的用户社区使它在未来几年仍将是有用的工具。
John the Ripper:不安全密码查找器
防止用户选择弱密码的一种方法是自己尝试破解密码,并强制用户更改已被破解的密码。John the Ripper 是 Solar Designer 开发的一款复杂工具,它将各种密码破解算法集成到一个工具中,取代了之前版本中提到的 crack 工具。
即使大多数系统使用影子密码文件隐藏加密密码,验证用户密码的抗破解能力仍很有必要。因为人们倾向于重复使用密码,一个密码可能会提供对其他系统的访问权限、解密用户主目录中存储的文件,甚至允许访问网上的金融账户。
John the Ripper 使用起来很简单,只需指定要破解的文件(通常是
/etc/shadow
):
$ sudo ./john /etc/shadow
Loaded 25 password hashes with 25 different salts (FreeBSD MD5 [32/32])
password (jsmith)
badpass (tjones)
在此例中,从影子文件中读取了 25 个唯一密码。破解密码时,John 会将其打印到屏幕上并保存到
john.pot
文件中。输出的左列是密码,右列括号内是登录名。破解完成后,使用
-show
参数重新运行相同命令可重新打印密码。
目前,John the Ripper 的最新稳定版本是 1.7.3.4,可从 openwall.com/john 下载。由于其输出包含已破解的密码,应小心保护输出并在检查完哪些用户密码不安全后立即删除。与大多数安全监控技术一样,在使用 John the Ripper 破解密码前,需获得明确的管理批准。
hosts_access:主机访问控制
网络防火墙是防止未经授权主机访问的第一道防线,但不应是唯一的屏障。
/etc/hosts.allow
和
/etc/hosts.deny
两个文件(也称为 TCP 包装器)可根据网络请求的来源限制对服务的访问。
hosts.allow
文件列出允许连接到特定服务的主机,
hosts.deny
文件限制访问。但这些文件仅控制对支持
hosts_access
的服务的访问,如由
inetd
、
xinetd
、
sshd
和某些配置的
sendmail
管理的服务。
多数情况下,应采取限制策略,仅允许指定主机访问必要服务。建议在
hosts.deny
文件中使用以下单行代码默认拒绝访问:
ALL:ALL
然后在
hosts.allow
中逐例允许访问。以下配置允许 192.168/16 网络上的主机访问 SSH,并允许任何地方访问
sendmail
:
sshd: 192.168.0.0/255.255.0.0
sendmail: ALL
两个文件中条目的格式为
service: host
或
service: network
。失败的连接尝试会记录在
syslog
中,不允许访问服务的主机的连接将立即关闭。大多数 Linux 发行版默认包含
hosts.allow
和
hosts.deny
文件,但通常为空。其他示例系统在安装后也提供 TCP 包装器作为选项。
Bro:可编程的网络入侵检测系统
Bro 是一个开源的网络入侵检测系统(NIDS),由 Vern Paxson 最初编写,可从 bro-ids.org 获得。它监控网络流量,查找可疑活动。
Bro 检查流入和流出网络的所有流量,可在被动模式下为可疑活动生成警报,或在主动模式下注入流量以破坏恶意活动。这两种模式可能都需要修改站点的网络配置。
与其他 NIDS 不同,Bro 监控流量流,而不仅仅是匹配单个数据包内的模式。这种操作方式使它能基于通信双方检测可疑活动,即使不匹配特定字符串或模式。例如,Bro 可以:
- 通过关联入站和出站流量检测用作“跳板”的系统。
- 通过监视入站连接后立即出现的意外出站连接检测安装了后门的服务器。
- 检测运行在非标准端口的协议。
- 报告正确猜测的密码(并忽略错误猜测)。
其中一些功能需要大量系统资源,但 Bro 包含集群支持,可帮助管理一组传感器机器。
Bro 的配置语言复杂,需要丰富的编码经验才能使用。不幸的是,没有适合新手的简单默认配置,大多数站点需要适度的定制。
Bro 在一定程度上得到了国际计算机科学研究所(ICSI)网络研究小组的支持,但主要由 Bro 用户社区维护。如果你正在寻找一个现成的商业 NIDS,可能会对 Bro 感到失望。然而,Bro 能完成一些商业 NIDS 无法完成的任务,它可以在网络中补充或替代商业解决方案。
Snort:流行的网络入侵检测系统
Snort(snort.org)是一个开源的网络入侵预防和检测系统,最初由 Marty Roesch 编写,现在由商业实体 Sourcefire 维护。它已成为自行搭建 NIDS 的事实上的标准,也是许多商业和“托管服务”NIDS 实现的基础。
Snort 本身作为开源软件包免费分发,但 Sourcefire 会收取订阅费用以获取最新的检测规则集。许多第三方平台集成或扩展了 Snort,其中一些项目是开源的。一个很好的例子是 Aanval(aanval.com),它在基于 Web 的控制台中聚合来自多个 Snort 传感器的数据。
Snort 从网络线路上捕获原始数据包,并将其与一组规则(即签名)进行比较。当检测到定义为感兴趣的事件时,它可以向系统管理员发出警报,或联系网络设备阻止不需要的流量等。
虽然 Bro 是一个更强大的系统,但 Snort 更简单、更易于配置,这使它成为“入门级”NIDS 平台的不错选择。
OSSEC:基于主机的入侵检测
如果你担心系统安全是否受到破坏,或者怀疑不满的同事可能在系统上安装恶意程序,那么可以考虑安装基于主机的入侵检测系统(HIDS),如 OSSEC。
OSSEC 是免费软件,根据 GNU 通用公共许可证以源代码形式提供。Third Brigade(最近被 Trend Micro 收购)提供商业支持。OSSEC 适用于 Linux、Solaris、HP-UX、AIX 和 Windows。它提供以下服务:
- 根kit检测
- 文件系统完整性检查
- 日志文件分析
- 基于时间的警报
- 主动响应
OSSEC 在目标系统上运行并监控其活动,它可以根据配置的规则集发送警报或采取行动。例如,OSSEC 可以监控系统中是否添加了未经授权的文件,并发送如下电子邮件通知:
Subject: OSSEC Notification - courtesy - Alert level 7
Date: Fri, 15 Jan 2010 14:53:04 -0700
From: OSSEC HIDS <ossecm@courtesy.atrust.com>
To: <courtesy-admin@atrust.com>
OSSEC HIDS Notification.
2010 Jan 15 14:52:52
Received From: courtesy->syscheck
Rule: 554 fired (level 7) -> "File added to the system."
Portion of the log(s):
New file
'/courtesy/httpd/barkingseal.com/html/wp-content/uploads/2010/01/hbird.jpg'
added to the file system.
--END OF NOTIFICATION
这样,OSSEC 就像系统的全天候守护者。建议在每个生产系统上运行 OSSEC,并结合变更管理策略。
OSSEC 基本概念
OSSEC 有两个主要组件:管理器(服务器)和代理(客户端)。网络中需要一个管理器,应首先安装该组件。管理器存储整个网络的文件完整性检查数据库、日志、事件、规则、解码器、主要配置选项和系统审计条目。管理器可以连接到任何 OSSEC 代理,无论其操作系统如何,还可以监控某些没有专用 OSSEC 代理的设备。
代理在要监控的系统上运行,并向管理器报告。它们设计为占用资源少,以最少的权限运行,大多数代理配置从管理器获取。服务器和代理之间的通信是加密和认证的,需要在管理器上为每个代理创建一个认证密钥。
OSSEC 将警报按严重程度分为 0 到 15 级,15 级为最高严重程度。
OSSEC 安装
OSSEC 尚未成为主要 UNIX 和 Linux 发行版的一部分,因此需要使用 Web 浏览器或
wget
等工具下载源代码包,然后构建软件:
$ wget http://ossec.net/files/ossec-hids-latest.tar.gz
$ tar -zxvf ossec-hids-latest.tar.gz
$ cd ossec-hids-*
$ sudo ./install.sh
安装脚本会询问你喜欢的语言(使用 “en” 表示英语),然后询问要执行的安装类型:服务器、代理或本地。如果你只在个人管理的单个系统上安装 OSSEC,可以选择本地安装。否则,首先在要作为 OSSEC 管理器的系统上进行服务器安装,然后在要监控的所有其他系统上安装代理。安装脚本还会询问一些其他问题,例如应将警报发送到哪个电子邮件地址以及应启用哪些监控模块。
安装完成后,使用以下命令启动 OSSEC:
server$ sudo /var/ossec/bin/ossec-control start
接下来,将每个代理注册到管理器。在服务器上运行:
server$ sudo /var/ossec/bin/manage_agents
你会看到一个类似如下的菜单:
****************************************
* OSSEC HIDS v2.3 Agent manager.
* The following options are available:
****************************************
(A)dd an agent (A).
(E)xtract key for an agent (E).
(L)ist already added agents (L).
(R)emove an agent (R).
(Q)uit.
Choose your action: A,E,L,R or Q:
选择选项 A 添加代理,然后输入代理的名称和 IP 地址。接下来,选择选项 E 提取代理的密钥,示例如下:
Available agents:
ID: 001, Name: linuxclient1, IP: 192.168.74.3
Provide the ID of the agent to extract the key (or '\q' to quit): 001
Agent key information for '001' is:
MDAyIGxpbnV4Y2xpZW50MSAxOTIuMTY4Ljc0LjMgZjk4YjMyYzlkMjg5MWJlMT
…
最后,登录到代理系统并在那里运行
manage_agents
:
agent$ sudo /var/ossec/bin/manage_agents
在客户端,你会看到菜单选项有所不同:
****************************************
* OSSEC HIDS v2.3 Agent manager.
* The following options are available:
****************************************
(I)mport key from the server (I).
(Q)uit.
Choose your action: I or Q:
选择选项 I,然后复制并粘贴之前提取的密钥。添加代理后,必须重启 OSSEC 服务器。对要连接的每个代理重复密钥生成、提取和安装过程。
OSSEC 配置
OSSEC 安装并运行后,需要对其进行调整,以获取适量的信息。大部分配置存储在服务器的
/var/ossec/etc/ossec.conf
文件中。这是一个 XML 格式的文件,注释详细且易于理解,但包含数十个选项。
综上所述,保障系统安全需要综合运用多种工具和策略。定期扫描磁盘、合理使用
chroot
、利用各类安全工具进行漏洞检测和入侵防范,以及安装基于主机的入侵检测系统等,都是构建安全系统的重要环节。同时,在使用这些工具和技术时,要遵循相关规定和最佳实践,确保系统安全稳定运行。
系统安全防护:工具与策略深度解析
各安全工具对比总结
为了更清晰地了解上述各种安全工具的特点和适用场景,我们可以通过以下表格进行对比:
| 工具名称 | 主要功能 | 特点 | 适用场景 |
| ---- | ---- | ---- | ---- |
| Nmap | 网络端口扫描,检测目标主机开放的 TCP 和 UDP 端口 | 能猜测操作系统和服务版本,有多种扫描模式 | 了解系统对外暴露情况,发现潜在开放端口风险 |
| Nessus | 软件漏洞扫描,检查本地和远程安全漏洞 | 插件丰富,不依赖服务报告版本号 | 全面检测系统软件漏洞 |
| John the Ripper | 密码破解,查找不安全密码 | 使用简单,集成多种破解算法 | 检测用户密码强度,强制用户更换弱密码 |
| hosts_access | 基于文件的主机访问控制 | 通过
/etc/hosts.allow
和
/etc/hosts.deny
文件控制 | 限制特定主机对服务的访问 |
| Bro | 可编程网络入侵检测系统 | 监控流量流,检测复杂可疑活动 | 检测复杂网络攻击和异常流量模式 |
| Snort | 网络入侵预防和检测系统 | 简单易配置,基于规则匹配 | 作为入门级 NIDS,快速部署网络防护 |
| OSSEC | 基于主机的入侵检测系统 | 提供多种服务,监控主机活动 | 监控单个主机的安全状况,检测文件和系统活动异常 |
安全策略制定流程
为了更好地保障系统安全,我们可以制定一个安全策略制定流程,以下是使用 mermaid 绘制的流程图:
graph LR
A[评估系统现状] --> B[确定安全目标]
B --> C[选择合适工具]
C --> D[部署工具和配置]
D --> E[定期监控和评估]
E --> F{是否达标}
F -- 是 --> G[持续维护]
F -- 否 --> C
具体步骤解释如下:
1.
评估系统现状
:了解系统的网络拓扑、运行的服务、开放的端口等信息,为后续制定安全策略提供基础。
2.
确定安全目标
:根据系统的用途和重要性,确定安全防护的目标,如防止数据泄露、保障服务可用性等。
3.
选择合适工具
:根据安全目标和系统现状,选择适合的安全工具,如上述介绍的各种工具。
4.
部署工具和配置
:将选择的工具部署到系统中,并进行相应的配置,使其能够正常工作。
5.
定期监控和评估
:定期对系统进行监控和评估,检查安全工具的运行情况和系统的安全状况。
6.
判断是否达标
:根据安全目标,判断系统的安全状况是否达标,如果达标则进入持续维护阶段,如果不达标则重新选择工具和配置。
7.
持续维护
:持续对系统进行维护和优化,及时更新安全工具和配置,以应对不断变化的安全威胁。
安全工具的协同使用
在实际的系统安全防护中,通常需要将多种安全工具协同使用,以达到更好的防护效果。以下是几种常见的协同使用方式:
1.
Nmap 与 Nessus
:使用 Nmap 扫描系统开放的端口和服务,确定潜在的攻击面,然后使用 Nessus 对这些服务进行漏洞扫描,深入检测系统的安全漏洞。
2.
John the Ripper 与 OSSEC
:使用 John the Ripper 检测用户密码的强度,发现弱密码并强制用户更换,同时使用 OSSEC 监控系统文件和活动,防止黑客通过弱密码入侵系统并进行恶意操作。
3.
Bro 与 Snort
:Bro 可以监控网络流量流,检测复杂的可疑活动,Snort 可以基于规则匹配检测常见的入侵行为,将两者结合使用可以更全面地检测网络入侵。
4.
hosts_access 与防火墙
:hosts_access 可以根据主机来源限制对服务的访问,防火墙可以对网络流量进行更全面的过滤和控制,将两者结合使用可以构建多层次的访问控制体系。
安全防护的未来趋势
随着技术的不断发展,系统安全面临的挑战也在不断变化。未来,安全防护可能会呈现以下趋势:
1.
人工智能和机器学习的应用
:利用人工智能和机器学习技术,可以对大量的安全数据进行分析和处理,自动发现潜在的安全威胁,并提供更智能的防护策略。
2.
零信任架构的普及
:零信任架构认为默认情况下不应该信任任何内部或外部的用户、设备和网络流量,需要对每一次访问进行严格的验证和授权。这种架构可以有效应对日益复杂的网络攻击。
3.
物联网安全的重视
:随着物联网设备的普及,物联网安全问题变得越来越重要。未来需要加强对物联网设备的安全防护,防止黑客通过物联网设备入侵系统。
4.
云安全的发展
:越来越多的企业将业务迁移到云端,云安全成为了一个重要的问题。未来需要加强对云环境的安全防护,保障云服务的可用性和数据的安全性。
总结
系统安全是一个复杂的问题,需要综合运用多种工具和策略进行防护。本文介绍了多种安全工具的功能、特点和使用方法,以及如何制定安全策略和协同使用这些工具。同时,也对安全防护的未来趋势进行了展望。在实际应用中,需要根据系统的具体情况选择合适的工具和策略,并不断进行优化和改进,以保障系统的安全稳定运行。
超级会员免费看

被折叠的 条评论
为什么被折叠?



