前面介绍了很多种攻击方式,但是它们都是基于网络协议的缺陷。而在实际情况中,除了这些内容之外,操作系统和应用程序的漏洞也是网络安全研究的重点。缓冲区溢出是现在很典型的一种远程攻击方式,它利用了程序员在编写程序时的疏忽,从而实现了在远程设备上执行代码。这些攻击方式大都要通过应用层的协议实现,所以本次课也会介绍应用层最为典型的协议 HTTP 。
WireShark观察下的HTTP协议
HTTP协议大概是与我们关系最为密切的应用层协议了。大多数人使用电脑的目的就是为了“上网”,而这个行为其实就是依靠HTTP协议才得以实现。简单来说,HTTP负责完成HTTP客户端与HTTP服务端的信息交流。例如当我们上淘宝购物的时候,淘宝网站就是HTTP服务端,而我们的设备就是HTTP客户端。
HTTP的请求与应答
HTTP 数据的传输过程也并不复杂,当我们在浏览器(例如火狐)的地址栏中输入了一个地址并按下回车键之后,浏览器会向目标服务器发送一个请求,当服务器收到这个请求之后,就会将一个网页回传给我们的浏览器。
这里面的请求和回应都是遵循 HTTP 协议的,浏览器发送和接送的内容如图所示。图 中给出的是将多个数据包组合之后的结果,这其实和我们平时所看到的内容相差不大了,上面方框的部分是请求,下面方框的部分是应答
HTTP 协议的内容比较多,包括 Request method、host、User-agent 等,这里面我们不一一介绍,只重点讲解其中比较常用的 Request method,这个字段常见的值有如下几个:
GET 请求获取由 Request-URI 所标识的资源;
POST 在 Request-URI 所标识的资源后附加新的数据;
PUT 请求服务器存储一个资源,并用 Request-URI 作为其标识;
DELETE 请求服务器删除由 Request-URI 所标识的资源。
我们可以检查在网络中传输的使用到 POST 方法的数据包,查看其中是否有敏感数据泄露,使用的过滤器为:
http.request.method==”POST”
模拟缓冲区溢出攻击
我们以一个在国外很流行的文件共享软件 Easy File Sharing Web Server7.2 作为实例,这个工具通过 HTTP 协议提供文件共享功能。这里有漏洞的应用程序是简单文件分享 Web 服务器 7.2(Easy File Sharing Web Server 7.2)
使用WireShark 分析缓冲区溢出攻击
我们在WireShark中观察easyfilesharing_seh.pacap文件,这个文件前面的数据包都是一些ARP数据包,没有发现异常。在第121个数据包时,192.168.32.129和192.168.32.132通过TCP三次握手建立了连接。但是接下来的4个HTTP数据包却明显出现了异常,这明显是一个HTTP请求的分片,但是这个请求的长度显然太长了。
作为一个网络取证分析者来看,使用WireShark来分析是一个很好的锻炼。我们在这几个数据包上面单击鼠标右键,然后选择“Follow”|“HTTP Stream”。
使用WireShark检测远程控制
如果你对PE文件格式有了解的话,看到“This program cannot be run in DOS mode”就会知道这是一个PE文件的头部,PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的微软Windows操作系统上的程序文件EXE、DLL、OCX、SYS、COM都是PE文件。
攻击者通过4444端口和服务器在进行通信。
WireShark对 HTTPS协议的解析
例如当加密过程采用了RSA算法实现密钥交换时,我们就可以通过将加密通话私钥加入到WireShark中的方法来解析里面的内容。但是目前有些使用的加密技术已经无法进行解密了,因为根本无法导出解密通话的秘钥。
以windows系统+Chrome浏览器为例,首先要导出浏览器存储的密钥,通过 计算机属性——高级系统设置——环境变量,新建一个变量名“SSLKEYLOGFILE”的变量,变量值是导出的密钥具体文件地址。
Linux设置:export SSLKEYLOGFILE=~/path/to/sslkeylog.log
设置后可以通过Chrome浏览器打开任意一个HTTPS网址,此时查看变量值对应路径,已经生成sslkey.log。
密钥成功导出到本地啦。现在可以将密钥应用到Wireshark了。具体路径如下:菜单栏Edit——Preferences——Protocols——SSL(注意,不论是SSL还是TLS这里都是SSL,没有单独的TLS选项),在(Pre)-Master-Secret log filename中选择刚才设置的变量值。