这里的中间人场景主要是Windows平台下的C/S架构劫持,技术指的是SSL劫持攻击,即SSL欺骗,剥离攻击暂不涉及。整体原理是伪造证书,既充当请求方的server角色,又充当真正server的请求方。以此来获取和篡改通信的明文报文数据。
原理
1.客户端请求被劫持(如DNS劫持等),所有的客户端请求均被转发至中间人的服务器;
2.中间人服务器返回中间人伪造的“伪证书”(包含伪公钥);
3.客户端创建随机数,通过中间人证书的伪公钥对随机数进行加密后传输给中间人,然后凭随机数构造对称加密算法对要进行传输的数据内容进行对称加密后传输;
4.中间人因为拥有客户端生成的随机数,从而能够通过对称加密算法进行数据内容解密;
5.中间人再以“伪客户端”的身份向正规的服务端发起请求;
6.因为中间人与服务器之间的通信过程是合法的,正规服务端通过建立的安全通道返回加密后的数据内容;
7.中间人凭借与正规服务器建立的对称加密算法进行数据内容解密;
8.中间人再通过与客户端建立的对称加密算法对正规服务器返回的数据内容进行加密传输;
9.客户端通过中间人建立的对称加密算法对返回的数据内容进行解密;
由于缺少对证书的真伪性验证,所有客户端即使发起了Https请求,但客户端完全不知道自己发送的请求已经被第三方拦截,导致其中传输的数据内容被中间人窃取。
协议解析
基于TCP连接实现每条连接的单独解析。在服务端开启TCP代理,结合中间人方式解密SSL报文,即目的服务器与上网行为服务端SSL握手采用服务端证书,上网行为服务端与云桌面SSL握手采用自签名证书,这样在服务端就能获取到所有数据的明文。对解密后的数据基于TCP流的思想进行解析,对于每一条TCP连接,都分为连接创建、数据传输、连接断开。由源ip、源端口、目的ip、目的端口以及连接建立的时间戳,来确定唯一的一条流。每条TCP连接在连接建立时,开始本条流的解析,在每条TCP连接断开时结束本条流的解析。
对于应用层协议(HTTP/FTP/SMTP/POP3/IMAP等协议)解析进行优化,采用浅报文检测和特征检测相结合的解析方式,通过识别端口号识别协议,结合抽取协议头部分特征正则匹配协议特征串检测,这样做的目的是在保证识别准确率的同时,减少频繁拆包带来的时间复杂度提升。
- HTTP协议的特征如下所示:
请求头匹配 re.compile(r'.*(POST|GET|DELETE|PUT|OPTIONS) (/[\S]*) HTTP/[1-2]\.[0-9]')
响应头匹配 re.compile(r'.*HTTP/[1-2]\.[0-9] ([0-9]{3}) .*')
若要区分HTTP中是否包含文件,则通过如下特征判断:先检测请求头中的Content-Disposition字段,若形如 'form-data; name="file"; filename="test4.txt"',则表示包含文件,文件名称为"test4.txt";否则继续判断content_type字段,若在常见文件格式的content_type列表内,则表示是文件,文件名称取url中path最后一级。例举常见文件格式的content_type如下:
'application/x-msdownload',
'application/msword',
'application/octet-stream',
'audio/x-musicnet-download',
'application/pdf',
'application/vnd.ms-powerpoint',
'application/x-ppt',
'application/zip',
'application/x-msdos-program',
'application/vnd.ms-excel',
'application/vnd.visio',
'application/x-vsd',
'application/x-msi',
- SMTP/POP3/IMAP 协议通过端口号确定, 995、110是POP3,143、993是IMAP,25、465是SMTP协议。一条连接里面可能包含多封邮件,可通过如下特征标识:
收件头:”RETR “
收件尾: “354 End data with <CR><LF>.<CR><LF>”
网页版邮箱是在HTTP之上再解析一层私有协议,通过url区分是哪种类型邮箱,如qq是 mail.qq.com/cgi-bin/compose_send。其邮件附件和邮件正文内容是两条独立的TCP连接,通过附件的md5值进行关联。
防范思路
防御中间人攻击的方法有以下几种:
1、使用加密技术: 对通信内容进行加密,可以有效防止中间人窃取通信内容;
2、使用数字证书: 数字证书是由可信任的第三方颁发的电子文件,可以用来验证通信方的身份。使用数字证书可以有效防止中间人伪装身份的行为;
3、使用安全套接字层(SSL)或传输层安全(TLS)协议: SSL和TLS是两种常用的网络安全协议,可以用来保护;
4、使用虚拟专用网络(VPN)技术: VPN可以为用户提供一条安全的通信通道,可以有效防止中间人。