📄 1171.txt
字号:
日月光华 -- Internet精华区文章阅读
--------------------------------------------------------------------------------
发信人: Perseus (焜燿焰灿·翔非扬), 信区: Internet
标 题: JAVA 敲掉了几块防火墙的砖?
发信站: 日月光华站 (Sun Jun 27 16:20:10 1999) , 转信
JAVA 敲掉了几块防火墙的砖?
王波/译
1996年,普林斯顿大学三位研究人员公布了一个Java程式,成功地避过
网络防火墙(Firewall)。进入正题之前,让我们先介绍一种网络的基
本概念DNS与防火墙。
DNS 是“域名服务器”(Domain Name Service)的缩写,通过这项服
务,可以知道网络上每一部机器对应的网络地址。可以把 Internet 上
的每台机器看成现实生活中的办公室,每个办公室外面都挂有招牌,而
从招牌上的名称可以大致看出办公室的运作特性。例如 www.ibm.com
这个机器名称代表国际通用机器有限公司的WWW办公室,ftp.netscape.
com 代表了Netscape的FTP 办公室,用浏览器连上www.ibm.com时,好比
向IBM的WWW办公室要要资料。
从这个比喻出发,局域网络(Local Area Network)就如一栋办公大楼,
大楼里各式各样的办公室各自代表了网络上的一部机器。办公室之所以
具备名称,主要是便于人们记忆。对实际的网络通信来说,采用纯数字
构成的网络IP地址,比如,www.ibm.com的IP是166.323.211.2,ftp.
netscape.com办公室的网络地址是205.218.156.36。两个办公室之间传
送电子邮件时,实际运作的通信往来都是通过网络地址达成的,也就是
说,无形的电子邮件通道看到信封上写着www.ibm.com的收件处时,必须
向 DNS 询问对应的IP地址,才能顺利收发信件。不过,在 DNS 的世界里,
办公室与招牌名称并不保证是一对一的关系,这就是说,同一个机器名称
可能对应了数个 IP 地址,而同一个 IP 地址也可能对应到不同的机器,
当初采用这种设计的一个理由是,方便系统管理员以更有弹性的方式调整
不同机器的网络负荷。 例如 www.yahoo.com 这个办公室门口每天出现
的人次可能数以万计,系统管理员利用同一个机器名称对应到不同的 IP
地址,让数台机器都挂着同样的机器名称,外界对同一个名称连线,由
不同的机器分头处理,便能够有效的分散 WWW 网络作业的庞大负荷,让
处理同样事务的办公室挂着同样的招牌,对前来洽商的客户不仅清楚明了,
实际上也能有效地缓解整个网络的巨大压力。DNS 这种“办公室”与“招
牌”无须单一对应的设计固然方便,但却引发了网络通信的另一项危机
-- DNS Spoofing。Spoof 原文有“幽默而不真实之描述”的意思,在此
暂译为“伪造”,DNS Spoofing 基本上就是一种伪造 DNS 结果的技巧,
电子邮件通道向这种伪造过的 DNS 查号台查号,就会得到不正确的 IP
地址。DNS Spoofing 的形成是由于Internet自身的弱点,利用这种技巧
入侵网络的事件早有先例。
这次普林斯顿大学研究人员公布的研究结果,倒是充分利用了伪造 DNS
的特殊技巧,让 Java 通过防火墙后,能够对其他机器任意进行连接,
完全不受防火墙的约束。防火墙(Firewall)是办公大楼的警卫。如果
办公大楼里的每个办公室代表局域网络中的一部电脑,那防火墙就是整
栋办公大楼的警卫,大楼警卫的任务是监控所有进出的网络资料与通信
要求,充分维护大楼内部的安全。例如:隔壁大楼某办公室派人拉一条
Telnet 或 FTP 管线到大楼门口,要求与楼上另外一个办公室进行连线
或传输档案时,大楼警卫可以核对拉线工人身上的名牌,看看他的 IP
地址是不是在安全范围之内。以决定是否放行。如果一个局域网络规定
只有某些 IP 地址能够与网络内部的机器连线,就能有效地把不明来源
的要求阻隔在外,让大楼警卫先过滤进出的各种身份,赶走一些可疑的
不明人士。
通常,防火墙程序就是以这样的方式,区分公司内部网络与外部网络,
尽可能将不必要的外部请求切断,避免内部网络受到无谓的干扰或攻击。
防火墙的观念与作法对保护网络来说,发挥了相当显著的效果,也被各
界广泛采用。问题出在一旦警卫认为来访人士身份正确,所属之 IP 地
址代表可信任的机器,后面的细节就不在警卫的管辖范围之内了,以
Telnet 来说,外面的机器经过大楼警卫的许可与内部的机器进行联系之
后,双方相互传输的数据,防火墙是不能控制的。所以,防火墙可以杜
绝不明身份的连接请求,却不能防止使用通过正当的 Telnet连线进行
不正当系统操作。
用 Java 写成的 Applet 放在网络上,使用者连上 Homepage后就等于
将其中的Applet程序下载到自己的电脑上执行。Java 语言在设计之初
便有着许多安全方面的考虑,Applet被下载到用户端的电脑上执行时,
负责执行的直译器(Interpreter)也能一一检查每个指令对系统来说
是否安全。不过对 DNS Spoofing 的效果来说,Java 小组却意外地没
有避开这项网络漏洞,让人有机可趁了。
普林斯顿大学实验的报告可归纳如下:
【实验背景】
受害机器的名称是 target.victim.org IP 地址 10.10.10.2
无辜机器的名称是 stooge.victim.org IP 地址 10.10.10.1
攻击者的机器名称 www.attacker.org IP 地址 172.16.16.16
IP 范围在 10.10.10.1 到 10.10.10.255 之内的机器都受到防火墙的
保护,拒绝接受外界的任何连接请求,正常情况下攻击者无法对防火墙
内部的机器要求直接连线。
【准备活动】
攻击者建立一部假机器名为 bogus.attacker.org 并且让 DNS 把这部
机器同时对应到 10.10.10.2 与 172.16.16.16 两个地址
【启动攻击】
无辜的用户在 stooge.victim.org 机器上通过浏览器连到www.attacker.
org 时,攻击者事先写好放在 Homepage 上的 Applet 程式便进入用户
端开始执行,这个Applet 一边执行看来无害的普通程序,一边却悄悄地
准备攻击其他机器。首先这个程序暗地里要求与 bogus.attacker.org
机器建立联系, 由于 DNS Spoofing 的关系,程序会得到 10.10.10.2
与 172.16.16.16 两组 IP 地址,此时Java 系统会把 Applet 程序的
原始地址(172.16.16.16)与 DNS 的结果进行比较,发现 172.16.16.16
在DNS 查号台的查号结果之内,便允许下一步的连接动作,可是下一步
实际进行连接时,Java 系统却会连到 DNS 查到的第一个 IP 地址上,
也就是 10.10.10.2 ,就这样,Java 以为建立了合法的网络连线,实
际上却对 target.victim.org 发出非法的连线要求。 利用这种方式,
一般常见的网络侵入技巧就可以直接攻击 target.victim.org 这部原本
应该受到防火墙保护的机器。
【奏效理由】
大楼警卫应该保护所有办公室不受外界无谓的侵扰,可是此处却完全派
不上用场。原因在于 Java 程式已经通过门口的例行检查,放行到某办
公室里执行去了,进了或者用已知的安全弱点在别的办公室门口上打洞。
更危险的是,进入大楼的 Java 程式如果无法攻破其他办公室,从理论
上讲 Java 还可以与基地 (www.attacker.org)联络,运用或调派其他
威力更强的特种部队,利用特殊武器(如著名的SATAN程式) 找出防火
墙内所有可能出现的安全漏洞。
Web 病毒
感染和蔓延是电脑病毒的天性,当使用者无意间连上不明的 Web 站,因
而引入上述的 Java 程序,导致内部网络受到威胁,基本上就暗示了Web
/Java 病毒可能入侵。如果 Java 程序利用这种方式,通过现有的网络漏
洞入侵其他机器,并将自己的程序「植入」其他无害的 Web 站,则 Web
/Java 病毒的雏形就呼之欲现了,在 Java 技术不断发展革新的今天,
虽然预言 Web/Java 病毒还为之过早,不过笔者在此希望大家要开始正
视网络安全这一重要课题。
Sun 加装办公大楼监视器
Sun 公司在全力推广Java的同时,自然不会让这样重要的漏洞继续存
在。大致的解决方法是,为了让 Java 程序进入办公大楼之后,不会非法
建立网络连接,Sun 决定记下Java 程序所属的来访单位,记下了该单位
的机器名称与 IP地址,任何以后的网络连接都必须核对一下目的单位,
如果与来访单位不同者,一律禁止。这种作法,应该能够有效地防止类似
情况的出现。
另外,加强 DNS 的安全性应该是更为可行的方法,但是由于 DNS 本身
是整个Internet 非常重要的检索服务,任何修改都会引发相当大的困难
和阻碍,所以,短期之内诉诸实现可能性不大。
--
我要飞翔,无论地狱还是天堂..! Welcome to http://[5mfennivel[10m.isCool.net
________ 成功的交响曲? 胜利的代言人?
___ __ \_____ _____________________ ____ __________
__ /_/ /_ _ \__ ___/__ ___/_ _ \_ / / /__ ___/
_ ____/ / __/_ / _(__ ) / __// /_/ / _(__ )
/_/ \___/ /_/ /____/ \___/ \__,_/ /____/ ........ is ready!
※ 来源:·日月光华站 bbs.fudan.edu.cn·[FROM: 10.9.0.252]
--------------------------------------------------------------------------------
[返回上一页] [本讨论区]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -