您的位置广东网盟 > 文章资讯 > 网络安全 > 安全教程 > 文章内容

个人防火墙的真相

作者:佚名  来源:本站整理  发布时间:2008-10-25 22:09:08

有多种方式来保护你的计算机免受恶意软件的侵害,比如软件防火墙,病毒和Rootkit检测软件等。所有这些防护软件都基于一些众所周知而几乎没有改进的技 术,而且这些技术你也许已经知道,继承这些技术的安全产品也是不完善的。这样的后果通常是可怕的。然而这些安全公司却天真的认为他们的产品是最先进的,包 含了最新的特性,是用户必备的。但是只要你透过他们的华丽的外衣就会看到,他们的Bug和错误甚至比你在学校的设计还要多。虽说生产一款产品首要的是好而 强有力的广告。但沉重的广告和糟糕的测试结合在一起能向用户展示一些产品所谓的强大吗,能使其产生一种强烈的购买欲望吗?当然不行。
  保护你的个人电脑免受外部的和内部的第三者的攻击是一个好主意。一些保护你的PC远离木马和间谍软件“启发式”的方法好像真在工作。如果他们工作的话,付30到50美元就能获得实时的保护和更新的确是个非常好的想法。可惜,他们不能。
  首先我想为我糟糕的英语道歉。我们的讨论将会涉及以下产品:
  ZoneAlarm Firewall 6.x
  Outpost Firewall 3.x and 4.x
  Look'n'Stop Firewall 2.0
  Kerio Firewall 4.3
  
  Sygate Firewall 5.6
  Jetico Firewall 1.0
  PortsLock Firewall 1.9
  Tiny Firewall 6.5
  Norton Internet Security 8.0
  Comodo Firewall 2.4
  OnlineArmor Firewall 2.1
  个人软件防火墙的保护有2种基本级别:NDIS(网络驱动接口规范)和TDI(传输数据接口)。NDIS级是建立在TCP/IP栈的基础上的,在这个级别 上的保护能阻止基于TCP/IP栈BUG的攻击,甚至你不用更新你的栈;他也能防御许多电子欺骗,洪水攻击和分布式拒绝服务攻击。没有使用NDIS 技术的防火墙自然变成了局外人。失败者有PortsLock防火墙, Norton Internet Security, Comodo防火墙等。你真的愿意为PortsLock防火墙付35欧元吗,他甚至不能抵御低级别的TCP/IP攻击。或者为Comodo付79美元?为 你的系统感到悲哀。真正的防火墙是基于NDIS级的。基于NDIS有两种不同的保护方法。第一种是NDIS-hooking保护。主要方法是Hooks NdisRegisterProtocol()/NdisOpenAdapter()。当NDIS协议试图被注册时或是正要绑定某个适配器时,防火墙将接 到通知。在防火墙正在HOOK NDIS_PROTOCOL_BLOCK and NDIS_OPEN_BLOCK的句柄的这个关键时刻,并且当系统想要发送或接收数据包时,防火墙将会被通知当这些发生的时候。防火墙正试图安装他们的钩 子时是有趣的时候,几乎每个防火墙都是hook NDIS_PROTOCOL_BLOCK的句柄,但是Sygate, Kerio 和Jetico等除外,他们是HOOK NDIS_PROTOCOL_CHARACTERISTICS的句柄,而不是调用真正的NdisRegisterProtocol(),在那之后他们又移 动到原来的句柄。更安全吗?对吗?正是,防火墙应该独立工作,与多少协议被注册和多少被绑定无关。是的,每个防火墙都支持这个。例如,当 ZoneAlarm正在hook一个句柄时,他是分配一个无分页的内存并且放入以下几条指令。
  
  pop eax ; 58
  push HookData ; 68 XX XX XX XX
  push eax ; 50
  jmp HookedHandler ; E9 XX XX XX XX
  然后,他写一些重要的信息在其他内存片,调用HookData和所有在NDIS_PROTOCOL_BLOCK中被hook的句柄:
  OpenAdapterCompleteHandler
  CloseAdapterCompleteHandler
  BindAdapterHandler
  UnbindAdapterHandler
  在NDIS_OPEN_BLOCK中的:
  SendHandler
  ReceiveHandler
  ReceivePacketHandler
  SendPacketsHandler
  对NDIS_PROTOCOL_BLOCK象下面这样:
  VOID HookedOpenAdapterComplete(
  PVOID HookData,
  IN NDIS_HANDLE ProtocolBindingContext,
  IN NDIS_STATUS Status,
  IN NDIS_STATUS OpenErrorStatus
  );
  真正的OpenAdapterComplete() 句柄被放在这:[HookData + 0x770]
  VOID HookedCloseAdapterComplete(
  PVOID HookData,
  IN NDIS_HANDLE ProtocolBindingContext,
  IN NDIS_STATUS Status
  );
  真正的CloseAdapterComplete() 句柄被放在这:[HookData + 0x774]
  VOID HookedBindAdapter(
  PVOID HookData,
  
  OUT PNDIS_STATUS Status,
  IN NDIS_HANDLE BindContext,
  IN PNDIS_STRING DeviceName,
  IN PVOID SystemSpecific1,
  IN PVOID SystemSpecific2
  );
  真正的BindAdapter() 句柄被放在这:[HookData + 0x764]
  VOID HookedUnbindAdapter(
  PVOID HookData,
  OUT PNDIS_STATUS Status,
  IN NDIS_HANDLE ProtocolBindingContext,
  IN NDIS_HANDLE UnbindContext
  );
  真正的UnbindAdapter() 句柄被放在这: [HookData + 0x768]
  For NDIS_OPEN_BLOCK:
  VOIDHookedSend(
  PVOID HookData,
  IN NDIS_HANDLE NdisBindingHandle,
  IN PNDIS_PACKET Packet
  );
  真正的Send() 句柄被放在这: [HookData + 0x1A4]
  VOID HookedReceive(
  PVOID HookData,
  IN NDIS_HANDLE ProtocolBindingContext,
  IN NDIS_HANDLE MacReceiveContext,
  IN PVOID HeaderBuffer,
  IN UINT HeaderBufferSize,
  IN PVOID LookAheadBuffer,
  IN UINT LookaheadBufferSize,
  IN UINT PacketSize
  );
  真正的Receive() 句柄被放在这: [HookData + 0x4D0]
  VOID HookedReceivePacket(
  PVOID HookData,
  IN NDIS_HANDLE ProtocolBindingContext,
  IN PNDIS_PACKET Packet
  );
  真正的ReceivePacket() 句柄被放在这: [HookData + 0x570]
  VOID HookedSendPackets(
  PVOID HookData,
  IN NDIS_HANDLE MiniportAdapterContext,
  IN PPNDIS_PACKET PacketArray,
  IN UINT NumberOfPackets
  );
  真正的SendPackets() 句柄被放在这: [HookData+2E4h]
  可怜的ZoneAlarm,这是如此的简单对于获取真实的句柄并恢复他。
  我说过,每个防火墙都支持多数的注册协议。事实上,并不是每个。Sygate认为,保持关于协议和公开包的所有信息在他的.data段中已经足够了。不幸 是个坏主意。他的句柄HOOK方式比ZoneAlarm简单,但是说明哪些内存将被分配的指令被放在S

[1] [2] [3] [4] [5] [6]  下一页

Tags:广东网盟  
  •         用户名: 验证码: 验证码,看不清楚请点击刷新验证码 (注“”为必填内容。)


    文章评论: [ 查看全部 ] 网友评论
    关于网盟 | 网站帮助 | 广告合作 | 下载声明 | 友情连接 | 联系方式

    Copyright © 2003-2008 Gdwg.Net. All Rights Reserved .
    中国广东网管联盟设计维护.网站备案:粤ICP备08020875号