设为首页 加入收藏
   
     
   
科技•信息
 
探索SPI的网络攻击与防范
双击自动滚屏 发布者:admin 时间:2011-2-25 16:21:21 阅读:469次 【字体:

探索SPI的网络攻击与防范

 

  摘 要:
  SPI技术可能被用作网络攻击,例如进行网络嗅探、设置木马和Web欺骗。这些攻击程序以动态连接库文件形式存在,具有更强的隐蔽性。揭示它们的原理,提出发现与清除攻击程序的方法,有利于网络的安全。
  
  关键字:嗅探器;木马;欺骗;网络攻击
  
  0 引言
  
  Winsock 2 是Windows Sockets 的2.0版本,在此之前的是Winsock 1.1。与1.1版本相比,2.0版本引入了一种新的叫做SPI(Service Provider Interface)的编程接口[1]。利用这种技术可以在Socket中插入一层,从而可以完成诸如传输质量控制(Qos)、扩展TCP/IP协议栈、URL过滤及防火墙的开发。
  
  引入SPI的目的是让网络开发者可以编写自己的服务提供者程序,即SPI程序。SPI程序以动态联接库形式存在,它工作在应用层,通过WSPStartup函数为上层API调用提供接口函数。SPI中的函数与Socket API函数存在一一对应关系,只是名称和参数有区别。例如,Socket API中数据接收函数recv,对应的SPI函数为WSPRecv,其参数区别如下:
  
  int recv (SOCKET s, //套节字
  char FAR* buf, //接收数据缓冲区
  int len, //缓冲区长度
  int flags //标志
  );int WSPRecv (SOCKET s, //套节字
  LPWSABUF lpBuffers, //接收数据缓冲区
  DWORD dwBufferCount, //缓冲区长度
  LPDWORD lpNumberOfBytesRecvd, //实际接收字节数
  LPDWORD lpFlags, //标志
  LPWSAOVERLAPPED lpOverlapped, //可忽略
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, //可忽略
  LPWSATHREADID lpThreadId, //进程ID指针
  LPINT lpErrno //指向错误码
  );
  如果在SPI程序中开发者按WSPRecv规范编写了该函数,则在安装SPI程序后,每个使用函数recv的程序都要先执行SPI程序的WSPRecv,在WSPRecv中开发者可以完成自己的操作后再调用recv函数。例如在WSPRecv函数中,可以从参数lpBuffers中获取所有发送出去的数据。由此可以看出,这实际上是对Socket API的钩子程序。
  
  既然SPI提供了拦截Socket的方法,可以以此开发防火墙之类程序。另外,也可能被黑客利用来开发攻击工具,进行网络攻击。
  
  1 可能进行的攻击
  
  比较容易利用 SPI 实现的攻击有网络嗅探、木马和Web 欺骗。
  
  1.1 网络嗅探
  
  嗅探器(sniffer)是利用计算机的网络接口截获目的地为其它计算机的数据报文的一种技术。一般情况下,嗅探器通过将以太网卡设置成混杂模式来实现。使用混杂模式建立的嗅探器容易通过检测混杂模式套接字和套接字所在进程而找到黑客程序。使用SPI 技术建立的嗅探器不需要设置套接字模式,也不需建立新的套接字。假设要嗅探所有从本机发送出去和目的地址为本机的数据,数据分别保存为文件recvUPP.dat(接收的UDP 数据)、recvTCP.dat(接收的TCP 数据)、sendUDP.dat(发送的UDP 数据)、sendTCP.dat(发送的TCP数据),则SPI 工作流程如图1 所示。
  
  例如,有人上网进入免费邮件服务器发送邮件,如图2 左边界面。如果嗅探器正在工作,上网收发的内容将保存在recvTCP.dat 和sendTCP.dat 中,在文件中可以发现登陆邮箱的密码,如图2 右边所示。
  
  1.2 木马
  
  传统的木马是分别位于控制和被控制端计算机上的两个进程。如果SPI 被用于设计木马,被控制端将是一个DLL 文件。只要有进程使用网络,木马就会被自动启动,在DLL 中可以实现数据的上传下载、进程的启动与终止、系统信息的获取。但是,只要使用网络的进程退出内存,SPI 木马也会退出内存。
  
  传统的木马检测办法是通过网络端口与进程的关联来寻找木马进程,如果对 SPI 木马也使用此办法,则无法检测到。例如,设当前正常的文件aa.exe 启动,产生进程并使用网络,则SPI 程序启动,相应地SPI 木马也启动。使用网络端口与进程的关联时,虽然能发现木马使用的端口,但找到的进程不是SPI的DLL文件,而是进程aa.exe。
  
  由此可以看出,SPI木马更加具有隐蔽性,仅仅使用传统检测办法是不可以发现的。木马的工作流程如图3所示。SPI木马启动时,首先执行SPI函数WSPStartup,在该函数内部,开发者可以建立子线程,完成和控制端的连接、控制信息的获取等。
  
  1.3 Web欺骗
  
  Web把寄存在服务器的超文本文档和其他一些文件、菜单和数据库通过超级链接连接到一起,构成一个整体。这些文件均可在网络上通过URL获取,这就是万维网。传统的Web欺骗攻击就是打断从被攻击者主机到目标服务器之间的正常连接,并建立一条从被攻击者主机到攻击者主机再到目标服务器的连接。当用户点击到看似一个熟悉网站的连接时实际上登录到了攻击者想让被攻击者登陆的网站。
  
  使用SPI进行的Web欺骗很容易实现。比如,希望用户不管输入什么样的URL路径,总是会被登陆到,其原理是,浏览器进程向所在的服务器发送数据报。数据的发送调用Socket API函数recv。如果安装了进行Web欺骗的SPI程序,在调用recv之前会先调用WSPRecv函数。WSPRecv函数的参数lpBuffers是WSABUF结构变量的指针,包含数据缓冲区和数据长度。如果将lpBuffers中的数据替换为访问需要发送的数据,则不管用户输入何种域名,都将被引导到搜狐网站。原理可以用图4表示。
  
  2 SPI攻击程序的检测
  
  SPI程序要被调用,总是必须被注册到注册表的一个固定位置,为HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWinsock2ParametersProtocol_Catalog9Catalog_Entries分支下。子分支PackedCatalogItem键保存的内容为SPI程序的路径和文件名。访问该路径可以确认当前系统中是否有SPI程序存在。
  
  2.1 SPI网络嗅探的检测
  
  如果确认SPI程序存在,使用软件工具如FileMon可以检测到所有使用网络的进程会向若干固定文件写入数据。用二进制编辑工具打开这些文件会发现从网络上接收和发送的数据。
  
  2.2 SPI木马的检测
  
  SPI木马的关键在于在SPI程序中建立套接字。检测到SPI程序中存在套接字就检测到了SPI木马。过程如图5所示。
  
  2.3 Web欺骗SPI检测
  
  Web欺骗导致无法正常上网,容易观察到。如果卸载SPI程序后正常上网,即可以确认是SPI程序造成。
  
  2.4 SPI程序的检测与卸载
  
  通过检测注册表路径HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWinsock2ParametersProtocol_Catalog9Catalog_Entries实现。PackedCatalogItem子分支包含一个WSAPROTOCAL_INFOW类型结构。图6是加载SPI程序TcpIpDog.dll前后注册表中的差异。将PackedCatalogItem改回原值,即完成卸载。
  
  3 小结
  
  SPI程序具有两面性,既可以用于开发网络安全程序,也可能被用于开发网络攻击程序。本文全面地预言了这种攻击存在的可能性,同时提出了分析、检测和清除这种攻击的方法。

上一篇|下一篇

 相关评论

暂无评论

 发表评论
 昵称:
 评论内容:
 验证码:
  
打印本页 || 关闭窗口
 
 

咨询电话: 13891856539  欢迎投稿:gmlwfbzx@163.com  gmlwfb@163.com
617765117  243223901(发表)  741156950(论文写作指导)63777606     13891856539   (同微信)

All rights reserved 版权所有 光明论文发表中心 公司地址:西安市碑林区南大街169号-6
CopyRight ©  2006-2009  All Rights Reserved.


  制作维护:中联世纪  网站管理
访问 人次
国家信息产业部ICP备案:陕ICP备17019044号-1 网监备案号:XA12993