美杜莎 DS9 安全系统

作者:Robert Dobozy
Medusa DS9 Security System
  • 作者:Marek Zelem、Milan Pikula 和 Martin Ockajak

  • 电子邮件(邮件列表):medusa@medusa.fornax.sk

  • 网址:http://medusa.fornax.sk/

  • 价格:免费,根据 GNU GPL 发布

  • 评论员:Robert Dobozy

设想一个安全措施完善的 Linux 盒子。拥有最新的补丁,每晚运行 Tripwire,日志分析器通过串行线连接到另一台计算机,当发生可疑情况时会通过电话通知您——听起来不错?现在设想一下 Sendmail 或 ftpd 中出现了一个新的漏洞,成百上千个相对不知名的用户正在使用许多编写质量参差不齐的 setuid 程序。嗯,您还能安心入睡吗?您可能会说:“我有监控脚本,所以当有人获得 root 权限时,我会通过电话收到通知。” 但当某个愚蠢的破坏者立即执行 rm -fr / 时,您可能会直接崩溃。一切都太迟了,尤其是当您不在电脑旁,无法查看发生了什么时。或者您可能会说:“我定期备份我的系统,所以我会恢复它。”

进行备份是一项值得称赞的活动,但当每周都有人在您修复之前发现新的漏洞时,您会每周都恢复系统吗?好吧,看来您不得不断开计算机与互联网的连接,关闭它,并祈祷您的数据是安全的。不,不要惊慌!我为您准备了一些东西。它的名字是 Medusa DS9。它不是万能药,它并不完美,但它是一款非常有趣的软件。

什么是 Medusa DS9?它是如何工作的?

在斯洛伐克语中,“medusa”的意思是“水母”。像水母一样,Medusa 可以用它的触手蜇伤敌人。在希腊神话中,Medusa 是三个戈耳工怪物之一。任何瞥见她面容的人都会变成石头。Medusa 是一个安全系统,可以扩展您的 Linux 系统的整体安全性。Medusa 由两部分组成。第一部分是 Linux 内核的一组小型补丁,第二部分是一个用户空间安全守护进程(授权服务器),称为 Constable。

您可能会问:“我为什么需要像 Medusa 这样的安全系统?” 答案取决于许多因素。如果您有一台家用机器,您可能不需要它。如果您有一个知名的且经常使用的互联网服务器,您可能会用到它。为什么?因为 UNIX 安全方案在当今看来已不足够。是的,它非常简单(就像整个 UNIX 原则一样),但它有很多限制。仅举两个例子:作为普通用户,您没有任何系统权限,而作为 root 用户,您拥有整个系统的所有权限。因此,当有人使用任何网络守护进程入侵时,他可以在内部做任何他喜欢的事情,例如,图形子系统或低级磁盘操作。

与此相关的另一个问题是,任何想要使用端口号小于 1024 的套接字的程序都必须具有 root 权限。在 4.1aBSD 系统的远古时代,这似乎是一个好主意;现在,当与 BSD TCP/IP 堆栈和缓冲区溢出问题的局限性相结合时,我们的计算机正生活在艰难的时期。虽然 Medusa 无法改变这些事情,但它试图消除它们的影响。

Medusa 背后的基本思想非常简单。在执行某些操作之前,内核会向授权服务器(Constable)请求确认。然后,授权服务器允许、禁止或更改操作。授权服务器和内核通过特殊设备 /dev/medusa 相互通信。通过这种方式,管理员可以创建自己的安全模型,该模型可以补充或覆盖原始 UNIX 模型。我已经告诉您原理很简单;但是,实际实现有点复杂。如果您对如何实现感兴趣,请参阅“资源”部分。

1995 年,Medusa 的作者是大学机器的管理员。由于用户众多,经常有人破解机器并将其用作恶意活动的基地。他们没有参与与破解者及其漏洞的永无止境的竞赛,而是决定以不同的方式实现更好的安全性。1996 年,一个古老的初步版本,旧的 Medusa,诞生了。经过更多开发,一个名为 Medusa DS9 的新一代产品于 1998 年 7 月问世。

一些使用示例

Constable 由其配置文件驱动,该文件通常是 /usr/local/etc/constable.conf。您可以在此处指定您需要的所有安全设置。此配置文件可以被视为一个简单的程序。它具有函数、条件、事件、块等,并且与 C 非常相似。Constable 是事件驱动的。当任何事件(系统调用、VFS 操作、信号)发生时,都会执行相应的操作。在第一个示例中,我们将保护一个文件免受删除。Constable 配置如清单 1 所示。现在,当有人尝试删除此文件时,Medusa 返回清单 1 底部显示的消息。嗯,看起来 /tmp/delme 文件是不可删除的,即使是 root 用户也不行。

清单 1

当然,只有一个不可删除的文件用处不大。因此,请查看清单 2,在其中我们将为每个尝试运行 ifconfig 程序的非 root 用户设置一个陷阱。此配置仍然不是很有用,但确实展示了如何将任何程序的执行重定向到其他程序。因此,您可以保护某些敏感程序免受某些用户的执行。您还可以将任何文件操作(访问、取消链接、读取)重定向到另一个文件。例如,从网络连接到某台机器的用户可以拥有与本地用户不同的 passwd 和 shadow 文件。

清单 2

为了使 Medusa 真正可用,我们必须深入了解其功能和配置。Medusa 使用虚拟空间的概念。这意味着您可以将任何进程或文件(inode)分配到一个或多个虚拟空间。一个虚拟空间中的进程无法看到、更改或影响另一个虚拟空间中的进程或文件。因此,您可以非常轻松地将系统的几个关键部分与其他部分分开。例如,您可以将 Sendmail 和 FTP 守护进程放在虚拟空间 1 中,将其他系统关键文件(例如 /etc 目录、内核和用户主目录)放在虚拟空间 2 中。即使有人利用了 FTP 守护进程,除了查看 ftpd 配置文件和您的公共 FTP 目录的内容外,他什么也做不了(如果 Medusa 配置正确)。

在清单 3 中,我们将创建两个虚拟空间,一个用于整个文件系统,另一个用于 /tmp 目录。然后,我们将保护文件 /tmp/delme 免受删除。当有人尝试删除此文件时,他将被从 /tmp 虚拟空间“解雇”,并且将无法访问 /tmp 目录或其子目录中的任何文件(即使它们是从另一个磁盘挂载的)。可以轻松修改此示例以禁止此用户查看整个文件系统(通过将 vss 设置为 0)。关键字 vss 更改进程可以查看的虚拟空间。虚拟空间变量通常由二进制格式 (0b) 的数字修改,这些数字设置这些变量的各个位(二进制 10 在十进制中为 2)。正如您从清单中看到的,您可以使用 // 或 /* */ 字符像在 C 编程中一样添加注释。

清单 3

除了虚拟空间之外,必须由安全守护进程确认的操作信息可以为每个进程和文件存储。文件的操作可以是访问、创建或删除;进程的操作可以是 fork、exec、信号等等。对于您不关心的操作,控制系统的工作方式与未安装 Medusa 时相同。对于您想要控制的操作(例如第一个示例中的取消链接),系统会询问安全守护进程。现在我们将监控和控制 suid 程序的执行,如清单 4 所示。我们将禁止使用 TELNET 协议连接的用户执行 suid 程序(如 suping)。可以轻松修改它以控制 ssh 连接,因此例如本地登录的用户可以 su 到 root。

清单 4

您现在可能会问:“如果有人编写并编译了自己的 TELNET 守护进程怎么办?” 答案当然是,Constable 的此配置将允许他运行 suid 程序。为了 100% 确定,您可以监控系统调用。可以通过关键字 syscall 来完成。在变量 action 中,存储了一个系统调用号(102 是 socketcall),在变量 trace1trace5 中,指定了此系统调用的参数。此配置(参见清单 5)监控每个开始使用网络的进程,因为 socketcall,系统调用 102,必须用于执行此操作,无论是传入连接还是传出连接。lpeek 关键字从给定的地址(trace2,第二个 socketcall 参数)读取数据,并将其存储到变量 $x 中。此示例还展示了用户定义变量的用法。当使用网络连接时,将调用名为 doit 的函数。如果调用了另一个系统调用,则此系统调用的跟踪将关闭。默认情况下,所有系统调用的跟踪都处于打开状态。要关闭它,您可以使用 trace_off 关键字。

清单 5

我们现在来到了 Medusa 最先进的功能。您可以强制在任何程序的上下文中执行任何代码。为了简化该过程,开发并包含在 Medusa 中的是一个名为 Mlibc 的特殊库。Mlibc(代表 Medusa 或 Mini libc)是一个小型库,提供许多标准函数、结构、宏和常量的声明。当您将您的“强制”代码与 Mlibc 链接时,您将获得一个程序,该程序可以在受控进程内部执行,就像它是作为其组成部分编译的一样。在清单 6 和 7 中,当任何程序尝试删除我们众所周知的 /tmp/delme 文件时,我们强制执行了 exit 函数。原理很简单;首先,我们将使用以下命令编译“强制”代码 (exitme.c):

gcc -O2 -c -o exitme.o exitme.c

ld -r -o exitme exitme.o mlibc.o
然后我们将其与 Mlibc 链接

清单 6

清单 7

请记住,不要 使用这些来创建您自己的坚不可摧的 Linux 城堡。它们真的只是示例。

在其他一些不错的功能中,Medusa 知道并支持 POSIX 功能,因此您可以根据您的需要监控和更改功能。

安装

下一步是什么?

Medusa 开发团队正在努力开发它。他们希望使 Medusa 更面向对象。这意味着您将能够更好地处理系统对象以设置其属性。他们希望将其移植到其他平台(目前仅支持 Linux/Intel),并创建一个前端,使管理员能够更轻松地创建和配置安全方案。

Medusa 没有在多处理器系统上进行广泛测试,但尝试过的人没有报告任何严重问题。Medusa 需要更详细和更好的文档。Constable 配置文件可能非常复杂,因此未来版本中可能会出现某种形式的自动配置器。您可以编写自己的 Medusa 前端,该前端可以创建所需的安全模型并通过使用 Constable 配置来实现它。

Medusa 是一个非常有趣的系统,不仅具有安全功能。它可能永远不会出现在官方内核中,但可以用作附加软件包来提高您的 Linux 系统的安全性。

资源

优点/缺点

Robert Dobozy (robo@idata.sk) 是一位 SAP R/3 技术顾问。他自 1995 年以来一直使用 Linux,并且是斯洛伐克 Linux 用户组 (SkLUG) 的联合创始人兼现任主席。他的所有空闲时间都与他 20 个月大的女儿一起度过,并进行编程,主要使用 Perl 和 PHP。

加载 Disqus 评论