安全性和机密性安全性和机密性

目录

44.1. 本地安全和网络安全
44.2. 一些常用的安全提示和技巧
44.3. 使用中央安全报告地址

Linux 或 UNIX 系统的一个主要特点就是能够同时处理多个用户(多用户),并允许这些用户在同一计算机上同时执行多项任务(多任务)。 此外,操作系统对网络是透明的。 用户往往不知道他们所用的数据和应用程序是他们自己的计算机本地提供的,还是通过网络提供的。

利用多用户功能时,不同用户的数据必须分开储存。 要确保安全性和私密性。 数据安全性早在计算机能够联网之前就已经是个关键问题。 和今天一样,那时人们最担心的问题就是如何保持数据可用,即便数据丢失或是数据媒体(通常是硬盘)损坏也不受任何影响。

本节侧重说明机密性问题以及保护用户隐私的方法;但是,全面的安全观离不开一些过程,即:随时准备好定期更新、可行的和经过测试的备份副本,这一点再怎么强调都不为过。 做不到这一点,您可能很难恢复数据 - 不仅是在出现硬件故障时,在怀疑有人未经授权访问和篡改文件时,也很难恢复数据。

本地安全和网络安全本地安全和网络安全

访问数据有以下几种方式:

  • 与拥有所需信息或能访问计算机数据的人进行人际交流

  • 直接从计算机控制台访问(物理访问)

  • 通过串行线路

  • 使用网络链接

在上述所有情况下,用户只有在通过鉴定后才能访问相关资源或数据。 万维网服务器在这方面可能较为宽松,但您仍不希望它向任何访问者透露您个人的所有数据。

在上面的列表中,第一种情况需要最大程度的人际互动,例如在您联系银行职员时,您需要证明自己就是银行帐号的持有人。 然后您需要提供签名、PIN 或密码,来证明您就是您自己声称的那个人。 有时候,有些人可能会通过提及一些大家都知道的零散信息,利用花言巧语骗取知情人的信任,诱导知情人说出机密信息。 受骗人可能会被一步步地诱骗出更多信息,而自己却一直蒙在鼓里。 这种手段在黑客内部称为社会工程。 要防止受骗,您只能对人们进行教育,并且学会言辞谨慎,不轻易透露信息。 在闯入计算机系统之前,攻击者通常将目标锁定在接待员、公司内的服务人员,甚至也可能是家庭成员。 在很多情况下,最终发现这种利用社会工程手段发起的攻击时,通常为时已晚。

企图未经授权访问您数据的人也可能使用传统方法直接攻击您的硬件。 因此,应该防止有人对计算机做手脚,让任何人都无法拆除、替换或损坏其部件。 这也适用于各种备份,甚至是各种网络电缆或电线。 还应保护引导过程,因为已知有些按键组合会引起异常行为。 通过为 BIOS 和引导加载程序设置密码可以提供这方面的保护。

串行终端连接到串行端口,目前很多地方仍在使用这种连接方式。与网络接口不同,它们不依赖网络协议与主机通讯。 通过一根缆线或是红外端口就可以在设备间发送纯字符数据。 电缆本身是这种系统最薄弱的地方:连接了较旧的打印机后,很容易记录下流过电缆的数据。通过打印机做的事情也可以通过其他方式来完成,具体取决于攻击的强度。

在一台主机的本地读取文件需要一定的访问规则,这与打开网络连接访问其他主机上的服务器所需的规则不同。 本地安全不同于网络安全。 区别即在于:必须将数据放入包中才能发送到其他位置。

本地安全本地安全

关于本地安全,还要从计算机运行所在的位置的物理环境说起。 在符合您的安全预期和需要的地点搭建计算机系统。 本地安全的主要目标是将不同用户分隔开,防止某个用户假借其他用户的权限或身份。 这是要遵守的一条基本规则,但这条规则对 root(根用户,对系统拥有最高权力)尤其适用。root 不必输入密码即具有其他任何本地用户的身份,还能够读取本地储存的所有文件。

密码密码

在 Linux 系统中,密码不是以纯文本格式储存的,而且也不能简单地将输入的文本字符串与保存的模式匹配。 如果事实正好相反,只要有人取得了相应文件的访问权,就会危及系统中所有帐户的安全。 所以要对储存的密码加密,并且每次输入时都要再次加密,而后对两个加密字符串进行比较。 只有在无法将加密密码反向计算为原始文本字符串时,这种方式才能提高安全性。

实际上,这是通过一种特殊算法(亦称活门算法)实现的,因为该算法只能单向有效。 截获加密字符串的攻击者无法通过简单地再次应用同一算法来获取您的密码。 这需要测试所有可能的字符组合,直到有一种组合看似加密时的密码。 对于八位字符密码,需要计算的可能组合是相当多的。

20 世纪 70 年代时,人们对这种方法是否比其他方法更安全存在争议,因为其中所用算法的计算速度相对较慢,几秒钟才能加密一个密码。 而与此同时,PC 的处理能力已足够大,每秒可进行几十万次甚至是几百万次的加密。 正因为这样,不应让普通用户看到加密密码(普通用户不能读取 /etc/shadow)。 更重要的是,密码应该是不容易猜出的,以防因意外错误而暴露密码文件。 因此,将“tantalize”这样的密码“转换”为“t@nt@1lz3”实际上没有任何帮助。

用相似的数字替换单词中的某些字母是不够安全的。 利用字典来猜字的密码破解程序用的也是类似的替换方法。 最好是编造出没有一般意义的词,即仅对您自己有意义的词,如句中各词的词首字母,或书名,如 Umberto Eco 撰写的 “The Name of the Rose”。 这样可以编写以下安全的密码:“TNotRbUE9”。相比之下,像“beerbuddy”或“jasmine76”这样的密码,即便是不太了解您的人也很容易猜出。

引导过程引导过程

配置系统,让其无法从软盘或 CD 引导;配置方法为:彻底拆除驱动器,或设置 BIOS 密码,将 BIOS 配置为只能从硬盘引导。 通常,Linux 系统要通过引导加载程序来启动,这样您可以向引导内核传递更多选项。 通过在 /boot/grub/menu.lst 中设置额外的密码可防止其他用户在引导期间使用这类参数(请参见第 18 章 引导加载程序)。 这对您的系统安全举足轻重。 不仅内核本身以 root 权限运行,而且内核还是在系统启动时授予 root 权限的第一个权威对象。

文件权限文件权限

一般来说,执行某项任务时应始终尽量使用限制性最强的特权。 例如,以 root 权限读写电子邮件是完全没有必要的。 如果邮件程序有错误,攻击者则可能利用该错误,以该程序启动时所具有的权限发起攻击。 如若遵守上述规则,则可以尽量减少可能的损失。

在 SUSE Linux Enterprise 分发包中包括的所有文件的权限经过了小心的选择。系统管理员在安装附加软件或其他文件时要特别小心,尤其是在设置权限位时。 经验丰富且安全意识强的系统管理员始终在命令 ls 后使用 -l 选项获取详细的文件列表,这样他们可以立即检测出有错误的文件权限。 错误的文件特性不仅意味着文件可能被更改或删除, root 还可能执行这些改过的文件;或者如果是配置文件,程序则可能以 root 权限使用这些文件。 这使系统很容易受到攻击。 这类攻击被称为布谷鸟蛋,因为程序(蛋)由另一个用户(鸟)执行(孵化),就像是布谷鸟诱骗其他鸟代其孵蛋。

SUSE Linux Enterprise 系统中的文件 permissionspermissions.easypermissions.securepermissions.paranoid 都位于 /etc 目录中。 这些文件用于定义特殊权限(如全局可写目录),或为文件定义 setuser ID 位(设置了 setuser ID 位的程序不以启动该程序的用户的权限运行,而以文件拥有者的权限运行,这个权限多为 root)。 管理员可以使用文件 /etc/permissions.local 添加自己的设置。

要定义 SUSE Linux Enterprise 的配置使用以上哪个文件来相应地设置权限,请选择 YaST 部分安全性和用户中的本地安全性。要了解这一主题的详细信息,请阅读 /etc/permissions 中的注释,或参考 chmod 手册页 (manchmod)。

缓冲区溢出错误和格式字符串错误缓冲区溢出错误和格式字符串错误

只要程序要处理的数据可以或可能被用户更改,就应该加倍小心;但这个问题更应该是应用程序编程人员的问题而不是普通用户的问题。 编程人员必须确保自己编写的应用程序以正确的方式解释数据,避免将这些数据写入内存时,因为内存区域过小而无法容纳。 此外,程序应能够通过专用接口一致地传递数据。

如果写入内存缓冲区时未考虑该缓冲区的实际大小,则会发生缓冲区溢出。 有时这些数据(即用户生成的数据)占用的空间会超过该缓冲区所能提供的空间。 结果导致数据写出缓冲区,以致于在特定情况下,程序可能执行受用户(而不是编程人员)影响的程序顺序,而不只是处理用户数据。 这种错误可能导致严重后果,特别是在使用特权执行程序时(请参见第 44.1.4 节 “文件权限”)。

格式字符串错误的作用方式略有不同,但同样也是用户输入导致了程序出错。 多数情况下,这些编程错误会被以特殊权限执行的程序(setuid 程序和 setgid 程序)利用,这也意味着您可以通过取消这些程序的相应执行特权,来防止您的数据和系统受到这种错误的影响。 同样,最好的办法是使用尽可能低的特权(请参见第 44.1.4 节 “文件权限”)。

鉴于缓冲区溢出错误和格式字符串错误都是与用户数据处理有关的错误,攻击者不仅可以在本地帐户具有访问权的情况下利用这些错误, 还可以通过网络链接利用许多已报告的错误。 因此,缓冲区溢出错误和格式字符串错误与本地安全和网络安全都有关系。

病毒病毒

Linux 上确有病毒运行,这与某些人的说法正好相反。 但是,已知的这些病毒是由它们的创作者为进行概念验证而发布的,目的是为证明这种技术可以发挥预期的作用。 目前尚未发现上述病毒中有任何正在流行

没有借以寄生的宿主,病毒将无法生存和传播。 对于计算机病毒来说,这个“宿主”是病毒程序代码能写入的某个程序或系统中的重要储存区域(如主引导记录)。 由于 Linux 支持多用户处理,所以它可以将写权限限制到特定文件,这对系统文件尤其重要。 因此,以 root 权限执行一般操作无疑会增大系统受病毒感染的机率。 相反,若遵循上述规则(即使用尽可能低的特权),感染病毒的机率会非常低。

除此之外,切勿在未真正了解某个因特网站点时就仓促执行其中的程序。 SUSE Linux Enterprise 的 RPM 包具有加密签名,这是个数字标签,表明在生成包时已经考虑到必要的安全措施。 病毒的存在是管理员或用户缺乏必要的安全意识的典型表现,病毒使系统受到威胁,即使是设计上高度安全的系统也无法逃避。

不应将病毒和蠕虫混为一谈,后者属于全球网络的问题。 蠕虫的传播不需要宿主。

网络安全网络安全

网络安全对于保护系统免遭外部攻击至关重要。 典型的登录过程(即要求提供用户名和密码以进行用户鉴定)仍然是个本地安全问题。 在通过网络登录的特定情况下,应该区分这两方面的安全问题。 在实际鉴定之前发生的属于网络安全问题,之后发生的属于本地安全问题。

X 窗口系统和 X 鉴定X 窗口系统和 X 鉴定

正如本文开头所述,网络透明特性是 UNIX 系统的核心特性之一。 X(作为 UNIX 操作系统的窗口系统)能明显地利用这一特性。 利用 X 系统,在远程主机上登录,然后启动一个图形化程序,令其随后通过网络发送并显示在您的计算机上,这个过程基本不成问题。

如果应该使用 X 服务器远程显示 X 客户机,X 服务器应该防止未经授权访问受其管理的资源(即显示)。 更具体地说,必须给客户机指派特定权限。 在 X 窗口系统中,有两种指派权限的方法,分别为基于主机的访问控制和基于 Cookie 的访问控制。 前者依赖应该运行客户程序的主机的 IP 地址。 所用的控制程序为 xhost。使用 xhost 可以将合法客户机的 IP 地址输入属于 X 服务器的小型数据库。 不过,依赖 IP 地址进行鉴定不是十分安全。 例如,如果另有用户在发送客户程序的主机上工作,该用户将同样能够访问 X 服务器 - 就像是有人盗取了 IP 地址。 由于存在这些缺点,在此不再详述这种鉴定方法,但您可以通过 manxhost 了解更多相关信息。

使用基于 Cookie 的访问控制时,将生成一个只有 X 服务器和合法用户才知道的字符串,就像是某种身份证。 这个 Cookie(该词并不指普通意义上的小甜饼,而是指里面有幸运签的中国幸运饼)在登录时储存在用户主目录下的文件 .Xauthority 中,并且可供要使用 X 服务器显示窗口的所有 X 客户机使用。 用户可以使用工具 xauth 检查文件 .Xauthority。 如果将 .Xauthority 重命名或者意外地从主目录中删除了该文件,则无法再打开任何新窗口或 X 客户机。 有关 X 窗口系统安全机制的详细信息,请参见 Xsecurity 手册页 (manXsecurity)。

SSH(安全 shell)可用于对网络连接彻底加密并将其透明地转发给 X 服务器,而用户根本察觉不到这种加密机制。 这也称为 X 转发。 要实现 X 转发,需要在服务器端模拟 X 服务器,并在远程主机上为 shell 设置 DISPLAY 变量。 有关 SSH 的更多详细信息,请参见 第 40 章 SSH:安全性网络操作

[Warning]警告

如果不认为登录主机是安全主机,请不要使用 X 转发。 在不安全的主机上启用 X 转发后,攻击者可能经由 SSH 连接通过鉴定,闯入您的 X 服务器并嗅探键盘输入之类的信息。

缓冲区溢出错误和格式字符串错误缓冲区溢出错误和格式字符串错误

第 44.1.5 节 “缓冲区溢出错误和格式字符串错误”所述,缓冲区溢出错误和格式字符串错误应划归与本地安全和网络安全都有关系的问题。 与这些错误的本地情况一样,若成功攻击了网络程序中的缓冲区溢出漏洞,常常可以获取 root 权限。 即便不是这样,攻击者也可以利用该错误获取对非特权本地帐户的访问,以攻击系统中可能存在的其他任何漏洞。

一般来说,通过网络链接发起的针对缓冲区溢出错误和格式字符串错误的攻击当属远程攻击中最常见的形式。 攻击的漏洞 - 用于攻击新发现的安全漏洞的程序 - 通常在安全邮件列表上发布。 通过它们可以修补漏洞而不必了解代码的详细信息。 多年来的经验表明:漏洞检测代码的存在成就了更为安全的操作系统,这显然是因为迫于压力,操作系统制造商不得不修复他们软件中的问题。 在自由软件中,任何人都有权访问源代码(SUSE Linux Enterprise 提供所有可用源代码),并且任何人在发现漏洞及其漏洞检测代码后都可以提交增补程序来修复相应的错误。

拒绝服务拒绝服务

拒绝服务 (DoS) 攻击的目的是阻断某个服务器程序或甚至阻断整个系统,通过以下方式来实现阻断:使服务器过载、用垃圾包使服务器一直繁忙或利用远程缓冲区溢出。DoS 攻击往往只有一个目的:让服务不再可用。 不过,一旦某个服务不再可用,通讯就易于受到中间人攻击(嗅探、TCP 连接劫持、欺骗),或发生 DNS 中毒。

中间人:嗅探、劫持、欺骗中间人:嗅探、劫持、欺骗

一般而言,由身处通讯主机之间的攻击者发起的所有远程攻击都称为中间人攻击。 几乎所有类型的中间人攻击都有一个共同特点,即受害人通常毫无察觉。 这种攻击有多种变化形式,例如,攻击者可能会截获连接请求并自行将其转发给目标计算机。 现在受害者就会在不知情的情况下与错误的主机建立连接,因为连接的这一端伪装为合法的目标计算机。

最简单的中间人攻击的形式称为嗅探 - 攻击者“只是”监听通过网络传递的数据流。 更为复杂的“中间人攻击”可能会试图接管已经建立的连接(劫持)。 劫持之前,攻击者需要一段时间对数据包进行分析,以便能够推测出属于该连接的 TCP 顺序号。 在攻击者最终夺取目标主机的角色后,受害人会注意到这一点,因为他们会收到一条错误讯息,说明连接因失败而终止。 由于有些协议没有通过加密来预防劫持,只是在建立连接后执行简单的鉴定过程,这给攻击者创造了可乘之机。

欺骗类型的攻击是对数据包进行修改,使其包含虚假的源数据(通常是 IP 地址)。 多数较活跃的攻击都依赖于发送这种虚假数据包 — 在 Linux 计算机上,发送包的任务只能由超级用户 (root) 执行。

上述很多攻击都是与 DoS 同时进行的。 一旦攻击者发现有机会让某台主机突然宕机,即便是很短的时间,攻击者也容易发起猛烈攻击,因为主机将在一段时间内无法对抗攻击。

DNS 中毒DNS 中毒

DNS 中毒指的是通过向 DNS 服务器回复伪造的 DNS 回复包,试图让该服务器向请求其发送信息的受害者发送特定数据,以此破坏 DNS 服务器的超速缓存。 许多服务器都基于 IP 地址或主机名与其他主机保持信任关系。 攻击者需要非常熟悉主机之间信任关系的实际结构,才能将自己伪装为受信主机之一。 通常,攻击者会分析一些从服务器接收的包,获取必要信息。 攻击者还常常需要对名称服务器适时发动 DoS 攻击。 您可以使用加密连接,通过对要连接的主机的身份进行校验来保护自己。

蠕虫蠕虫

蠕虫经常被误认为是病毒,但两者有着明显的区别。 不同于病毒,蠕虫无需感染某个要寄生的主机程序。 它们的特点就是尽快在网络结构中传播。 以往的蠕虫,如 Ramen、Lion 或 Adore,全都利用 bind8 或 lprNG 之类的服务器程序中的已知安全漏洞。 蠕虫的预防相对简单。 鉴于在发现安全漏洞和蠕虫对服务器发起攻击之间有一段时间,很有可能及时提供受影响的程序的更新版本。 只有管理员确实在受感染系统上安装了安全更新程序时,这种方法才有用。