网络安全讲座之四账号安全和文件系统安全
用户帐号不适当的安全问题是攻击侵入系统的主要手段之一。其实小心的帐号管理员可以避免很多潜在的问题,如选择强固的密码、有效的策略加强通知用户的习惯,分配适当的权限等。所有这些要求一定要符合安全结构的尺度。介于整个过程实施的复杂性,需要多个用户共同来完成,而当维护小的入侵时就不需要麻烦这些所有的用户。
整体的安全策略中本地帐号的安全是非常重要的。这节课,我们将探讨用不同的方法来保护本地帐号的安全。 本章要点: ·描述帐号安全和密码之间的关系 ·在Windows NT和UNIX系统的实现安全帐号的技术 ·在NT下实施密码策略的步骤 ·描述UNIX密码安全及密码文件的格式 ·分析UNIX下的安全威胁,拒绝帐号访问和监视帐号 密码的重要性 密码是UNIX和Windows NT安全基础的核心。如果危及到密码,那个基本的安全机制和模式将遭到严重影响。为了选择强固的密码,你需要在帐号策略里设置更多相关的选项。你还要帮助用户选择强壮的密码。 一个强固的密码至于要有下列四方面内容的三种: ·大写字母 ·小写字母 ·数字 ·非字母数字的字符,如标点符号 强固的密码还要符合下列的规则 ·不使用普通的名字或昵称 ·不使用普通的个人信息,如生日日期 ·密码里不含有重复的字母或数字 ·至少使用八个字符 从黑客的思想考虑,避免密码容易被猜出或发现(比如不要写到纸条上放到抽屉里)。 NT下的密码安全 在NT下为了强制使用强壮的密码,你可以更改注册表里的LSA值来实现,叫passfilt.dll,这个文件可以在Windows NT的Service Pack2及以后的版本里找到。在LSA键值下需要添加Notification Packages字串并把值为passfilt.dll加进去。这串值必须在公司所有的域控制器里都加入。同时你还需要使用passprop.exe这个程序来使passfilt.dll生效。 UNIX下的密码安全 在UNIX中加密后的密码信息是存在一个文件里,通常是/etc/passwd 。维护好这个文件的安全性是非常重要的。在UNIX系统里它的属主是具有最高权限的帐号,即root的。UNIX基本上有两类用户:普通用户和系统特权用户。有时特权用户也被不确切地叫做超级用户。实际上,一个超级用户帐号的标识号是为零。当一个帐号建立的时候,会被分配一个唯一的标识数字(UID)。这个数字分配从0开始,最低的数字(也就是最高的权限)是分配给登陆帐号root的。Root可以执行任何程序,打开任何目录,检查任何文件,改变系统内任何对象的属性及其它任意的功能。任何对于攻击UNIX系统的黑客最终目的都是取得Root帐号。 Root掌管/etc/passwd文件。此文件可以被所有登陆的用户读取,它包含每一个用户的认证信息。因此,在简单的UNIX系统上任何人都可以复制这个文件的内容并分析哪个字段是包含加密后的密码。然后利用不同的密码一系列的尝试和/etc/passwd加密后的字串进行比较。因此,密码的选择是UNIX系统安全级别中最重要的。 Windows NT帐号安全 首先,也是最困难的任务就是确保只有必需的帐户被使用而且每个帐号仅有能满足他们完成工作的最小权限。在一个大型的公司里,通常是用一个或多个用户域集中管理所有的用户帐号。域是一个中央集权的帐号数据库可以在分布于公司中间。因此有经验的管理员尽量地把用户放到较少的域里面以便于管理。这种限制通常促进公司策略的粘附性。本地组创建本地资源并管理权限。本地资源的机器要被配置成信任集中帐号域。但有时这种设置也是不可行的,因为和远程站点间没有足够的带宽。 有几种技术可以解决帐号安全的问题。其中一个主要关心的是确保不再有新的帐号建立或已存在的帐户权限不作改动。另一个简单的方法就是利用net user和net group命令把信息定向到一个文体文件里后进行比照。有规律地运行这些命令并对输出的文本文件中的帐号列表进行比较就能轻易地发现问题。一些内置的工具,比如系统任务进度表程序,可以自动的执行。也可以使用其它一些外部工具比如Perl或diff可以自动地对标准列表和当前的设置进行比照。 帐号重命名 另一个可靠的办法就是对默认的帐号重命名。包括administrator、guest以及其它一些由安装软件时(如IIS)所自动建立的帐号。这些帐号必须好好保护因为它们易受攻击。然而简单地重命名帐号并不能很好地隐藏它们。因为Windows NT必须知道哪一个是管理员帐号,管理员帐号当前的名字是保存在注册表里的。 帐号策略 为了保持用户数据库不被侵犯,你必须强制用户养成良好的习惯在帐号的设置上要能有效地防止黑客使用暴力破解的方法来攻击。这些任务主要是通过Windows NT上的帐号策略上设置的。帐号策略的设置是通过域用户管理器来实施的,从策略的菜单中选择用户权限,第一项是有关密码的时效,第二项是有关密码长度的限制,以及帐号锁定等机制。 实现强壮的密码 大多数情况下,仅养成使用好密码的习惯是不够的;你还需要使用更强壮的密码来有效阻止类似于字典攻击和暴力破解攻击。我们前面已经讨论,一个强壮的密码至少需要六个字符,不能包括用户名的任何一部分,并且至少要有大小写字母、数字和通配符等。为了实施强壮的密码你需要在注册表里LSA项加入本课已提过的其它的密码过滤器。在主域控制器或在任一可能会升级为主域控制器的备份域控制器上,你都需要在注册表HKLM\System\CurrentControlSet\Control\LSA中加入PASSFILT的字串。 Windows2000帐号大漏洞 在Windows2000启动之后,按照屏幕提示按下ALT+CTRL+DEL进行登录,在登录界面将光标移至用户名输入框,按键盘上的Ctrl+Shift键进行输入法的切换,屏幕上出现输入法状态条,在出现的“全拼”输入法中将鼠标移至输入法状态条点击鼠标右键,出现的选单中选择“帮助”,然后继续选择“输入法入门”,在窗口顶部会出现几个按钮,奥妙就在“选项按钮”上。如果系统是未安装Windows2000 ServicePack1或IE5.5的系统,用鼠标左键点击选项按钮,在出现的选单中选择“主页”,这时在已出现的帮助窗口的右侧会出现IE浏览器界面中的“此页不可显示”页面,其中有个“检测网络设置”的链接,点击它就会出现网络设置选项,这样任何人都可以对网络设置甚至控制面板做任何修改。 或者之前用鼠标左键点击“选项”按钮时,在出现的选单选择“Internet选项”中,就可以对主页、连结,安全、高级选项等做任何修改。最为严重的是用鼠标右键点击先前提到的“选项”按钮会出现一个选单,选择“跳至URL”,这时出现一个对话框,其中有一个跳至该URL输入框,输入你想看到的路径,比如c:,那么这时在已出现的帮助窗口的右侧会出现资源管理器c盘的界面显示,这时已经是系统管理员权限对C盘进行操作了。操作者可以对看到的数据做任何的操作,这样他就完全绕过了Windows2000的登录验证机制。 如果系统是安装了Windows2000 ServicePack1或IE5.5的系统,上面所用的“网络设置选项”就不能执行了,但“Internet选项”仍可执行。资源管理器界面仍可出现,通过路径输入,所有的文件夹中的文件和根目录下的文件都可看到,但已不能直接对文件夹和文件进行操作,然而仍可以用鼠标右键点击文件夹和文件选择进行删除、重命名和发送到软盘等操作,而且更为严重的是操作者可以对文件夹进行共享操作,在单个文件出现的对话框中选择属性,就可以任意添加共享权限,如任何人都能完全控制的权限,这样网络中的所有人都可以通过网络远程登录完全控制所有数据资料! ||||||UNIX帐号安全 在讨论UNIX帐号安全,你首先要理解UNIX密码的安全。这种理解需要检查密码文件的格式。你可以利用下面的命令来得到几种特殊密码的格式 $ man 5 password
密码文件包括几个字段,在表2-1作了详细解释 字 段 用 处 登陆名字 用户登陆时所真正使用的名字 加密后的密码 在UNIX中,密码是用高强度的DES算法来进行加密并保存结果 UID 用户唯一的标识号 GID 用户组的标识号 用户名 用户真正的名字 HOME 默认的主目录 SHELL 默认的程序SHELL接口 密码文件在显示的时候是加密的;这种显示叫做Shadow密码,通常创建在/etc/shadow,并属于root且只有root有权访问。 密码时效 按目前的形势,已有更强大的硬件大大地缩短了利用自动运行的程序来猜测密码的时间。因此在UNIX系统中防止密码被攻击的别一方法就是要经常地改变密码。很多时候,用户却不改变密码。因此一种机制用来强制规律性的更改密码是合乎要求的。这种技术称做密码时效并在很多UNIX系统上有效。 密码时效:LINUX 在LINUX系统上,密码时效是通过chage命令来管理的。 参数意思 -m 密码可更改的最小天数。如果是零代表任何时候都可以更改密码 -M 密码更改的最大天数 -W 用户密码到期前,提前收到警告信息的天数。 -e 帐号到期的日期。过了这天,此帐号将不可用。 -d 上一次更改的日期 -i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 举个例子 % chage ?m 2 ?M 30 ?W 5 steven 此命令要求用户steven两天内不能更改密码,并且密码最长的存活期为30天,并在密码过期前5天通知他。 记录不成功的登陆企图 所有的UNIX系统都能够记录非成功的登陆企图。在LINUX中,登陆的失败是由syslog守护进程记录在/var/log/messages文件里。可以用下列命令来查找相关信息 $ grep login /var/log/messages 搜索路径(PATH)的重要性 在UNIX里,常使用的命令用来在不同的环境下查找一组特殊的目录称做PATH。想要运行当前目录包含的命令时是不需要加上一长串路径名的。在UNIX中用户经常使用”.”来表示当前的目录。如果”.”作为shell环境变量的一部分时,一个全局目录下的shell脚本或公用命令就有可能被相同目录下的伪程序所解释,而这个命令可能包含一段代码,一旦被执行后果可能是较严重的,比如是一个木马程序。在Bourne or Korn Shell里搜索路径通常这样来设置: $ PATH=pathname1:pathname2:pathname3: $ export PATH 在C或类似的shell里,以下列命令设置: % set path = (pathname1 pathname2 pathname3) 在UNIX中像这样的路径可以保存在.profile文件里,可以看到像下面的语句 PATH=/bin:/usr/bin:/sbin:$HOME Export PATH 因此,如果你经常参考用户主目录下的某个文件时,就创建一个叫”bin”的并把所以的个人的可执行文件放到里面,并要严格注意它们的安全性。假设”.”路径名存在于用户的shell初始化文件里,并且用户不精通有关安全的知识而且不太注意环境变量中路径,那么可以想像他经常使用到的who命令。假设用户已创建了下面的文件 $ touch /tmp/testfile 然后,编辑下面的程序并保存为who.c文件 # include main() { system (“/usr/bin/who”); system (“/bin/rm /tmp/testfile 2>/dev/null”); } 然后对些程序进行编译 $ gcc ?o who who.c 并且此用户可能含有这样的profile: PATH=.:/bin:/usr/bin:/sbin:$HOME Export PATH 现在,如果户键入 $ who 再去找找你刚刚建立的testfile这个文件,看看发生了什么.. 限制root登陆 另一增强root帐号安全的方法是限制其在系统上直接登陆。不同版本的UNIX处理此项任务的方法是不同的。 在SUN的Solaris系统上要修改/etc/default/login文件,你需要加入下面一行 CONSOLE=/dev/console 现在你已知道如何实施帐号的安全,并已建立了一个有效的认证机制,接下来将实施安全中访问控制部分。访问控制必须在两个地方实施,即本地和远程。文件可以由用户在本地访问或通过网络进行远程访问。本课将对这两种方法逐一进行测试。
Windows NT文件系统安全 当建立文件的权限时,你必须先实现Windows NT的文件系统(NTFS),当然你也可以使用FAT格式,但是并不支持文件级的权限。FAT只在那些相对来讲,对安全要求较低的情况下使用。即使NTFS也不能认为是能完全地保护文件的,这一点在稍后的实验中你将会看到。 一旦已经实施了NTFS的文件系统格式,可通过Windows NT的资源管理器直接来管理文件的安全。使用NT资源管理器你可为设置目录或文件的权限。基于文件级的权限你可以分配下面几种:读取(R),写入(W),执行(X),删除(D),改变(P),取得所有权(O)。详细请参照下表: NTFS权限 基于目录 基于文件 读取 (R) 显示目录名,属性,所有者及权限 显示文件数据,属性,所有者及权限 写入 (W) 添加文件和目录,改变一个属性以及显示所有者和权限 显示所有者和权限;改变文件的属性;在文件内加入数据 执行 (X) 显示属性,可进入目录中的目录,显示所有者和权限 显示文件属性,所有者和权限;如果是可执行文件可运行 删除 (D) 可删除目录 可删除文件 改变权限 (P) 改变目录的权限 改变文件的权限 取得所有权 (O) 取得目录的所有权 取得文件的所有权 为了简化权限的管理,NT有几种有关权限的标准。通常在分配权限的时候,往往是组合使用权限而不是使用单独的权限,这些权限如下表 标准权限 基于目录 基于文件 不可访问 无 无 列出 RX 不适用 读取 RX RX 添加 WX 不适用 添加和读取 RWS RX 更改 RWXD RWXD 完全控制 ALL ALL 在这些权限的基础上,你可以达到根据需要来访问控制。但是确定什么是你需要的最小权限是困难的。回顾一下第一课我们所讲的一个新建立的NTFS分区默认情况下everyone组对其有完全控制的权限。这种标准是无法接受的,如果你不加选择的删除everyone组或在任何地方都把不可访问的权限赋予给everyone组,那么有可能会损坏你的NT安装。Everyone组必须可以访问主要的系统目录(比如登陆目录)来使用户能够连接和登陆到服务器上。因为用户在开始登陆的过程中还没有被认证,你必须使用everyone组提供访问以使他们能够被认证。赋予everyone组不可访问其实更危险,因为拒绝访问优先于允许访问,而且所有的用户都是属于everyone组的,这样也就等于完全阻止了对文件系统的访问。 目录的权限分配和文件是一样的。目录的权限影响其目录中新建的文件。换句话说就是任何新建的文件将继承此目录的权限。 磁盘分区 因为操作系统目录的权限是非常严格的,把Windows NT放置自己单独的分区内是个明智的选择。在这个分区上只安装Windows NT而不安装应用程序使管理任务简单很多,一个磁盘分区可能会像下图这样。 操作系统
程序文件 数据 尽管这种分区需要额外地策划,但它还是很有吸引力,特别是简化了对于目录权限的管理。目录可以根据需要分开。如果 你在运行一个设备如WEB服务器,你可能会考虑使用HTML,图像和其它一些静态文件在一个分区上,而你的脚本文件则放到另一个分区上。你可以将脚本设置成只可以执行那些静态文件可允许读取。这种策略的结果就是易于管理文件和目录的权限。 复制和移动文件 最后,你要理解当文件被复制和移动的时候发生了什么。每当一个文件被复制到一个新的目录里时,这个文件将继承目标目录的权限。当文件移动时,过程是很复杂的。如果一个文件从一个目录移动到同一分区下的另一个目录,那么此文件的权限将保留。当文件在相同的分区内移动时,Windows NT对于新目录的位置更新目录分配表。当文件在两个不同的分区间移动时,Windows NT首先把这个文件复制到新位置,在成功地复制之后,Windows NTG再删除掉原始的那个文件。一个新文件被建立后,将继承目标目录的权限。 远程文件访问控制 远程的访问一个文件或目录是通过共享权限来提供的。一个共享就是供远程用户访问文件的网络访问点。当配置这些共享时,你要设置相应的权限。共享权限的应用类似于在NTFS上权限的应用。主要的区别是共享权限缺乏精细地权限设置。你只能分配不可访问、读取、更改和完全控制的权限。参照下表 权限 允许 完全控制 改变文件的权限;在NTFS卷上取得文件的所有权; 能够完成所有,有更改权限所执行的任务 更改 创建目录和添加文件;更改文件内的数据;更改文件的属性; 删除目录和文件;能完成所有有读取权限执行的任务 读取 显示目录和文件名;显示文件数据和属性;运行应用程序文件 在目录里可转到另一目录 不可访问 仅能和共享目录建立连接,拒绝访问而且目录里的内容不可见 共享的权限和共享点一定要小心地分配。因为权限仅仅是分配给共享点的,任何共享点下的文件或目录都是以和共享点本身相同的权限被访问的。 结合使用本地和远程权限 Windows NT权限的设计是要综合使用NTFS和共享权限。因为Windows NT的设计是作为一个服务器,用户很少直接访问文件。当然,共享的安全性对于需要更加安全是远远不够的,因此共享和远程都需要使用。当你结合使用共享和NTFS权限时,两者中最严格的权限优先使用。 UNIX文件系统安全 在UNIX领域里,所有的信息都是储存在文件里,并有一个相关的名字。文件是存储在目录中的,但UNIX仍把它看作是文件。本课的重点是UNIX文件系统是如何处理权限的。这些权限控制什么样的用户可以访问以及如何访问。文件系统已是强制UNIX系统安全的最基础的方法。 ||||||UNIX下的文件格式 UNIX对于文件的读取和写入,是以像树状结构的方式维护的。很多年前,UXNI文件系统就支持长文件名和目录名。所有的文件都有i-节点或连接点;它包含一个文件所有的统计和后勤信息。一些数据包含: ·文件类型 ·大小(以字节为单位) ·参考计数。如果有其它不同名字而实际上是相同的一个文件(叫做链接文件) ·拒绝地址列表指示器 ·时间戳。比如文件最后一次访问的时间;文件内容最后一次被修改的时间等.. ·安全相关字段:文件属主的UID及GID ·文件访问权限或位,也称做Mode bits。 Ls 命令是最常用的UNIX命令,用来查看文件和目录的权限。 第一个命令ls –ld .意思是:列出当.下的内容通常.是指当前的目录;在本例中,用户自动地登陆到他的主目录中,而命令中的.是作为当前目录的意思 对于命令输出的结果详细说明见下表 输出符号 含义 d 表明目录 r 属主可以读取访问 w 属主有写权限 x 属主对目录有搜索及执行权限
R
属主所在组的用户有读取访问的权限(本例中是staff组) -属主所在组没有写权限 x 属主所在组对目录有搜索及执行权限 R 其它用户有读取权限(任何人) -其它用户没有写权限 X 其它用户对目录有搜索及执行权限 4 参考计数 test 属主的登陆名 Staff 属主用户所属于的组名 512 目录的大小(字节) Time Stamp 最后一次改变大小的日期 08:41 改变时的时间 .所有这些信息所属于的文件名 第二个命令ls –la .bashrc_profile如图输出的有关用户配置文件的信息,它的组成部分见下表 范围值 含义 -普通文件 R 属主有读取访问权限 W 属主有写权限 属主没有执行权限 R 属主所在组有读取权限 -属主所在组没有写权限 -任何组都没有执行的权限 R 其它用户有读取权限(任何人) 其它用户有写权限
其它用户没有执行的权限 230 文件大小 Time Stamp 文件建立的日期。第三个命令ls –la 123列出一个普通文件的权限。此文件在这里叫123。ls命令通常都是列出其属主和其它用户对此文件有什么样的特殊权限。 第四个命令ls –l /etc/rc.d/init.d/linuxconf主要列出了linux重要配置文件linuxconf的权限。参照表3-6 文件值 含义 L 链接;文件指向另一个文件 Rwx 属主有完全控制的权限 Rwx 属主所在组有完全控制的权限
Rwx 所有其它用户有完全控制的权限 1 参考计数(说明是唯一的文件) Root此文件真正的所有者 Root 文件所属的组名43 文件大小(字节)
Stamp文件首次建立的日期 用来说明真正文件的链接或符号 usr/lib/linuxconf/ redhat/scripts/linuxconf 说明文件的物理位置
现在你已经理解了在UNIX下的文件或目录不同模式位所代表的含义,下面我们将用不同的方法来改变它们。 通常对普通文件默认的权限是666(属主、所在组及其它用户有读取和写入的权限)。每个位(八进制值)都分配给文件的三个组成部分(属主、所在组及其它用户)。对于一个可执行的程序默认的权限可能是777(对所有的用户都是有读取、写入和搜索执行的权限)。 Umask命令默认的”mask”为022,通常与文件的模式位相AND来改变,比如对一个默认权限为0666的文件作AND得到最后的模式位为0644,也就是最后文件的权限为属主有读、写权限,所在组和其它用户有只读的权限。 在一个站点中的所有的用户都期望保护他们自己的数据,默认情况下,是由其它用户来检查的,所有的用户都应该有一个UMASK值为077。如果用户需要和所在组的用户协同完成项目时,那么umask值为037是最佳的选择。 The chmod 命令 Chmod命令是用来操纵文件权限的。这个命令可以以两种方法来应用 ·绝对模式:当使用这种方法时,命令是这样的 chmod 666 filename 这里,权限的模式位已经被绝对地应用到了文件上。应用到不同组成部分上的权限(如属主,组,其它用户)取决于输出的模式位,请参考表3-4 ·符号模式:当使用这种方法时,命令是这样的 chmod a+rwx filname 这里,对于些文件所有用户的权限都是可以读取、写入及执行。因为这些符号符合利用ls命令所显示出来的描述。 下表总结了所有Chmod命令使用的符号 符号 含义 U用户或属主 G组 O其它 A所有的用户,组和其它部分 +增加这些权限 -去掉这些权限 =设置权限等于 |


luoyuehansong
博客统计信息
热门文章
最新评论
友情链接