随着Internet的快速发展,网络安全越来越被人们重视,防火墙技术不断的更新更是说明了这一点。
4 B$ b/ L. `) y4 F# M什么是防火墙?
% b1 \2 M; K0 J& m% {防火墙是采用综合的网络技术设置在被保护网络和外部网络之间的一道屏障,用以分隔被保护网络与外部网络系统,防止发生不可预测的、潜在破坏性的入侵。它是不同网络或网络安全域之间信息的唯一出口,像在两个网络之间设置了一道关卡,能根据设置的安全策略控制出入网络的信息流,防止非法信息流入被保护的网络中,而不影响保护网络对Internet的正常访问。在Internet上,防火墙是一个非常有效的网络安全模型,并且自身有很强的抗攻击能力。防火墙已经经历了六代的发展,最新的一代就是智能型抗DD.o.S防火墙。
. L5 y" c7 W A& S; J6 {. I5 b* ~什么是访问控制?
8 Y& A2 C+ b& l! V/ b0 \/ H% p* \访问控制是信息安全保障机制的核心内容,他是实现数据保密性和完整性机制的主要手段。访问控制是为了限制访问主体对访问客体的访问权限,从而使计算机系统在合法的范围内使用。访问控制机制决定用户及代表一定用户利益的程序能做什么,做到什么程度。访问控制应用在网络安全中,主要是限制用户可以建立什么样的连接以及传输什么样的数据。访问控制就是防火墙的核心,防火墙主要通过一个访问控制表来判断的,他的形式一般是一连串的如下规则:+ j5 [8 M! ~* h" }
1. Accept from+ 源地址,端口 To+ 目的地址,端口+ 采取的动作(允许数据包进入)
7 J5 Y5 {/ \/ \4 M' z/ I2 D9 g8 V2. Deny ...........(拒绝数据包进入)$ `1 t% Y+ g' ^
3. Nat ............(网络地址转换)
8 x) _- J4 g, N. h6 k- j c" r防火墙在网络层(包括以下的链路层)接受到网络数据包后,就会从上面的规则连表一条一条地匹配,如果符合就执行预先安排的动作了,如丢弃包,但不同的防火墙在判断攻击行为时有实现上的差别。# b& ~/ b' i1 t
访问控制列表(Access Control List)的作用:$ j4 j( ?$ ?$ i! B( y3 D
1. ACL可以限制网络流量、提高网络性能。7 \$ f: ~4 E+ w# T* k( D* H4 A
2. ACL提供对通信流量的控制手段。
8 Q8 ]; Q0 k" `( s1 i7 \1 j4 W3. ACL是提供网络安全访问的基本手段。3 S) Q- q+ h$ W
4. ACL可以在路由器端口处决定哪种类型的通信流量被转发或阻塞。
2 {6 q! }' z- g8 H7 q 防火墙大致上分为以下三类:
9 \% |4 \+ N5 z8 [3 _' t1. 应用级防火墙(软件防火墙)
) T) A. t: N* L' W/ r8 @5 c应用级防火墙一般是运行代理服务的主机,它不允许传输流在网络上直接传输,并对通过它的传输流进行记录和审计。由于代理应用程序是运行在防火墙上的软件部件,因此它的位置最适合实现访问控制。在某些情况下,设置了应用级防火墙后对性能或许会造成一些影响,会使防火墙不太透明。应用级防火墙可以提供很详细的审计报告。
: ?. Y" r# N/ }5 j G2. 网络级防火墙(硬件防火墙) ^' u8 x+ }: h7 i" s5 T3 ?
网络防火墙一般都是根据源、目的地址做出决策,传输单个的IP包。路由就是简单的网络级防火墙,但现在已经跟不上我们的要求了,它不能做出复杂的决策,不能判断包的实际出处和包的实际含义。专业的硬件防火墙已经出来了,但不是一般用户能消费的起的,所以还没有普及。许多网络级防火墙之间的重要差别就是防火墙可以使传输流直接通过,因此要使用这样的防火墙需要分配有效的IP块。一般网络级防火墙的速度很快。
" x- P" A% y8 O5 h1 u3. 双宿主机防火墙(堡垒主机) }, Y$ G+ H* Z: J
这种防火墙一般用主机来取代路由执行完全控制功能,类似于包过滤防火墙。双宿主机是一台配有多个网络接口的主机,可以用来内部网络和外部网络之间进行寻径,正因为这个功能,它们可以共享数据,这样内部网络和外部网络的某些节点之间可以通过双宿主机上的共享数据传递信息,但内部网络和外部网络却不能直接跳过双宿主机传递信息,从而达到保护内部网络的作用。
6 l8 c1 m& M6 [6 F5 E防火墙的优缺点
8 E/ {6 x; N' F8 v1.包过滤防火墙$ h7 ~4 i7 T9 I9 t7 z
?使用包过滤防火墙的优点包括:% p7 r, @0 _ h) B
防火墙对每条传入和传出网络的包实行低水平控制。每个IP包的字段都被检查,例如源地址、目的地址、协议、端口等。防火墙将基于这些信息应用过滤规则。防火墙可以识别和丢弃带欺骗性源IP地址的包。包过滤防火墙是两个网络之间访问的唯一来源。因为所有的通信必须通过防火墙,绕过是困难的。包过滤通常被包含在路由器数据包中,所以不必额外的系统来处理这个特征。- e9 U1 ?4 l3 e$ L: h, M* J, x% M2 s
使用包过滤防火墙的缺点包括:
4 I; t; c$ {- `& w: U! R# g! y配置困难,因为包过滤防火墙很复杂,人们经常会忽略建立一些必要的规则,或者错误配置了已有的规则,在防火墙上留下漏洞。然而,在市场上,许多新版本的防火墙对这个缺点正在作改进,如开发者实现了基于图形化用户界面(GUI)的配置和更直接的规则定义。为特定服务开放的端口存在着危险,可能会被用于其他传输。* ^# c @/ _9 m- i9 A2 u/ M- [
2.状态/动态检测防火墙3 W# j/ k% y2 b m. n. j; W0 v) l
?状态/动态检测防火墙的优点有:; w9 Q0 C9 i) T; ]; y: e* z
检查IP包的每个字段的能力,并遵从基于包中信息的过滤规则。识别带有欺骗性源IP地址包的能力。包过滤防火墙是两个网络之间访问的唯一来源。因为所有的通信必须通过防火墙,绕过是困难的。基于应用程序信息验证一个包的状态的能力, 例如基于一个已经建立的FTP连接,允许返回的FTP包通过。基于应用程序信息验证一个包状态的能力,例如允许一个先前认证过的连接继续与被授予的服务通信。记录有关通过的每个包的详细信息的能力。基本上,防火墙用来确定包状态的所有信息都可以被记录,包括应用程序对包
+ d( y# V8 K) Q* o+ p的请求,连接的持续时间,内部和外部系统所做的连接请求等。
1 {) i' n; v* `' b状态/动态检测防火墙的缺点:
# ]( M% e+ Y! U+ Q+ M2 _( @状态/动态检测防火墙唯一的缺点就是所有这些记录、测试和分析工作可能会造成网络连接的某种迟滞,特别是在同时有许多连接激活的时候,或者是有大量的过滤网络通信的规则存在时。可是,硬件速度越快,这个问题就越不易察觉,而且防火墙的制造商一直致力于提高他们产品的速度。
( f) K4 E E5 D7 ` Q入侵检测系统) Q% L& ]6 z3 C- t4 a3 v" S
现在很多硬件防火墙都集成了入侵检测系统,什么是入侵检测?入侵检测是能够检测到网络上不正常、不合法活动的网络技术。入侵检测系统运行在一台主机上,监视该主机上的恶意活动被称为基于主机的入侵检测系统。入侵检测系统运行在网络数据流上被称为基于网络的入侵检测系统。 有时,"滥用"和"入侵"两个词是有区别的。"入侵"通常是指来自外网的攻击;而"滥用"通常用来描述来自内网的攻击。然而,大多数人并不划分得这么详细。 最常用的两种入侵检测方法是统计异常发现和模式匹配。入侵检测作为一种积极主动地安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护,在网络系统受到危害之前拦截和响应入侵。 8 C( X$ _0 N! ]0 v8 c7 u
入侵检测功能( t5 \4 m9 {0 z6 t
· 监督并分析用户和系统的活动 + M4 f/ b/ d( T, H7 V7 Q, b+ J1 M- x( m
· 检查系统配置和漏洞
' n B7 t u- l- h2 z* e9 @· 识别并报告数据文件的改动 - M M4 e8 ]4 d0 k5 {
· 发现系统配置的错误,必要时予以更正
& E x5 F- ?7 c8 E; {9 L· 识别特定类型的攻击,并向相应人员报警,以作出防御反应
! E o- \$ r1 s1 P% p z· 可使系统管理人员最新的版本升级添加到程序中
$ E" c( X8 C, ~( m9 [· 允许非专家人员从事系统安全工作
0 I! ^* n* H8 `2 i9 @) E( A· 为信息安全策略的创建提供指导 , p5 L* x/ _: K% r, w( I* G1 `
· 必须修正对入侵检测系统和漏洞评估工具不切实际的期望:这些产品并不是无所不能的,它们无法弥补力量薄弱的识别和确认机制% j1 a) `" t3 E: K4 b
· 检查关键系统和数据文件的完整性
" d) E0 R4 t, b9 ^ r2 [8 G· 识别代表已知攻击的活动模式
( u2 Y* E, v$ Q+ N) a! k· 对反常行为模式的统计分析 2 ~9 t' h" J9 Y7 X8 S
· 不能弥补网络协议的漏洞
2 h) t' g( l5 P3 n2 I' ^· 不能弥补由于系统提供信息的质量或完整性的问题
& L8 w+ g) Q7 K4 e" b· 它们不能分析网络繁忙时所有事务 1 R8 G; y: X. g4 ?
· 它们不能总是对数据包级的攻击进行处理 & X1 V7 }2 q2 R5 w0 H
· 它们不能应付现代网络的硬件及特性
4 ?0 s( ]) O0 l2 O) c' Y- F· 对操作系统的校验管理,判断是否有破坏安全的用户活动。 ! f) S' z1 ]4 u$ Y) W Q
· 入侵检测系统和漏洞评估工具的优点在于: & L( u+ K9 K' I9 W0 d' q
· 提高了信息安全体系其它部分的完整性 + X/ C& W& e* o' P0 R# A
· 提高了系统的监察能力
; W) Q1 r7 L( Q. V· 跟踪用户从进入到退出的所有活动或影响
1 R- @# e1 _ t. P) G· 在无人干预的情况下,无法执行对攻击的检查 X8 B1 s" S! x# N2 u2 Q& E V( M
· 无法感知公司安全策略的内容
) M" v) O2 L. J, w/ b( j防火墙在网络中的应用:3 b" x9 {- {. l: E ? u1 a
防火墙在网络中占有很重要的地位,防火墙一旦被攻破将对企业和个人造成严重的安全问题。防火墙现在有很多种类,实现的功能也有强有弱。软件防火墙的优点是价格较低(甚至免费),易配置和易操作性,有详细的审核记录,软件防火墙也分企业防火墙和个人防火墙,企业防火墙在网络中抗攻击能力比个人防火墙要强的多,如果配置得当可以抵御来自网络上的大部分攻击,但是对防御大范围的DD.o.S攻击还是略显不足,现在有很多安全小组或公司都在努力开发或开发好了抵御DD.o.S攻击的防火墙,要全部发挥它的性能还是需要硬件支持的。大多数企业会使用Windows 2000系统+软件防火墙 或者 LINUX系统 来代替价格较高的硬件防火墙。硬件防火墙也有自己的优势和特点,比如处理速度快,或者带有IDS,有的厂家还自己写了操作系统来运行防火墙,这样就避免了流行系统的漏洞影响,但因为其价格昂贵,所以一般用户很少应用。系统自身也有防御功能,在Windows 2000以上的系统中我们可以用IPSec配合TCP/IP筛选来实现简单的防火墙功能。在Liunx和Windows XP系统中都集成了防火墙,我们可以直接使用。
( p3 p3 [ u, e防火墙不能做的3 ~4 P; ~! N' S$ v! W* r
防火墙是一个确保网络安全的强大工具。但有些事情它做不了,这个就是他的局限性。按照防火墙的本性,是在协议栈较低层抵御外部攻击的防护工具。所以对较高层协议带来的问题几乎是没有毫无防范。如果使用它的代码有上最好的TCP中继缺陷的和不安全,世界也无保护作用。你只能在这一层上获得保护,条件是在这一层上你的网关拒绝将你与确定的服务连接,而且其策略正是根据应用层知识做出的。此外,即使我们对已知缺陷进行的防范,但对将来产生的问题仍可能无能为力。假如有人搞了一个新报头行,并被勉强实施了----并且这一特殊问题有涉及到一个非标准报头----对此我们仍有危险。当且仅我们拒绝通过已知的最小报头子集之外的任何东西时,我们才能保护自己。即使设计一个合法的、句法正确的报头,但默写方面在实施不尽合理,我们仍然可能遇到风险。最好是防火墙提供合适的单一位置,以实施真确的过滤。
3 e# z& Y1 E7 N3 @5 q" w评估防火墙
6 W2 }% p1 w- f2 E+ `无论是购买防火墙还是自己构造防火墙,都必须对他是否满足你的要求进行评估。这类评估也同样适用于构建防火墙的部件,如数据包过滤路由器。以下是一个评估清单:
' |8 F& V2 @# t Z0 ?1. 数据包过滤器
1 P; E% c9 `- Q4 }, [' R·过滤在哪里进行?输入口?输出口?还是两者?# }5 j+ s( ~. B- d/ p3 n. k. i
·可被检查的属性是什么?协议?源端口?目的端口?还是两者?
3 H& |3 u! _# Z6 m- Y9 n·可以对路由更新进行过滤吗?在输入口,输出口,或是两者?
+ ^9 @- R; h* x; ^8 [·能禁止源路由数据包吗?1 w& }. I! R. F) W/ y
·对规则的配置容易吗?用户接口看去来像什么?$ f/ s$ E& O5 v4 b
·过滤器语言的可理解程度如何?可以控制规则的应用顺序吗?- h. v0 A/ Y# T
·可以对建立起的连接进行过滤吗?0 y" }/ m3 c7 S2 i/ P. D, V
·除TCP和UDP外,协议是怎样被处理的?+ c& D$ q$ e% U1 h0 e
·什么情况下会拒绝数据包?它们能被记录吗?怎样记录的?2 u7 D8 l) r2 ^; q) W1 q6 ^
·可以对任意位字段进行过滤吗?
7 H5 Z6 W N/ @4 ~
& K* [) F+ P. N& j) Q$ d7 Q* B# m2. 应用网关5 u) I; B& M4 F }9 Q9 ]
·支持哪些应用?/ s4 E( t' A, l. |
·需要特殊的客户机程序吗?
9 f7 E$ P6 S M3 q2 N% o9 r6 l·难度大的服务,如何处理?
5 k2 R! y0 E* U( { `8 k7 A# _·平台的开放程度如何?能添加自己的中继吗?7 p, D: @* A( p; w
·日志记录、访问控制和过滤路由有充分的文档吗?1 H- x$ x7 ]( b+ t& x+ Z
·管理借口可用性如何?提供数据压缩的软件包吗?
8 j! q' O( b" w8 T' A3 T·对内网的用户对外的调用提供哪种鉴别机制?能添加自己的鉴别机制吗?
; g; x9 e9 Z3 _+ z8 x·提供对骇客的陷阱和诱惑功能吗?1 a6 \! `' S' m; O% J% @
·能添加自己的应用网关吗?
5 }8 y4 [$ t( R/ I m0 ~* d* `1 M6 ^6 D
3. 电路网关" c. l; F5 m/ E* Z3 m+ w
·应用库便于移植吗?转换自己的应用容易吗?
" s, Y3 E6 y$ A% O9 V: H: e·为你转换的是什么应用?
& j' k b! H: F3 f9 ~. f# l·有足够的对外调用日志记录吗?! K, j% E, E% E# n! ~
·容易建立一个可以对外部和内部都进行对话的单个应用吗?5 U- }; M- |3 q* e9 C: Q
·能对对外的调用进行鉴别吗?对内的调用呢?是什么类型的鉴别?可以自己添加自己的鉴别机制吗?2 S* p, { m! Y" {! J
9 G/ \# t$ i" @) m5 g& n3 B5 e
突破防火墙方法
6 Z( O* z5 L1 p& M( i @1. DD.o.S攻击
0 |/ F% c8 P% H" k- r% } B/ q/ U这种攻击很简单,但破坏力度很大,骇客在入侵某些主机没有找到突破口的时候,出于报复就会用DD.o.S来攻击主机,在瞬间就可以攻死防火墙,造成内外服务阻塞、瘫痪。现在已经有很多防火墙可以对付这种攻击,但最有效的还是硬件防火墙或者三层交换机。
* V0 c! \9 p* b! S* D2.木马攻击法
a5 d' i: C) S2 ^. ~1 J1 r$ i这个方法就是利用任何手段将一个反弹木马安装到内网中,然后防火墙的安全策略或者反向连接刺穿防火墙,有的智能防火墙可以屏蔽掉常用的木马端口,但端口复用技术可以突破这个封锁。7 V1 i$ f' T7 G( G! ]
3. 分片攻击法
" x, i# w& g6 ]8 F- N' E在IP的分片包中,所有的分片包用一个分片偏移字段标志分片包的顺序,但只有第一个分片包含有TCP端口号的信息。当IP分片包通过分组过滤防火墙时,防火墙只根据第一个分片包的TCP来判断是否允许通过,而其他的分片防火墙不做检测,直接通过。利用这个缺陷攻击者可以通过先发一个合法的IP分片包,骗过防火墙的检测,然后就封装恶意数据的后续分片包就可以直接穿透防火墙,直接达到内部网络主机。0 h/ j) r9 P4 \7 ^. K3 {! Z$ w! [
4. IP欺骗攻击技术
. E- V. a* n8 w7 e3 L+ Q, Y防火墙是通过访问策略来控制数据包的,如果我们欺骗防火墙使攻击地址为防火墙信任IP地址,目的地址为防火墙内部计算机,那我们很有可能刺穿防火墙。
" w! _5 |+ w# z3 K, P0 O0 d5.通过网页入侵* r# z. n% |6 W: R' T
当然这个只有对开有网站的服务器才有效,因为Web服务器防火墙对port:80 的请求数据基本上是不会拦截,比如去年的WEBDAV远程溢出漏洞,和现在APS、PHP、CGI脚本编写不当而引发的SQL Injection攻击都可能对主机造成危险,骇客获得一些权限后可以放个webshell直接对主机操作,或者直接拿到帐户对网站进行修改,攻占好了服务器后就对内网进行渗透,防火墙在此时行同虚设。! T& V8 i( t& h1 e
特殊防火墙的攻击* j9 e4 {( q5 O: A& F5 K
对于一些智能型的防火墙,就没那么容易突破,稍微不小心就会触发报警,从而暴露入侵行为和行踪。对于这样的高级别的防御骇客还是有办法突破的,比如协议隧道攻击和利用FTP-pasv绕过防火墙认证,在扫描报警方面骇客会使用缓慢扫描来防止报警。
9 X/ f- F. d- ?( e一个简单防火墙的实现
' r) F+ s1 p/ t% a( L" ~ g在C++ 中利用API函数可以很容易的实现包过滤的防火墙,当然方法还有很多。以下代码是从互连网获取的,做点适当的修改。
" x/ { b1 n v; Z0 Z8 I( j) z) K. B* a, i" `
#pragma hdrstop
/ G! v3 L4 H1 J- L# }#include "windows.h"2 P5 {3 i G' k2 I, l' ^
#include "Fltdefs.h"
" o0 d4 Y' N; @- l: e: L4 l, y1 j// 需要加载"iphlpapi.lib"* v3 i. C, V& _* j
; u: s/ _) h0 b5 B0 g% Y% s) u: B, }#pragma argsused N0 G* r4 Y, B7 {) c5 F& @- ?
int main(int argc, char *argv[])
' d5 t: a' w, N2 N6 K C* F{% b0 `. x6 N! ~/ e4 a3 ` _- t% I
// 一个创建网络包过滤接口) m$ y; c; O! x. {, L
INTERFACE_HANDLE hInterface;2 q0 T! d; k3 R
PfCreateInterface(0, 6 w4 m8 z* \7 h2 G" k
PF_ACTION_DROP,//PF_ACTION_FORWARD,
# H* _9 i) D* M4 }+ w6 e( l PF_ACTION_DROP,//PF_ACTION_FORWARD,
( x0 e0 }# T- K; v# X% r FALSE,
' a: P8 z/ t- d5 k, A TRUE, ( Q6 l+ a7 b! O2 M9 z' u# {
&hInterface);. V+ L& f/ @, L
) s& A% s, D* E5 O" U6 K8 K+ } // 绑定需要过滤的IP地址5 C1 o8 i; S. @: c; D X- H" g
BYTE localIp[] = {192,168,0,1};9 ?/ m5 b/ o& ?' s/ @& {1 b
PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
, i5 N I1 D/ c( s) O x v // 调用函数,开始过滤接口 目前IP协议的版本号是4(简称为IPv4). P7 o# t: l4 c; T; ]! x ?2 U
FILTER_HANDLE fHandle;
: @! s) s) G/ k6 g // 填充过滤包的规则结构' v+ d: v; e# o; I' e* b- q, x
PF_FILTER_DESCRIPTOR inFilter;7 T' c) |5 l0 x2 U% D" I8 O
inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
, t# K, S% n- ?8 V) b inFilter.dwRule = 0; //一直添这个值* Q6 L9 O( M7 h3 ~
inFilter.pfatType = PF_IPV4; //用 ipV4 地址
7 P, {4 b+ b: }/ r% ] inFilter.SrcAddr = localIp; //设置本地IP地址
+ @- r. M7 O% z7 ]6 ]5 f inFilter.SrcMask = "\xff\xff\xff\x0"; //设置本地子网掩码xff=255
" ^+ c) K& I1 Q' j! _ inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口, \3 R2 @; K% p/ R
inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
6 q& X- ~8 [( D- p1 l% X: K inFilter.DstAddr = 0; //任意目标地址
; ^3 c4 P6 x- P5 H inFilter.DstMask = 0;
6 V5 r( j( t1 F1 t% K! i inFilter.wDstPort = 4000; //目标端口 4000(OICQ)
1 ]3 M* I) a+ J$ w1 g+ t y inFilter.wDstPortHighRange = 4000;6 g6 ?/ j5 D2 e l* n3 t/ b' @
inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议(TCP)# w6 C! I! g% H
// 加入一个过滤口6 j$ m6 N) ?3 g2 U0 c3 v* i
PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle); PfRemoveFilterHandles(hInterface, 1, &fHandle); // 移除过滤接口2 f2 P' l' s }0 {4 Y
PfUnBindInterface(hInterface);0 o4 \% G# Y, W8 ]0 [ U+ _
PfDeleteInterface(hInterface);' F. q$ v1 e8 [- U1 r
return 0; 5 o l3 l3 u0 }# x+ o. \! ^
|