深入探究 Linux 系统安全技术
在当今数字化时代,Linux 系统的安全性至关重要。它广泛应用于各种服务器和网络环境中,保护着大量的敏感信息。因此,掌握 Linux 系统的安全技术,对于保障系统的稳定运行和数据安全至关重要。本文将详细介绍 Linux 系统安全的多个方面,包括用户账户监控、文件系统监测、病毒和根kit检测以及入侵检测等。
1. 查看启动消息
若要查看启动消息,可先列出所有系统启动的启动 ID,再启动你感兴趣的特定启动实例。以下是查看启动 ID 并显示所选启动 ID 启动消息的示例:
$ journalctl –list-boots
示例输出如下:
-11 24f2850c6b4a42d1ae44945d6c088393 Fri 2020-03-27 07:48:51 EDT–Fri 2020-03-27 17:46:47 EDT
-10 e26956a6a4ac4bacbd1c35fdf373facf Sat 2020-03-28 20:53:35 EDT–Sun 2020-03-29 00:09:42 EDT
-9 05c00d086c1b49ccab24ba118c7f1e38 Sun 2020-03-29 07:46:35 EDT–Mon 2020-03-30 00:12:54 EDT
-8 7eb56eef2bb242c4b0d347bb30fe9d53 Mon 2020-03-30 07:49:14 EDT–Tue 2020-03-31 00:21:25 EDT
-7 7ea9b4f75ad849e8929bb5ec6a58d760 Tue 2020-03-31 07:47:07 EDT–Wed 2020-04-01 00:16:47 EDT
-6 82b2d7e9067e45198e53076fda8fa9a4 Wed 2020-04-01 07:49:09 EDT–Thu 2020-04-02 00:19:14 EDT
-5 0e3cc11227364c5c9cf9322aa87064c4 Thu 2020-04-02 07:49:08 EDT–Fri 2020-04-03 00:13:10 EDT
-4 7f432f43ee6d427d91a79b200543bd69 Fri 2020-04-03 07:48:35 EDT–Fri 2020-04-03 18:07:30 EDT
-3 246bbe00e58740138636b5386f12a4fb Sat 2020-04-04 21:02:22 EDT–Sat 2020-04-04 23:25:21 EDT
-2 3ffc709d76884c8bbcc26e239c570744 Sun 2020-04-05 07:47:44 EDT–Mon 2020-04-06 00:04:48 EDT
-1 0b2c500ca05549d09e2083c343abea66 Mon 2020-04-06 07:49:37 EDT–Tue 2020-04-07 00:11:23 EDT
0 02d1fc2469794ebc83026d47e02b97fa Tue 2020-04-07 07:49:08 EDT–Tue 2020-04-07 12:39:58 EDT
2. 监控用户账户
用户账户常被用于对系统的恶意攻击,攻击者可能会未经授权访问现有账户、创建新的虚假账户,或者留下一个账户以便日后访问。为避免此类安全问题,监控用户账户至关重要。
-
检测假冒账户和权限提升
:未经适当授权创建的账户应被视为假冒账户。此外,以任何方式修改账户,使其拥有不同的未经授权的用户标识(UID)号码或添加未经授权的组成员身份,都属于权限提升的一种形式。监控
/etc/passwd
和
/etc/group
文件可以帮助我们发现这些潜在的违规行为。
为了监控
/etc/passwd
和
/etc/group
文件,我们可以使用审计守护进程。审计守护进程是一个功能强大的审计工具,它允许我们选择要跟踪的系统事件并记录它们,还具备报告功能。
启动对
/etc/passwd
和
/etc/group
文件的审计,需要使用
auditctl
命令(首先使用
apt install auditd
安装)。启动此过程至少需要两个选项:
-
-w filename
:对指定的文件名设置监控。审计守护进程通过文件的 inode 号码来跟踪文件。inode 号码是一个包含文件相关信息(包括其位置)的数据结构。
-
-p trigger(s)
:如果对指定文件发生了以下任何一种访问类型(r=读取,w=写入,x=执行,a=属性更改),则触发审计记录。
以下是使用
auditctl
命令对
/etc/passwd
文件设置监控的示例:
# auditctl -w /etc/passwd -p rwa
启动文件审计后,你可能需要在某个时候停止审计。停止审计可以使用以下命令:
auditctl -W filename -p trigger(s)
若要查看当前审计的文件列表及其监控设置,可在命令行输入:
auditctl -l
要查看审计日志,可使用审计守护进程的
ausearch
命令。这里只需要
-f
选项,它指定了你要从审计日志中查看的记录。以下是
/etc/passwd
审计信息的示例:
# ausearch -f /etc/passwd
time->Fri Feb 7 04:27:01 2020
type=PATH msg=audit(1328261221.365:572):
item=0 name="/etc/passwd" inode=170549
dev=fd:01 mode=0100644 ouid=0 ogid=0
rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1328261221.365:572): cwd="/"
...
time->Fri Feb 7 04:27:14 2020
type=PATH msg=audit(1328261234.558:574):
item=0 name="/etc/passwd" inode=170549
dev=fd:01 mode=0100644 ouid=0 ogid=0
rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1328261234.558:574):
cwd="/home/johndoe"
type=SYSCALL msg=audit(1328261234.558:574):
arch=40000003 syscall=5 success=yes exit=3
a0=3b22d9 a1=80000 a2=1b6 a3=0 items=1 ppid=3891
pid=21696 auid=1000 uid=1000 gid=1000 euid=1000
suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000
tty=pts1 ses=2 comm="vi" exe="/bin/vi"
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023"
通过以下几个关键信息,我们可以了解触发审计记录的事件:
-
time
:活动的时间戳。
-
name
:被监控的文件名,这里是
/etc/passwd
。
-
inode
:
/etc/passwd
文件在该文件系统上的 inode 号码。
-
uid
:运行程序的用户的用户 ID,这里是 1000。
-
exe
:用于操作
/etc/passwd
文件的程序,这里是
/bin/vi
。
要确定 UID 为 1000 的用户账户是谁,可以查看
/etc/passwd
文件。在这个例子中,UID 为 1000 的用户是
johndoe
。因此,从刚刚显示的审计事件记录中,我们可以确定
johndoe
账户试图使用
vi
编辑器操作
/etc/passwd
文件。这种行为很可能并非善意的,需要进一步调查。
审计守护进程及其相关工具功能丰富。若要了解更多信息,可以查看以下审计守护进程实用程序和配置文件的手册页:
-
auditd
:审计守护进程
-
/etc/audit/auditd.conf
:审计守护进程配置文件
-
auditctl
:控制审计系统
-
/etc/audit/audit.rules
:启动时加载的配置规则
-
ausearch
:在审计日志中搜索指定项
-
aureport
:生成审计日志报告
-
audispd
:将审计信息发送到其他程序
审计守护进程是监控重要文件的一种方法。此外,你还应该定期人工检查账户和组文件,以查看是否有异常情况。
-
检测弱账户密码
:即使我们尽力确保用户密码的安全性,弱密码仍可能会出现。因此,我们需要监控用户账户密码,以确保它们足够强大,能够抵御攻击。
我们可以使用 John the Ripper 来检测弱密码。John the Ripper 是一个免费的开源工具,可以在 Linux 命令行使用。它默认未安装,可以使用
apt install john
进行安装。
使用 John the Ripper 测试用户密码,首先需要使用
unshadow
命令提取账户名和密码,并将这些信息重定向到一个文件中供
john
使用:
# unshadow /etc/passwd /etc/shadow > password.file
然后,使用你喜欢的文本编辑器编辑
password.file
,删除任何没有密码的账户。由于 John the Ripper 非常消耗 CPU 资源,建议一次只测试几个账户,因此可以删除目前不想测试的账户名。
使用
john
命令尝试破解密码。运行
john
针对创建的密码文件,使用命令
john filename
。以下是一个示例:
# john password.file
Loaded 1 password hash (generic crypt(3) [?/32])
password (Samantha)
guesses: 1 time: 0:00:00:44 100% (2) c/s: 20.87
trying: 12345 - missy
Use the "--show" option to display all of the
cracked passwords reliably
为了说明强密码的重要性,我们将
Samantha
账户的密码从
password
更改为
Password1234
。即使
Password1234
仍然是一个弱密码,但破解它却需要超过 7 天的 CPU 时间。以下是尝试破解时的代码:
# passwd Samantha
Changing password for user Samantha.
...
# john password.file
Loaded 1 password hash (generic crypt(3) [?/32])
...
time: 0:07:21:55 (3) c/s: 119 trying: tth675 - tth787
Session aborted
密码破解尝试完成后,应从系统中删除
password.file
。要了解更多关于 John the Ripper 的信息,可以访问
openwall.com/john
。
3. 监控文件系统
恶意程序常常会修改文件,并且可能会伪装成普通文件和程序来掩盖其踪迹。不过,我们可以通过以下几种监控策略来发现它们。
-
验证软件包
:通常情况下,从标准软件源安装软件包或从可靠网站下载软件包不会有问题。但为了确保安全,最好对已安装的软件包进行双重检查,看它们是否被篡改。
dpkg -V package_name
命令可以检查软件包的有效 md5sum 哈希值。你还可以运行
dpkg --audit package_name
命令来检查软件包的配置问题、控制数据或文件是否存在问题。以下是一个示例,
dpkg
正确发现了
auditd
软件包的配置问题:
# dpkg --audit auditd
The following packages are only half configured, probably due
to problems
configuring them the first time. The configuration should be
retried using
dpkg --configure <package> or the configure menu option in dselect:
auditd User space tools for security auditing
验证软件时,会将已安装软件包文件的信息与 APT 数据库中的软件包元数据(见相关章节)进行比较。如果没有发现问题,命令将不会返回任何信息。但如果存在差异,会返回一个编码列表。
-
扫描文件系统
:除非你最近更新了系统,否则二进制文件不应因任何原因被修改。像
find
这样的命令可以帮助我们确定二进制文件是否被篡改。
为了检查二进制文件是否被修改,
find
命令可以使用文件的修改时间(mtime)。mtime 是文件内容最后一次被修改的时间。此外,
find
还可以监控文件的创建/更改时间(ctime)。
如果你怀疑存在恶意活动,可以快速扫描文件系统,查看是否有二进制文件在今天(或昨天,具体取决于你认为入侵发生的时间)被修改或更改。以下是一个扫描
/sbin
目录的示例,使用
find /sbin -mtime -1
命令查看是否有二进制文件在过去 24 小时内被修改:
# find /sbin -mtime -1
/sbin
/sbin/init
/sbin/reboot
/sbin/halt
在这个示例中,显示了几个文件,表明它们最近被修改过。这可能意味着系统上存在恶意活动。为了进一步调查,可以使用
stat filename
命令查看每个文件的详细时间信息:
# stat /sbin/init
File: '/sbin/init' -> '../bin/systemd'
Size: 14 Blocks: 0 IO Block: 4096 symbolic link
Device: fd01h/64769d Inode: 9551 Links: 1
Access: (0777/lrwxrwxrwx)
Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:bin_t:s0
Access: 2016-02-03 03:34:57.276589176 -0500
Modify: 2016-02-02 23:40:39.139872288 -0500
Change: 2016-02-02 23:40:39.140872415 -0500
Birth: -
我们可以创建一个包含所有二进制文件原始 mtime 和 ctime 的数据库,然后运行一个脚本,查找当前的 mtime 和 ctime,并将它们与数据库进行比较,记录任何差异。不过,已经有这样的程序,并且运行效果很好,它就是入侵检测系统(IDS),后续会详细介绍。
除了上述扫描,我们还需要定期进行其他文件系统扫描。以下是一些恶意攻击者常用的文件或文件设置,以及相应的扫描命令和潜在问题:
| 文件或设置 | 扫描命令 | 文件或设置的问题 |
| — | — | — |
| SUID 权限 |
find / -perm -4000
| 允许任何人在文件在内存中执行时临时成为文件的所有者。 |
| SGID 权限 |
find / -perm -2000
| 允许任何人在文件在内存中执行时临时成为文件所属组的成员。 |
| rhost 文件 |
find /home -name .rhosts
| 允许一个系统完全信任另一个系统。不应该出现在
/home
目录中。 |
| 无所有者文件 |
find / -nouser
| 表示这些文件与任何用户名都没有关联。 |
| 无组文件 |
find / -nogroup
| 表示这些文件与任何组名都没有关联。 |
这些文件系统扫描有助于我们监控系统的运行情况,检测恶意攻击。然而,还有其他类型的攻击可能会威胁到我们的文件,例如病毒和根kit。
4. 检测病毒和根kit
病毒和根kit是两种常见的恶意攻击工具,它们在执行恶意活动时会隐藏自己。因此,Linux 系统需要对这两种入侵进行监控。
-
监控病毒
:计算机病毒是一种恶意软件,它可以附着在已安装的系统软件上,并通过媒体或网络传播。认为 Linux 系统没有病毒是一种误解。虽然病毒的恶意创造者通常更关注更流行的桌面操作系统(如 Windows),但这并不意味着不会为 Linux 系统创建病毒。
更重要的是,Linux 系统经常用于为 Windows 桌面系统提供服务,如邮件服务器。因此,用于此类目的的 Linux 系统也需要扫描 Windows 病毒。
杀毒软件使用病毒签名来扫描文件。病毒签名是从病毒的二进制代码生成的哈希值,它可以准确识别该病毒。杀毒程序有一个病毒签名数据库,用于与文件进行比较,以查看是否有签名匹配。根据新威胁的数量,病毒签名数据库可以经常更新,以提供对这些新威胁的保护。
对于 Linux 系统,一个不错的开源免费杀毒软件选择是 ClamAV。要安装 ClamAV 和病毒数据库,可以使用以下命令:
# apt install clamav clamav-freshclam
要了解更多关于 ClamAV 的信息,可以访问
clamav.net
,那里有关于如何设置和运行该杀毒软件的文档。
-
监控根kit
:根kit比病毒更隐蔽。根kit是一种恶意程序,它具有以下特点:
- 隐藏自己,通常通过替换系统命令或程序来实现。
- 保持对系统的高级访问权限。
- 能够绕过用于检测它的软件。
根kit的目的是获取并保持对系统的根级访问权限。“根kit” 这个术语是由 “root”(表示必须具有管理员访问权限)和 “kit”(表示通常是几个协同工作的程序)组合而成的。
在 Linux 系统上,可以使用
chkrootkit
来检测根kit。使用以下命令安装
chkrootkit
:
# apt install chkrootkit
使用
chkrootkit
检测根kit很简单。安装软件包或启动 Live CD 后,在命令行输入
chkrootkit
命令,它会搜索整个文件结构,标记出任何受感染的文件。以下是在受感染系统上运行
chkrootkit
的示例,使用
grep
命令搜索关键字
INFECTED
:
# chkrootkit | grep INFECTED
Checking 'du'... INFECTED
Checking 'find'... INFECTED
Checking 'ls'... INFECTED
Checking 'lsof'... INFECTED
Checking 'pstree'... INFECTED
Searching for Suckit rootkit... Warning: /sbin/init INFECTED
在上面的
chkrootkit
代码的最后一行,显示系统被
Suckit
根kit感染。但实际上,系统并没有被这个根kit感染。在运行杀毒和根kit检测软件等实用程序时,经常会出现许多误报。误报是指显示存在病毒、根kit或其他恶意活动,但实际上并不存在的情况。在这个特定的例子中,这个误报是由一个已知的 bug 引起的。
chkrootkit
实用程序应该定期运行,当然,当怀疑系统被根kit感染时,也应该立即运行。要了解更多关于
chkrootkit
的信息,可以访问
www.chkrootkit.org
。
5. 检测入侵
入侵检测系统(IDS)软件可以帮助我们监控系统的活动(或其网络),检测潜在的恶意活动并报告这些活动。与入侵检测系统软件密切相关的是入侵预防系统软件,它可以防止入侵。有些软件包将两者结合在一起,提供入侵检测和预防功能。
以下是一些适用于 Linux 系统的流行入侵检测系统软件包:
| IDS 名称 | 安装命令 | 网站 |
| — | — | — |
| aide |
apt install aide
|
aide.sourceforge.net
|
| Snort |
apt install snort
|
www.snort.org
|
| tripwire |
apt install tripwire
|
www.tripwire.org
|
Advanced Intrusion Detection Environment(aide) IDS 使用比较的方法来检测入侵。就像我们小时候玩的比较两张图片并找出差异的游戏一样,
aide
实用程序使用类似的方法。它会创建一个 “第一张图片” 数据库,在一段时间后,再创建另一个 “第二张图片” 数据库,然后比较这两个数据库并报告差异。
要开始使用
aide
,我们需要创建 “第一张图片”。创建这个数据库的最佳时间是系统刚安装好的时候。使用以下命令创建初始数据库:
# aide.wrapper -i
Start timestamp: 2020-04-07 19:19:33 +0000 (AIDE 0.16)
AIDE initialized database at /var/lib/aide/aide.db.new
Verbose level: 6
Number of entries: 183088
---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------
/var/lib/aide/aide.db.new
RMD160 : CPYeo30jdCLFv5K982ikAF9tpoo=
TIGER : 3faY0oxurQbvrljl7IWWXGHX2fx+EHPN
SHA256 : 6diJ2c8p6elfCkiRSxUJ5LV7icCUOmC5
NO+z4iZ9suM=
SHA512 : hDtBFYWmDGAFQUxL4PlgSKiSRRJRiQBV
rUXrRUuLSgAiQCnQ9EWnLtBjNQxmDt9h
tiN4IoON+LWWk0xXUK5AHw==
CRC32 : KVke8Q==
HAVAL : SMq9Po82Dg1SOod3vHtgG6D/Xqd0X91/
wkKX9aTbx4w=
GOST : L0JMMPR9WoMJpa1Bgj9C4Z4p2Aila5UC
9ruHH/RC47I=
End timestamp: 2020-04-07 19:23:41 +0000 (run time: 4m 8s)
通过以上介绍的各种方法和工具,我们可以全面地保护 Linux 系统的安全。但需要注意的是,系统安全是一个持续的过程,我们需要定期检查和更新,以应对不断变化的安全威胁。
深入探究 Linux 系统安全技术(续)
6. 入侵检测系统总结与使用建议
在前面我们介绍了几种流行的 Linux 入侵检测系统(IDS),如 aide、Snort 和 tripwire。这些工具各自有其特点和适用场景,下面为大家总结一下使用建议。
-
aide :适用于对系统文件完整性进行长期监控。它通过创建数据库并定期比较来发现文件的变化,适合在系统刚安装好时就开始使用。使用步骤如下:
-
安装:
apt install aide -
创建初始数据库:
aide.wrapper -i -
定期运行比较:在合适的时间间隔(如每天或每周)再次运行
aide.wrapper -C来比较数据库,查看是否有文件被修改。
-
安装:
-
Snort :主要用于网络入侵检测。它可以实时监控网络流量,检测并阻止潜在的网络攻击。使用步骤如下:
-
安装:
apt install snort -
配置规则:编辑
/etc/snort/snort.conf文件,根据需求添加或修改规则。 -
启动服务:
systemctl start snort
-
安装:
-
tripwire :提供了强大的文件完整性检查和策略管理功能。使用步骤如下:
-
安装:
apt install tripwire -
初始化数据库:
tripwire --init -
定期检查:
tripwire --check
-
安装:
7. 安全策略制定与实施
为了保障 Linux 系统的安全,制定并实施合理的安全策略至关重要。以下是一些建议:
-
账户管理策略
- 定期审查用户账户,删除不必要的账户。
- 为所有账户设置强密码,并定期更换。
- 限制用户的权限,遵循最小权限原则。
-
文件系统策略
- 定期进行文件系统扫描,包括前面提到的各种扫描命令。
- 对重要文件设置适当的权限,如
/etc/passwd
和
/etc/group
文件。
-
网络策略
- 配置防火墙,限制外部访问。
- 定期更新系统和软件包,以修复已知的安全漏洞。
8. 应急响应流程
即使采取了各种安全措施,系统仍可能受到攻击。因此,建立应急响应流程非常重要。以下是一个简单的应急响应流程:
graph LR
A[发现安全事件] --> B[评估事件严重程度]
B --> C{是否需要立即响应}
C -- 是 --> D[隔离受影响系统]
C -- 否 --> E[继续监控]
D --> F[收集证据]
F --> G[分析攻击来源和方式]
G --> H[制定修复方案]
H --> I[实施修复]
I --> J[恢复系统正常运行]
J --> K[总结经验教训,更新安全策略]
E --> A
9. 安全培训与意识提升
系统安全不仅仅依赖于技术手段,用户的安全意识也起着关键作用。因此,对系统管理员和普通用户进行安全培训是必要的。培训内容可以包括:
- 常见的安全威胁和攻击方式
- 如何识别和避免钓鱼邮件
- 正确的密码设置和管理方法
- 安全策略的遵守和执行
10. 未来安全趋势与挑战
随着技术的不断发展,Linux 系统面临的安全威胁也在不断变化。以下是一些未来可能面临的安全趋势和挑战:
-
人工智能与机器学习攻击
:攻击者可能会利用人工智能和机器学习技术来生成更复杂的攻击方式。
-
物联网(IoT)安全
:随着物联网设备的普及,Linux 系统可能会与更多的物联网设备交互,带来新的安全风险。
-
云计算安全
:越来越多的企业将业务迁移到云计算环境中,Linux 系统在云计算中的安全管理面临新的挑战。
为了应对这些未来的安全趋势和挑战,我们需要不断学习和更新知识,采用新的安全技术和方法。
11. 总结
保障 Linux 系统的安全是一个复杂而长期的过程。通过监控用户账户、文件系统,检测病毒和根kit,以及使用入侵检测系统等多种手段,我们可以有效地降低系统受到攻击的风险。同时,制定合理的安全策略,建立应急响应流程,提升用户的安全意识,也是确保系统安全的重要环节。面对未来不断变化的安全威胁,我们需要保持警惕,持续改进安全措施。希望本文介绍的内容能够帮助大家更好地保护 Linux 系统的安全。
超级会员免费看
506

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



