用户帐号不适当的安全问题是攻击侵入系统的主要手段之一。其实小心的帐号管理员可以避免很多潜在的问题,如选择强固的密码、有效的策略加强通知用户的习惯,分配适当的权限等。所有这些要求一定要符合安全结构的尺度。介于整个过程实施的复杂性,需要多个用户共同来完成,而当维护小的入侵时就不需要麻烦这些所有的用户。
整体的安全策略中本地帐号的安全是非常重要的。这节课,我们将探讨用不同的方法来保护本地帐号的安全。
本章要点:
·描述帐号安全和密码之间的关系
·在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