跳到正文

防火墙到底应该有多“厚”(图)


      Internet的开放便利性,与网络安全的隐忧,一直是矛盾共存。随着企业对Internet依存的加深,对网络安全的防范与布署,就成了必备的知识。大家都知道,特洛伊城之所以久攻不破,是它有一道坚固的城墙;在Internet上我们也需要一道坚实的防火墙,以确保防火墙不会因被击溃而导致企业内部电脑的入侵危机。

  公元前12世纪,希腊与特洛伊的一场战争,造就了荷马(Homer)史诗中的两位英雄人物Achilles与Odysseus;而这场战争最终决定性的胜利竟然是一只木马,这样富戏剧性的结局更让人不可思议,除了具军事教训意味外,着实也多了许多趣味性。如今这场战争却活生生地搬上了Internet舞台,虽然少了美女Helen助阵,不过精采的程度却不下于3000多年前的盛况,只不过整个场景都虚拟于网络之中。。 打造一道网络城墙

   据荷马史诗记载,希腊联军共围剿特洛伊城达十年之久,当时没有现代的空中部队,因此整个防卫所依靠的都是城墙!据说当时特洛依城城墙厚度达五公尺,在这么坚固城墙防卫下,希腊一直都无法将特洛依城攻下。

  相对于特洛依城墙的厚度,到底一道网络的城墙要多“厚”才安全呢?在Internet中的城墙,我们称之Firewall或是防火墙,主要的作用是进行网络交通过滤与管制。

  这道网络虚拟的城墙强度虽然不能以实体厚度来衡量,但打造这道城墙同样要考虑到“是否地基够稳?”、“是否有钢筋结构?”、“城门卫兵是否尽职?”,此外这一整套控管机构“是否有品质保证?”,如此才能评判防火墙是否足以抵御外侮。防火墙的“钢筋”结构

  为了加强建筑物的抗震强度,人们采用钢筋结构来强化耐震度。而在Internet世界中,黑客的入侵手法日益先进,入侵事件更是与日俱增,就好比强震一波波朝防火墙袭击而来,因此有必要为防火墙加筑钢筋结构才能有效抵挡黑客的“强震”撼动!

1、各程序具有独立的执行空间

  各程序执行时不能彼此干扰,同时也不能共用相同目录,否则一旦某一个程序遭受入侵,其他程序也可能同时遭殃。因此各程序执行时所需的文件,如函数库或指令,都必须摆放在各自的目录中,不能有共用的情形。

2、各程序以最少许可权执行

   每一个程序的执行者权限只够执行程序本身,同时不能任意切换目录,以防止权限设定不当的破坏。

3、所有权限类别设为只读

  为了确保防火墙系统的正常运作,避免黑客破坏正常运行的程序或类别,甚至防止黑客程序伪装成正常程序,将防火墙系统上的权限类别设为只读,黑客就不能进一步进行破坏。

4、没有超级使用者

  一般操作系统中均存在一个超级使用者,掌控所有系统的权限,在Windows系统中叫做"administrator", Unix中叫做"root"。一旦黑客取得这个使用者帐号,即可对系统进行全面性破坏,例如中断防火墙的运作。因此防火墙上的操作系统应该没有超级使用者,才能有效避免黑客破坏防火墙的运作体系。









防火墙的进出控管

  防火墙是设计用来管控所有进出的数据包,而管控的体系因控管的程度而有所区别,我们称之为防火墙的控管级别,这就好比城门守卫,管制进出城门的人员。如下图所示,目前防火墙的控管级别大致上区分为三层:

防火墙的控管级别

Packet Filtering:

   Packet Filtering是最基本的防火墙控管,只能管控Network级别的数据包内容,因此过滤速度是三种级别中最快速的,相对的对于管控的安全性是最差的。举例来说,这就好像H君企图送杂志包裹给城内的A书店,Packet Filtering只检查H君的通行证,以及查询是否允许杂志包裹进入,如果答案是肯定的话就给予放行,否则给予阻挡。因此有可能H君所宣称的杂志包裹,实际上是邮包炸弹;同时也可能有人从中挟持H君的通行证,企图用伪冒身分闯关。(未完待续)

Stateful Inspection:

  因为Packet Filtering不能有效地保证存取身分,因此有可能发生IP Spoofing的黑客事件,也就是伪冒身份的存取。Stateful Inspection就是为了弥补此一缺陷而改进的Packet Filtering技术,它位于MAC Layer,能持续追踪每一个开启端口的连线,直到连线终止。

Stateful Inspection

   同前例,此时守卫在H君进入城门时验明正身后,一路上即予以监视录像,同时并联络A书店是否收到一件杂志包裹,直到H君送完包裹步出墙门后,整个监视过程才终止。因为一路上监视,因此能有效地防止H君被从中挟持而遭伪冒;虽然它能追踪包裹是否完整送达,但也可能宣称的杂志包裹其实是邮包炸弹!

Application Layer Gateway:

  上述的两种控管机制,都无法完整管控整个数据包传递过程,Application Layer Gateway顾名思义是能控管到达每个Application,也就是说防火墙需要了解每个Application到底在作些什么事。因此要控管HTTP,防火墙就必须为HTTP写一个控管程序,这支程序知道HTTP实际上的运作内容为何。因为每种应用程序都有相对应的控管程序,因此Application Layer Gateway的防火墙可以完整地管控每个进出的数据包;同时与前两种控管机制不同的是,Application Layer Gateway会将连线存取的行为,转交由防火墙进行,而不是两端点间的直接连线。

Application Layer Gateway

  同前例,H君要送杂志包裹给A书店,城门守卫验明正身后会将包裹接下,同时打开包裹检查是否为杂志,确认后由守卫亲自将包裹送达A书店。如此就不用担心是否包裹被从中掉包,同时确认包裹内容。

木马屠城重返Internet时代

  在特洛伊战争中,要不是特洛依人多事将木马拖入城内,也不会造成木马屠城的惨剧;不过在Internet的时代,防火墙城门是不能紧闭的,在某些程度上甚至是欢迎大家光临的;控管只是要降低与外界的接触面,并不能完全阻隔。因此提供外界的连线存取是有必要的,而依赖防火墙的连线存取控管,是否就可以免于黑客入侵了呢?

  答案是否定的。防火墙可以阻挡一些入侵行为,但是并不能完全抵挡。依连线控管级别来分析,采用Packet Filtering或Stateful Inspection控管机制的防火墙,可轻易被伪装成正常网络程序端口号的后门程序欺瞒!Application Layer Gateway能阻挡的入侵行为最多,包含防止身分伪冒、数据包调包以及确保协定内容的真实。但这些还是不够,因为即使传输内容合乎协定标准,但是数据包内容传递至远端系统后,系统的反应却不见得是正常的。

  就如同上述的例子,A书店如果是儿童书店,而收到的杂志内容却是光怪陆离,或是色情暴力,这样对于书店读者来说反应是负面的,其实并不应该收下这些杂志的。但因为守卫并不负责书刊分级,他只管将东西传送到目的地,A书店还是照单全收,书店也只好自行处理这些垃圾;有时也可能收到一大堆的垃圾杂志,堵住整间书店,以致不能正常营业!

  而在Internet的环境中,各Internet Service的问题通常还更严重,我们称之为“弱点(Vulnerability)”或“漏洞”,黑客可以利用Internet Service的正常传输指令,夹带的却是系统所不能接收的内容,来达到入侵系统有弱点的主机的目的。一旦入侵到内部系统后,就有机会再入侵到其他系统。

  这就是一副网络木马屠城图:防火墙提供内部的Web与Mail供外界存取,Internet使用者使用标准的程序或指令来达到连线的目的;黑客却可以利用这些已开启的通道,对内部Web Server与E-Mail Server进行破坏,且一旦破坏成功后,又转而破坏其他Unix与NT主机。

常见的系统入侵行为

在防火墙的保护伞后面,仍然会遭受外部入侵的行为有:

  1、妨碍系统正常运作(Denial of Service),以让所有网络连线中断为目的。

  2、Buffer Overflow利用程序设计的疏失,异常中断程序运作。通常会伴随“root exploit”或“backdoor”的攻击。

  3、截取超级使用者权限(root exploit)以控制系统,并据此攻击内部其他机器。

  4、安装后门木马程序,供黑客随时进入系统用,同时自动收集相关信息传送给黑客。

木马屠城重返Internet时代

  在特洛伊战争中,要不是特洛依人多事将木马拖入城内,也不会造成木马屠城的惨剧;不过在Internet的时代,防火墙城门是不能紧闭的,在某些程度上甚至是欢迎大家光临的;控管只是要降低与外界的接触面,并不能完全阻隔。因此提供外界的连线存取是有必要的,而依赖防火墙的连线存取控管,是否就可以免于黑客入侵了呢?

  答案是否定的。防火墙可以阻挡一些入侵行为,但是并不能完全抵挡。依连线控管级别来分析,采用Packet Filtering或Stateful Inspection控管机制的防火墙,可轻易被伪装成正常网络程序端口号的后门程序欺瞒!Application Layer Gateway能阻挡的入侵行为最多,包含防止身分伪冒、数据包调包以及确保协定内容的真实。但这些还是不够,因为即使传输内容合乎协定标准,但是数据包内容传递至远端系统后,系统的反应却不见得是正常的。

  就如同上述的例子,A书店如果是儿童书店,而收到的杂志内容却是光怪陆离,或是色情暴力,这样对于书店读者来说反应是负面的,其实并不应该收下这些杂志的。但因为守卫并不负责书刊分级,他只管将东西传送到目的地,A书店还是照单全收,书店也只好自行处理这些垃圾;有时也可能收到一大堆的垃圾杂志,堵住整间书店,以致不能正常营业!

  而在Internet的环境中,各Internet Service的问题通常还更严重,我们称之为“弱点(Vulnerability)”或“漏洞”,黑客可以利用Internet Service的正常传输指令,夹带的却是系统所不能接收的内容,来达到入侵系统有弱点的主机的目的。一旦入侵到内部系统后,就有机会再入侵到其他系统。

  这就是一副网络木马屠城图:防火墙提供内部的Web与Mail供外界存取,Internet使用者使用标准的程序或指令来达到连线的目的;黑客却可以利用这些已开启的通道,对内部Web Server与E-Mail Server进行破坏,且一旦破坏成功后,又转而破坏其他Unix与NT主机。

常见的系统入侵行为

在防火墙的保护伞后面,仍然会遭受外部入侵的行为有:

  1、妨碍系统正常运作(Denial of Service),以让所有网络连线中断为目的。

  2、Buffer Overflow利用程序设计的疏失,异常中断程序运作。通常会伴随“root exploit”或“backdoor”的攻击。

  3、截取超级使用者权限(root exploit)以控制系统,并据此攻击内部其他机器。

  4、安装后门木马程序,供黑客随时进入系统用,同时自动收集相关信息传送给黑客。









网络需要全方位防卫

  特洛伊城之所以久攻不破,是它有一道坚固的城墙,不会因城墙溃败而引来全面性的杀机;在Internet上我们也需要一道坚实的防火墙,以确保防火墙不会因被击溃,而导致企业内部数十乃至数百台的电脑的入侵危机。但木马屠城却给我们另一层的启示:在外需要厚实的城墙抵挡,在内更须时时提高警觉,防止可疑份子的渗透破坏。

  因此即使有了防火墙,也须要时时提防所有的连线是否隐藏破坏分子,也要审视系统是否脆弱地不堪黑客一击。同时更须设法提高系统的自卫能力。如此遇到木马时,也不至于被屠城了。

组网答疑:路由器能替代防火墙吗?


        防火墙已经成为企业网络建设中的一个关键组成部分。但有很多用户,认为网络中已经有了路由器,可以实现一些简单的包过滤功能,所以,为什么还要用防火墙呢?以下我们针对防火墙与业界应用最多、最具代表性的路由器在安全方面的对比,来阐述为什么用户网络中有了路由器还需要防火墙。



  一、两种设备产生和存在的背景不同



  1、两种设备产生的根源不同



  路由器的产生是基于对网络数据包路由而产生的。路由器需要完成的是将不同网络的数据包进行有效的路由,至于为什么路由、是否应该路由、路由过后是否有问题等根本不关心,所关心的是:能否将不同的网段的数据包进行路由从而进行通讯。



  防火墙是产生于人们对于安全性的需求。数据包是否可以正确的到达、到达的时间、方向等不是防火墙关心的重点,重点是这个(一系列)数据包是否应该通过、通过后是否会对网络造成危害。



  2、根本目的不同



  路由器的根本目的是:保持网络和数据的“通”。



  防火墙根本的的目的是:保证任何非允许的数据包“不通”。



  二、核心技术的不同



  Cisco路由器核心的ACL列表是基于简单的包过滤,从防火墙技术实现的角度来说,防火墙是基于状态包过滤的应用级信息流过滤。



  一个最为简单的应用:企业内网的一台主机,通过路由器对内网提供服务(假设提供服务的端口为tcp 1455)。为了保证安全性,在路由器上需要配置成:外-〉内 只允许client访问 server的tcp 1455端口,其他拒绝。



  针对现在的配置,存在的安全脆弱性如下:



  1、IP地址欺骗(使连接非正常复位)



  2、TCP欺骗(会话重放和劫持)



  存在上述隐患的原因是,路由器不能监测TCP的状态。如果在内网的client和路由器之间放上防火墙,由于防火墙能够检测TCP的状态,并且可以重新随机生成TCP的序列号,则可以彻底消除这样的脆弱性。同时,防火墙的一次性口令认证客户端功能,能够实现在对应用完全透明的情况下,实现对用户的访问控制,其认证支持标准的Radius协议和本地认证数据库,可以完全与第三方的认证服务器进行互操作,并能够实现角色的划分。



  虽然,路由器的"Lock-and-Key"功能能够通过动态访问控制列表的方式,实现对用户的认证,但该特性需要路由器提供Telnet服务,用户在使用使也需要先Telnet到路由器上,使用起来不很方便,同时也不够安全(开放的端口为黑客创造了机会)。



  三、安全策略制定的复杂程度不同  





  路由器的默认配置对安全性的考虑不够,需要一些高级配置才能达到一些防范攻击的作用,安全策略的制定绝大多数都是基于命令行的,其针对安全性的规则的制定相对比较复杂,配置出错的概率较高。



  防火墙的默认配置既可以防止各种攻击,达到既用既安全,安全策略的制定是基于全中文的GUI的管理工具,其安全策略的制定人性化,配置简单、出错率低。



  四、对性能的影响不同



  路由器是被设计用来转发数据包的,而不是专门设计作为全特性防火墙的,所以用于进行包过滤时,需要进行的运算非常大,对路由器的CPU和内存的需要都非常大,而路由器由于其硬件成本比较高,其高性能配置时硬件的成本都比较大。



  防火墙的硬件配置非常高(采用通用的INTEL芯片,性能高且成本低),其软件也为数据包的过滤进行了专门的优化,其主要模块运行在操作系统的内核模式下,设计之时特别考虑了安全问题,其进行数据包过滤的性能非常高。



  由于路由器是简单的包过滤,包过滤的规则条数的增加,NAT规则的条数的增加,对路由器性能的影响都相应的增加,而防火墙采用的是状态包过滤,规则条数,NAT的规则数对性能的影响接近于零。



  五、审计功能的强弱差异巨大



  路由器本身没有日志、事件的存储介质,只能通过采用外部的日志服务器(如syslog,trap)等来完成对日志、事件的存储;路由器本身没有审计分析工具,对日志、事件的描述采用的是不太容易理解的语言;路由器对攻击等安全事件的相应不完整,对于很多的攻击、扫描等操作不能够产生准确及时的事件。审计功能的弱化,使管理员不能够对安全事件进行及时、准确的响应。



  六、防范攻击的能力不同



  对于像Cisco这样的路由器,其普通版本不具有应用层的防范功能,不具有入侵实时检测等功能,如果需要具有这样的功能,就需要生级升级IOS为防火墙特性集,此时不单要承担软件的升级费用,同时由于这些功能都需要进行大量的运算,还需要进行硬件配置的升级,进一步增加了成本,而且很多厂家的路由器不具有这样的高级安全功能。可以得出:



  ·具有防火墙特性的路由器成本 > 防火墙   路由器



  ·具有防火墙特性的路由器功能 < 防火墙   路由器



  ·具有防火墙特性的路由器可扩展性 < 防火墙   路由器



  综上所述,可以得出结论:用户的网络拓扑结构的简单与复杂、用户应用程序的难易程度不是决定是否应该使用防火墙的标准,决定用户是否使用防火墙的一个根本条件是用户对网络安全的需求!



  即使用户的网络拓扑结构和应用都非常简单,使用防火墙仍然是必需的和必要的;如果用户的环境、应用比较复杂,那么防火墙将能够带来更多的好处,防火墙将是网络建设中不可或缺的一部分,对于通常的网络来说,路由器将是保护内部网的第一道关口,而防火墙将是第二道关口,也是最为严格的一道关口。

软件安全性:采用安全的编码方式


      

                        本周公布的一项新的调查显示,虽然软件开发人员越来越意识到必须提高所开发程序的安全性,但是目前而言,这种意识还没有被贯彻到具体的编码工作中。

赛门铁克公司对400位在美国的软件开发工程师进行了调查。其中有93%认为,同三年前相比,软件的安全性有了更加突出的位置。70%的人表示,公司老板越来越强调程序的安全性了。只有29%认为保证程序的安全性还只是在一个发展过程中,并不适合实际使用。

在许多涉及保密和安全的行业中,开发软件系统没有采用安全的编码方式是非常令人不安的。

针对这份调查结果,Fortify Software公司的首席执行官Roger

Thornton在blog中发出的是不乐观的声音:“这很糟糕。几乎所有人都知道编写安全代码的重要性,并且在四分之三的公司里,人们希望我们能对此做一些工作。为此我们一些工作,但是换来的是增加71%的时间开销,这是我们所不能接受的”

同时,也有其他方面的人认为,这项调查的结果表明,编写安全的代码正处在一条不断走向完善的道路上。赛门铁克安全学习服务小组的高级经理Brad

Arkin认为,让人们越来越关注这一问题是在这条道路上的第一步。这项调查的结果恰恰证明了这一趋势。

Arkin说:“我很高兴地看见93%的人们都意识到了编写安全的代码的重要性,可能在一些公司中已经有专门的一个小组在进行保证程序安全性的工作了。在这些公司中大部分人都认为需要在程序的整个开发过程中贯彻这一思想,这些人将在推动程序安全性发展的过程中扮演重要的角色。尽管目前对保证程序安全性的工作还只处在初级阶段,但是人们对它的重视是能够促进它发展的重要动力。”

入侵检测系统逃避技术和对策的介绍 (1)


      

                        在网络蓬勃发展的几天,网络安全问题日益突出。网络上的黑、白两道在网络安全的各个领域都展开了激烈的竞争。黑帽社团不断推出躲避或者越过网络入侵检测系统(Network Intrusion Detection System,NIDS)的新技术,而NIDS的开发者不断地在自己的产品中加入对这些技术的检测。但是,由于NIDS本身的局限性,胜利的天平正在向黑帽子倾斜。本文将讨论一些基本的IDS躲避技术,以及如何识破这些技术。



1.字符串匹配的弱点



针对基本字符串匹配弱点的IDS躲避技术是最早被提出和实现的。一些基于特征码的入侵检测设备几乎完全依赖于字符串匹配算法,而对于一个编写很差的特征码,攻击者可以轻松地破坏对其的字符串匹配。虽然不是所有的入侵检测系统都是纯粹基于特征码检测的,但是绝大多数对字符串匹配算法有很大的依赖。这里,我们将使用开放源码工具snort的特征码来进行讨论。



在UNIX系统中,/etc/passwd是一个重要的文件,它包含用户名、组成员关系和为用户分配的shell等信息。我们就从监视对/etc/passwd文件的访问开始,下面是用于检测的snort检测规则:



alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-MISC /etc/passwd";



flags: A ; content:"/etc/passwd"; nocase; classtype:attempted-recon; sid:1122;rev:1)



snort使用字符串匹配算法对包含特征码(/etc/passwd)的HTTP请求进行检测。但是,这个规则的特征码过于简单了,攻击者修改攻击字 符串可以很轻松地逃过检测(我们暂时不考虑攻击请求是通过HTTP发出的)。例如,把攻击请求由GET/etc/passwd改为GET /etc//\// passwd,或者GET /etc/rc.d/.././\passwd,修改方式简直不计其数。这是最基本的娶亲检测逃避技术,对这种技术的检测也相对容易一些,只要在编写特征码时能够仔细考虑一下攻击可能出现的变体。目前大多数流行入侵检测系统都有非常强大的字符串匹配能力,足以检测此类攻击的大多数变体。不过,仍然有些编写不太好的特征码可以给攻击者以可乘之机。



攻击者还可以在此基础上再加以变化,几乎不费吹灰之力就可以加大入侵检测系统的防御难度。例如在telnet之类的交互会话中,攻击者企图读取/etc/passwd文件。通常,入侵检测系统中存在很多特征码一些误用操作和后门等,但是这些特征码一般只包含黑客工具名、文件名和程序名。在获得/etc/passwd文件的内容时,我们不直接输入cat/etc/passwd等命令行,而是通过一个命令解释器(例如:perl)来实现我们的目的:



badguy@host$Content$nbsp;perl -e



‘$foo=pack(“C11”,47,101,116,99,47,112,97,115,115,119,100);



@bam=`/bin/cat/ $foo`; print”@bam\n”;’



从这个命令中,入侵检测系统根本就不会重组出/etc/passwd这些字符。显然,防御这种攻击就很困难了,因为这要求入侵检测系统必须能够理解这种解释器如何收到的命令,这恐怕不太现实。当然,入侵检测系统也可以对使用解释器的可疑行为进行报警,但是它很难对攻击行为进行精确的监视。



通过把字符串处理技术和字符替换技术结合到一起,我们可疑实现更复杂的字符串伪装。对于WEB请求,我们不必使用命令解释器,在我们的请求中使用16进制的URL即可,以下的请求可以被目标WEB服务器解释为/etc/passwd:



GET etc/passwd或者



GET etc/passwd



为了捕获这一个字符串的所有变体,你可能需要1000个以上的特征码进行字符串匹配,这还没有考虑UNICODE。UNICODE提供了另一 种字符表达方式。有关UNICODE的IDS欺骗技术细节,本文将不多做讨论。如果想了解更多细节请参考SecurityFocus的IDS Evasion with Unicode。除此之外,RainForestPuppy在他的HTTP扫描工具Whisker中采用了另外一些IDS欺骗技术:



-I 1 IDS-evasive mode 1 (URL编码)



-I 2 IDS-evasive mode 2 (/./目录插入)



-I 3 IDS-evasive mode 3 (过早结束URL)



-I 4 IDS-evasive mode 4 (长URL)



-I 5 IDS-evasive mode 5 (伪造参数)



-I 6 IDS-evasive mode 6 (TAB分割) (not NT/IIS)



-I 7 IDS-evasive mode 7 (大小写敏感)



-I 8 IDS-evasive mode 8 (Windows分割符)



-I 9 IDS-evasive mode 9 (会话拼接) (slow)



-I 0 IDS-evasive mode 0 (NULL方法)



如果想了解上面这些方法的技术细节,可以参考A Look At Whisker’s Anti-IDS Tactics。需要特别说明的是,rfp把whisker采用的anti-ids技术 单独放到了libwhisker(使用perl编写的)库中,为其它的程序采用这些技术提供了很大的便利。另外,nessus和babelweb等扫描工具都有自己的应用层入侵检测躲避技术。



现在,IDS开发人员对各种网络协议有了更深入的理解,并且入侵检测设备在对数据包的负载进行字符串匹配之前会进行必要的协议分析,因此现在的IDS已经能够很好地处理上述的欺骗技术了。但是多余的字符转换又提高了入侵检测系统的负载,有时是得不偿失。为了减小这个跗面影响,开发人员可以使入侵检测系统只在特定的端口进行字符转换。



2.多变shell代码(polymorphic shell code)



多变shell代码(polymorphic shell code)技术由K2开发的,设计思想来源于病毒逃避(virus evasion)技术。使用这种技术重新构造的shell代码更为危险,入侵检测设备非常难以检测到。这种技术只用于缓冲区溢出攻击,对付基于特征码的检测系统非常有效,而对于智能化的或者基于协议分析的检测系统的效果要差很多。为了便于讨论,我们以SSH CRC32缓冲区为例。我们先看以下snort检测规则:



alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32



overflow /bin/sh"; flags:A ; content:"/bin/sh"; reference:bugtraq,2347;



reference:cve,CVE-2001-0144; classtype:shellcode-detect; sid:1324; rev:1;)



alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32



overflow NOOP"; flags:A ; content:" 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90)



上面的第一条规则简单地检查从外部到$HOME_NET,目标端口是22的数据包,搜索里面是否包含字符串/bin/sh。第二条规则是检查是否 包含x86空操作字符(0x90)。多变shell代码(polymorphic shell code)使用很多方法逃避字符串匹配系统的检测。首先(以x86架构为例), 使用其它的字符代替0x90执行无操作(no-op)指令。对于X86架构,有55种替代方式,其它的要少一些。这些替代方式以一种伪随机的 方式结合到一块,建立缓冲区溢出shell代码包含无操作(no-op)指令的部分。想了解无操作(no-op)指令的所有替代字符可以参考http:// cansecwest.com/noplist-v1-1.txt。除此之外,shell代码本身也采用XOR机制编码。通过这种方式建立的缓冲区溢出shell代码被重组后不会包含以上的特征码,从而能够逃过字符串匹配检测。



多变shell代码检测对基于特征码检测的IDS是一个很大的挑战。Next Generation Security Technologie公司的技术白皮书Polymorphic Shellcodes vs. Application IDSs中提出了一些检测多变shell代码的设想。通过搜索无操作(no-op)字符的一个特定长度的正则表达式,可以实现对多变 shell代码的精确检测。最近,Dragos Ruiu发布了一个用于检测多变shell代码的snort预处理插件spp_fnord,这个插件采用了和上面相似的 检测技术。这个预处理插件有端口和长度两个配置选项。例如,如果某个人在配置时设置了80、21、23和53等端口,它就只对这几个 端口的数据流量进行多变shell代码的检测,而不会对其它端口(例如:22)进行检测。

3.会话拼接(session splicing,叫会话分割更合适一些)



上面讨论的这些方法都是属于攻击数据在一个数据包中的情况,没有涉及攻击数据和会话通过多个数据包投递的情况。RFP在Whisker 中实现了一种IDS逃避技术叫作会话拼接(session splicing),就是把会话数据放到多个数据包中发出,例如:



-------------------------  



  packet number   content  



 --------------- --------- 



  1   G  



 --------------- --------- 



  2   E  



 --------------- --------- 



  3   T  



 --------------- --------- 



  4   20 



 --------------- --------- 



  5   /  



 --------------- --------- 



  6   H  



--------------- ---------  



通过这种方式,每次只投递几个字节的数据,就可能避开字符串匹配入侵检测系统的监视。要监视这种攻击,需要入侵检测系统或者 能够理解、监视网络会话(即使IDS有这种能力,攻击者也可以通过其它的凡是避开监视),或者采用其它的技术监视这种攻击。snort使 用以下规则来监视会话拼接:



alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-MISC whisker



space splice attack"; content:" 20 "; flags:A ; dsize:1;



reference:arachnids,296; classtype:attempted-recon; reference)



这条规则使snort检测目标为$HTTP_SERVERS 80端口的ACK报文的负载长度是否等于1以及是否包含空格(16进制的20)。使用这条规则可以精确地检测出whisker,但是攻击者只要稍加修改就可以避开这个检测。为了能够检测可能出现的会话拼接攻击,可以对上面这条 snort规则进行扩展,使其检查负载很短的HTTP请求。但是,这样做的副作用是提高了误报警数量,而且在某些情况下攻击者还是能 够避开监视。为了真正有效地检测这种攻击,需要入侵检测系统能够完整地理解网络会话,不过这是非常困难的。应该注意的是目前 大多数系统能够重组会话,在所有的会话数据到达之前,它们会等待一些时间。而等待时间的长短与程序有关。例如,Apache/RedHat 的会话超时时间是6分钟,IIS/Win2K等待的时间非常长。因此,攻击者完全可以每15分钟发送一个字节的会话数据,而IIS还会认为是有效的会话。最新版本的snort能够监视长期的会话和网络层欺骗,例如:小TTL值。



4.碎片攻击



碎片攻击和会话拼接(session splicing)有点类似。直到最近,很多入侵检测系统在进行字符串匹配之前不能准确地重组碎片。现在这种 情况有了改观,所有的入侵检测系统都能够进行某些重组。不过,还是有很多方法可以避开入侵检测系统的监视。碎片重组的问题是 在进行字符串匹配以前,入侵检测系统必须在内存中缓存所有的碎片,然后进行重组。而且,他还需要直到、碎片在目的主机会如何 重组。Thomas Ptacek and Timoth Newsham于1998年写的Insertion,Evasion and Denial of Service: Eluding Network Intrusion Detection描述了许多基于网络的碎片躲避和其它类型的躲避技术。碎片攻击包括:碎片覆盖、碎片重写、碎片超时和针对网络拓扑的碎片技术(例如使用小的 TTL)等。下面,我们将详细讨论。



4.1.碎片覆盖



所谓碎片覆盖就是发送碎片覆盖先前碎片中的数据。例如:



碎片1 GET x.idd



碎片2 a.?(缓冲区溢出数据)



第二个碎片的第一个字符覆盖第一个碎片最后一个字符,这两个碎片被重组之后就变成了GET x.ida?(缓冲区溢出数据)。实际情况远非这么简单。



4.2.碎片数据覆盖



安全专家:慎用第三方IE补丁 防止得不偿失


      

                        10月3日外电消息,一家安全厂商警告说,在软件厂商正式修复其软件安全漏洞之前使用第三方的补丁修复漏洞可能会引起更多的问题。也就是说,第三方补丁引起的问题会比它解决的问题还要多。

安全公司Sophos的高级技术顾问Graham Cluley对英国IT新闻网站vnunet.com说,如果人们使用第三方补丁自己修复安全漏洞,由于这种补丁的不可预见性,这个补丁在使用过程中可能会引起更多的冲突。

这位安全专家解释说,有些企业谨慎地使用非盈利组织Zert发布的补丁修复IE浏览器中的安全漏洞是可以理解的,因为他们不知道微软是否能够应付这个事情。他说,当微软发布安全补丁的时候,微软不必处理许多安全补丁,不必迎合这些计算机中的第三方补丁。

Cluley坚持认为,IT管理员在使用第三方补丁的时候应该权衡利弊。他说,这不是我们安全厂商能够为你做出的决策。我们不能说你们应该使用Zert的补丁,应为各个地方和每一个的情况都不同。

Sophos知道微软正在设法尽快发布自己的安全补丁,用户不必等到10月10日的下一个补丁周期。Cluley说,我认为微软可能会提前发布一个安全补丁,因为我们看到利用这个安全漏洞的企图正在增长。因此,这个安全漏洞肯定还没有修复,黑客对于利用这个漏洞非常感兴趣。

Cluley建议说,如果一家公司的风险很大,这家公司宁愿依靠第三方补丁也不愿意冒不理会安全漏洞的风险,使用第三方补丁是一种“可以理解的担心”。

Cluley说,我认识Zert组织的一些人。他们都是杰出的安全专家。Zert的补丁与某些人随意发布的补丁还是有些区别的。

脱去诱惑的外衣 露出木马的本来面目


      

                        木马与杀毒软件之间的战斗从来就没有停止过,通过对已知的木马进行加壳可以再次躲避杀毒软件的查杀。加了壳的木马可以防止被杀毒软件跟踪查杀和被跟踪调试,同时也可以防止木马本身的算法程序被别人静态分析。加壳软件通常可以分为压缩保护和加密保护两种。



压缩保护



压缩保护就是利用特定的压缩算法把程序压缩打包,运行的时候在内存中执行解压过程并运行主程序。常见的压缩类加壳软件有:UPX、ASpack、Petite、PE-PACK、WWPack32、Shrinker等。以UPX为例,它的主要功能就是压缩,由于木马要在内存中释放后才能运行,所以对付这类加壳木马,凡是有内存杀毒功能的杀毒软件都能获得很好的查杀效果。



加密保护



这类软件侧重的是加密和保护软件,在反编译和反调试功能方面比较完善,某些加密软件甚至可以做到锁定自身在内存中的进程而不让别的进程插进来。此类加壳软件由于具备反编译和反调试功能,杀毒软件很难查杀到壳里的木马。常见的加密类加壳软件有ASProtect、tElock、Armadillo、SVK Protector、Xtreme-Protector、Obsidium、PElock等。



给木马脱壳



要给木马脱壳,需要先知道加了什么壳。PEid一款专用的查壳工具,可以方便的检测出软件到底是使用什么东西加的壳,给脱壳带来了极大的便利!木马Cmdshell.exe是个只有7KB的小木马,通过开放本机的54088端口,实现远程命令行控制。下面就详细介绍一下给木马Cmdshell.exe脱壳的过程。运行软件后,点击“File(文件)”右边的浏览按钮,打开Cmdshell.exe文件,这时在主界面中就可以看到该文件的加壳情况:Cmdshell.exe使用的是UPX加壳。



通常UPX加壳和脱壳工具是通用的,所以笔者选用了使用起来比较容易的UPX Shell对加壳文件进行脱壳。运行UPX Shell程序,点击“OPen(打开)”按钮,选定被加壳的程序。切换到“Compress(压缩)”标签,选择“Decompress(解压缩)”,再点击“GO(运行)”按钮,即可完成脱壳。脱壳后程序由原来的7K变成了20K,文件脱壳成功。

PE-Scan也是一款专用的查壳脱壳工具,能识别出当今流行的绝大多数壳的类型,而且功能更强。PE-Scan可以检测出一些壳的入口点(OEP),方便手动脱壳。运行Pe-scan,打开加了壳的木马,即可看到木马加壳的类型(如图3)。这里笔者使用了一个用Asprotect加壳的木马来做测试,由于目前的PE-Scan并不支持脱Asprotect壳,所以“脱壳”按钮无法使用。



为了脱去Asprotect壳,还需要使用另外一款脱壳软件stripperX来帮忙,它可以方便快捷地脱掉ASpack和ASProtect加的壳。运行stripperX,点击“open(打开)”按钮,选择要脱壳的文件,再点击“unpack(脱壳)”按钮即可生成目标文件,完成脱壳任务。需要注意的是由于ASProtect在不断升级,低版本的stripperX往往不能脱最新版本的ASProtect壳,目前stripperX 2.07版本支持脱ASpack 2.xx 和 ASProtect 1.2x版本的壳,stripperX 2.11版本支持脱ASProtect 1.3~2.0版本的壳。



总的来说,脱壳要对症下药,先用PEid或PE-Scan查清楚壳的类型,然后找脱这种壳的工具,才能达到脱壳的目的。脱了壳的木马,就失去了保护,几乎所有的杀毒软件或木马查杀工具都能查杀它。当从网络上下载了某些怀疑有木马的程序,可以先用本文介绍的方法来检查一下,看看它是否被加了壳,如果是就要提高警惕了,建议不要使用。

Mysql存取权限系统


      

                          Mysql有一个高级的但不标准的存取权限系统.此部分即描述其如何工作.权限系统做什么

    Mysql的权限系统的主要功能是验证从假定主机来的用户连接.以及检查用户对数据库的select,insert,update和delete操作权限.其附加功能还包括匿名用户验证及赋予权限以使用Mysql特殊的功能,如从文件中装入数据和管理操作.

Mysql的用户名和口令

    Mysql的用户名和口令在Unix和Windows之间有一些差别:·用户名,Mysql用于达到其验证目的.与Unix和Windows的用户名毫无干系(login names).大多数的Mysql客户端缺省的使用Uinx当前用户名作为 Mysql用户名去登录,但那只是为了方便而已.客户端程序允许使用-u或--user参数指定一个不同的名字.这意味着你不可能使Mysql数据库得到安全保护除非每一个Mysql用户名都具有口令.任何人都可以用任何名字来企图连接数据库,如果他们指定的某一个名字恰好没有口令,他们就会取得成功.

·Mysql用户名可以提高到十六位字符长,而典型的Unix用户名都限制在八位.

·Mysql的口令跟Unix口令毫无干系.不必把你登录进Unix机器的口令和你用来在该机器上存取数据库的口令联系起来.

·Mysql使用了与Unix登录进程不同的加密算法.请参见7.3.11节各种函数中对PASSWORD()和ENCRYPT()函数的描述.

连接上Mysql服务器

     Mysql客户端程序通常会让你指定一些连接参数,但你想存取Mysql数据库的时候:你想连接的主机,你的用户名和口令.例如,Mysql客户端可以象这样开始(可选参数被加上了"["和"]"):

shell> mysql [-h 主机名] [-u 用户名] [-p口令]

     也可以用--host=主机名,--user=用户名和--password=口令来代替-h,-u和-p选项.注意,在-p或--password和口令之间没有空格.

    如果在命令行没有指定连接参数,Mysql将使用缺省值:

·缺省的主机名是localhost. ·缺省的用户名是你在Unix中的登录名. ·如果没有-p参数则将不提供口令.

    因而,对于Unix用户Joe如下的命令是等价的

shell> mysql -h localhost -u joe shell> mysql -h localhost shell> mysql -u joe shell> mysql

    其它的客户端的动作与此类似.

    在Unix系统中,你不必在每一次调用客户机程序进行连接的时候都在命令行敲入所有选项,可以为它们指定不同的缺省值.这可以用两种方法来办到:

·你可以在你的home目录中的".my.cnf"配置文件中的[client]一节指定连接参数.该文件的相关节看起来可能象这样:

[client]host=host_name user=user_name password=your_pass

·你也可以使用环境变量来指定连接参数.主机可以被指定使用MYSQL_HOST,Mysql用户名可以被指定使用USER,LOGNAME或是LOGIN(尽管这些变量可能已经被设置成你的Unix登录名,但它们可能被任意改变).口令可以被指定为使用MYSQL_PWD(但这是不安全的;参见下节)

    如果通过多种不同的方法指定连接参数,那么在命令行中指定的值比在配置文件中和环境变量中指定的值具有更高的优先权.而在配置文件中指定的值又比在环境变量中指定的值具有更高的优先权.

使你的口令安全

    在其它用户可以发现的情况下将你的口令用一种方法暴露的指定出来是相当失策的.下面列出了当你使用客户端程序时可以用来指定密码的方法,比比较了每一种方法的优劣:

·在命令行使用一个 -p密码 或 --password=密码 参数.这确很方便,但极不安全,你密码能被系统状态检测程序看见(如ps),所以可以被其他用户调用出来显示在命令行上.(MySQL客户端特别在命令行参数初始化时用0覆盖它们,但在该值显得可见时仍有短暂的间隔). ·用一个-p或--password参数(不指定你的密码).这样,客户端程序会要求密码从终端输入:

shell> mysql -u 用户名 -p] Enter password: ********

    客户端把你输入的密码以*"字符显示在终端上,以使旁观者无法看见.如此输入密码比你在命令行上指定密码更安全,因为它对其他用户并不可见.但是,此输入密码的方法只在你使用交互式程序时才有效.如果你想非交互的从一个脚本中调用客户端,则没有机会从终端输入密码了. ·把你的密码保存在一个配置文件中.举例来说,你可以把你的密码列在你home目录下的.my.cnf文件的[client]节:

[client] password=your_pass

    如果你把密码存放在.my.cnf中,那么同组用户和其他用户对该文件必须不能具有读取和写入的权限.确定文件的存取模式必须为400或600.参见4.15.4节选项文件. ·你也可以把你的密码存放在MYSQL_PWD环境变量中,但该方法被认为极不安全而通常不被使用.某些版本的PS包括一个选项可以列出正在运行的进程的环境;你的密码将被清楚的显示出来,如果你设置了MYSQL_PWD环境变量的话.

    总而言之,最安全的方法是在客户端提示输入密码或将密码保存在受到正确保护的.my.cnf文件中.

MySQL提供的权限

    权限信息存放在mysql数据库(即数据库的名字叫mysql)的user, db, host, tables_priv and columns_priv表中.当MySQL服务器在启动时或在6.9节"改变的权限何时生效"指出的情况下读取这些表中的项目.

    此手册所提及的MySQL提供的权限的名字列在其下,各列列出了权限的名字,对应的操作和适用的范围.

权限       列名         范围 select     select_priv   表 insert     Insert_priv   表 update     Update_priv   表 delete     Delete_priv   表 index      Index_priv    表 alter      Alter_priv    表 create    Create_priv   数据库,表或索引 drop       Drop_priv     数据库或表 grant      Grant_priv    数据库或表 reload     Reload_priv   服务器管理 shutdown   Shutdown_priv 服务器管理 process    Process_priv  服务器管理 file       File_priv     服务器上文件存取

    select, insert, update 和 delete 权限允许你在一个数据库中存在的表的行上执行操作.

    仅当你真要从表中返回行时SELECT表达式才需要select权限.你可以执行一个SELECT表达式,甚至当你在服务器上没有存取任何数据库的权限时也行.比如,你可以用mysql客户端作一个简单的计数:

mysql> SELECT 1 1; mysql> SELECT PI()*2;

    index权限允许你create或drop(删除)索引.

    alter权限允许你使用ALTER TABLE.

    create和drop权限允许你create新数据库和表,或drop(删除)存在的数据库和表.

    注意,如果你允许一个用户拥有对mysql数据库的drop权限,那么该用户可以drop掉MySQL用来存放存取权限的地方.

    grant权限允许你授予其他用户你所拥有的那些权限.

    file权限允许你用LOAD DATA INFILE 和 SELECT ... INTO OUTFILE语句存取服务器上的文件.任何用户如果具有了这个权限他就可以存取任何MySQL服务器可以存取的文件.剩下的权限用于管理操作,在执行mysqladmin程序时会用到.下表列出了mysqladmin命令允许你执行的每一个管理权限:



权限 权限拥有者可以执行的操作 reload reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables shutdown shutdown process processlist, kill

    reload命令告诉服务器重新读取认证表.refresh命令刷新所有的数据库,打开和关闭日志文件.flush-privileges是reload的一个同义词.其它flush-*执行和refresh大致相同的功能,但是在更有限的范围内,也许在某些场合效果更好.例如,如果你仅想刷新日志文件,flush-logs就是比refresh更好的选择.

    shutdown命令关闭服务器.

    processlist命令列出有关服务器中所执行的线程的信息.kill命令杀掉服务器的线程.你通常只能列出和杀掉你自己的线程,但如果你有process权限就可以列出或杀掉由其他用户启动的线程.

通常只授予相关用户一些必须权限是一个好办法,当你得学会小心谨慎的授出下列权限:

·grant权限允许用户把他们自己的权限授予另外一些用户.如果两个用户有不同的权限,而又同时具有grant权限的话,那他们就共同具有了这所有的这些权限. ·alter权限拥有者可以用给表重命名的方式破坏权限系统. ·file权限些许会被滥用,以在数据库表中读取任何的全程文件,该项目可以使用SELECT进行存取. ·shudown权限也可能被滥用.关闭服务器,对其他所有用户拒绝服务. ·process权限可以以纯文本的方式显示出当前正执行的查询,包含设置和修改密码的查询. ·mysql数据库上的权限可以用来改变密码和其它存取权限信息.(密码是加密存储的,所以一个有恶意的用户不能简单的读取它们.但是,如果有足够的权限,他可以把它改成另一个不同的密码.)

通过MySQL权限系统无法实现下面一些事情:

·你不能明确的指定一个用户将被拒绝存取.也就是说,你不能明确指定匹配一个用户,拒绝它的连接. ·你不能指定一个用户能在一个数据库中创建和删除表,而不能创建和删除该数据库自身.

开源供应链设计规范之数据库命名规范


      

                        数据库命名规范

1、数据库表

根据表所属的子系统/模块,命名方式为:

数据库表名 = 子系统/模块 缩写   表含义

其中子系统/模块的缩写首字母大写,表含义中每个单词的首字母为大写。

子系统/模块及其缩写应在《数据库设计说明书》的约定部分加以描述。

例如:代码表可统一采用”code”为表的前缀,则:code_area表示地区代码表

2、表字段:

概念模型中,每个数据库中为每个表定义唯一的缩写,长度为4~8个字符,

字段名 = 表缩写   “_”   字段含义。

如地区代码表字段前缀为area,其相关字段名:

area_id :地区代码ID主键

area_name :地区代码名称

数据库表名及表缩写应在《数据库设计说明书》中加以描述。

3、索引

索引名 = idx   “_”   表缩写   相关字段/索引含义

4、关联

关联指数据库表之间的外键关系

关联名 = rl   “_”   主表缩写   从表缩写

5、存储过程:

存储过程名 = proc   “_”   存储过程含义

MySQL数据库备份


      

                          在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。有时,正是MySQL管理员造成破坏。管理员已经知道表以破坏,用诸如vi或Emacs等编辑器试图直接编辑它们,这对表绝对不是件好事!

    备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp、cpio或tar等)。每种方法都有其优缺点:

    mysqldump与MySQL服务器协同操作。直接拷贝方法在服务器外部进行,并且你必须采取措施保证没有客户正在修改你将拷贝的表。如果你想用文件系统备份来备份数据库,也会发生同样的问题:如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义。文件系统备份与直接拷贝文件的区别是对后者你完全控制了备份过程,这样你能采取措施确保服务器让表不受干扰。     mysqldump比直接拷贝要慢些。     mysqldump生成能够移植到其它机器的文本文件,甚至那些有不同硬件结构的机器上。直接拷贝文件不能移植到其它机器上,除非你正在拷贝的表使用MyISAM存储格式。ISAM表只能在相似的硬件结构的机器上拷贝。在MySQL 3.23中引入的MyISAM表存储格式解决了该问题,因为该格式是机器无关的,所以直接拷贝文件可以移植到具有不同硬件结构的机器上。只要满足两个条件:另一台机器必须也运行MySQL 3.23或以后版本,而且文件必须以MyISAM格式表示,而不是ISAM格式。     不管你使用哪种备份方法,如果你需要恢复数据库,有几个原则应该遵守,以确保最好的结果:

    定期实施备份。建立一个计划并严格遵守。     让服务器执行更新日志。当你在崩溃后需要恢复数据时,更新日志将帮助你。在你用备份文件恢复数据到备份时的状态后,你可以通过运行更新日志中的查询再次运用备份后面的修改,这将数据库中的表恢复到崩溃发生时的状态。     以文件系统备份的术语讲,数据库备份文件代表完全倾倒(full dump),而更新日志代表渐进倾倒(incremental dump)。

    使用一种统一的和易理解的备份文件命名机制。象backup1、buckup2等不是特别有意义。当实施你的恢复时,你将浪费时间找出文件里是什么东西。你可能发觉用数据库名和日期构成备份文件名会很有用。例如: %mysqldump samp_db >/usr/archives/mysql/samp_db.1999-10-02

%mysqldump menagerie >/usr/archives/mysql/menagerie.1999-10-02

    你可能想在生成备份后压缩它们。备份一般都很大!你也需要让你的备份文件有过期期限以避免它们填满你的磁盘,就象你让你的日志文件过期那样。

    用文件系统备份备份你的备份文件。如果遇上了一个彻底崩溃,不仅清除了你的数据目录,也清除了包含你的数据库备份的磁盘驱动器,你将真正遇上了麻烦。也要备份你的更新日志。     将你的备份文件放在不同于用于你的数据库的文件系统上。这将降低由于生成备份而填满包含数据目录的文件系统的可能性。     用于创建备份的技术同样对拷贝数据库到另一台机器有用。最常见地,一个数据库被转移到了运行在另一台主机上的服务器,但是你也可以将数据转移到同一台主机上的另一个服务器。

1 使用mysqldump备份和拷贝数据库 当你使用mysqldumo程序产生数据库备份文件时,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句。换句话说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。

你可以将整个数据库倾倒进一个单独的文本文件中,如下:

%mysqldump samp_db >/usr/archives/mysql/samp_db.1999-10-02

输出文件的开头看起来象这样:

# MySQL Dump 6.0 # # Host: localhost Database: samp_db #--------------------------------------- # Server version 3.23.2-alpha-log # # Table structure for table absence # CREATE TABLE absence( student_id int(10) unsigned DEFAULT NOT NULL, date date DEFAULT 000-00-00 NOT NULL, PRIMARY KEY (student_id,date) ); # # Dumping data for table absence # INSERT INTO absence VALUES (3,1999-09-03); INSERT INTO absence VALUES (5,1999-09-03); INSERT INTO absence VALUES (10,1999-09-08); ......  文件剩下的部分有更多的INSERT和CREATE TABLE语句组成。

如果你想压缩备份,使用类似如下的命令:

%mysqldump samp_db | gzip >/usr/archives/mysql/samp_db.1999-10-02.gz

如果你要一个庞大的数据库,输出文件也将很庞大,可能难于管理。如果你愿意,你可以在mysqldump命令行的数据库名后列出单独的表名来倾到它们的内容,这将倾倒文件分成较小、更易于管理的文件。下例显示如何将samp_db数据库的一些表倾到进分开的文件中:

%mysqldump samp_db student score event absence >grapbook.sql %mysqldump samp_db member president >hist-league.sql

如果你生成准备用于定期刷新另一个数据库内容的备份文件,你可能想用--add-drop-table选项。这告诉服务器将DROP TABLE IF EXISTS语句写入备份文件,然后,当你取出备份文件并把它装载进第二个数据库时,如果表已经存在,你不会得到一个错误。

如果你倒出一个数据库以便能把数据库转移到另一个服务器,你甚至不必创建备份文件。要保证数据库存在于另一台主机,然后用管道倾倒数据库,这样mysql能直接读取mysqldump的输出。例如:你想从主机pit-viper.snake.net拷贝数据库samp_db到boa.snake.net,可以这样很容易做到:

%mysqladmin -h boa.snake.net create samp_db %mysqldump samp_db | mysql -h boa.snake.net samp_db

以后,如果你想再次刷新boa.snake.net上的数据库,跳过mysqladmin命令,但要对mysqldump加上--add-drop-table以避免的得到表已存在的错误:

%mysqldump --add-drop-table samp_db | mysql -h boa.snake.net samp_db

mysqldump其它有用的选项包括:

--flush-logs和--lock-tables组合将对你的数据库检查点有帮助。--lock-tables锁定你正在倾倒的所有表,而--flush-logs关闭并重新打开更新日志文件,新的更新日志将只包括从备份点起的修改数据库的查询。这将设置你的更新日志检查点位备份时间。(然而如果你有需要执行个更新的客户,锁定所有表对备份期间的客户访问不是件好事。) 如果你使用--flush-logs设置检查点到备份时,有可能最好是倾倒整个数据库。如果你倾倒单独的文件,较难将更新日志检查点与备份文件同步。在恢复期间,你通常按数据库为基础提取更新日志内容,对单个表没有提取更新的选择,所以你必须自己提取它们。

缺省地,mysqldump在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大表,几乎是失败的。你可用--quick选项告诉mysqldump只要它检索出一行就写出每一行。为了进一步优化倾倒过程,使用--opt而不是--quick。--opt选项打开其它选项,加速数据的倾倒和把它们读回。 用--opt实施备份可能是最常用的方法,因为备份速度上的优势。然而,要警告你,--opt选项确实有代价,--opt优化的是你的备份过程,不是其他客户对数据库的访问。--opt选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表。你可在一般数据库访问上很容易看到其效果。当你的数据库一般非常频繁地使用,只是一天一次地调节备份。

一个具有--opt的相反效果的选项是--dedayed。该选项使得mysqldump写出INSERT DELAYED语句而不是INSERT语句。如果你将数据文件装入另一个数据库并且你想是这个操作对可能出现在该数据库中的查询的影响最小,--delayed对此很有帮助。 --compress选项在你拷贝数据库到另一台机器上时很有帮助,因为它减少网络传输字节的数量。下面有一个例子,注意到--compress对与远端主机上的服务器通信的程序才给出,而不是对与本地主机连接的程序: %mysqldump --opt samp_db | mysql --compress -h boa.snake.net samp_db mysqldump有很多选项,详见《MySQL参考手册》。

2 使用直接拷贝数据库的备份和拷贝方法 另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件。典型地,这用诸如cp、tar或cpio实用程序。本文的例子使用cp。

当你使用一种直接备份方法时,你必须保证表不在被使用。如果服务器在你则正在拷贝一个表时改变它,拷贝就失去意义。

保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器。如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同的锁定协议让服务器“安静下来”。

假设服务器关闭或你已经锁定了你想拷贝的表,下列显示如何将整个samp_db数据库备份到一个备份目录(DATADIR表示服务器的数据目录):

初上网者必看---我们为什么需要防火墙


      

                          很多网络初级用户认为,只要装了杀毒软件,系统就绝对安全了,这种想法是万万要不得的!在现今的网络安全环境下,木马、病毒肆虐,黑客攻击频繁,而各种流氓软软件、间谍软件也行风作浪。怎样才能让我们的系统立于如此险恶的网络环境呢?光靠杀毒软件足以保证我们的系统安全吗?下面我就从影响系统安全的几个方面来剖析防火墙的重要性。

  现在的网络安全威胁主要来自病毒攻击、木马攻击、黑客攻击以及间谍软件攻击。杀毒软件发展了十几年,依然是停留在被动杀毒的层面(别看那些自我标榜主动防御,无非是一些骗人的幌子,看看这个文章就知道了http://column.chinabyte.com/388/2014388.shtml),而国外的调查表明,当今全球杀毒软件对80%的病毒无法起到识别作用,也就是说,杀毒软件之所以能杀毒,纯粹是根据病毒样本的代码特征来识别他是否是病毒,就如警察抓住一个小偷,这个小偷留着大胡子,于是警察就天天在街上盯着大胡子的人。这样的杀毒效果可想而知。同样的道理,杀毒软件对于木马、间谍软件的防范也是基于这种方式。

  现在病毒、木马的更新很快,从全球范围内来看,能造成较大损失的病毒木马,大部分都是新出现的,或者是各类变种,由于这些病毒木马的特征并没有被杀毒软件掌握,因此杀毒软件对它们是既不能报警,也无法剿杀。难道我们就任病毒木马宰割了吗?当然不!高手岂能向几个病毒木马低头!虽然杀毒软件只能干瞪眼,可是我们还有严守大门的防火墙呢!

  防火墙为什么就能挡住病毒木马甚至是最新的病毒木马变种呢?这就要从防火墙的防御机制说起了。防火墙是根据连接网络的数据包来进行监控的,也就是说,防火墙就相当于一个严格的门卫,掌管系统的各扇门(端口),它负责对进出的人进行身份核实,每个人都需要得到最高长官的许可才可以出入,而这个最高长官,就是你自己了。每当有不明的程序想要进入系统,或者连出网络,防火墙都会在第一时间拦截,并检查身份,如果是经过你许可放行的(比如在应用规则设置中你允许了某一个程序连接网络),则防火墙会放行该程序所发出的所有数据包,如果检测到这个程序并没有被许可放行,则自动报警,并发出提示是否允许这个程序放行,这时候就需要你这个“最高统帅”做出判断了。一般来说,自己没有运行或者不太了解的程序,我们一律阻拦,并通过搜索引擎或者防火墙的提示确认该软件的性质。

  写到这里,大家估计对杀毒软件和防火墙的区别有一定了解了,举个直观的例子:你的系统就好比一座城堡,你是这个城堡的最高统帅,杀毒软件和防火墙是负责安全的警卫,各有分工。杀毒软件负责对进入城堡的人进行鉴别,如果发现可疑的人物就抓起来(当然,抓错的几率很大,不然就没有这么多误杀误报事件了);而防火墙则是门卫,对每一个进出城堡的人都进行检查,一旦发现没有出入证的人就向最高统帅确认。因此,任何木马或者间谍软件,或许可能在杀毒软件的眼皮底下偷偷记录你的帐号密码,可是由于防火墙把城门看得死死的,再多的信息也传不出去,从而保护了你的系统安全。

  另外,对于黑客攻击,杀毒软件是没有任何办法的,因为黑客的操作不具有任何特征码,杀毒软件自然无法识别,而防火墙则可以把你系统的每个端口都隐藏起来,让黑客找不到入口,自然也就保证了系统的安全。

  目前全球范围内防火墙种类繁多,不过从个人经验来说,推荐天网防火墙给大家。天网防火墙可以有效的防止黑客、木马或者其他恶意程序盗取您的隐私包括:网上银行、网络游戏、QQ等的帐号和密码。