计算机病毒原理与防治北京邮电大学信息安全中心郑康锋zhengkfbupt@163.comftp://virus:virus@unisec.isc.edu.cn62283190-6012木马信息窃取技术本节课主要讲解的是木马信息的窃取技术。木马的重要功能之一是获取被攻击目标主机及其所在网络的敏感信息。木马信息窃取技术包括三种技术,每种技术将从其原理和实现方式两角度讲解,讲解木马是如何获得它们感兴趣的信息。前言:3本次课程学习目标学习完本次课程,您应该能够掌握:木马信息窃取技术的嗅探技术木马信息窃取技术的信息采集技术木马信息窃取技术的行为采集技术34木马信息窃取技术嗅探技术信息采集技术行为采集技术5嗅探技术嗅探技术,是一种常用的收集有用数据信息的网络监听方法,是网络安全攻防技术中很重要的一种。嗅探器(Sniffer)作为嗅探技术的一种技术实现,最初是网络管理员检测网络通信的一种工具,是利用计算机的网络接口截获目的地为其它计算机的数据报文的一种工作。一个装载了嗅探器的木马,无异于有着灵敏嗅觉的猎犬,通过对获得数据的分析处理,可以获得整个网络的网络状态、数据流动情况和个人主机的帐户等敏感信息,为后续的攻击做好充分的准备。6嗅探技术嗅探技术原理以太网计算机与局域网的连接是通过主机机箱内的网卡。网卡向下负责打包数据报为帧(数据传输的最小单位)发送到局域网,向上接收正确的帧并交付网络层处理。以太网网卡一般具有四种接收工作模式:广播(Broadcast)模式,可以接收局域网内目的地址为广播地址(全1地址)的所有数据报;多播(Multicast)模式,可以接收目的地址为多播地址的所有数据报;直接(Directory)模式,也就是单播(Unicast)模式,只接收目的地址为本机MAC地址的所有数据报;混杂(Promiscuous)模式,能够接收通过网卡的所有数据报。7嗅探技术ARP协议IP地址是主机在网络层中的地址。数据链路层是不能够识别IP地址的,但网卡、交换机等都工作在数据链路层,所以如果要想将网络层中的数据报交给目的主机,必须要在数据链路层封装为有MAC地址的帧后才能发送。但是32bit的IP地址和48bit的MAC地址之间没有简单的映射关系。8嗅探技术ARP协议(AddressResolutionProtocol,地址解析协议)就是将某个IP地址解析为对应的MAC地址的协议。每一个主机都设有一个ARP高速缓存,存放局域网中主机的IP地址和MAC地址对。当两台主机进行通信时,通过查询ARP缓存表来进行IP地址到MAC地址的转换。缓存表中不存在查找项时,运行ARP广播查找目标主机的MAC地址。ARP缓存表中的每一个映射地址项都有生存时间,进行定时更新。9嗅探技术共享式网络的嗅探技术以太网的共享特性决定了嗅探能够成功。由于以太网是基于广播方式传送数据的,所有数据报都会被传送到每一个主机节点,当网卡被设置成混杂模式时,无论监听到的数据帧目的地址如何,网卡都能予以接收。在局域网中,集线器是一种共享介质采用单工数据操作的网络设备,工作在物理层。集线器对接收到的数据包采用广播的方式进行转发,即连接到集线器上的计算机共享带宽,并且需要处理网段内的所有数据报。10嗅探技术主机AIP地址:IPAMAC:MACA主机BIP地址:IPBMAC:MACB主机C,嗅探主机IP地址:IPCMAC:MACC帧1源地址:MACA,IPA目的地址:MACB,IPB帧1帧1集线器A和B要进行通信,发送数据帧1给主机B,但主机B和嗅探主机C都可以收到,所以我们只要想办法使主机C的网卡接收这些数据帧就可以了。而网卡也恰好提供了这样一种工作模式——混杂模式。在混杂模式下,网卡会接收流经本地主机的所有数据帧。11嗅探技术交换式网络的嗅探技术交换机维护一张地址映射表,地址映射表记录网络节点与MAC地址的对应关系,当需要向目的地址发送数据时,交换机在地址映射表中查找这个MAC地址的节点位置,然后直接向这个位置的节点发送;如果没有找到匹配项,交换机可能会向除接收端口外的所有端口发送该数据报。在交换机的每个端口,都需要足够的缓存来记忆这些MAC地址。对于第三层交换机,地址映射表中存储的不仅仅是MAC地址了,而是MAC地址与IP地址的地址映射表。交换机在对一个数据流进行路由后,将会产生一个MAC地址和IP地址的地址映射。12嗅探技术主机AIP地址:IPAMAC:MACA主机BIP地址:IPBMAC:MACB主机C,嗅探主机IP地址:IPCMAC:MACC端口a端口b端口c„„MACA—端口aMACB—端口bMACC—端口c„„MACB在哪个端口?MACB在端口b帧1源地址:MACA,IPA目的地址:MACB,IPB怎么能让帧1到达主机C?帧1„„IPB—MACB„„ARP高速缓存CAM表IPB的MAC地址是多少?MACB13嗅探技术在交换式网络环境下,要想达到嗅探的目的,可以有三个攻击点,一是交换机,二是目标主机,再有就是改变自己了。发送大量虚假MAC地址数据报交换机虽然可以维护一张端口-MAC的地址映射表,但是由于交换机内存有限,地址映射表的大小也就有限。如果主机C发送大量虚假MAC地址的数据报,快速填满地址映射表。交换机在地址映射表被填满后,就会像HUB一样以广播方式处理数据报。这种方法不适合采用静态地址映射表的交换机,而且也不是所有交换机都采用这种转发处理方式。14嗅探技术上述方法属于对交换机的DDoS攻击。还可以采取欺骗的方法修改交换机的地址映射表。主机C可以发送源地址为主机B的伪造包,让交换机修改地址映射表,将MACB和端口c对应起来,就可以对主机B的通信进行监听了。ARP欺骗ARP欺骗利用修改主机ARP缓存表的方法达到嗅探的目的,是一种中间人攻击。主机C为了达到嗅探的目的,会向主机A和主机B分别发送ARP应答包,告诉它们IP地址为IPB的主机MAC地址为MACC,IP地址为IPA的主机MAC地址为MACC。15嗅探技术这样,主机A和主机B的ARP缓存中就会有IPB—MACC和IPA—MACC的记录。这样,主机A和主机B的通信数据都流向了主机C,主机C只要再发送到其真正的目的地就可以了。当然ARP缓存表项是动态更新的(一般为两分钟),如果没有更新信息,ARP映射项会自动删除。所以,主机C在监听过程中,还要不断地向主机A和主机B发送伪造的ARP应答包。修改本地MAC地址也可以通过修改本地MAC地址为目标主机MAC地址来实现嗅探。把主机C的MAC地址修改为目标主机B的MAC地址,交换机会将MACB和端口c对应起来。在以后收到目的地址为MACB的数据报后,交换机会将包从端口c发送出去。这样就达到了监听的目的。但同样地,这种方法只适用于动态生成地址映射表的交换机,并且没有采用其它策略。16嗅探技术嗅探技术的实现设计Sniffer的基本思想就是:置网卡于混杂模式、捕获数据包、分析数据包。一般来讲,Windows环境下编程实现网络监听有三种方案可供选择:NDIS(NetworkDriverInterfaceSpecification),由Microsoft和3Com公司联合开发,是Windows中“通信协议程序”和“网络设备驱动器”之间通信的规范,它为协议通讯程序操作网络设备提供标准的接口,支持计算机通过不同的协议栈与网络相连。17嗅探技术RawSocket(原始套接字),起初是Unix上最流行的网络编程接口之一,后来微软将它引入到Windows中并得以实现。Packet32和WinPcap(windowspacketcapture)都是免费的基于Windows平台下的网络接口,为Win32应用程序提供访问网络底层的能力,并且它们工作于驱动层,效率很高。前者是微软的一个实现版本,后者是UNIX下的Libpcap移植到Windows下的产物。18嗅探技术方法优点缺点补充RawSocket实现简单只能抓到IP包,对与IP同层(如ARP)的其它数据包无能为力只能获得数据包的一份拷贝NDIS可以对网卡进行任意操作,可以抓取原始数据包驱动程序开发代价大可截断数据流,不仅仅获得一份拷贝Packet32或WinPcap库提供应用程序接口,复杂的内部操作由DLL完成实现的Sniffer需要安装相应的链接库才能运行只能获得数据包的一份拷贝表1Windows下实现Sniffer的三种方式比较19木马信息窃取技术嗅探技术信息采集技术行为采集技术20信息采集技术木马入侵一台主机后,往往会首先获得主机的系统信息,如系统目录信息、操作系统信息、系统服务信息、进程信息等;或者用户信息,如登陆用户名、登陆密码等。很多木马就是以获得信息为攻击目的的。Windows为我们提供一系列获得和设置系统信息的API接口,通过调用这些API函数,我们可以获得系统的各种信息,表2列出了其中的几个常用函数。获取信息可以有多种途径,例如要获取操作系统信息可以通过GetVersionEx()直接获取,也可以通过注册表得到相关信息。21信息采集技术函数名描述GetComputerName(SetComputerName)获取(设置)本地主机的NetBIOS名字GetComputerNameEx(SetComputerNameEx)获取(设置)本地主机的NetBIOS名或者DNS名GetKeyboardType获得当前键盘信息GetWindowsDirectory获得Windows目录GetUserName(GetUserNameEx)获得(以某种格式获得)当前登陆用户名GetVersionEx获得当前运行的操作系统版本信息GetAdaptersInfo获得主机网卡相关信息GlobalMemoryStatus获取系统内存相关信息表2系统信息函数列表22信息采集技术这里我们介绍三种获得进程信息的方法:ToolHelp32ToolHelp函数为我们提供了获得进程、线程、模块和堆栈信息的方法。快照(Snapshot)是ToolHelp函数的核心。一个快照是系统内存中进程、线程、模块或堆栈当前状态的只读拷贝。所以,当我们使用快照查询进程信息时,并没有直接进入操作系统内部,也不具有长久性(只是进行查询一瞬间的状态)。使用快照可以分为三个步骤:首先获得一个特定列表的快照。CreateToolhelp32Snapshot()函数提供了该功能,函数声明如下:HANDLEWINAPICreateToolhelp32Snapshot(DWORDdwFlags,DWORDth32ProcessID);23信息采集技术其中dwFlags表示快照类型为进程信息、进程线程信息、堆栈信息、线程信息还是模块信息。th32ProcessID表示进程ID号,当查询线程信息、堆栈信息和模块信息时有效。获得一个快照后,就可以从快照中查询。获得快照中信息的函数都很类似,或者以First结尾,或者以Next结尾,分别表示快照中的第一个信息和下一个信息。表3中列举了常用的获得快照信息的函数.例如,获得一个系统中所有进程的快照后,用Process32First()取出快照中的第一个进程信息,之后循环使用Process32Next()获得快照中的下一个进程信息。最后使用CloseHandle()销毁快照,Process32First等相关API函数的详细用法请参见MSDN文档。24信息采集技术函数函数作用Process32First获取系统快照中第一进程的快照信息Process32Next获得记录在进程快照中下一个进程的相关信息Thread32First获得在系统快照中任何进程第一线程的相关信息Thread32Next获得在系统快照中任何进程的下一个线程的相关信息Module32First获得进程中第一个模块的相关信息Module32Next获得进程中下一个模块的相关信息Heap32ListFirst获得指定进程所分配的第一个堆的相关信息Heap32ListNext获得指定进程所分配的下一个堆信息表3获取快照信息常用函数25