TLS/SSL
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS/SSL
在传输层对网络连接进行加密。常见的HTTP、FTP由于采用明文传输,所以可以使用SSL进行数据传输加密。SSL分为两个部分:handshake
和application data
两个阶段,后者使用前者协商的对称密钥加密数据,前者的流程图如下:
TLS/SSL
使用非对称加密
提供身份认证和密钥协商(RSA、DH、ECC),使用对称加密
完成信息加密(AES、DES、RC4),使用散列算法
提供完整校验(MD5、SHA)
整个流程分为5个部分:
流程 | 详细内容 |
---|---|
1.client hello |
client发送client hello类型包,其中包括TLS版本,随机数random_c ,session 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
可以看见,发送的内容有:TLS版本,handshake type
, 随机数random_c
,支持的密码套件cipher suites
,压缩方法,扩展。
如此包内容,提供了15个套件可供选择,使用null压缩算法(不使用)以及10个可供使用的extension
Server Hello
服务器根据客户端发送的内容进行选择,这里返回了随机数random_s
,选择的套件TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
,以及扩展
Certificate
服务器向客户端发送证书内容,包括其完整证书链,可以看到有2个证书,后者比前者等级高
src ip地址为baidu,我们用浏览器看下证书:
可以看到返回的两级证书链都被成功认证。
数字证书和数字签名:
数字证书为有权威的CA机构颁发,如果出现问题,颁发机构会负全部责任。如上图,baidu.com
的证书由GlobalSign Organization Validation CA - SHA256 - G2
机构颁发,证书的内容包括目标公司信息,扩展,所使用算法,目标网站公钥,以及签发机构本身信息。
其中的签名为颁发机构对certificate
报文内容的散列值(例如SHA256)然后再用自身的私钥加密得到的结果。
验签:
将获得的证书的hash值和用颁发机构公钥解密的签名值对比,相同则为正确。
Server key exchange
由于这里采用的是ECDHE算法,类似DH算法,所以需要密钥交换阶段,RSA算法是没有这步的
Server Hello Done
表示server hello 完成
Client Key Exchange,Change Cipher Spec,Encypted Handshake Message
这里分了三部分,第一部分是Client Key Exchange
,如果是DH算法,则是发送交换密钥,如果是RSA则是使用服务器公钥加密随机数pre-master
,与random_c
、random_s
共同构成协商密钥
第二部分是Change Cipher Spec
,指此端之后的数据均为协商密钥加密的密文
第三部分是Encypted Handshake Message
,为结合所有当前的通信参数信息生成一段数据,并使用协商密钥加密后的内容
New Session Ticket
会话标识符,解决会话缓存问题,这些数据采用一个只有服务器知道的密钥进行加密。Session Ticket
由客户端进行存储,并可以在随后的一次会话中添加到 ClientHello消息的SessionTicket扩展中
Change Cipher Spec
表示服务器从现在开始发送加密信息
Encrypted Handshake Message
也叫Finished
包,是完成协商密钥后的第一个加密信息包,用于验证密钥交换成功和认证成功。
使用该协商密钥加密之前所有收发握手消息的Hash和MAC值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash和MAC值。如果匹配,则成功。
Appication Data
数据传输,为应用层协议内容使用协商密钥加密结果
附一张DH算法的图
SSL中间人攻击
目前的SSL中间人攻击分为两种: SSL劫持(欺骗)、SSL剥离(降级)
SSL中间人劫持
SSL中间人劫持即攻击者首先通过ARP欺骗、DNS劫持甚至网关劫持等等,将客户端的访问重定向到攻击者的机器,让客户端机器与攻击者机器建立HTTPS连接(使用伪造证书),而攻击者机器再跟服务端连接。
这种情况由于证书是伪造的,所以证书认证会失败,浏览器会提示,如果不点继续是不会被劫持的,而一般用户由于安全意识比较淡薄,都会心甘情愿的上钩。
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 流量分析
下载流量包,打开后分析协议种类:
发现由3部分,SMTP
,FTP
和SSL
组成,先看FTP
包:
可以发现,发送了两个压缩包Fl-g.zip
和sqlmap.zip
,但数据大量丢包,无法复原出来。之后看SMTP
,发现其发送了几封邮件,查看IMF
协议内容:
将Internet Message Format
的内容以纯文本
方式拷出来,然后保存为.eml
文件,可以发现:
发现是私钥,而其中还有SSL流量,从而推测用私钥去解密。根据图片生成私钥值,用图像识别去获取文字然后对照修改,看的眼睛都瞎了。。吐槽一下。最后倒入,即可在其中看见HTTP flag内容。