Archive for 2006年4月2日


  1. 确认已经安装了NT/2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。

  2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。

  3. 给 "sa" 和 "probe" 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意: probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。

  4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击。 注意当使用企业管理器做以上设置时 , 文件,注册表和使用者权利上的 ACLs同时被处理。

  5. 确定所有的 SQL 服务器数据,而且系统文件是装置在 NTFS 分区,且appropraite ACLs 被应用。 如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。

  6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell.

  在任何的 isql/ osql 窗口中( 或查询分析器):

  use master

  exec sp_dropextendedproc’xp_cmdshell’

  如果你不需要 xp_cmdshell 那请停用它。请记住一个系统系统管理员如果需要的话总是能把它增加回来。这也好也不好 – 一个侵入者可能发现它不在,只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。 要找到其他的程序是否使用相同的 dll:

  首先得到该 dll 。

  select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name=’xp_cmdshell’

  其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。

  select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text=’xplog70.dll’

  用户可以用同样的办法处理下面步骤中其他你想去掉的进程。

  7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 – 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些包括:

  Sp_OACreate

  Sp_OADestroy

  Sp_OAGetErrorInfo

  Sp_OAGetProperty

  Sp_OAMethod

  Sp_OASetProperty

  Sp_OAStop

  如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。 记住, 我们在这里正在做的是锁定一个应用程序的功能 – 你的开发平台应该放到其他机器上。

  8. 禁用你不需要的注册表存取程序。(同上面的警告)这些包括:

  Xp_regaddmultistring

  Xp_regdeletekey

  Xp_regdeletevalue

  Xp_regenumvalues

  Xp_regremovemultistring

  注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。

  9.移除其他你认为会造成威胁的系统储存进程。 这种进程是相当多的,而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:

sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_enumqueuedtasks
xp_eventlog
xp_findnextmsg
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
xp_makewebtask
xp_msver xp_perfend
xp_perfmonitor
xp_perfsample
xp_perfstart
xp_readerrorlog
xp_readmail
xp_revokelogin
xp_runwebtask
xp_schedulersignal
xp_sendmail
xp_servicecontrol
xp_snmp_getstate
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_sscanf
xp_startmail
xp_stopmail
xp_subdirs
xp_unc_to_drive
xp_dirtree

  10. 在企业管理器中"安全选项" 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器。

  11. 除去数据库的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。

  12. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能

  13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门程序。 使用 Sp_unmakestartup 移除任何可疑进程。

  14. 检查master..Sp_password看有无trojan代码。比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存。

  15. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:

  xp_instance_regwrite N’HKEY_LOCAL_MACHINE’, N’SOFTWARE MicrosoftMSSQLServerMSSQLServer’,N’AuditLevel’,REG_DWORD,3

  16. 重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。

  17. 除去不需要的网络协议。

  18. 注意SQL 服务器的物理安全。把它锁在固定的房间里,并且注意钥匙的安全。只要有机会到服务器面前,就总是会找到一个方法进入。

  19. 建立一个计划的任务运行:

  findstr/C:" Login Failed"mssql7log*.*’

  然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。

  20. 设定非法访问和登陆失败日志警报。到 企业管理器中的"Manager SQL Server Messages "搜寻任何有关无权访问的消息 ( 从查找"login failed"和"denied"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。

  21. 确定在服务器和数据库层次上的角色都只被授给了需要的用户。 当 SQL Server 安全模型 7 有许多增强的时候, 它也增加额外的许可层,我们必须监控该层,确定没有人被授予了超过必需的权限。

  22. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。

  23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:

  使用主体

  选择名字,

  password

  from syslogins

  where password is null

  order by name

  24. 如果可能,在你的组织中利用整合的安全策略。 通过使用整合的安全策略,你能够依赖系统的安全,最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。

  25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(在SQL Server中 使用 "type" 而不是 "xtype"):

  Use master

  select sysobjects.name

  from sysobjects,sysprotects

  where sysprotects.uid=0

  AND xtype 在 (‘X’,’P’)

  AND sysobjects.id=sysprotects.id

  Order by name

  26. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 "sa" 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。 使用 regedit 而且检查键:

  HKEY_CURRENT_USERSOFTWAREMicrosoft

  MSSQLServerSQLEW Regedi

  SQL 6.5

  现在数据被隐藏在

  HKEY_USERS{yourSID}softwareMicrosoftMicrosoft SQL server80toolSQLEWregistered server XSQL server group

  ("SQL server组" 是默认值但是你可能已建立用户组因此相应地改变其位置)

  27. 发展一个审核计划而且订定每月的安全报告,对IT主管可用的报表包括任何的新exploit,成功的攻击 , 备份保护 , 和对象存取失败统计。

  28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。 一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。

  30. 尽力限制对SQL Server的查询与存取操作。用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会。

  1.输出过滤 也就是把从本网络发出的IP数据包源地址限定在一个IP地址快内。假设为192.168.1.8

  一.创建ACL

  Router1(config)#access-list 100 permit ip 192.168.1.8.0 0.0.0.225 any

  二.实现ACL [ethernet 0/0 例]

  Router1(config)#int eth0/0
  Router1(config-if)#ip access-group 100 in

  2.输入过滤

  一. 在路由器启用CEF

  Router1(config)#ip cef

  二. 每个接口启用CEF

  Router1(config)#int ethernet 0/0
  Router1(config-if)#ip verify unicast reverse-path

  3.数据包

  一. 禁用IP源路由

  Router1(config)#nop ip source-route

  二. 禁用定向广播应用程序

  Router1(config)#int ethernet 0/0
  Router1(config-if)#no ip directed-broadcast

  三. 禁用proxy-arp

  Router1(config)#int ethernet 0/0
  Router1(config-if)#no ip proxy-arp

  四. 禁用ICMP重定向

  Router1(config)#int ethernet 0/0
  Router1(config-if)#no ip redirects

一. 防火墙的概念
  近年来,随着普通计算机用户群的日益增长,“防火墙”一词已经不再是服务器领域的专署,大部分家庭用户都知道为自己爱机安装各种“防火墙”软件了。但是,并不是所有用户都对“防火墙”有所了解的,一部分用户甚至认为,“防火墙”是一种软件的名称……
  到底什么才是防火墙?它工作在什么位置,起着什么作用?查阅历史书籍可知,古代构筑和使用木制结构房屋的时候为防止火灾的发生和蔓延,人们将坚固的石块堆砌在房屋周围作为屏障,这种防护构筑物就被称为“防火墙”(FireWall)。时光飞梭,随着计算机和网络的发展,各种攻击入侵手段也相继出现了,为了保护计算机的安全,人们开发出一种能阻止计算机之间直接通信的技术,并沿用了古代类似这个功能的名字——“防火墙”技术来源于此。用专业术语来说,防火墙是一种位于两个或多个网络间,实施网络之间访问控制的组件集合。对于普通用户来说,所谓“防火墙”,指的就是一种被放置在自己的计算机与外界网络之间的防御系统,从网络发往计算机的所有数据都要经过它的判断处理后,才会决定能不能把这些数据交给计算机,一旦发现有害数据,防火墙就会拦截下来,实现了对计算机的保护功能。
  防火墙技术从诞生开始,就在一刻不停的发展着,各种不同结构不同功能的防火墙,构筑成网络上的一道道防御大堤。

二. 防火墙的分类
  世界上没有一种事物是唯一的,防火墙也一样,为了更有效率的对付网络上各种不同攻击手段,防火墙也派分出几种防御架构。根据物理特性,防火墙分为两大类,硬件防火墙和软件防火墙。软件防火墙是一种安装在负责内外网络转换的网关服务器或者独立的个人计算机上的特殊程序,它是以逻辑形式存在的,防火墙程序跟随系统启动,通过运行在Ring0级别的特殊驱动模块把防御机制插入系统关于网络的处理部分和网络接口设备驱动之间,形成一种逻辑上的防御体系。
  在没有软件防火墙之前,系统和网络接口设备之间的通道是直接的,网络接口设备通过网络驱动程序接口(Network Driver Interface Specification,NDIS)把网络上传来的各种报文都忠实的交给系统处理,例如一台计算机接收到请求列出机器上所有共享资源的数据报文,NDIS直接把这个报文提交给系统,系统在处理后就会返回相应数据,在某些情况下就会造成信息泄漏。而使用软件防火墙后,尽管NDIS接收到仍然的是原封不动的数据报文,但是在提交到系统的通道上多了一层防御机制,所有数据报文都要经过这层机制根据一定的规则判断处理,只有它认为安全的数据才能到达系统,其他数据则被丢弃。因为有规则提到“列出共享资源的行为是危险的”,因此在防火墙的判断下,这个报文会被丢弃,这样一来,系统接收不到报文,则认为什么事情也没发生过,也就不会把信息泄漏出去了。
  软件防火墙工作于系统接口与NDIS之间,用于检查过滤由NDIS发送过来的数据,在无需改动硬件的前提下便能实现一定强度的安全保障,但是由于软件防火墙自身属于运行于系统上的程序,不可避免的需要占用一部分CPU资源维持工作,而且由于数据判断处理需要一定的时间,在一些数据流量大的网络里,软件防火墙会使整个系统工作效率和数据吞吐速度下降,甚至有些软件防火墙会存在漏洞,导致有害数据可以绕过它的防御体系,给数据安全带来损失,因此,许多企业并不会考虑用软件防火墙方案作为公司网络的防御措施,而是使用看得见摸得着的硬件防火墙。
  硬件防火墙是一种以物理形式存在的专用设备,通常架设于两个网络的驳接处,直接从网络设备上检查过滤有害的数据报文,位于防火墙设备后端的网络或者服务器接收到的是经过防火墙处理的相对安全的数据,不必另外分出CPU资源去进行基于软件架构的NDIS数据检测,可以大大提高工作效率。
  硬件防火墙一般是通过网线连接于外部网络接口与内部服务器或企业网络之间的设备,这里又另外派分出两种结构,一种是普通硬件级别防火墙,它拥有标准计算机的硬件平台和一些功能经过简化处理的UNIX系列操作系统和防火墙软件,这种防火墙措施相当于专门拿出一台计算机安装了软件防火墙,除了不需要处理其他事务以外,它毕竟还是一般的操作系统,因此有可能会存在漏洞和不稳定因素,安全性并不能做到最好;另一种是所谓的“芯片”级硬件防火墙,它采用专门设计的硬件平台,在上面搭建的软件也是专门开发的,并非流行的操作系统,因而可以达到较好的安全性能保障。但无论是哪种硬件防火墙,管理员都可以通过计算机连接上去设置工作参数。由于硬件防火墙的主要作用是把传入的数据报文进行过滤处理后转发到位于防火墙后面的网络中,因此它自身的硬件规格也是分档次的,尽管硬件防火墙已经足以实现比较高的信息处理效率,但是在一些对数据吞吐量要求很高的网络里,档次低的防火墙仍然会形成瓶颈,所以对于一些大企业而言,芯片级的硬件防火墙才是他们的首选。
  有人也许会这么想,既然PC架构的防火墙也不过如此,那么购买这种防火墙还不如自己找技术人员专门腾出一台计算机来做防火墙方案了。虽然这样做也是可以的,但是工作效率并不能和真正的PC架构防火墙相比,因为PC架构防火墙采用的是专门修改简化过的系统和相应防火墙程序,比一般计算机系统和软件防火墙更高度紧密集合,而且由于它的工作性质决定了它要具备非常高的稳定性、实用性和非常高的系统吞吐性能,这些要求并不是安装了多网卡的计算机就能简单替代的,因此PC架构防火墙虽然是与计算机差不多的配置,价格却相差很大。
  现实中我们往往会发现,并非所有企业都架设了芯片级硬件防火墙,而是用PC架构防火墙甚至前面提到的计算机替代方案支撑着,为什么?这大概就是硬件防火墙最显著的缺点了:它太贵了!购进一台PC架构防火墙的成本至少都要几千元,高档次的芯片级防火墙方案更是在十万元以上,这些价格并非是小企业所能承受的,而且对于一般家庭用户而言,自己的数据和系统安全也无需专门用到一个硬件设备去保护,何况为一台防火墙投入的资金足以让用户购买更高档的电脑了,因而广大用户只要安装一种好用的软件防火墙就够了。
  为防火墙分类的方法很多,除了从形式上把它分为软件防火墙和硬件防火墙以外,还可以从技术上分为“包过滤型”、“应用代理型”和“状态监视”三类;从结构上又分为单一主机防火墙、路由集成式防火墙和分布式防火墙三种;按工作位置分为边界防火墙、个人防火墙和混合防火墙;按防火墙性能分为百兆级防火墙和千兆级防火墙两类……虽然看似种类繁多,但这只是因为业界分类方法不同罢了,例如一台硬件防火墙就可能由于结构、数据吞吐量和工作位置而规划为“百兆级状态监视型边界防火墙”,因此这里主要介绍的是技术方面的分类,即“包过滤型”、“应用代理型”和“状态监视型”防火墙技术。
  那么,那些所谓的“边界防火墙”、“单一主机防火墙”又是什么概念呢?所谓“边界”,就是指两个网络之间的接口处,工作于此的防火墙就被称为“边界防火墙”;与之相对的有“个人防火墙”,它们通常是基于软件的防火墙,只处理一台计算机的数据而不是整个网络的数据,现在一般家庭用户使用的软件防火墙就是这个分类了。而“单一主机防火墙”呢,就是我们最常见的一台台硬件防火墙了;一些厂商为了节约成本,直接把防火墙功能嵌进路由设备里,就形成了路由集成式防火墙……

三. 防火墙技术
  传统意义上的防火墙技术分为三大类,“包过滤”(Packet Filtering)、“应用代理”(Application Proxy)和“状态监视”(Stateful Inspection),无论一个防火墙的实现过程多么复杂,归根结底都是在这三种技术的基础上进行功能扩展的。

1.包过滤技术
  包过滤是最早使用的一种防火墙技术,它的第一代模型是“静态包过滤”(Static Packet Filtering),使用包过滤技术的防火墙通常工作在OSI模型中的网络层(Network Layer)上,后来发展更新的“动态包过滤”(Dynamic Packet Filtering)增加了传输层(Transport Layer),简而言之,包过滤技术工作的地方就是各种基于TCP/IP协议的数据报文进出的通道,它把这两层作为数据监控的对象,对每个数据包的头部、协议、地址、端口、类型等信息进行分析,并与预先设定好的防火墙过滤规则(Filtering Rule)进行核对,一旦发现某个包的某个或多个部分与过滤规则匹配并且条件为“阻止”的时候,这个包就会被丢弃。适当的设置过滤规则可以让防火墙工作得更安全有效,但是这种技术只能根据预设的过滤规则进行判断,一旦出现一个没有在设计人员意料之中的有害数据包请求,整个防火墙的保护就相当于摆设了。也许你会想,让用户自行添加不行吗?但是别忘了,我们要为是普通计算机用户考虑,并不是所有人都了解网络协议的,如果防火墙工具出现了过滤遗漏问题,他们只能等着被入侵了。一些公司采用定期从网络升级过滤规则的方法,这个创意固然可以方便一部分家庭用户,但是对相对比较专业的用户而言,却不见得就是好事,因为他们可能会有根据自己的机器环境设定和改动的规则,如果这个规则刚好和升级到的规则发生冲突,用户就该郁闷了,而且如果两条规则冲突了,防火墙该听谁的,会不会当场“死给你看”(崩溃)?也许就因为考虑到这些因素,至今我没见过有多少个产品会提供过滤规则更新功能的,这并不能和杀毒软件的病毒特征库升级原理相提并论。为了解决这种鱼与熊掌的问题,人们对包过滤技术进行了改进,这种改进后的技术称为“动态包过滤”(市场上存在一种“基于状态的包过滤防火墙”技术,即Stateful-based Packet Filtering,他们其实是同一类型),与它的前辈相比,动态包过滤功能在保持着原有静态包过滤技术和过滤规则的基础上,会对已经成功与计算机连接的报文传输进行跟踪,并且判断该连接发送的数据包是否会对系统构成威胁,一旦触发其判断机制,防火墙就会自动产生新的临时过滤规则或者把已经存在的过滤规则进行修改,从而阻止该有害数据的继续传输,但是由于动态包过滤需要消耗额外的资源和时间来提取数据包内容进行判断处理,所以与静态包过滤相比,它会降低运行效率,但是静态包过滤已经几乎退出市场了,我们能选择的,大部分也只有动态包过滤防火墙了。
  基于包过滤技术的防火墙,其缺点是很显著的:它得以进行正常工作的一切依据都在于过滤规则的实施,但是偏又不能满足建立精细规则的要求(规则数量和防火墙性能成反比),而且它只能工作于网络层和传输层,并不能判断高级协议里的数据是否有害,但是由于它廉价,容易实现,所以它依然服役在各种领域,在技术人员频繁的设置下为我们工作着。

2.应用代理技术
  由于包过滤技术无法提供完善的数据保护措施,而且一些特殊的报文攻击仅仅使用过滤的方法并不能消除危害(如SYN攻击、ICMP洪水等),因此人们需要一种更全面的防火墙保护技术,在这样的需求背景下,采用“应用代理”(Application Proxy)技术的防火墙诞生了。我们的读者还记得“代理”的概念吗?代理服务器作为一个为用户保密或者突破访问限制的数据转发通道,在网络上应用广泛。我们都知道,一个完整的代理设备包含一个服务端和客户端,服务端接收来自用户的请求,调用自身的客户端模拟一个基于用户请求的连接到目标服务器,再把目标服务器返回的数据转发给用户,完成一次代理工作过程。那么,如果在一台代理设备的服务端和客户端之间连接一个过滤措施呢?这样的思想便造就了“应用代理”防火墙,这种防火墙实际上就是一台小型的带有数据检测过滤功能的透明代理服务器(Transparent Proxy),但是它并不是单纯的在一个代理设备中嵌入包过滤技术,而是一种被称为“应用协议分析”(Application Protocol Analysis)的新技术。
  “应用协议分析”技术工作在OSI模型的最高层——应用层上,在这一层里能接触到的所有数据都是最终形式,也就是说,防火墙“看到”的数据和我们看到的是一样的,而不是一个个带着地址端口协议等原始内容的数据包,因而它可以实现更高级的数据检测过程。整个代理防火墙把自身映射为一条透明线路,在用户方面和外界线路看来,它们之间的连接并没有任何阻碍,但是这个连接的数据收发实际上是经过了代理防火墙转向的,当外界数据进入代理防火墙的客户端时,“应用协议分析”模块便根据应用层协议处理这个数据,通过预置的处理规则(没错,又是规则,防火墙离不开规则)查询这个数据是否带有危害,由于这一层面对的已经不再是组合有限的报文协议,甚至可以识别类似于“GET /sql.asp?id=1 and 1”的数据内容,所以防火墙不仅能根据数据层提供的信息判断数据,更能像管理员分析服务器日志那样“看”内容辨危害。而且由于工作在应用层,防火墙还可以实现双向限制,在过滤外部网络有害数据的同时也监控着内部网络的信息,管理员可以配置防火墙实现一个身份验证和连接时限的功能,进一步防止内部网络信息泄漏的隐患。最后,由于代理防火墙采取是代理机制进行工作,内外部网络之间的通信都需先经过代理服务器审核,通过后再由代理服务器连接,根本没有给分隔在内外部网络两边的计算机直接会话的机会,可以避免入侵者使用“数据驱动”攻击方式(一种能通过包过滤技术防火墙规则的数据报文,但是当它进入计算机处理后,却变成能够修改系统设置和用户数据的恶意代码)渗透内部网络,可以说,“应用代理”是比包过滤技术更完善的防火墙技术。
  但是,似乎任何东西都不可能逃避“墨菲定律”的规则,代理型防火墙的结构特征偏偏正是它的最大缺点,由于它是基于代理技术的,通过防火墙的每个连接都必须建立在为之创建的代理程序进程上,而代理进程自身是要消耗一定时间的,更何况代理进程里还有一套复杂的协议分析机制在同时工作,于是数据在通过代理防火墙时就不可避免的发生数据迟滞现象,换个形象的说法,每个数据连接在经过代理防火墙时都会先被请进保安室喝杯茶搜搜身再继续赶路,而保安的工作速度并不能很快。代理防火墙是以牺牲速度为代价换取了比包过滤防火墙更高的安全性能,在网络吞吐量不是很大的情况下,也许用户不会察觉到什么,然而到了数据交换频繁的时刻,代理防火墙就成了整个网络的瓶颈,而且一旦防火墙的硬件配置支撑不住高强度的数据流量而发生罢工,整个网络可能就会因此瘫痪了。所以,代理防火墙的普及范围还远远不及包过滤型防火墙,而在软件防火墙方面更是几乎没见过类似产品了——单机并不具备代理技术所需的条件,所以就目前整个庞大的软件防火墙市场来说,代理防火墙很难有立足之地。

3.状态监视技术
  这是继“包过滤”技术和“应用代理”技术后发展的防火墙技术,它是CheckPoint技术公司在基于“包过滤”原理的“动态包过滤”技术发展而来的,与之类似的有其他厂商联合发展的“深度包检测”(Deep Packet Inspection)技术。这种防火墙技术通过一种被称为“状态监视”的模块,在不影响网络安全正常工作的前提下采用抽取相关数据的方法对网络通信的各个层次实行监测,并根据各种过滤规则作出安全决策。
  “状态监视”(Stateful Inspection)技术在保留了对每个数据包的头部、协议、地址、端口、类型等信息进行分析的基础上,进一步发展了“会话过滤”(Session Filtering)功能,在每个连接建立时,防火墙会为这个连接构造一个会话状态,里面包含了这个连接数据包的所有信息,以后这个连接都基于这个状态信息进行,这种检测的高明之处是能对每个数据包的内容进行监视,一旦建立了一个会话状态,则此后的数据传输都要以此会话状态作为依据,例如一个连接的数据包源端口是8000,那么在以后的数据传输过程里防火墙都会审核这个包的源端口还是不是8000,否则这个数据包就被拦截,而且会话状态的保留是有时间限制的,在超时的范围内如果没有再进行数据传输,这个会话状态就会被丢弃。状态监视可以对包内容进行分析,从而摆脱了传统防火墙仅局限于几个包头部信息的检测弱点,而且这种防火墙不必开放过多端口,进一步杜绝了可能因为开放端口过多而带来的安全隐患。
  由于状态监视技术相当于结合了包过滤技术和应用代理技术,因此是最先进的,但是由于实现技术复杂,在实际应用中还不能做到真正的完全有效的数据安全检测,而且在一般的计算机硬件系统上很难设计出基于此技术的完善防御措施(市面上大部分软件防火墙使用的其实只是包过滤技术加上一点其他新特性而已)。

四. 技术展望
  防火墙作为维护网络安全的关键设备,在目前采用的网络安全的防范体系中,占据着举足轻重的位置。伴随计算机技术的发展和网络应用的普及,越来越多的企业与个体都遭遇到不同程度的安全难题,因此市场对防火墙的设备需求和技术要求都在不断提升,而且越来越严峻的网络安全问题也要求防火墙技术有更快的提高,否则将会在面对新一轮入侵手法时束手无策。
  多功能、高安全性的防火墙可以让用户网络更加无忧,但前提是要确保网络的运行效率,因此在防火墙发展过程中,必须始终将高性能放在主要位置,目前各大厂商正在朝这个方向努力,而且丰富的产品功能也是用户选择防火墙的依据之一,一款完善的防火墙产品,应该包含有访问控制、网络地址转换、代理、认证、日志审计等基础功能,并拥有自己特色的安全相关技术,如规则简化方案等,明天的防火墙技术将会如何发展,让我们拭目以待。

这种事情看起来多少有点无法避免。不过,忘记了一台嵌入式设备的 Linux 系统的 root 密码,实在是一件相当尴尬的事情。解决方法如下:
拔掉电源,再插上,当 DMZ 灯亮的时候,快速按住 RESET 两秒不放,然后会看到 DMZ 灯每一秒闪三下,这个时候 WRT54G 进入到 Failsafe 状态

切换到 192.168.1 网段,然后 telnet 192.168.1.1,可能 telnetd 反应会比较慢,稍微多等一会
进去之后,执行下面这两行指令

mtd unlock /dev/mtd/4
mount -t jffs2 /dev/mtdblock/4 /jffs
将 /jffs/etc/passwd 的 root 那行替换为 root:$1$$oYzVKLfly6aIyQZGRB/WW0:0:0:root:/tmp:/bin/ash
重新启动设备

这样便将 root 密码设置为了 amsterdam。(说来很巧,这串让我碰巧找到的 hash 居然就是 amsterdam,而我今天正好重温了一部老电影《Gangs of New York》,里头 Leonard 的化名就是 Armsterdam)
p.s. 如果在 DMZ 灯未亮的时候就按住 RESET 的话会清空 NVRAM,所以请把握好时机。

ipkg 是 OpenWrt 内的一个软件安装管理工具,在 OpenWrt 内输入

root@Linksys:~# ipkg

你会得到 ipkg 的说明和帮助,接下来我会说明 ipkg 常用的几个命令:

1. ipkg update
ipkg 会到 http://downloads.openwrt.org/whiterussian/packages/ 下载并更新最新的软件包列表(这个列表的位置在/etc/ipkg.conf指定):

root@Linksys:~# ipkg update
Downloading http://downloads.openwrt.org/whiterussian/packages/Packages
Updated list of available packages in /usr/lib/ipkg/lists/whiterussian
Downloading http://downloads.openwrt.org/whiterussian/packages/non-free/Packages
Updated list of available packages in /usr/lib/ipkg/lists/non-free
Successfully terminated.

2. ipkg list
在更新之后,我们可以用 ipkg list 这命令查看一下有什么软件包可供安装,这里我会列出部份结果:

root@Linksys:~# ipkg list
aiccu – 2005.01.31-1 – SixXS Automatic IPv6 Connectivity Client Utility
arptables – 0.0.3-1 – ARP firewalling software
arpwatch – 2.1a11-1 – Ethernet monitor program for keeping track of ethernet/ip address pairings
asterisk – 1.0.7-1 – An open source PBX

3. ipkg install
安装软件包,有 2 种方法,例如我想安装 OpenSSH 的 SFTP 服务器(注 1),方便我以后上传文件到 OpenWrt,我可以执行 ipkg list 或到 OpenWrt 的软件包网址取得软件 SFTP 服务器的资料:

Package: openssh-sftp-server
Version: 4.0p1-1
Depends: zlib, libopenssl
Section: net
Architecture: mipsel
Maintainer: bugs@openwrt.org
MD5Sum: 145c72f82f2404b991a96bf5f3ef2262
Size: 14086
Filename: openssh-sftp-server_4.0p1-1_mipsel.ipk
Source: buildroot internal
Description: OpenSSH SFTP server

之后我可以选择第 1 个方法用软件包名来安装,这方法会自动把软件包下载并安装:

ipkg install openssh-sftp-server

或者选择第 2 个方法从网站把安装包下载到路由器上,然后输入文件名安装:

ipkg install openssh-sftp-server_4.0p1-1_mipsel.ipk

4. ipkg list_installed
这个命令会列出 OpenWrt 预先为你安装好的软件 (包括一些常用软件和驱动) 以及你后来安装的软件。

5. ipkg remove
当你的空间不足时,这个命令非常有用,你先执行 ipkg list_installed 得出己安装的软件列表,然后找出你要删除的软件包名称,例如:

ipkg remove openssh-sftp-server

注意事项:
由于 WRG54G 的空间有限,安装软件时要留意软件的大小和剩余的空间,我们可以用 df -h 命令得知 Flash Rom 和 虚拟内存的使用量:

root@Linksys:~# df -h

Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.2M      2.8M    372.0k  89% /
none                      7.0M      6.5M    540.0k  92% /tmp
/dev/mmc/disc0/part1     14.2M      7.5M      6.6M  53% /sd

结果显示我的 WRT54G 只剩下 372k 的空间,虚拟内存也只剩下 540k,因为我为我的WRT54G 加装了一张 16MB 的 SD Card,所以你会看到有一项设备 /dev/mmc/disc0/part1 剩余 6.6M 空间。

注 1: 安装了 openssh-sftp-server,你会发现 sftp 服务器并不能正常使用,为什么呢?!这时你要输入这个命令:

ln -s /usr/libexec /usr/lib

  近年来,针对浏览器的攻击手段层出不穷,对浏览器的渗透攻击逐渐成为入侵者攻破用户层层防御的首要目标,在“钓鱼”(Publishing)危机尚未解除的时候,另一种攻击方式也在同时进行着,这就是“浏览器劫持”——故意误导浏览器行进路线的策划者。

  “浏览器劫持”(Browser Hijack)是一种不同于普通病毒木马感染途径的网络攻击手段,它的渗透途径很多,目前最常见的方式有通过BHO、DLL插件、Hook技术、Winsock LSP等载体达到对用户的浏览器进行篡改的目的。这些载体可以直接寄生于浏览器的模块里,成为浏览器的一部分,进而直接操纵浏览器的行为,轻者把用户带到自家门户网站,严重的则会在用户计算机中收集敏感信息,危及用户隐私安全。“浏览器劫持”的后果非常严重,用户只有在受到劫持后才会发现异常情况,但是这时候已经太迟了。目前,浏览器劫持已经成为Internet用户最大的威胁之一。

  BHO,你是助手还是敌人?

  为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启它又回来了!”、“我的系统一开机就跳出一个广告,我明明用了最新版的杀毒软件的啊!”等这类关于IE异常问题的求助,80%的提问者都表示纳闷,他们已经安装了杀毒软件,可是IE仍然被“黑”了,这又是为什么?

  其实这些都是典型的“浏览器劫持”现象,但是受害者不是已经安装了杀毒软件吗?为什么浏览器依然躲不过这只黑手?许多用户对这个领域都存在一种误区心理:浏览器劫持?我有最新的杀毒软件,我不怕!

  于是,当他们遭遇“浏览器劫持”时,惊讶了。

  要知道,杀毒软件自身也只是一种辅助工具,它不可能完全保护系统的安全,更何况,杀毒软件用户必须知道一个事实:“浏览器劫持”的攻击手段是可以通过被系统认可的“合法途径”来进行的!杀毒软件只能通过“特征码”的形式来判断程序是否合法,但这是建立在人为定义以后的,而实施“浏览器劫持”的程序可以有很多,防不胜防。

  为什么说“浏览器劫持”可以说是合法的呢?因为大部分浏览器劫持的发起者,都是通过一种被称为“BHO”(Browser Helper Object,浏览器辅助对象)的技术手段植入系统的。

  BHO是微软早在1999年推出的作为浏览器对第三方程序员开放交互接口的业界标准,它是一种可以让程序员使用简单代码进入浏览器领域的“交互接口”(INTERACTIVED Interface)。通过BHO接口,第三方程序员可以自己编写代码获取浏览器的一些行为(Action)和事件通知(Event),如“后退”、“前进”、“当前页面”等,甚至可以获取浏览器的各个组件信息,像菜单、工具栏、坐标等。由于BHO的交互特性,程序员还可以使用代码去控制浏览器的行为,比如常见的修改替换浏览器工具栏、在浏览器界面上添加自己的程序按钮等操作,而这些操作都被视为“合法”的,这就是一切罪恶根源的开始。

  BHO的出现帮助程序员更好的打造个性化浏览器或者为自己的程序实现了方便简洁的交互功能,可以说,如果没有BHO接口的诞生,我们今天就不能用一些工具实现个性化IE的功能了。从某一方面来看,BHO的确是各种缤纷网络互动功能的幕后功臣,但是一切事物都是有两面性的,这个恒古不变的真理同样对BHO有效,于是就有了今天让安全界头痛的“浏览器劫持”的攻击手段诞生。

  看看前面我提到的BHO接口特性,你想到了什么?BHO可以获知和实现浏览器的大部分事件和功能,也就是说,它可以利用少量的代码控制浏览器行为。程序员可以设计出一个BHO按钮以实现用户点击时通知浏览器跳转到某个页面完成交互功能,当然就可以进一步写出控制浏览器跳转到他想让用户去的页面,这就是最初的“浏览器劫持”的成因:BHO劫持。

  在描述BHO劫持之前,我们先要对BHO接口的启动做个简单介绍:符合BHO接口标准的程序代码被写为DLL动态链接库形式在注册表里注册为COM对象,还要在BHO接口的注册表入口处进行组件注册,以后每次IE启动时都会通过这里描述的注册信息调用加载这个DLL文件,而这个DLL文件就因此成为IE的一个模块(BHO组件),与IE共享一个运行周期,直到IE被关闭。

  IE启动时,会加载任何BHO组件,这些组件直接进入IE领域,而IE则成为它们的父进程和载体,从此IE的每一个事件都会通过IUnknown接口传递到BHO用以提供交互的IObjectWithSite接口里,这是BHO实现与IE交互的入口函数。

  BHO接收到IE接口传递来的参数后开始判断IE正在做什么,理论上BHO可以获取IE的大部分事件,然后根据程序员编写的代码,BHO持有对特定事件做出反应的决定权,例如一个可以实现“中文网址”的BHO,就是通过GetSite方法获取到IE当前打开的站点URL(或通过IURLSearchHook接口来获知),如果BHO发现获取到的URL和内置的判断条件匹配,该BHO就会启用SetSite方法强制IE跳转到程序员设定的页面去,这个过程就是利用about:blank篡改主页的“浏览器劫持”方法之一,它的实现原理其实很简单,程序员编写一个恶意BHO组件,当它获取到IE窗口的当前站点为“about:blank”时就强制IE内部跳转到指定的广告页面,于是闹出了不久之前沸沸扬扬的“IE空白页劫持事件”。

  了解了这种类似恶作剧的作案手段,要解决它就容易了,只要找到并删除这个隐藏在系统里的BHO程序即可。

  除了这类“广告软件”性质的BHO,还有一种利用IURLSearchHook接口实现的另一类更隐蔽的BHO,这种BHO从某些方面来说大概不算BHO,因为它并不是响应IUnknown,而是等待IE创建IURLSearchHook来启动。IURLSearchHook被浏览器用来转换一个未知的URL协议地址,当浏览器企图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址得到当前的协议,如果不成功,浏览器将寻找系统里所有注册为“URL Search Hook”(资源搜索钩子,USH)的对象并把这个IE不能理解的地址发送过去,如果某个USH对象“认识”这个地址,它就返回一个特定的标识告诉IE它知道怎么打开这个地址,然后IE就根据约定的方法调用它,最终打开这个地址。其实USH对象并不陌生,我们一些偷懒的用户就经常为了省事而不输入“http://”,但是IE最终还是能认出并打开某个地址,就是USH的功劳,但是这一点又被恶意程序员拿来磨刀了,通过创建自己的USH对象,恶意程序员能够命令IE在找不到一些网站时自动跳转到事先设置的站点里,如果这个站点带毒或者挂马,用户就完了。

  这类BHO的解决方法和前面一样,只是它比较隐蔽,除非用户经常偷懒,否则可能直到系统崩溃也不会知道自己已经感染了这种东西。也许你会说,只要用户的输入永远不会让IE无法识别,这种渗透不就白费了?但是事实不容乐观,我们无法得知BHO作者还会不会通过其他方法拦截IE,说不定每隔一段时间就让IE弹出一个广告呢?

  上面说了这么多BHO和IE合作搞破坏的事例,可能会给读者造成一种“BHO必须在IE传递数据后才能行动”的误解,然而事实并非如此,浏览器自身也是一个标准的可执行程序,而BHO只是借用这个程序进程启动的DLL,它并非API那种要用的时候就让你过来忙活,忙活完了就一脚踹开的奴隶形态DLL,前面说过了,BHO是一种在浏览器加载时一同启动的例程,它相当于一种自身运行逻辑不太明确的子进程(里面都是对IE事件的响应和操作代码),这个特性就造成了BHO DLL和API DLL本质的区别,BHO并不需要所有事件都必须依赖这个大家伙,它可以有自己决定的权利,只要适当的修改,就能用BHO实现类似DLL木马的功能,当然,这并不是说我们就能在IE眼皮下公然的肆无忌弹干坏事的,由于BHO自身是作为IE子进程启动的,它就必须受到一些限制,例如程序员不能在里面自己创建网络连接,这样会导致IE报错崩溃并供出你写的DLL,害怕BHO成为另一种后门的用户可以松口气了,要在BHO里实现Winsock大概只能在IE休息的时候才可以,但是会有哪个用户开着个开空IE什么事情都不做呢?

  但这并不是说BHO就一定能无害了,虽然用它不能做到远程控制,但是别忘记,BHO能看到IE的所有东西,也就能任意的访问用户文件和注册表,在这个条件成立的前提下,入侵者可以编写代码查找用户隐私,然后在适当时候通过SetSite提交出去——谁叫现在Webmail这么流行呢?这就是为什么许多厂商发布诸如“中文网址”、“网络搜索”、“IE定制”、“IE监视”这些功能的BHO的同时都保证“不搜集用户隐私”的原因,只要你想要,BHO就能得到一切。

  有些人也许会想,既然BHO是微软浏览器的权利,那我不用IE了,我用Opera、Firefox不行?对于这点固然无可厚非,但是你用不用Windows?用不用共享软件?如果你用Windows,那么,你仍然可能处于被BHO接触到的世界,因为Windows本身就是和IE紧密结合的,这就把“IE进程”的范围给扩大了,细心的用户大概会发现,IE里能直接访问“我的电脑”,“我的电脑”窗口也能迅速变成IE,因为它们实质都是依赖于IE内核的,正因为这个原因,BHO可以在你打开一个文件夹时跟着偷偷启动。同时,现在的网络正处于一种“共享软件捆绑战略”大肆实施的时代,你再小心也不能避免某些共享软件固定捆绑了BHO的行为,安装后你才会发现文件夹上又多了个什么“助手”、“搜索”了。要想彻底逃开BHO的围困,大概只能放弃使用Windows了。

  Hook,你钩住浏览器了

  “Life finds its way.”——《侏罗纪公园》

  正如《侏》里的这句话一样,入侵者也在不断寻找他们的新出路,虽然上面我说了这么多BHO的负面事例,但是真正的危机并不是只有BHO的,在一些使用BHO行不通的场合里,入侵者开始投掷他们的钩子。

  什么是钩子?让我们先看看它的官方定义:

  钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

  钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

  可能上面的官方定义对一部分读者理解有点困难,其实,钩子就像是一切程序的“先知”,一个实现了钩子的程序自身虽然也是普通程序,但是它总能在别的程序得到数据之前就已经知道了一切,这是为什么呢?对Windows系统有一定了解的读者应该知道,Windows系统是一个通过“信息处理机制”运作的系统,在这个系统里传递的数据都是通过“消息”(Message)的形式发送的,各个消息都遵循了官方的约定,否则就不能让系统产生回应。而且这个传递步骤是颠倒的,例如我们关闭了某个程序,我们可能会认为是程序自己关闭后通知系统的,其实不然,当用户点击关闭按钮的时候,Windows就会把一个叫做WM_CLOSE的消息传递给这个程序,程序接收到消息后就执行卸载自身例程的操作。理解了这点,就能知道钩子的原理了,所谓钩子程序,就是利用了系统提供的Hook API,让自己比每一个程序都提前接收到系统消息,然后做出处理,如果一个钩子拦截了系统给某个程序的WM_CLOSE消息,那么这个程序就会因为接收不到关闭消息而无法关闭自身。除了消息以外,钩子还可以拦截API,像我们都熟悉的屏幕翻译软件就是Hook了一些文本输出函数如TextOutA而达到了目的。

  Hook技术让编程人员可以轻松获取其他程序的一些有用数据或传递相关数据,像现在常见的一些游戏外挂,它们就是利用Hook技术钩住了游戏窗体,然后就可以识别游戏里面的行为和模拟发送按键鼠标消息,最终实现电脑自己玩游戏的功能。把这个技术应用到浏览器上面,就成了另一种控制浏览器行为的方法。

  钩子有两种,本地钩子(Local Hook)和全局钩子(Global Hook),本地钩子只在本进程里起作用,故不属于讨论范围;全局钩子代码必须以DLL形式编写,以便在钩子生效时被其它进程所加载调用,因此我们看到的大部分Hook程序都是DLL形式的。

  其实之前提到的BHO也可以视为一种针对IE的钩子,它钩的是IE的事件,这就是IE与BHO交互的起点,但是对于再复杂一点的操作,例如判断IE下载的是GIF图片还是JPEG图片,BHO无能为力,因为它仅仅知道IE的事件为DownloadBegin和DownloadComplete,对于具体内容,IE本身是不会告诉它的,否则IE岂不是要忙死了?至少我也没见过哪个领导还需要向秘书汇报中午吃了鸡肉还是鸭肉的吧,BHO可不是IE的老婆,或者说IE没有气管炎。

  所以,为了得到IE的更多数据,程序员开始钩IE了。与BHO不同,钩子不需要被动的等待IE事件,它直接和IE形成上司对下属的关系,这次轮到IE要做什么都得经过它批准了。Hook形式的控制不需要DLL文件必须与IE的注册表入口产生组件关系,它可以是一个独立的DLL,通过Rundll32.exe或自带的Loader EXE启动,而且由于它属于Hook形式, 在钩子有效的情况下会被系统自动插入其他程序的进程中,是不是有点像DLL木马呢?

  IE钩子程序载入进程后便能获知所有的消息类型、API和内容,一旦发现某个符合要求的消息,如IE执行了某个事件,或者用户输入了特定内容,钩子的处理代码就开始工作了,它先拦截系统发送给IE的消息,然后分析消息内容,根据不同消息内容作出修改后再发给IE,就完成了一次Hook篡改过程。用著名的3721实名搜索做例子,一些人会以为它是采用了BHO或者IURLSearchHook完成中文域名的识别跳转的,其实它是用了能够第一个得到Windows消息的Hook技术,这样一来就可以避免被其他的竞争对手抢先解析域名了:3721的主程序就是一个Hook DLL,它监视IE地址栏的消息,一旦用户输入的是中文,它便在其他BHO类插件工作之前拦截了这个消息,并调用自身代码完成中文域名到英文URL的转换工作,然后返回(也可能与自己的BHO DLL配合)一个让IE跳转到英文URL的消息,完成域名的翻译任务。

  IE钩子能帮助程序员用少量代码完成更多的IE交互工作,但是一旦这个钩子被用于犯罪,其后果也是严重的,恶意程序员可以写一个拦截IE输入的键盘钩子,达到窃取密码的作用,这样无论你是用HTTP明文协议还是SecurityHTTP加密协议都不能逃避密码被盗的下场了,因为它抓的是你在IE里的输入,后面的数据传输已经不重要了。

  Winsock LSP

  全称为“Windows Socket Layered Service Provider”(分层服务提供商),这是Winsock 2.0才有的功能,它需要Winsock支持服务提供商接口(Service Provider Interface,SPI)才能实现,SPI是一种不能独立工作的技术,它依赖于系统商已经存在的基本协议提供商,如TCP/IP协议等,在这些协议上派分出的子协议即为“分层协议”,如SSL等,它们必须通过一定的接口函数调用,LSP就是这些协议的接口。

  通过LSP,我们可以比分析基本协议更简单的得到我们想要的数据内容,如直接得到系统上运行的浏览器当前正在进行传输的地址和内容,不管这个浏览器是IE,还是Opera或Firefox,因为LSP是直接从Winsock获取信息的,即使不用微软生产的汽车,至少你这辆汽车一直是在微软建造的公路上跑的吧。

  LSP用在正途上可以方便程序员们编写监视系统网络通讯情况的Sniffer,可是现在常见的LSP都被用于浏览器劫持,使用户又多了个噩梦。

他们的财富没有暴富的指望,他们的职业没有收工的暂停键,他们的阶层待遇没有确定的法律保障。他们一步一步向上爬,风光的物质享受背后是手停口就停式的职业压力,体面的社会地位背后是患得患失的身份焦虑感。

通过30万份有效调查数据, 描绘出了一幅普遍中国人眼中的中产者图谱:月收入在万元以上;开标致307或奥迪A4轿车;住明星楼盘;用IBM、索尼、三星等笔记本电脑办公;用索爱、摩托罗拉、诺基亚的高级手机;经常出入五星级豪华酒店;用招行一卡通或中行长城卡这样的银行卡刷卡消费;向往的旅游地点是“法国、东南亚以及东部非洲”等等。

他们是有产者,比大多数人物质更丰裕,比下有余,比上不足。他们的财富没有暴富的指望,他们的职业没有收工的暂停键,他们的阶层待遇没有确定的法律保障。他们一步一步向上爬,风光的物质享受背后是手停口就停式的职业压力,体面的社会地位背后是患得患失的身份焦虑感。在上行的中国社会里,他们是抓住了机会的人;他们的烦恼,也折射着中国发展青春期和中国法治青春期的烦恼。基于中国中产阶层的定义存在争议,你不确定他们是谁,但你能感受到他们的焦虑。

之一 社会转轨期的仇富替罪羊

仇富是偏狭的想法,但仇富心态在发展不均衡的中国仍有土壤。每一个富豪的倒下,都引来整个社会的“痛打落水狗”。当社会的仇富意识抬头,客观需要更多的中产者作为保持社会稳定心理的杠杆。有理论认为,一个社会的中产阶层超过30%,这个社会就会相对稳定;超过40%,就达到稳定期。中国现在的中产阶层是一根脆弱的杠杆。

公安部刑事侦查局局长何挺曾透露,2004年全国绑架案立案3863起,绑架对象主要是比较富裕的企业家、名人以及家境富裕的中小学生。但富豪们可以请保镖,可以住进保证私密性的豪宅别墅,而中产没条件。拥有产业和一定财富的中产在对被抢劫、被偷盗和成为罪犯目标的担忧中,存在对人身安全受到危害的恐惧;另一方面,他们对自身的经济地位同样具有危机感,甚至自身亦存在仇富心理。中产者需要在评估自身的安全指数中寻找对自我的认同。某天,在打开日本产的汽车车门,站在中高档公寓门口时,某个中产阶层的大脑中极可能掠过一个问题:“我比周围的人都安全吗?”

之二 没有房东只当租户的“有产阶级”

中产阶层像葛朗台重视金币般重视他们手中的房产和爱车,并认为这两样东西绝对关乎中产生活的所有权。对此,法律是否予以他们保障?由以前的《道路交通安全法》的“机动车负全责”对车主可能造成的负担,到最近房屋所有权的“70大限”的热议、《物权法》草案的公布,一次次风吹草动,触动着这些中产者敏感的神经。

中国现行法律规定居住用地使用权的最高期限是70年。成都大学工商管理系教师王怡说,在目前的地权制度下,不过是“每个人都暂住在中国,拥有一个共同的房东”,而这个房东就是国家。2005年7月10日,《物权法》,这个我国第12部向社会公布征求意见的法律草案,对中产者最关心的“70大限”问题给出了一个相关答案。根据草案的规定,建设用地使用权期满前,住房有望被原使用者续期使用。但1994年《城市房地产管理法》规定,国家对于个人使用的土地有无偿收回的权力。如果不申请续期,当土地被国家收回的时候,国家只能把地上房屋一并收走,而过后对土地上的房屋是否作补偿则未作规定,物权法草案对此亦保持沉默。这种法律上的沉默,可能为侵犯私人财产权留下了隐患。

有了好车,但碰上了交通事故可要负上比行人更大的责任;有了好房子,却要担心法律上房产权能否得到保障。在法律制度不断完善而缺陷仍然存在的现实下,多赚点“金币”才能消弥葛朗台们心中隐隐约约的不安感。

之三 工作狂变成了过劳死

广州一地产公司的设计部主管阿富,每天在电脑前工作超过15小时,他的口头禅是:“一天不工作,我觉得就会被世界抛弃。”中国式的中产阶层薪水不断升级,却没时间享受生活。他们从来不把体力透支当一回事,浑身无力、容易疲倦、思想涣散、腰椎劳损等等如家常便饭。“30岁的脖子60岁的颈椎”,成为中产阶层工作狂的写照。包括教师、记者、研究人员等职业的中产者总有职业病,而中国知识分子的平均寿命每况愈下。生活方式的不健康令部分中产阶层的压力无法排遣,造成了严重的心理枯竭,抑郁症、自杀早就不是新闻,自我期许与竞争意识到头来反刃自伤。中产阶层总是感觉没有人分担他们的所思所虑。

唯有拼命工作,提升自己的不可替代性,才能保证自己的楼、自己的车能够继续供下去,才能保证孩子的学费甚至将来能出国留学,才能保证负担起家中老人患病、住院等的高昂医疗费。在工作、家庭的重重压力下,最不幸的结果是,一个中产者先是变成了一个工作狂,然后变成了一个精神病患者,或者一个“过劳模”。

之四 职场如战场的晋升压力

面对竞争压力,中产者要保护自己的地位和薪水不要失去,否则一切风光霁月将成为过去,自己难免成为社会的又一个新贫族。这种心理正给中产者造成心理上的负担。中科院心理研究所曾根据对31875名不同职业人士的调查数据统计分析,列出了一个“职业压力排行榜”,发现中层管理人员的压力指数高居榜首。压力分数从高到低依次是:管理中层为80分;经理层为75分;教职员工为75分;一般管理技术人员为72分;医务工作者为68分;社区人员为68分;下岗人员为68分;矿工为60分;一般企业工人为59分。其中,中层管理者的社会环境、个人成就和社会支持压力排名并列第一。处于事业上升期的中层管理者们既要承担如何提高业绩表现的压力,又要承担着调动整个团队、协调众人工作任务的压力,还要承担子女抚养和复杂的人际关系的压力,诸多重担压在身上,难怪人们看到他们大都是一脸严肃的保守派。

面对各种压力和前途危机,“再学习”成为了部分中产阶层的共识。从1991年中国9所高校开始正式招收MBA新生起,MBA在短短的10余年内迅猛发展,无数具有危机感的中产阶层选择将MBA作为自己的一个战场和跳板。在双休日,总有中产者的高级轿车密密麻麻停在大学校园的林荫道上。

之五 从小资情调跌入机械生活

当小资肚皮发福变成中产后,他百分之九十会失去和“飞”有关的小资青春期,成为企业的螺丝钉,是可替换的零件。艺术家艾未未认为中产阶层的生活最无聊,就像一个既定程序——打工、挣钱、周末拼命消费。担心房子、汽车、医疗保险、纳税,追求品牌、追求时尚,成为进入社会的标志。艾未未说:“这是一种不自信。”

中产阶层为了防止自己在社会流动中滑落下层阶级,不得不用炫耀性的消费维护自己现有的生活方式和名誉地位。在他们不断努力工作得到所需,然后炫耀他们的优越感,然后又为之努力工作的循环下,部分人内心的空虚和焦虑已然吞没了他们人生出发的原点。渐渐失去理想的他们,白天高效为劳动契约勤奋工作,自私冷漠,缺失社会关怀和道德激情;晚上则成为寻求感官刺激的城市动物,在俱乐部、酒吧流连。每个夜晚,城市中产者的灵魂在机械生活暂时结束后,就不安地作出空虚的飘荡。

之六 时尚攀比成为阶层压迫

学者郁方在《中国的中产阶层与他们的消费文化》一文中认定,奢侈消费与炫耀性消费的享乐主义文化已经在中国的中产阶层中蔓延。《格调》、《中产阶层必读》等畅销书或文章用昂贵的酒、高级的甜心巧克力、精致的服装勾勒出了中产者的贵族形象。中国传统量入为出的观念被新的适度的奢侈、理性的透支观念取代。中国中产阶层群体开始关注流行时尚、品牌、品位,并让这种消费观念最后形成了一种物质和地位的攀比。

“我们正活在一个贪婪是好的时代”成为一句口号,限量版劳力士带上手腕,轩尼诗如开水般消耗,LV手袋总是吊在手上,奢侈之风蔓延在富裕的中产者之间。只是不知不觉中,这种时尚的攀比,渐渐剥夺了中产者原本的面目。为了比别人有更加光鲜的脸面,他们对物质产生了更迫切的渴求,花掉了更多的心思,也因此换来了更大的焦虑。

之七 小本生意的患得患失

中产阶层的投资热点主要集中在股票、商业、服务业和房地产。而与其他阶层投资不同的是,他们还注重教育投资和收藏投资。他们比富豪们更难贷到银行的钱,只是用他们的原始积累来投资,要么慢慢增值,要么血本无归。1990年代初,中产阶层对投资房地产产生了极大的热情。但1993年国家调控政策一出,很多曾经风光的中产者赔了本,从此变得一蹶不振。一着不慎,满盘皆输,中产输不起,最怕打回贫困的原形。因此,理财比投资更适合他们保守的风格和脆弱的资本,买保险和债券,以房养房之类的理财相对安全。

之八 上有老下有小的家庭顶梁柱

中产要供楼。2005年2月,温州每平方米商品房平均房价9278元,上海8627元,杭州7210元,北京6232元,深圳6037元,广州5660元。今年1到6月份,全国商品房平均销售价格同比上涨10.1%。中产要养车。自6月25日起,将汽、柴油出厂价格每吨分别提高200元和150元,零售中准价格按出厂价调整幅度等额提高。 “每次在加油站,看着显示屏上跳动的钱数,我的心跳也随之加速”成了中产者的流行语。

中产要抚养孩子。“连续数年,多项关于城乡居民储蓄目的调查中,子女教育费用均被排在第一位,超过养老与住房。”中国社科院研究员李培林在《2005年中国社会形势分析与预测》中指出了这一“不是很正常的事情”。有报告称,从直接经济成本看,0到16岁孩子的抚养总成本将达到25万元左右。如估算到子女上高等院校的家庭支出,则高达48万元。因为1996年高等教育产业化以后,高校的学费一直水涨船高。

中产阶层不少已经步入中年,还负担家庭的医疗、饮食、娱乐等各种不断上升的成本。和草根阶层不同,中产阶层在住房、汽车、生活方面追求更为舒适和精致,在子女教育方面更为苛求完美,恨不得子女一出生就通晓8国语言。中产阶层上涨的工资永远追不及中产生活上涨的价格。

之九 庞大弱势群体须关怀

收入较高、具备一定社会地位、拥有知识和文化的中产阶层,能够在慈善公益、维护道德、扶助弱势群体、维护社会稳定等方面贡献力量。目前,中国农村绝对贫困人口、城镇失业下岗者中的贫困人口、受灾人口、残疾人等需要社会救助的人口超过总人口的10%。慈善事业是继工资、社会福利和保障之后的“第三次社会大分配”,中产者通过捐赠需要帮助的人,可以缩小社会由于贫富差距带来的矛盾,但在我国工商行政部门注册的1000万家企业中,仅有10万家曾经为慈善事业捐过款物,99%的企业从未有过慈善捐助记录。在企业中,不少中产阶层对捐款的行为并不感冒:一方面,国内一些慈善机构的透明度受到他们怀疑,受到舆论影响,他们担心捐款落不到实处;另一方面,不少人更关心的是自身事业的发展,对慈善行为缺乏热情,对社会有一种冷漠感,把捐款等社会义务看作一种烦恼和焦虑。

之十 利益集团霸王条款的受害者

1960年,科斯写了《社会成本问题》一文,他从整个国民经济出发,把社会成本定义为“一切涉及社会个别成员和集团的负担、损失、痛苦、牺牲或辛苦的现象”。额外社会成本体现在中产阶层的家庭里,最明显的是教育。教育学家杨东平认为,政府应该增加教育投入,不应将教育成本过多转移给家庭,因为这无疑增加了每个家庭额外的社会成本。

孩子的教育不是中产阶层唯一的额外社会成本。中产阶层不少人都经历过部分权力部门行政垄断、权力寻租或非法行为的侵害。有的时候,他们不得不通过“走后门”来获得某些机会与方便,通过非正当的途径来获得发展的机会。由于社会体制上的漏洞或行政上的监督不力,造成了他们在办一件事情的时候,必须在程序之外,付出更多额外的社会成本。尽管他们可能由此获得财富,但部分额外社会成本也对他们得到的财富进行了消解。 除此之外,在中产阶层的生活中,一些不合理的汽车路桥费、房产交易中的霸王条款、旅游过程中的合同陷阱,由于一些部门和单位的违规操作,额外的社会成本很容易落在他们头上。要知道,这些落在中国中产阶层肩膀上的额外负担,或许数额不多,但分量可是一点都不轻。