1
计算机系统安全
第 10章
常用攻击手段
2
1、攻击的位置
一、攻击的一些基本概念
( 1) 远程攻击:从该子网以外的地方向该子
网或者该子网内的系统发动攻击 。
( 2) 本地攻击:通过所在的局域网, 向本单
位的其他系统发动攻击, 在本机上进行非法
越权访问也是本地攻击 。
( 3) 伪远程攻击:指内部人员为了掩盖攻击
者的身份, 从本地获取目标的一些必要信息
后, 攻击过程从外部远程发起, 造成外部入
侵的现象 。
3
2、攻击的层次
一、攻击的一些基本概念
1) 简单拒绝服务 ( 如邮件炸弹攻击 ),
2) 本地用户获得非授权读或者写权限
3) 远程用户获得了非授权的帐号
4) 远程用户获得了特权文件的读写权限
5) 远程用户拥有了根 ( root) 权限 )
4
3、攻击的目的
一、攻击的一些基本概念
1) 进程的执行
2) 获取文件和传输中的数据
3) 获得超级用户权限
4) 对系统的非法访问
5) 进行不许可的操作
6) 拒绝服务
7)涂改信息
8)暴露信息
9)挑战
10)政治意图
11)经济利益
12)破坏
5
4、攻击的人员
一、攻击的一些基本概念
1) 黑客:为了挑战和获取访问权限
2) 间谍:为了政治情报信息
3) 恐怖主义者:为了政治目的而制造恐怖
4) 公司雇佣者:为了竞争经济利益
5) 职业犯罪:为了个人的经济利益
6) 破坏者:为了实现破坏
6
5、攻击的工具
一、攻击的一些基本概念
1) 用户命令:攻击者在命令行状态下或者图形用户接
口方式输入命令 。
2) 脚本或程序:在用户接口处初始化脚本和程序 。
3) 自治主体:攻击者初始化一个程序或者程序片断,
独立地执行操作, 挖掘弱点 。
4) 工具箱:攻击者使用软件包 ( 包含开发弱点的脚本,
程序, 自治主体 ) 。
5) 分布式工具:攻击者分发攻击工具到多台主机, 通
过协作方式执行攻击特定的目标 。
6) 电磁泄漏
7
6、攻击的时间
一、攻击的一些基本概念
大部分的攻击 ( 或至少是商业攻击时间 ) 一般
是服务器所在地的深夜 。
客观原因 。 在白天, 大多数入侵者要工作或学
习, 以至没空进行攻击 。
速度原因 。 网络正变得越来越拥挤, 因此最佳
的工作时间是在网络能提供高传输速度的时间
速率的时间 。
保密原因 。 白天系统管理员一旦发现有异常行
为 。 他们便会跟踪而来 。
8
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
1) 锁定目标
因特网上每一台网络主机都有一个名字, 术语称做
域名;然而在网上能真正标识主机的是 IP地址, 域
名只是用 IP地址指定的主机便于好记而起的名字 。
利用域名和 IP地址都可以顺利找到主机 。 DNS协议
不对转换或信息性的更新进行身份认证, 这使得该
协议被人以一些不同的方式加以利用 。 黑客只需实
施一次域转换操作就能得到所有主机的名称以及内
部 IP地址 。
9
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
2) 服务分析
用提供不同服务的应用程序试一试就知道了, 例如:
使用 Telnet,FTP等用户软件向目标主机申请服务, 如
果主机有应答就说明主机提供了这个服务, 开放了这
个端口的服务 。
黑客常用一些象 PORTSCAN这样的工具软件, 对目标
主机一定范围的端口进行扫描 。 这样可全部掌握目标
主机的端口情况 。 HAKTEK是一个非常实用的一个工
具软件, 它将许多应用集成在一起的工具, 其中包括,
Ping,IP地址范围扫描, 目标主机端口扫描, 邮件炸
弹, 过滤邮件, Finger主机等都是非常实用的工具 。
10
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
3) 系统分析
目标主机采用的是什么操作系统 。 黑客使用具有已知响应类型
的数据库的自动工具, 对来自目标主机的, 对坏数据包传送所
作出的响应进行检查 。 由于每种操作系统都有其独特的响应方
法 。 通过将此独特的响应与数据库中的已知响应进行对比, 黑
客经常能够确定出目标主机所运行的操作系统 。 打开 WIN95的
RUN窗口, 然后输入命令:
Telnet xx.xx.xx.xx(目标主机 )
然后按 "确定 ",会出现什么?
Digital UNIX (xx.xx.xx) (ttyp1)
login:
11
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
4) 获取帐号信息
对于陌生的目标主机可能只知道它有一个 ROOT用户,
至于其他帐户一无所知, 要想登录目标主机我们至少
要知道一个普通用户
a.利用目标主机的 Finger功能
对黑客软件 HAKTEK,它的 Finger功能可以完全胜任,
记录帐号信息, 经过一段时间的监测, 就会积累一定
的帐号信息 。 finger很可能暴露入侵者的行为, 为了避
免 finger查询产生标记, 绝大多数入侵者使用 finger
gateways( finger网关 ) 。
12
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
b.来源于电子邮件地址
有些用户电子邮件地址 ( 指 @符号前面的部分 ) 与
其取邮件的帐号是一致的
c.非常全面的 X.500功能
有些主机提供了 X.500的目录查询服务 。 如何知道
是否提供 X.500的功能, 扫描目标主机的端口, 如
果端口 105的状态已经被 "激活 ",在自己的机器上安
装一个 X.500的客户查询的工具, 选择目标主机,
可以获得意想不到的信息 。
13
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
d.习惯性常用帐号
根据平时的经验, 一些系统总有一些习惯性的常用
帐号, 这些帐号都是系统中因为某种应用而设置的 。
例如:制作 WWW网站的帐号可能是 html,www、
web等, 安装 ORACLE数据库的可能有 oracle的帐号,
用户培训或教学而设置的 user1,user2,student1、
student2,client1,client2等帐户, 一些常用的英文
名字也经常会使用, 例如,tom,john等, 因此可以
根据系统所提供的服务和在其主页得到的工作人员
的名字信息进行猜测 。
14
1,寻找目标主机并收集目标信息
二、远程攻击的步骤
5) 获得管理员信息
运行一个查询命令 host,可获得保存在目标域服务器中
的所有信息 。 WHOIS查询, 可识别出技术管理人员 。
运行一些 Usenet和 WEB查询 。 系统管理员的职责是维
护站点的安全, 当他们遇到各种问题时, 许多管理员
会迫不及待地将这些问题发到 Usenet或邮件列表上以寻
求答案 。 只要肯花一些时间来寻找此系统管理员的地
址 ( 和其他的一些信息 ) 便能彻底地了解他的网络,
他的安全概念以及他的个性 。 因为发出这种邮件的系
统管理员总会指明他们的组织结构, 网络的拓补结构
和他们面临的问题 。
15
2、攻击测试
二、远程攻击的步骤
大部分的入侵者并不想尝试这种行为, 因为这需要一
定的费用 。 在此步骤中, 首先要建立一个和目标一样
的环境 。 一旦将此环境建立起来后, 就可对它进行一
系列的攻击 。 在此过程中, 有两件事需要注意:
( l) 从攻击方来看这些攻击行为着上去像什么,
( 2) 从被攻击方来看这些攻击行为看上去像什么 。
通过检查攻击方的日志文件入侵者能大致了解对一个
几乎没有保护措施的目标进行攻击时攻击行为着上去
像什么
16
3、各种相关工具的准备
二、远程攻击的步骤
紧接着应该收集各种实际使用的工具, 最有可能是一
些扫描工具, 判断出目标网上的所有设备 。 基于对操
作系统的分析需要对工具进行评估以判断有哪些漏洞
和区域它们没有覆盖到 。 在只用一个工具而不用另一
个工具就可覆盖某特定设备的情况下, 最好还是同时
使用这两个工具 。 这些工具的联合使用是否方便主要
依赖于这些工具是否能简易地作为外部模块附加到一
个扫描工具上如 SATAN或 SAFESuite。 在此进行测试
变得极为有价值, 因为在多数情况下附加一个外部模
块非让它正常地工作并不那么简单 。 为了得到这些工
具工作的确切结果, 最好先在某台机器上进行实验 。
17
4、攻击策略的制定
二、远程攻击的步骤
没有任何理由就实施入侵是很不明智的 。 攻击策略主
要依赖于入侵者所想要达到的目的 。
需要说明的是扫描时间花得越长, 也就是说越多的机
器被涉及在内, 那么扫描的动作就越有可能被发现;
同时有越多的扫描数据需要筛选, 因此, 扫描的攻击
的时间越短越好 。 因为你所想要的是一个主系统上或
者是一个可用的最大网段的根权限, 所以对一个更小,
更安全的网络进行扫描不可能获得很大的好处 。 无论
如何, 一旦你确定了扫描的参数, 就可以开始行动了 。
18
5、数据分析
二、远程攻击的步骤
完成扫描后, 开始分析数据 。 首先应考虑通过此方法得到的信
息是否可靠 ( 可靠度在某种程度上可通过在类似的环境中进行
的扫描实验得到 。 ) 然后再进行分析, 扫描获得的数据不同则
分析过程也不同 。 在 SATAN中的文档中有一些关于漏洞的简短
说明, 并且真接而富有指导性 。
如果找到了某个漏洞, 就应该重新参考那些通过搜索漏洞和其
他可用资源而建立起来的数据库信息 。 在真正理解了攻击的本
质和什么应从攻击中剔除之前, 可能要花上数个星期来研究源
码, 漏洞, 某特定操作系统和其他信息, 这些是不可逾越的 。
在攻击中经验和耐心是无法替代的 。 一个经过很好计划和可怕
的远程攻击, 需要实施者对 TCP/ IP以及系统等方面的知识有着
极深刻的了解 。
19
6、实施攻击
二、远程攻击的步骤
获得了对攻击的目标系统的访问权后, 可能有下述多种选择:
·毁掉攻击入侵的痕迹, 并在受到损害的系统上建立另外的新的
安全漏洞或后门, 以便今后继续访问这个系统 。
·在目标系统中安装探测器软件, 包括特洛伊木马程序, 用来窥
探所在系统的活动, 收集黑客感兴趣的一切信息, 如 Telnet和
FTP的帐号名和口令等等 。
·发现受损系统在网络中的信任等级, 这样黑客就可以通过该系
统信任级展开对整个系统的攻击 。
·如果获得了特许访问权, 那么它就可以读取邮件, 搜索和盗窃
私人文件, 毁坏重要数据, 破坏整个系统的信息 。
20
1、漏洞的概念
三、系统漏洞
漏洞的概念
漏洞是指硬件, 软件或策略上的缺陷,
从而可使攻击者能够在未经授权的情况下访
问系统 。
所有软件都是有错的
通常情况下 99.99% 无错的程序很少会出问题,
利用那 0.01%的错误导致 100%的失败
21
1、漏洞的概念
三、系统漏洞
出现漏洞的原因
当今的系统功能越来越强, 体积也越做
越大 。 庞大的系统是由小组完成的, 不能指
望每个人都不犯错, 也不能指望无纰漏的合
作 。
加上人的惰性, 不愿意仔细地进行系统
的安全配置 。 这样一来, 本来比较安全的系
统也变的不安全了 。 一个简单的例子就是缺
省口令 。
22
1、漏洞的概念
三、系统漏洞
漏洞的范围
漏洞涉及的范围很广, 涉及到网络的各个环
节, 各个方面, 包括:路由器, 防火墙, 操
作系统, 客户和服务器软件 。 比如一台提供
网上产品搜索的 Web服务器, 就需要注意操
作系统, 数据库系统, Web服务软件及防火
墙 。
23
1、漏洞的概念
三、系统漏洞
漏洞的时间性
系统发布 —— 漏洞暴露 —— 发布补丁 —— 新漏洞出现
一个系统从发布的那一天起, 随着用户的深入使用,
系统中存在的漏洞会被不断暴露出来, 这些早先被发
现的漏洞也会不断被系统供应商发布的补丁软件修补,
或在以后发布的新版系统中得以纠正 。 而在新版系统
纠正了旧版本中具有漏洞的同时, 也会引入一些新的
漏洞和错误 。 因而随着时间的推移, 旧的漏洞会不断
消失, 新的漏洞会不断出现 。 漏洞问题也会长期存在 。
24
1、漏洞的概念
三、系统漏洞
安全漏洞与系统攻击之间的关系
漏洞暴露 —( 可能的攻击 ) —发布补丁
系统攻击者往往是安全漏洞的发现者和使用
者, 要对于一个系统进行攻击, 如果不能发
现和使用系统中存在的安全漏洞是不可能成
功的 。
25
1、漏洞的概念
三、系统漏洞
漏洞的类型
( 1) 管理漏洞 -如两台服务器用同一个用户 /密码, 则入侵了 A
服务器后, B服务器也不能幸免 。
( 2) 软件漏洞 -很多程序只要接收到一些异常或者超长的数据
和参数, 就会导致缓冲区溢出 。
( 3) 结构漏洞 -比如在某个重要网段由于交换机, 集线器设置
不合理, 造成黑客可以监听网络通信流的数据;又如防火墙等
安全产品部署不合理, 有关安全机制不能发挥作用, 麻痹技术
管理人员而酿成黑客入侵事故 。
( 4) 信任漏洞 -比如本系统过分信任某个外来合作伙伴的机器,
一旦这台合作伙伴的机器被黑客入侵, 则本系统的安全受严重
威胁 。
26
20个最危险的安全漏洞
? 2002年 5月发布( www.sans.org)
? 三类安全漏洞:
1)影响所有系统的七个漏洞( G1~G7)
2) 影响 Windows系统的六个漏洞
( W1~W6)
3) 影响 Unix系统的七个漏洞( U1~U7)
27
G1-操作系统和应用软件的缺省安装
三、系统漏洞
软件开发商的逻辑是最好先激活还不需要的功能, 而
不是让用户在需要时再去安装额外的组件 。 这种方法
尽管对用户很方便, 但却产生了很多危险的安全漏洞,
因为用户不会主动的给他们不使用的软件组件打补丁 。
而且很多用户根本不知道实际安装了什么, 很多系统
中留有安全漏洞就是因为用户根本不知道安装了这些
程序 。
大多数操作系统和应用程序 。
应该对任何连到 Internet上的系统进行端口扫描和漏洞
扫描 。 卸载不必要的软件, 关掉不需要的服务和额外
的端口 。 这会是一个枯燥而且耗费时间的工作 。
28
G2 - 没有口令或使用弱口令的帐号
三、系统漏洞
易猜的口令或缺省口令是个严重的问题, 更严重的是
有的帐号根本没有口令 。 应进行以下操作:
1,审计你系统上的帐号, 建立一个使用者列表 。
2,制定管理制度, 规范增加帐号的操作, 及时移走不
再使用的帐号 。
3,经常检查确认有没有增加新的帐号, 不使用的帐号
是否已被删除 。 当雇员或承包人离开公司时, 或当帐
号不再需要时, 应有严格的制度保证删除这些帐号 。
4,对所有的帐号运行口令破解工具, 以寻找弱口令或
没有口令的帐号 。
29
G3 - 没有备份或者备份不完整
三、系统漏洞
从事故中恢复要求及时的备份和可靠的数据存储方式 。 应列出
一份紧要系统的列表 。 制定备份方式和策略 。 重要问题:
1,系统是否有备份?
2,备份间隔是可接受的吗?
3,系统是按规定进行备份的吗?
4,是否确认备份介质正确的保存了数据?
5,备份介质是否在室内得到了正确的保护?
6,是否在另一处还有操作系统和存储设施的备份? ( 包括
必要的 license key)
7,存储过程是否被测试及确认?
30
G4 - 大量打开的端口
三、系统漏洞
合法的用户和攻击者都通过开放端口连接系统 。
端口开得越多, 进入系统的途径就越多 。
netstat 命令可以在本地运行以判断哪些端口是打
开的,但更保险的方法是对你的系统进行外部的
端口扫描,在众多的端口扫描器中, 最流行的是
nmap。
一旦你确定了哪些端口是打开的, 接下来的任
务是确定所必须打开的端口的最小集合 -关闭其
他端口, 找到这些端口对应的服务, 并关闭 /移
走它们 。
31
G5 - 没有过滤地址不正确的包
三、系统漏洞
IP地址欺诈 。 例如 smurf攻击 。 对流进和流出你网络的
数据进行过滤 。
1,任何进入你网络的数据包不能把你网络内部的地址
作为源地址;必须把你网络内部的地址作为目的地址 。
任何离开你网络的数据包必须把你网络内部的地址作为
源地址;不能把你网络内部的地址作为目的地址 。
3,任何进入或离开你网络的数据包不能把一个私有地
址 ( private address) 或在 RFC1918中列出的属于保留空
间 ( 包括 10.x.x.x/8,172.16.x.x/12 或 192.168.x.x/16 和网
络回送地址 127.0.0.0/8.) 的地址作为源或目的地址 。
32
G6 - 不存在或不完整的日志
三、系统漏洞
安全领域的一句名言是,"预防是理想的, 但检测是必
须的 "。 一旦被攻击, 没有日志, 你会很难发现攻击者
都作了什么 。 在所有重要的系统上应定期做日志, 而
且日志应被定期保存和备份, 因为你不知何时会需要
它 。
查看每一个主要系统的日志, 如果你没有日志或它们
不能确定被保存了下来, 你是易被攻击的 。
所有系统都应在本地记录日志, 并把日志发到一个远
端系统保存 。 这提供了冗余和一个额外的安全保护层 。
不论何时, 用一次性写入的媒质记录日志 。
33
G7 - 易被攻击的 CGI程序
三、系统漏洞
大多数的 web服务器, 都支持 CGI程序 。
1,从你的 web服务器上移走所有 CGI示范程序 。
2,审核剩余的 CGI脚本, 移走不安全的部分 。
3,保证所有的 CGI程序员在编写程序时, 都进行输入缓冲
区长度检查 。
4,为所有不能除去的漏洞打上补丁 。
5,保证你的 CGI bin目录下不包括任何的编译器或解释器 。
6,从 CGI bin目录下删除 "view-source"脚本 。
7,不要以 administrator或 root权限运行你的 web服务器 。 大多
数的 web服务器可以配置成较低的权限, 例如 "nobody."
8,不要在不需要 CGI的 web服务器上配置 CGI支持 。
34
W1 - Unicode漏洞
三、系统漏洞
不论何种平台, 何种程序, 何种语言, Unicode为每一个字
符提供了一个独一无二的序号 。 通过向 IIS服务器发出一个
包括非法 Unicode UTF-8序列的 URL,攻击者可以迫使服务器
逐字 "进入或退出 "目录并执行任意 (程序 )(script-脚本 ),这种
攻击被称为目录转换攻击 。
Unicode用 %2f和 %5c分别代表 /和 \。 但你也可以用所谓的 "超
长 "序列来代表这些字符 。 "超长 "序列是非法的 Unicode表示
符, 它们比实际代表这些字符的序列要长 。 /和 \均可以用一
个字节来表示 。 超长的表示法, 例如用 %c0%af代表 /用了两
个字节 。 IIS不对超长序列进行检查 。 这样在 URL中加入一
个超长的 Unicode序列, 就可以绕过 Microsoft的安全检查 。
如果你在运行一个未打补丁的 IIS,那么你是易受到攻击的 。
最好的判断方法是运行 hfnetchk。
35
W2 - ISAPI 缓冲区扩展溢出
三、系统漏洞
安装 IIS后, 就自动安装了多个 ISAPI extensions。 ISAPI,代
表 Internet Services Application Programming Interface,允许
开发人员使用 DLL扩展 IIS服务器的性能 。 一些动态连接库,
例如 idq.dll,有编程错误, 使得他们做不正确的边界检查 。
特别是, 它们不阻塞超长字符串 。 攻击者可以利用这一点向
DLL发送数据, 造成缓冲区溢出, 进而控制 IIS服务器 。
安装最新的 Microsoft的补丁 。 该漏洞不影响 Windows XP.
同时, 管理员应检查并取消所有不需要的 ISAPI扩展 。 经常
检查这些扩展没有被恢复 。
请记住最小权限规则, 你的系统应运行系统正常工作所需的
最少服务 。
36
W3 - IIS RDS的使用 (Microsoft
Remote Data Services)
三、系统漏洞
黑客可以利用 IIS's Remote Data Services (RDS)
中的漏洞以 administrator权限在远端运行命令 。
如果你在运行一个未打补丁的系统, 你是易
被攻击的 。
37
W4 - NETBIOS - 未保护的 Windows网
络共享
三、系统漏洞
Server Message Block (SMB)协议, 也称为
Common Internet File System (CIFS),允许网络
间的文件共享 。 不正确的配置可能会导致系
统文件的暴露, 或给予黑客完全的系统访问
权 。
在 Windows的主机上允许文件共享使得它们
容易受到信息窃贼和某种快速移动的病毒的
攻击 。
38
三、系统漏洞
1,在共享数据时, 确保只共享所需目录 。
2,为增加安全性, 只对特定 IP地址进行共享, 因为 DNS名
可以欺诈 。
3,对 Windows系统 (NT,2000),只允许特定用户访问共享文
件夹 。
4,对 Windows系统, 禁止通过 "空对话 "连接对用户, 组, 系
统配置和注册密钥进行匿名列举 。 在 W5中有更详尽的信息 。
5, 对 主 机或 路 由 器上 的 NetBIOS 会话 服 务 ( tcp 139),
Microsoft CIFS (TCP/UDP 445)禁止不绑定的连接 。
6,考虑在独立或彼此不信任的环境下, 在连接 Internet的主
机上部署 Restrict Anonymous registry key。
39
W5 - 通过空对话连接造成的信息泄露
三、系统漏洞
空对话连接 (null session),也称为匿名登录, 是一种允许匿
名用户获取信息 ( 例如用户名或共享文件 ), 或不需认证进
行连接的机制 。 explorer.exe利用它来列举远程服务器上的共
享文件 。 在 Windows NT和 Windows 2000系统下, 许多本地
服务是在 SYSTEM帐号下运行的, 又称为 Windows 2000的
LocalSystem。 很多操作系统都使用 SYSTEM帐号 。 当一台
主机需要从另一台主机上获取系统信息时, SYSTEM帐号会
为另一台主机建立一个空对话 。 SYSTEM帐号实际拥有无限
的权利, 而且没有密码, 所以你不能以 SYSTEM的方式登录 。
SYSTEM有时需要获取其它主机上的一些信息, 例如可获取
的共享资源和用户名等典型的网上邻居功能 。 由于它不能以
用户名和口令进入, 所以它使用空对话连接进入, 不幸的是
攻击者也可以相同的方式进入 。
40
W6 - Weak hashing in SAM (LM hash)
三、系统漏洞
尽管 Windows的大多数用户不需要 LAN Manager的支持, 微
软还是在 Windows NT 和 2000系统里缺省安装了 LAN
Manager口令散列 。 由于 LAN Manager使用的加密机制比微
软现在的方法脆弱, LAN Manager的口令能在很短的时间内
被破解 。 LAN Manager散列的主要脆弱性在于:
?长的口令被截成 14个字符
?短的口令被填补空格变成 14个字符
?口令中所有的字符被转换成大写
?口令被分割成两个 7个字符的片断
另外, LAN Manager容易被侦听口令散列 。 侦听可以为攻击
者提供用户的口令 。
41
U1 - RPC 服务缓冲区溢出
三、系统漏洞
远程请求 ( Remote Procedure Calls ) 允许一台机器上的程序
执行另一台机器上的程序 。 用来提供网络服务如 NFS文件共
享 。 由于 RPC缺陷导致的弱点正被广泛的利用着 。 有证据显
示, 1999年到 2000年间的大部分分布式拒绝服务型攻击都是
在那些通过 RPC漏洞被劫持的机器上执行的 。 按照下面步骤
保护你的系统避免该攻击:
1,只要允许, 在可以从 Internet 直接访问的机器上关闭或删
除这些服务
2,在你必须运行该服务的地方, 安装最新的补丁:
3,定期搜索供应商的补丁库查找最新的补丁并立刻安装 。
4,在路由或防火墙关闭 RPC 端口 (port 111) 。
5,关闭 RPC "loopback" 端口,32770-32789 (TCP and UDP)
42
U2 - Sendmail 漏洞
三、系统漏洞
Sendmail 是在 UNIX和 Linux上用的最多的发送, 接收和转发
电子邮件的程序 。 Sendmail在 Internet上的广泛应用使它成为
攻击者的主要目标 。 过去的几年里发现了若干个缺陷 。 事实
上, 第一个建议是 CERT/CC 在 1988年提出的, 指出了
Sendmail中一个易受攻击的脆弱性 。 其中最为常用的是攻击
者可以发送一封特别的邮件消息给运行 Sendmail的机器,
Sendmail会根据这条消息要求受劫持的机器把它的口令文件
发给攻击者的机器 ( 或者另一台受劫持的机器 ), 这样口令
就会被破解掉 。
Sendmail 有很多的易受攻击的弱点, 必须定期的更新和打补
丁 。
43
U3 - Bind 脆弱性
三、系统漏洞
Berkeley Internet Name Domain (BIND) 是域名服务 DNS
(Domain Name Service) 用的最多的软件包 。 DNS非常重要,
我们利用它在 Internet上通过机器的名字 ( 例如 www.sans.org )
找到机器而不必知道机器的 IP地址 。 这使它成为攻击者钟爱
的目标 。 不幸的是, 根据 1999年中期的调查, 连接在 Internet
上的 50% 的 DNS服务器运行的都是易受攻击的版本 。 在一个
典型的 BIND攻击的例子里, 入侵者删除了系统日志并安装
了工具来获取管理员的权限 。 然后他们编辑安装了 IRC工具
和网络扫描工具, 扫描了 12个 B类网来寻找更多的易受攻击
的 BIND。 在一分钟左右的时间里, 他们就使用已经控制的
机器攻击了几百台远程的机器, 并找到了更多的可以控制的
机器 。
44
U4 - R 命令
三、系统漏洞
在 UNIX世界里, 相互信任关系到处存在, 特别是在系统管
理方面 。 公司里经常指定一个管理员管理几十个区域或者甚
至上百台机器 。 管理员经常使用信任关系和 UNIX的 r 命令
从一个系统方便的切换到另一个系统 。 R 命令允许一个人
登录远程机器而不必提供口令 。 取代询问用户名和口令, 远
程机器认可来自可信赖 IP地址的任何人 。 如果攻击者获得了
可信任网络里的任何一台的机器, 他 ( 她 ) 就能登录任何信
任该 IP的任何机器 。 下面命令经常用到:
1,rlogin - remote login,远程登录
2,rsh - remote shell, 远程 shell
3,rcp - remote copy,远程拷贝
45
U5 - LPD (remote print protocol daemon)
三、系统漏洞
Unix 里, in.lpd 为用户提供了与本地打印机
交互的服务 。 lpd侦听 TCP 515端口的请求 。
程序员在写代码时犯了一点错误, 使得当打
印工作从一台机器传到另一台机器时会导致
缓冲区溢出的漏洞 。 如果在较短的时间里接
受了太多的任务, 后台程序就会崩溃或者以
更高的权限运行任意的代码 。
46
U6 - sadmind and mountd
三、系统漏洞
Sadmind 允许远程登录到 Solaris 系统进行管
理, 并提供了一个系统管理功能的图形用户
接口 。
Mountd 控制和判断到安装在 UNIX主机上的
NFS的连接 。 由于软件开发人员的错误导致
的这些应用的缓冲区溢出漏洞能被攻击者利
用获取 root的存取权限 。
47
U7 - 缺省 SNMP 字串
三、系统漏洞
SNMP (Simple Network Management Protocol,简单
网络管理协议 ) 是管理员广泛使用的协议, 用来管
理和监视各种各样与网络连接的设备, 从路由器到
打印机到计算机 。 SNMP使用没有加密的公共字符
串作为唯一的认证机制 。 没有加密已经够糟了, 不
仅如此, 绝大部分 SNMP设备使用的公共字符串还
是 "public",只有少部分 "聪明 "的设备供应商为了保
护敏感信息把字符串改为 "private"。 攻击者可以利
用这个 SNMP中的漏洞远程重新配置或关闭你的设
备 。 被监听的 SNMP通讯能泄漏很多关于网络结构
的信息, 以及连接在网络上的设备 。 入侵者可以使
用这些信息找出目标和谋划他们的攻击 。
48
1、扫描技术
四、扫描器
扫描技术是主要的一种信息收集型攻击 。
地址扫描:运用 ping这样的程序探测目标地址
端口扫描:向大范围的主机连接一系列的 TCP端口, 扫描软
件报告它成功的建立了连接的主机所开的端口 。
反响映射:黑客向主机发送虚假消息, 然后根据返回 "host
unreachable"这一消息特征判断出哪些主机是存在的 。
慢速扫描:由于一般扫描侦测器的实现是通过监视某个时间
里一台特定主机发起的连接的数目 ( 例如每秒 10次 ) 来决定
是否在被扫描, 这样黑客可以通过使用扫描速度慢一些的扫
描软件进行扫描 。
49
2、什么是扫描器
四、扫描器
扫描器是一种自动检测远程或本地主机安全性弱
点的程序 。
通过使用扫描器可不留痕迹的发现远程服务器的
各种 TCP端口的分配, 提供的服务, 使用的软件
版本 ! 这就能间接的或直观的了解到远程主机所
存在的安全问题 。
50
四、扫描器
安全扫描工具分类
基于服务器和基于网络的扫描器 。
基于服务器的扫描器主要扫描服务器相关的安全漏洞,
如 password文件, 目录和文件权限, 共享文件系统,
敏感服务, 软件, 系统漏洞等, 并给出相应的解决办
法建议 。 通常与相应的服务器操作系统紧密相关 。
基于网络的安全扫描主要扫描设定网络内的服务器,
路由器, 网桥, 交换机, 访问服务器, 防火墙等设备
的安全漏洞, 并可设定模拟攻击, 以测试系统的防御
能力 。 通常该类扫描器限制使用范围 (IP地址或路由器
跳数 )。
51
? 扫描器分类
? 端口扫描器 (如,NMAP,PORTSCAN)
扫描目标机开放的服务端口及其有关信息
? 漏洞扫描器 (如,ISS,NESSUS,SATAN等 )
对于重视安全的网站进行漏洞扫描,可能一
无所获,因为流行的漏洞早已打补丁了。
因此端口扫描器对黑客或许更有用。
52
四、扫描器
网络安全扫描的主要性能:
(1) 速度 。 在网络内进行安全扫描非常耗时 。
(2) 网络拓扑 。 通过 GUI的图形界面, 可迭择一步或某
些区域的设备 。
(3) 能够发现的漏洞数量 。
(4) 是否支持可定制的攻击方法 。 因为网络内服务器及
其它设备对相同协议的实现存在差别, 所以预制的扫描
方法肯定不能满足客户的需求 。
(5) 报告, 扫描器应该能够给出清楚的安全漏洞报告 。
(6) 更新周期 。 提供该项产品的厂商应尽快给出新发现
的安生漏洞扫描特性升级, 并给出相应的改进建议 。
53
3、扫描器的工作原理
四、扫描器
扫描器通过选用远程 TCP/IP不同的端口的服务, 并
记录目标给予的回答, 通过这种方法, 可以搜集到
很多关于目标主机的各种有用的信息
扫描器能够发现目标主机某些内在的弱点, 这些弱
点可能是破坏目标主机安全性的关键性因素 。 但是,
要做到这一点, 必须了解如何识别漏洞 。 扫描器对
于 Internet安全性之所以重要, 是因为它们能发现
网络的弱点 。
54
4、扫描器的功能
四、扫描器
扫描器并不是一个直接的攻击网络漏洞的程序, 它仅
仅能帮助我们发现目标机的某些内在的弱点 。 一个好
的扫描器能对它得到的数据进行分析, 帮助我们查找
目标主机的漏洞 。 但它不会提供进入一个系统的详细
步骤 。
扫描器应该有三项功能:
1) 发现一个主机或网络的能力;
2) 一旦发现一台主机, 有发现什么服务正运行在这
台主机上的能力;
3) 通过测试这些服务, 发现漏洞的能力 。
55
5、常用的端口扫描技术
四、扫描器
TCPconnect() 扫描
这是最基本的 TCP扫描 。 操作系统提供的 connect()系统
调用, 用来与目标计算机的端口进行连接 。 如果端口
处于侦听状态, 那么 connect()就能成功 。 否则, 这个端
口是不能用的, 即没有提供服务 。
不需要任何权限 。 系统中的任何用户都有权利使用这
个调用 。 另一个好处就是速度 。 如果对每个目标端口
以线性的方式, 使用单独的 connect()调用, 那么将会花
费相当长的时间, 你可以通过同时打开多个套接字,
从而加速扫描 。 这种方法的缺点是容易被发觉, 并且
被过滤掉 。 目标计算机的 logs文件会显示一连串的连接
和连接是出错的服务消息, 并且能很快的使它关闭 。
56
5、常用的端口扫描技术
四、扫描器
TCPSYN扫描
,半开放, 扫描, 这是因为扫描程序不必要打开一个
完全的 TCP连接 。 扫描程序发送的是一个 SYN数据包,
好象准备打开一个实际的连接并等待反应一样 ( 参考
TCP的三次握手建立一个 TCP连接的过程 ) 。 一个
SYN|ACK的返回信息表示端口处于侦听状态 。 一个
RST返回, 表示端口没有处于侦听态 。 如果收到一个
SYN|ACK,则扫描程序必须再发送一个 RST信号, 来
关闭这个连接过程 。 这种扫描技术的优点在于一般不
会在目标计算机上留下记录 。 但这种方法的一个缺点
是, 必须要有 root权限才能建立自己的 SYN数据包 。
57
5、常用的端口扫描技术
四、扫描器
TCPFIN 扫描 ( 发送者无数据 )
有的时候有可能 SYN扫描都不够秘密 。 一些防火墙
和包过滤器会对一些指定的端口进行监视, 有的程
序能检测到这些扫描 。 相反, FIN数据包可能会没
有任何麻烦的通过 。 这种扫描方法的思想是关闭的
端口会用适当的 RST来回复 FIN数据包 。 另一方面,
打开的端口会忽略对 FIN数据包的回复 。 这种方法
和系统的实现有一定的关系 。 有的系统不管端口是
否打开, 都回复 RST,这样, 这种扫描方法就不适
用了 。 并且这种方法在区分 Unix和 NT时, 是十分有
用的 。
58
5、常用的端口扫描技术
四、扫描器
UDPICMP端口不能到达扫描
这种方法与以上方法的区别是使用 UDP协议 。 由于这
个协议很简单, 所以扫描变得相对比较困难 。 这是由
于打开的端口对扫描探测并不发送一个确认, 关闭的
端口也并不需要发送一个错误数据包 。 幸运的是, 许
多主机在你向一个未打开的 UDP端口发送一个数据包
时, 会返回一个 ICMP_PORT_UNREACH错误 。 这样
你就能发现哪个端口是关闭的 。 UDP和 ICMP错误都不
保证能到达, 因此这种扫描器必须还实现在一个包看
上去是丢失的时候能重新传输 。 这种扫描方法是很慢
的, 因为 RFC对 ICMP错误消息的产生速率做了规定 。
同样, 这种扫描方法需要具有 root权限 。
59
5、常用的端口扫描技术
四、扫描器
UDPrecvfrom()和 write() 扫描
当非 root用户不能直接读到端口不能到达的错误时,
Linux能间接地在它们到达时通知用户 。 比如, 对一
个关闭的端口的第二个 write()调用将失败 。 在非阻
塞的 UDP套接字上调用 recvfrom()时, 如果 ICMP出
错还没有到达时回返回 EAGAIN-重试 。 如果 ICMP
到达时, 返回 ECONNREFUSED-连接被拒绝 。 这就
是用来查看端口是否打开的技术 。
60
5、常用的端口扫描技术
四、扫描器
ICMP echo扫描
这并不是真正意义上的扫描 。 但有时通过 ping,在判断
在一个网络上主机是否开机时非常有用 。
端口扫描,NMAP, PORTSCAN等
漏洞扫描,ISS,NESSUS,SATAN,X-Scan
CIS(Cerberus Internet Scanner),运行在 Windows 之下,
主要用来对 Windows NT和 2000的安全性作出评估, 指
出其存在的安全性弱点, 并提供一定程度上的改进建议 。
当前版本是 5.0.02版 。
61
6、扫描器
四、扫描器
CIS的扫描范围包括:
WWW服务,
FTP服务,
MS SQL Sever、
NetBIOS、
注册表设置,
NT服务,
SMTP服务,
POP3服务、
RPC服务、
端口映射、
Finger服务、
DNS服务、
浏览器安全
62
6、扫描器
四、扫描器
CIS包括了 NT服务器的绝大部分容易引起安全问题的服务
和设置 。 它最大的特色是 NETBIOS扫描 。 它可以快速地得
到目标计算机的 NETBIOS信息, 共享资源, 包括用户名和
组的信息, 并能揭示薄弱的口令 。
操作过程:选择工具栏上的第一个按钮, 在弹出的对话框
中写入主机地址, 点击第二个按钮开始扫描 。 因为缺省的
扫描模块就是 all(全部 ),所以在这里可以不必设定扫描模
块 。 等到所有项的扫描都完成 ( Completed) 之后, 点击 M
按钮查看生成的报告 。
63
6、扫描器
四、扫描器
端口扫描器 IPProber
IP Prober是一款端口扫描工具而非漏洞扫描
工具 。 它扫描目标主机的各个端口以找出该
主机运行有哪些服务 。
在 HOST中填入目标主机地址, Start和 End栏
中填入端口的扫范围, 选择 Run就可以进行
扫描了 。
64
1、缓冲溢出的概念
? Buffer Overflow 最常用的攻击手段
RedHat Linux,Solaris,Windows NT都存在隐患
可分为:本地溢出攻击 远程溢出攻击
? 定义:向堆栈中分配的局部数据块中写入超出其实
际分配大小的数据,导致数据越界,结果覆盖了其
它的堆栈数据。
? 缓冲溢出的后果:
1)覆盖相邻存储单元,导致系统崩溃
2)转向执行攻击者设定的指令,甚至获得 Root特权
五、缓冲溢出攻击
65
? 造成溢出的原因:
程序中没有仔细检查用户输入的参数。例:
#include <stdio.h>
int main(){
char name[8];
printf(―Your Name:‖);
gets(name);
printf(―Hello,%s!‖,name);
return 0;
}
//当输入字符超过 8个时,溢出
66
C语言中许多字符串处理函数如,Strcpy,Strcat、
Gets,Sprintf等都没有对数组越界加以监视和
限制,所以利用字符数组写越界,覆盖堆栈中
原先元素的值,就可以修改返回地址。
通常,往缓冲区随便填充所造成的溢出,将使返
回地址为一个非法的、不存在的地址,从而出
现 core dump错误,不能达到攻击目的;
最常用的缓冲溢出攻击方法是:攻击者编写一个
简短的 Shell程序 ShellCode。 为了在发生缓冲溢
出时执行 Shell,必须在执行程序的地址空间里
加入 ShellCode,并把程序返回地址修改为
ShellCode的入口地址。
67
2,缓冲溢出攻击的原理
68
在 UNIX系统中,黑客要启动一个 Shell,以获得和
堆栈被溢出的程序相同的权限.
如果文件 ABC的拥有者为 root,而它的文件属性为:
r w x r – x r – x, 则 root可读, 写, 执行文件
ABC,其它用户只能以自己的权限读和执行它;
但如果该文件属性为,r w s r – x r – x, 则
任何一个运行了 ABC程序的用户都将获得文件的
拥有者 root的权限.(此时文件 ABC叫做 Setuid
的,即能以拥有者权限运行).
一般,黑客要溢出的程序都是 Setuid的,这样当
溢出后就能绕过口令升级为 root权限.
69
? 缓冲溢出的目的:干扰具有特权运行的程序,
以控制整个系统.
? 缓冲溢出攻击方法:
1)在程序的地址空间里安排攻击代码的方法
植入法:用被攻击程序的缓冲区来存放攻击代码
传递参数法:
2)控制程序转移到攻击代码的方法
激活记录:函数调用时会在堆栈中留下一个激活
记录,它包含返回地址.攻击者通过溢出这些
自动变量,使返回地址指向攻击代码.这叫做
,stack smash attack‖
70
缓冲溢出的预防
1)编写不产生缓冲溢出的程序
进行数组越界检查;用安全的函数代替 Strcpy等;
注意数据类型转换的安全问题.
Java受缓冲溢出攻击:由于 Java平台 JVM来自 C程序
2)非执行的缓冲区:使被攻击程序数据段地址空间不
可执行,从而使攻击者不能执行植入被攻击程序缓冲
区的代码
3)程序指针完整性检查:采用堆栈保护的编译技
术.程序指针被引用之前要检查未被修改才可使用.
4)安装程序补丁:用最新的程序更新有缺陷的程序.