TLS/SSL流程详解 & HTTPS中间人攻击 & 流量分析SSL题目

TLS/SSL

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS/SSL在传输层对网络连接进行加密。常见的HTTP、FTP由于采用明文传输,所以可以使用SSL进行数据传输加密。SSL分为两个部分:handshakeapplication data两个阶段,后者使用前者协商的对称密钥加密数据,前者的流程图如下:

SSL handshake

TLS/SSL使用非对称加密提供身份认证和密钥协商(RSA、DH、ECC),使用对称加密完成信息加密(AES、DES、RC4),使用散列算法提供完整校验(MD5、SHA)

整个流程分为5个部分:

流程 详细内容
1.client hello client发送client hello类型包,其中包括TLS版本,随机数random_csession id,支持的密码套件cipher suite、支持的压缩算法、扩展字段
2.server hello server发送server hello包,其中包括协议版本,随机数random_s,session id,选择的密码套件cipher suite,选择的压缩算法,选择的扩展
3.certificate 发送证书信息
(server key exchange) 有些算法例如DH会发送这一步用于交换密钥
4.server hello done hello done 标志
5.client key Exchange,change cipher spec,encypted handshake message 分为3个部分,client key exchange用于对称密钥第三部分per-master部分的生成,changecipherspec指从现在开始数据是加密的,encrypted handshake message使用生成的密钥进行加密通信参数
6.server ChangeCipherSpec 表示服务器从现在开始发送加密信息
7.server encrypted handshake message 服务器发送也结合所有当前的通信参数信息生成一段数据

下面我们根据抓包内容对每一个步骤进行详细说明:

Client Hello

Client Hello

可以看见,发送的内容有:TLS版本,handshake type, 随机数random_c,支持的密码套件cipher suites,压缩方法,扩展。
如此包内容,提供了15个套件可供选择,使用null压缩算法(不使用)以及10个可供使用的extension

Server Hello

Server Hello

服务器根据客户端发送的内容进行选择,这里返回了随机数random_s,选择的套件TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,以及扩展

Certificate

Certificate

服务器向客户端发送证书内容,包括其完整证书链,可以看到有2个证书,后者比前者等级高

src ip地址为baidu,我们用浏览器看下证书:
baidu cer

可以看到返回的两级证书链都被成功认证。

数字证书和数字签名:
数字证书为有权威的CA机构颁发,如果出现问题,颁发机构会负全部责任。如上图,baidu.com的证书由GlobalSign Organization Validation CA - SHA256 - G2机构颁发,证书的内容包括目标公司信息,扩展,所使用算法,目标网站公钥,以及签发机构本身信息。
其中的签名为颁发机构对certificate报文内容的散列值(例如SHA256)然后再用自身的私钥加密得到的结果。

验签:
将获得的证书的hash值和用颁发机构公钥解密的签名值对比,相同则为正确。

Server key exchange

Server Key Exchange

由于这里采用的是ECDHE算法,类似DH算法,所以需要密钥交换阶段,RSA算法是没有这步的

Server Hello Done

Server Hello

表示server hello 完成

Client Key Exchange,Change Cipher Spec,Encypted Handshake Message

Client Key Exchange,Change Cipher Spec,Encypted Handshake Message

这里分了三部分,第一部分是Client Key Exchange,如果是DH算法,则是发送交换密钥,如果是RSA则是使用服务器公钥加密随机数pre-master,与random_crandom_s共同构成协商密钥

第二部分是Change Cipher Spec,指此端之后的数据均为协商密钥加密的密文

第三部分是Encypted Handshake Message,为结合所有当前的通信参数信息生成一段数据,并使用协商密钥加密后的内容

New Session Ticket

New Session Ticket

会话标识符,解决会话缓存问题,这些数据采用一个只有服务器知道的密钥进行加密。Session Ticket由客户端进行存储,并可以在随后的一次会话中添加到 ClientHello消息的SessionTicket扩展中

Change Cipher Spec

Server Change Cipher Spec

表示服务器从现在开始发送加密信息

Encrypted Handshake Message

Server Encrypted Handshake Message

也叫Finished包,是完成协商密钥后的第一个加密信息包,用于验证密钥交换成功和认证成功。

使用该协商密钥加密之前所有收发握手消息的Hash和MAC值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash和MAC值。如果匹配,则成功。

Appication Data

Application Data

数据传输,为应用层协议内容使用协商密钥加密结果

附一张DH算法的图
DH-Handshake

SSL中间人攻击

目前的SSL中间人攻击分为两种: SSL劫持(欺骗)、SSL剥离(降级)

SSL中间人劫持

SSL中间人劫持

SSL中间人劫持即攻击者首先通过ARP欺骗、DNS劫持甚至网关劫持等等,将客户端的访问重定向到攻击者的机器,让客户端机器与攻击者机器建立HTTPS连接(使用伪造证书),而攻击者机器再跟服务端连接。

这种情况由于证书是伪造的,所以证书认证会失败,浏览器会提示,如果不点继续是不会被劫持的,而一般用户由于安全意识比较淡薄,都会心甘情愿的上钩。

SSL剥离

SSL中间人剥离

该攻击方式主要是利用用户并不会每次都直接在浏览器上输入https://xxx.xxx.com来访问网站,或者有些网站并非全网HTTPS,而是只在需要进行敏感数据传输时才使用HTTPS的漏洞。

假如客户端直接访问HTTPS的URL,攻击者是没办法直接进行降级的,因为HTTPS与HTTP虽然都是TCP连接,但HTTPS在传输HTTP数据之前,需要在进行了SSL握手,并协商传输密钥用来后续的加密传输;假如客户端与攻击者进行SSL握手,而攻击者无法提供可信任的证书来让客户端验证通过进行连接,所以客户端的系统会判断为SSL握手失败,断开连接。

中间人攻击者在劫持了客户端与服务端的HTTP会话后,将HTTP页面里面所有的 https:// 超链接都换成 http:// ,用户在点击相应的链接时,是使用HTTP协议来进行访问;这样,就算服务器对相应的URL只支持HTTPS链接,但中间人一样可以和服务建立HTTPS连接之后,将数据使用HTTP协议转发给客户端,实现会话劫持。

由于使用HTTP,不会让浏览器出现HTTPS证书不可信的警告,而且用户很少会去看浏览器上的URL是 https:// 还是 http:// 。特别是App的WebView中,应用一般会把URL隐藏掉,用户根本无法直接查看到URL出现异常。

DDCTF 2018 流量分析

下载流量包,打开后分析协议种类:
wireshark
发现由3部分,SMTP,FTPSSL组成,先看FTP包:
ftp
可以发现,发送了两个压缩包Fl-g.zipsqlmap.zip,但数据大量丢包,无法复原出来。之后看SMTP,发现其发送了几封邮件,查看IMF协议内容:
IMF
Internet Message Format的内容以纯文本方式拷出来,然后保存为.eml文件,可以发现:
mail
发现是私钥,而其中还有SSL流量,从而推测用私钥去解密。根据图片生成私钥值,用图像识别去获取文字然后对照修改,看的眼睛都瞎了。。吐槽一下。最后倒入,即可在其中看见HTTP flag内容。
ssl decrypt