包过滤技术如何防御黑客攻击以及包过滤技术的优缺点(越详细越好)
花钱下载的文章,希望对你有帮助!
用专业术语来说,防火墙是一种位于两个或多个网络间,实施网
络之 访问控制的组件集合。对于普通用户来说,所谓 “ 防火墙”,
指的就是一种破放置在自己的计算机与外界网络之间的防御系统,从
网络发往计算机的所有数据都要经过它的判断处理后,才会决定能不
能把这些数据交给计算机,一旦发现有害数据,防火墙就会拦截下
来,实现了对汁算机的保护功能。
1 防火墙的主要功能
(1 )防火墙是网络安全的屏障。一个防火墙能极大地提高一个
内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有
经过精心选择的应用协议才能过防火墙,所以网络环境变得更安全。
如防火墙可以禁止诸如众所』 吉 I 知的不安全的NF S 协议进出受保护网
络,这样外部的攻击者就不可能利1 } f 】 这些脆弱的协议来攻击内部网
络。防火墙吲时可以保护网络免受基于路由的攻击 ,如I P 选项中的源
路由攻击和I CMP 重定向中的重定向路径。防火墙应该可以拒绝所有
以上类型攻击的报文并通知系统管理员。
( 2)防火墙可以强化网络安全策略。通过以防火墙为中心的安
全方案配置 ,能将所有安全软件 ( 如口令、加密、身份认证、审计
等)配置在防火墙上。与将网络安全问题分散到各个主机上相比,防
火墙的集中安全管理更经济。例如在网络访 时,一次一密口令系统
和其它的身份认证系统完全可以不必分散在各个主机上,而集中在防
火墙上。
( 3)对婀络存取和访问进行监控审汁。如果所有的访i ' u 】 部经过
防火墙 ,那么,防火墙就能记录下这些访问并作出E t 志汜录, 时也
能提供网络使用情况的统计数据。当发生可疑动作时,防火墙能进行
适当的报警,并提供网络是否受到监测和攻击的详细信息。另外,收
集一个网络的使用和误用情况也是非常重要的 首先的理由是可以清
楚防火墙是否能够抵挡攻击者的探测和攻击,并且清楚防火墙的控制
是否充足。而网络使用统汁对I 矧络需求分析和威胁分析等而言也是非
常重要的。
( 4)防止内部信息的外泄。通过利用防火墙对内部网络的划
分,可实现内部网重点网段的隔离 ,从而限制了局部重点或敏感网络
安全问题对全局网络造成的影响。使用防火墙就可以隐蔽那些透漏内
部细节j t l F i n g e r ,DNS 等服务。F i n g e r 显示了主机的所有用户的注册
名、真名,最后器录时间和使用s h e l l 类型等。但是F i n g e r 显示的信息
非常容易被攻击者所获悉。攻击者可以知道一个系统使用的频繁程
度,这个系统是否有用户正在连线上嘲,这个系统是否在被攻击时引
起注意等等。防火墙可以同样阻塞有关内部网络中的DNS 信息,这样
一
台主机的域名和I P 地址就不会谈外界所了解。
2 防火墙体系结构
(1 )双宿/ 多宿主机。这种模式是在堡垒主机上配置两块或两块
以上的网卡实现的。其中,一块网卡用于外部网络 ,而其余网卡则用
于内部网络,并通过代理服务系统来实现防火墙的各种功能。
( 2)屏蔽主机。这种模式是在双宿/ 多宿主机模式的基础上增加
外部过滤路由没备实现的。堡垒主机通过一个外部过滤路由器进行连
接,在通过代 服务系统将外部过滤路由器传来的消息于内部网络联
系在一起,从而起到保护内部网络的作用。
( 3)屏蔽子网。这种模式是在屏蔽主饥模式的基础上增加内部
过滤路由设备实现的。堡垒主机使用的两个过滤路由器,分别于内部
网络和外部网络连接,再通过代理服务系统处理经过过滤路d t 器的信息
3 防火墙包过滤技术
(1 ) “ 包过滤”技术简介。 “ 包过滤”是最早使用的一种防火
墙技术,也是防火墙所要实现的最基本功能,它可将不符合要求的包
过滤掉。它的第一代模型是 “ 静态包过滤”,使用包过滤技术的防火
墙通常工作在o s i 模型 中的网络层上,后来发展更新的 “ 动态包过
滤”增加了传输层 ,简言之 ,包过滤技术工作的地方就是各种基于
T C P / I P 协议的数据报文进出的通道 ,它把这两层作为数据监控的对
象,对每个数据包的头部、协议、地址 、端口、类型等信息进行分
析,并与预先没定好的防火墙过滤规则进行核对,一旦发现某个包的
某个或多个部分与过滤规则匹配并且条件为 “ 阻止”的时候,这个包
就会被丢弃。
( 2) “ 包过滤”防火墙的一般工作原理。包过滤是在I P 层实现
的,因此,它可以只用路由器完成。包过滤根据包的源I P J ~J L、目的
I P 地址、源端口、目的端口及包传递方向等报头信息来判断是否允许
包通过。过滤用户定义的内容,如I P 地址。其工作原理是系统在网络
层检查数据包 ,与应用层无关 ,包过滤器的应用非常广泛 ,因为
CP U用来处理包过滤的时间可以忽略不汁。而且这种防护措施对用户
透明,合法用户在进出网络时,根本感觉不到它的存在,使用起来很
方便。这样系统就具有很好的传输性能,易扩展:但是这种防火墙不
太安全,因为系统对应用层信息无感知也就是说,它们不理解通信的
内容,不能在用户级别上进行过滤 ,即不能识别不同的用户和防止
I P 地址的盗用。如果攻击者把自己主机的I P 地址没成一个合法主机的
l P 地址,就可以很轻易地通过包过滤器,这样更容易被黑客攻破。
( 3)黑客攻击包过滤防火墙的常用手段。 “ I P 地址欺骗”是黑
客比较常用的一种攻击手段。黑客们 包过滤防火墙发出一系列信息
包 ,这些包中的l P 地址已经被替换为一串顺序的I P 地址,一旦有一个
包通过了防火墙,黑客便可以用这个I P 地址来伪装他们发出的信息。
攻击者向被攻击的计算机发出许许多多个虚假的 “ 同步请求”信息
包 ,目标计算机响应了这种信息包后会等待请求发出者的应答.而攻
击者却不做任何回应 ,服务器在一定时间里没有收到响应信号的话就
会结束这次请求连接 ,但是当服务器在遇到成千上万个虚假请求时,
它便没有能力来处理正常的用户服务请求,处于这种攻下的服务器表 现为性能下降,服务响应时间变长,严重时服务完全停止甚至死机。
但是 ,如果防火墙能结合接口,地址来匹配,这种攻击就不能成功。
4 包过滤技术的优缺点及其发展趋势
随着网络应用的增加,对网络带宽提出了更高的要求。这意味着
防火墙要能够以非常高的速率处理数据。为了满足这种需要,一些防
火墙制造商开发了基于AS I C 的防火墙和基于网络处理器的防火墙。
从执行速度的角度看来 ,基于网络处理器的防火墙也是基于软件的解
决方案,它需要在很大程度上依赖于软件的性能,但是由于这类防火
墙中有一些专门用于处理数据层面任务的引擎,从而减轻了C P U的负
担 ,该类防火墙的性能要比传统防火墙的性能好许多。
如何防止xss攻击,需要过滤什么
XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
一、HttpOnly防止劫取Cookie
HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。
我们来看下百度有没有使用。
未登录时的Cookie信息
可以看到,所有Cookie都没有设置HttpOnly,现在我登录下
发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。
下面我用PHP来实现下:
?php
header("Set-Cookie: cookie1=test1;");
header("Set-Cookie: cookie2=test2;httponly",false);
setcookie('cookie3','test3',NULL,NULL,NULL,NULL,false);
setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);
?
script
alert(document.cookie);
/script
js只能读到没有HttpOnly标识的Cookie
二、输入检查
输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如、、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。
例如网站注册经常用户名只允许字母和数字的组合,或者邮箱电话,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。
网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。比如一款php的lib_filter类:
$filter = new lib_filter();
echo $filter-go('1+11');
它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。
三、输出检查
大多人都知道输入需要做检查,但却忽略了输出检查。
1、在HTML标签中输出
如代码:
?php
$a = "scriptalert(1);/script";
$b = "img src=# onerror=alert(2) /";
?
div?=$b?/div
a href="#"?=$a?/a
这样客户端受到xss攻击,解决方法就是对变量使用htmlEncode,php中的函数是htmlentities
?php
$a = "scriptalert(1);/script";
$b = "img src=# onerror=alert(2) /";
?
div?=htmlentities($b)?/div
a href="#"?=htmlentities($a)?/a
2、在HTML属性中输出
div id="div" name ="$var"/div
这种情况防御也是使用htmlEncode
在owasp-php中实现:
$immune_htmlattr = array(',', '.', '-', '_');
$this-htmlEntityCodec-encode($this-immune_htmlattr, "\"script123123;/script\"");
3、在script标签中输出
如代码:
?php
$c = "1;alert(3)";
?
script type="text/javascript"
var c = ?=$c?;
/script
这样xss又生效了。首先js变量输出一定要在引号内,但是如果我$c = "\"abc;alert(123);//",你会发现放引号中都没用,自带的函数都不能很好的满足。这时只能使用一个更加严格的JavascriptEncode函数来保证安全——除数字、字母外的所有字符,都使用十六进制"\xHH"的方式进行编码。这里我采用开源的owasp-php方法来实现
$immune = array("");
echo $this-javascriptCodec-encode($immune, "\"abc;alert(123);//");
最后输出\x22abc\x3Balert\x28123\x29\x3B\x2F\x2F
4、在事件中输出
a href="#" onclick="funcA('$var')" test/a
可能攻击方法
a href="#" onclick="funcA('');alter(/xss/;//')"test/a
这个其实就是写在script中,所以跟3防御相同
5、在css中输出
在owasp-php中实现:
$immune = array("");
$this-cssCodec-encode($immune, 'background:expression(window.x?0:(alert(/XSS/),window.x=1));');
6、在地址中输出
先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent方法。
在owasp-php中实现:
$instance = ESAPI::getEncoder();
$instance-encodeForURL(‘url’);
四、处理富文体
就像我写这篇博客,我几乎可以随意输入任意字符,插入图片,插入代码,还可以设置样式。这个时要做的就是设置好白名单,严格控制标签。能自定义 css件麻烦事,因此最好使用成熟的开源框架来检查。php可以使用htmlpurify
五、防御DOM Based XSS
DOM Based XSS是从javascript中输出数据到HTML页面里。
script
var x = "$var";
document.write("a href='"+x+"'test/a");
/script
按照三中输出检查用到的防御方法,在x赋值时进行编码,但是当document.write输出数据到HTML时,浏览器重新渲染了页面,会将x进行解码,因此这么一来,相当于没有编码,而产生xss。
防御方法:首先,还是应该做输出防御编码的,但后面如果是输出到事件或脚本,则要再做一次javascriptEncode编码,如果是输出到HTML内容或属性,则要做一次HTMLEncode。
会触发DOM Based XSS的地方有很多:
document.write()、document.writeln()、xxx.innerHTML=、xxx.outerHTML=、innerHTML.replace、document.attachEvent()、window.attachEvent()、document.location.replace()、document.location.assign()
我的电脑如何有效的防范黑客的攻击?
一、计算机的设置
1.关闭“文件和打印共享”
文件和打印共享应该是一个非常有用的功能,但在不需要它的时候,也是黑客入侵的很好的安全漏洞。所以在没有必要“文件和打印共享”的情况下,我们可以将它关闭。用鼠标右击“网络邻居”,选择“属性”,然后单击“文件和打印共享”按钮,将弹出的“文件和打印共享”对话框中的两个复选框中的钩去掉即可。 虽然“文件和打印共享”关闭了,但是还不能确保安全,还要修改注册表,禁止它人更改“文件和打印共享”。打开注册表编辑器,选择
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\NetWork
主键,在该主键下新建DWORD类型的键值,键值名为“NoFileSharingControl”,键值设为“1”表示禁止这项功能,从而达到禁止更改“文件和打印共享”的目的;键值为“0”表示允许这项功能。这样在“网络邻居”的“属性”对话框中“文件和打印共享”就不复存在了。
2.把Guest账号禁用
有很多入侵都是通过这个账号进一步获得管理员密码或者权限的。如果不想把自己的计算机给别人当玩具,那还是禁止的好。打开控制面板,双击“用户和密码”,单击“高级”选项卡,再单击“高级”按钮,弹出本地用户和组窗口。在Guest账号上面点击右键,选择属性,在“常规”页中选中“账户已停用”。另外,将Administrator账号改名可以防止黑客知道自己的管理员账号,这会在很大程度上保证计算机安全。
3.禁止建立空连接
在默认的情况下,任何用户都可以通过空连接连上服务器,枚举账号并猜测密码。因此,我们必须禁止建立空连接。方法是修改注册表:打开注册表
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA
将DWORD值“RestrictAnonymous”的键值改为“1”即可。
二、隐藏IP地址
黑客经常利用一些网络探测技术来查看我们的主机信息,主要目的就是得到网络中主机的IP地址。IP地址在网络安全上是一个很重要的概念,如果攻击者知道了你的IP地址,等于为他的攻击准备好了目标,他可以向这个IP发动各种进攻,如DoS( 拒绝服务 )攻击、Floop溢出攻击等。隐藏IP地址的主要方法是使用代理服务器。 与直接连接到Internet相比,使用代理服务器能保护上网用户的IP地址,从而保障上网安全。代理服务器的原理是在客户机(用户上网的计算机)和远程服务器(如用户想访问远端WWW服务器)之间架设一个“中转站”,当客户机向远程服务器提出服务要求后,代理服务器首先截取用户的请求,然后代理服务器将服务请求转交远程服务器,从而实现客户机和远程服务器之间的联系。很显然,使用代理服务器后,其它用户只能探测到代理服务器的IP地址而不是用户的IP地址,这就实现了隐藏用户IP地址的目的,保障了用户上网安全。提供免费代理服务器的网站有很多,你也可以自己用代理猎手等工具来查找。
三、关闭不必要的端口
黑客在入侵时常常会扫描你的计算机端口,如果安装了端口监视程序(比如Netwatch),该监视程序则会有警告提示。如果遇到这种入侵,可用工具软件关闭用不到的端口。
四、更换管理员账户
Administrator账户拥有最高的系统权限,一旦该账户被人利用,后果不堪设想。黑客入侵的常用手段之一就是试图获得Administrator账户的密码,所以我们要重新配置Administrator账号。 首先是为Administrator账户设置一个强大复杂的密码,然后我们重命名Administrator账户,再创建一个没有管理员权限的Administrator账户欺骗入侵者。这样一来,入侵者就很难搞清哪个账户真正拥有管理员权限,也就在一定程度上减少了危险性。
五、杜绝Guest账户的入侵
Guest账户即所谓的来宾账户,它可以访问计算机,但受到限制。不幸的是,Guest也为黑客入侵打开了方便之门!网上有很多文章中都介绍过如何利用Guest用户得到管理员权限的方法,所以要杜绝基于Guest账户的系统入侵。
禁用或彻底删除Guest账户是最好的办法,但在某些必须使用到Guest账户的情况下,就需要通过其它途径来做好防御工作了。首先要给Guest设一个强壮的密码,然后详细设置Guest账户对物理路径的访问权限。举例来说,如果你要防止Guest用户可以访问tool文件夹,可以右击该文件夹,在弹出菜单中选择“安全”标签,从中可看到可以访问此文件夹的所有用户。删除管理员之外的所有用户即可。或者在权限中为相应的用户设定权限,比方说只能“列出文件夹目录”和“读取”等,这样就安全多了。
六、安装必要的安全软件
我们还应在电脑中安装并使用必要的防黑软件,杀毒软件和 防火墙 都是必备的。在上网时打开它们,这样即便有黑客进攻我们的安全也是有保证的。
七、防范木马程序
木马程序会窃取所植入电脑中的有用信息,因此我们也要防止被黑客植入木马程序,常用的办法有:
● 在下载文件时先放到自己新建的文件夹里,再用杀毒软件来检测,起到提前预防的作用。
● 在“开始”→“程序”→“启动”或“开始”→“程序”→“Startup”选项里看是否有不明的运行项目,如果有,删除即可。将注册表里
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
下的所有以“Run”为前缀的可疑程序全部删除即可。
八、不要回陌生人的邮件
有些黑客可能会冒充某些正规网站的名义,然后编个冠冕堂皇的理由寄一封信给你要求你输入上网的用户名称与密码,如果按下“确定”,你的账号和密码就进了黑客的邮箱。所以不要随便回陌生人的邮件,即使他说得再动听再诱人也不上当。
九、做好IE的安全设置
ActiveX控件和 Applets有较强的功能,但也存在被人利用的隐患,网页中的恶意代码往往就是利用这些控件编写的小程序,只要打开网页就会被运行。所以要避免恶意网页的攻击只有禁止这些恶意代码的运行。IE对此提供了多种选择,具体设置步骤是:“工具”→“Internet选项”→“安全”→“自定义级别”,建议您将ActiveX控件与相关选项禁用。谨慎些总没有错! 另外,在IE的安全性设定中我们只能设定Internet、本地Intranet、受信任的站点、受限制的站点。不过,微软在这里隐藏了“我的电脑”的安全性设定,通过修改注册表把该选项打开,可以使我们在对待ActiveX控件和 Applets时有更多的选择,并对本地电脑安全产生更大的影响。
下面是具体的方法:打开“开始”菜单中的“运行”,在弹出的“运行”对话框中输入Regedit.exe,打开注册表编辑器,点击前面的“+”号顺次展开到:
HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\0
在右边窗口中找到DWORD值“Flags”,默认键值为十六进制的21(十进制33),双击“Flags”,在弹出的对话框中将它的键值改为“1”即可,关闭注册表编辑器。无需重新启动电脑,重新打开IE,再次点击“工具→Internet选项→安全”标签,你就会看到多了一个“我的电脑”图标,在这里你可以设定它的安全等级。将它的安全等级设定高些,这样的防范更严密。
最后建议给自己的系统打上补丁, 微软那些补丁还是很有用的。
黑客攻防的过滤网关防护
这里,过滤网关主要指明防火墙,当然路由器也能成为过滤网关。防火墙部署在不同网络之间,防范外来非法攻击和防止保密信息外泄,它处于客户端和服务器之间,利用它来防护SYN攻击能起到很好的效果。过滤网关防护主要包括超时设置,SYN网关和SYN代理三种。
·网关超时设置:
防火墙设置SYN转发超时参数(状态检测的防火墙可在状态表里面设置),该参数远小于服务器的timeout时间。当客户端发送完SYN包,服务端发送确认包后(SYN+ACK),防火墙如果在计数器到期时还未收到客户端的确认包(ACK),则往服务器发送RST包,以使服务器从队列中删去该半连接。值得注意的是,网关超时参数设置不宜过小也不宜过大,超时参数设置过小会影响正常的通讯,设置太大,又会影响防范SYN攻击的效果,必须根据所处的网络应用环境来设置此参数。
·SYN网关:
SYN网关收到客户端的SYN包时,直接转发给服务器;SYN网关收到服务器的SYN/ACK包后,将该包转发给客户端,同时以客户端的名义给服务器发ACK确认包。此时服务器由半连接状态进入连接状态。当客户端确认包到达时,如果有数据则转发,否则丢弃。事实上,服务器除了维持半连接队列外,还要有一个连接队列,如果发生SYN攻击时,将使连接队列数目增加,但一般服务器所能承受的连接数量比半连接数量大得多,所以这种方法能有效地减轻对服务器的攻击。
·SYN代理:
当客户端SYN包到达过滤网关时,SYN代理并不转发SYN包,而是以服务器的名义主动回复SYN/ACK包给客户,如果收到客户的ACK包,表明这是正常的访问,此时防火墙向服务器发送ACK包并完成三次握手。SYN代理事实上代替了服务器去处理SYN攻击,此时要求过滤网关自身具有很强的防范SYN攻击能力。
2、加固tcp/ip协议栈防范SYN攻击的另一项主要技术是调整tcp/ip协议栈,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等。tcp/ip协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作。otect机制
为防范SYN攻击,Windows2000系统的tcp/ip协议栈内嵌了SynAttackProtect机制,Win2003系统也采用此机制。SynAttackProtect机制是通过关闭某些socket选项,增加额外的连接指示和减少超时时间,使系统能处理更多的SYN连接,以达到防范SYN攻击的目的。默认情况下,Windows2000操作系统并不支持SynAttackProtect保护机制,需要在注册表以下位置增加SynAttackProtect键值:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
当SynAttackProtect值(如无特别说明,本文提到的注册表键值都为十六进制)为0或不设置时,系统不受SynAttackProtect保护。
当SynAttackProtect值为1时,系统通过减少重传次数和延迟未连接时路由缓冲项(route cache entry)防范SYN攻击。
当SynAttackProtect值为2时(Microsoft推荐使用此值),系统不仅使用backlog队列,还使用附加的半连接指示,以此来处理更多的SYN连接,使用此键值时,tcp/ip的TCPInitialRTT、window size和可滑动窗囗将被禁止。
我们应该知道,平时,系统是不启用SynAttackProtect机制的,仅在检测到SYN攻击时,才启用,并调整tcp/ip协议栈。那么系统是如何检测SYN攻击发生的呢?事实上,系统根据TcpMaxHalfOpen,TcpMaxHalfOpenRetried 和TcpMaxPortsExhausted三个参数判断是否遭受SYN攻击。
TcpMaxHalfOpen 表示能同时处理的最大半连接数,如果超过此值,系统认为正处于SYN攻击中。Windows2000 server默认值为100,Windows2000 Advanced server为500。
TcpMaxHalfOpenRetried定义了保存在backlog队列且重传过的半连接数,如果超过此值,系统自动启动SynAttackProtect机制。Windows2000 server默认值为80,Windows2000 Advanced server为400。
TcpMaxPortsExhausted 是指系统拒绝的SYN请求包的数量,默认是5。
如果想调整以上参数的默认值,可以在注册表里修改(位置与SynAttackProtect相同)
· SYN cookies技术
我们知道,TCP协议开辟了一个比较大的内存空间backlog队列来存储半连接条目,当SYN请求不断增加,并这个空间,致使系统丢弃SYN连接。为使半连接队列被塞满的情况下,服务器仍能处理新到的SYN请求,SYN cookies技术被设计出来。
SYN cookies应用于linux、FreeBSD等操作系统,当半连接队列满时,SYNcookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态。
在TCP实现中,当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器。通常,服务器的初始序列号由服务器按照一定的规律计算得到或采用随机数,但在SYN cookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie。当服务器遭受SYN攻击使得backlog队列满时,服务器并不拒绝新的SYN请求,而是回复cookie(回复包的SYN序列号)给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此时并不用查看此连接是否属于backlog队列)。
在RedHat linux中,启用SYN cookies是通过在启动环境中设置以下命令来完成:
# echo 1 ?? /proc/sys/net/ipv4/tcp_syncookies
· 增加最大半连接数
大量的SYN请求导致未连接队列被塞满,使正常的TCP连接无法顺利完成三次握手,通过增大未连接队列空间可以缓解这种压力。当然backlog队列需要占用大量的内存资源,不能被无限的扩大。
Windows2000:除了上面介绍的TcpMaxHalfOpen, TcpMaxHalfOpenRetried参数外,Windows2000操作系统可以通过设置动态backlog(dynamic backlog)来增大系统所能容纳的最大半连接数,配置动态backlog由AFD.SYS驱动完成,AFD.SYS是一种内核级的驱动,用于支持基于window socket的应用程序,比如ftp、telnet等。AFD.SYS在注册表的位置:
HKLM\System\CurrentControlSet\Services\AFD\Parameters\EnableDynamicBacklog值为1时,表示启用动态backlog,可以修改最大半连接数。
MinimumDynamicBacklog表示半连接队列为单个TCP端囗分配的最小空闲连接数,当该TCP端囗在backlog队列的空闲连接小于此临界值时,系统为此端囗自动启用扩展的空闲连接(DynamicBacklogGrowthDelta),Microsoft推荐该值为20。
MaximumDynamicBacklog是当前活动的半连接和空闲连接的和,当此和超过某个临界值时,系统拒绝SYN包,Microsoft推荐MaximumDynamicBacklog值不得超过2000。
DynamicBacklogGrowthDelta值是指扩展的空闲连接数,此连接数并不计算在MaximumDynamicBacklog内,当半连接队列为某个TCP端囗分配的空闲连接小于MinimumDynamicBacklog时,系统自动分配DynamicBacklogGrowthDelta所定义的空闲连接空间,以使该TCP端囗能处理更多的半连接。Microsoft推荐该值为10。
LINUX:Linux用变量tcp_max_syn_backlog定义backlog队列容纳的最大半连接数。在Redhat 7.3中,该变量的值默认为256,这个值是远远不够的,一次强度不大的SYN攻击就能使半连接队列占满。我们可以通过以下命令修改此变量的值:
# sysctl -w net.ipv4.tcp_max_syn_backlog=`2048`
Sun Solaris Sun Solaris用变量tcp_conn_req_max_q0来定义最大半连接数,在Sun Solaris 8中,该值默认为1024,可以通过add命令改变这个值:
# ndd -set /dev/tcp tcp_conn_req_max_q0 2048
HP-UX:HP-UX用变量tcp_syn_rcvd_max来定义最大半连接数,在HP-UX 11.00中,该值默认为500,可以通过ndd命令改变默认值:
#ndd -set /dev/tcp tcp_syn_rcvd_max 2048
·缩短超时时间
上文提到,通过增大backlog队列能防范SYN攻击;另外减少超时时间也使系统能处理更多的SYN请求。我们知道,timeout超时时间,也即半连接存活时间,是系统所有重传次数等待的超时时间总和,这个值越大,半连接数占用backlog队列的时间就越长,系统能处理的SYN请求就越少。为缩短超时时间,可以通过缩短重传超时时间(一般是第一次重传超时时间)和减少重传次数来实现。
Windows2000第一次重传之前等待时间默认为3秒,为改变此默认值,可以通过修改网络接囗在注册表里的TcpInitialRtt注册值来完成。重传次数由TcpMaxConnectResponseRetransmissions 来定义,注册表的位置是:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters registry key
当然我们也可以把重传次数设置为0次,这样服务器如果在3秒内还未收到ack确认包就自动从backlog队列中删除该连接条目。
LINUX:Redhat使用变量tcp_synack_retries定义重传次数,其默认值是5次,总超时时间需要3分钟。
Sun Solaris Solaris 默认的重传次数是3次,总超时时间为3分钟,可以通过ndd命令修改这些默认值。
黑客攻击手段
(一)黑客常用手段
1、网络扫描--在Internet上进行广泛搜索,以找出特定计算机或软件中的弱点。
2、网络嗅探程序--偷偷查看通过Internet的数据包,以捕获口令或全部内容。通过安装侦听器程序来监视网络数据流,从而获取连接网络系统时用户键入的用户名和口令。
3、拒绝服务 -通过反复向某个Web站点的设备发送过多的信息请求,黑客可以有效地堵塞该站点上的系统,导致无法完成应有的网络服务项目(例如电子邮件系统或联机功能),称为“拒绝服务”问题。
4、欺骗用户--伪造电子邮件地址或Web页地址,从用户处骗得口令、信用卡号码等。欺骗是用来骗取目标系统,使之认为信息是来自或发向其所相信的人的过程。欺骗可在IP层及之上发生(地址解析欺骗、IP源地址欺骗、电子邮件欺骗等)。当一台主机的IP地址假定为有效,并为Tcp和Udp服务所相信。利用IP地址的源路由,一个攻击者的主机可以被伪装成一个被信任的主机或客户。
5、特洛伊木马--一种用户察觉不到的程序,其中含有可利用一些软件中已知弱点的指令。
6、后门--为防原来的进入点被探测到,留几个隐藏的路径以方便再次进入。
7、恶意小程序--微型程序,修改硬盘上的文件,发送虚假电子邮件或窃取口令。
8、竞争拨号程序--能自动拨成千上万个电话号码以寻找进入调制解调器连接的路径。逻辑炸弹计算机程序中的一条指令,能触发恶意操作。
9、缓冲器溢出-- 向计算机内存缓冲器发送过多的数据,以摧毁计算机控制系统或获得计算机控制权。
10、口令破译--用软件猜出口令。通常的做法是通过监视通信信道上的口令数据包,破解口令的加密形式。
11、社交工程--与公司雇员谈话,套出有价值的信息。
12、垃圾桶潜水--仔细检查公司的垃圾,以发现能帮助进入公司计算机的信息。
(二)黑客攻击的方法:
1、隐藏黑客的位置
典型的黑客会使用如下技术隐藏他们真实的IP地址:
利用被侵入的主机作为跳板;
在安装Windows 的计算机内利用Wingate 软件作为跳板;利用配置不当的Proxy作为跳板。
更老练的黑客会使用电话转接技术隐蔽自己。他们常用的手法有:利用800 号电话的私人转接服务联接ISP, 然后再盗用他人的账号上网;通过电话联接一台主机,再经由主机进入Internet。
使用这种在电话网络上的"三级跳"方式进入Internet 特别难于跟踪。理论上,黑客可能来自世界任何一个角落。如果黑客使用800号拨号上网,他更不用担心上网费用。
2、网络探测和资料收集
黑客利用以下的手段得知位于内部网和外部网的主机名。
使用nslookup 程序的ls命令;
通过访问公司主页找到其他主机;
阅读FTP服务器上的文挡;
联接至mailserver 并发送 expn请求;
Finger 外部主机上的用户名。
在寻找漏洞之前,黑客会试图搜集足够的信息以勾勒出整个网络的布局。利用上述操作得到的信息,黑客很容易列出所有的主机,并猜测它们之间的关系。
3、找出被信任的主机
黑客总是寻找那些被信任的主机。这些主机可能是管理员使用的机器,或是一台被认为是很安全的服务器。
一步,他会检查所有运行nfsd或mountd的主机的NFS输出。往往这些主机的一些关键目录(如/usr/bin、/etc和/home)可以被那台被信任的主机mount。
Finger daemon 也可以被用来寻找被信任的主机和用户,因为用户经常从某台特定的主机上登录。
黑客还会检查其他方式的信任关系。比如,他可以利用CGI 的漏洞,读取/etc/hosts.allow 文件等等。
分析完上述的各种检查结果,就可以大致了解主机间的信任关系。下一步, 就是探测这些被信任的主机哪些存在漏洞,可以被远程侵入。
4、找出有漏洞的网络成员
当黑客得到公司内外部主机的清单后,他就可以用一些Linux 扫描器程序寻找这些主机的漏洞。黑客一般寻找网络速度很快的Linux 主机运行这些扫描程序。
所有这些扫描程序都会进行下列检查:
TCP 端口扫描;
RPC 服务列表;
NFS 输出列表;
共享(如samba、netbiox)列表;
缺省账号检查;
Sendmail、IMAP、POP3、RPC status 和RPC mountd 有缺陷版本检测。
进行完这些扫描,黑客对哪些主机有机可乘已胸有成竹了。
如果路由器兼容SNMP协议,有经验的黑客还会采用攻击性的SNMP 扫描程序进行尝试, 或者使用"蛮力式"程序去猜测这些设备的公共和私有community strings。
5、利用漏洞
现在,黑客找到了所有被信任的外部主机,也已经找到了外部主机所有可能存在的漏洞。下一步就该开始动手入侵主机了。
黑客会选择一台被信任的外部主机进行尝试。一旦成功侵入,黑客将从这里出发,设法进入公司内部的网络。但这种方法是否成功要看公司内部主机和外部主机间的过滤策略了。攻击外部主机时,黑客一般是运行某个程序,利用外部主机上运行的有漏洞的daemon窃取控制权。有漏洞的daemon包括Sendmail、IMAP、POP3各个漏洞的版本,以及RPC服务中诸如statd、mountd、pcnfsd等。有时,那些攻击程序必须在与被攻击主机相同的平台上进行编译。
6、获得控制权
黑客利用daemon的漏洞进入系统后会做两件事:清除记录和留下后门。
他会安装一些后门程序,以便以后可以不被察觉地再次进入系统。大多数后门程序是预先编译好的,只需要想办法修改时间和权限就可以使用,甚至于新文件的大小都和原有文件一样。黑客一般会使用rcp 传递这些文件,以便不留下FTP记录。
一旦确认自己是安全的,黑客就开始侵袭公司的整个内部网
7.窃取网络资源和特权
黑客找到攻击目标后,会继续下一步的攻击,步骤如下:
(1)下载敏感信息
如果黑客的目的是从某机构内部的FTP或WWW服务器上下载敏感信息,他可以利用已经被侵入的某台外部主机轻而易举地得到这些资料。
(2)攻击其他被信任的主机和网络
大多数的黑客仅仅为了探测内部网上的主机并取得控制权,只有那些"雄心勃勃"的黑客,为了控制整个网络才会安装特洛伊木马和后门程序,并清除记录。 那些希望从关键服务器上下载数据的黑客,常常不会满足于以一种方式进入关键服务器。他们会费尽心机找出被关键服务器信任的主机,安排好几条备用通道。
(3)安装sniffers
在内部网上,黑客要想迅速获得大量的账号(包括用户名和密码),最为有效的手段是使用"sniffer" 程序。
黑客会使用上面各节提到的方法,获得系统的控制权并留下再次侵入的后门,以保证sniffer能够执行。
(4)瘫痪网络
如果黑客已经侵入了运行数据库、网络操作系统等关键应用程序的服务器,使网络瘫痪一段时间是轻而易举的事。
如果黑客已经进入了公司的内部网,他可以利用许多路由器的弱点重新启动、甚至关闭路由器。如果他们能够找到最关键的几个路由器的漏洞,则可以使公司的网络彻底瘫痪一段时间
CGI 的漏洞,读取/etc/hosts.allow 文件等等。分析完上述的各种检查结果,就可以大致了解主机间的信任关系。下一步, 就是探测这些被信任的主机哪些存在漏洞,可以被远程侵入。4、找出有漏洞的网络成员当黑客得到公司内外部主机的清单后,他就可以用一些Linux 扫描器程序寻找