最近在工作中,由于同事对敏感信息明文传输这个漏洞认识不深,导致工作出了一些问题。经过一番研究后,发现了其中的一些小知识点,在这里跟大家分享下,具体情况是这样的:
1.我们在做安全测试的时候,经常可以通过Burpsuit抓包看到一些以明文方式呈现的敏感信息,比如在页面登陆处,我们输入账号密码,通过Burpsuit抓包,可以看到如下类似的数据包。
可以看到在数据包中,用户登陆用的账号和密码都是以明文的形式呈现的,并未经过任何加密。
但同事被他们内部评估标准洗脑,看到数据包中存在明文的敏感信息就认定此处存在敏感信息明文传输的问题。但这样的判断明显是存在问题的。
HTTPS,即超文本传输安全协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。
首先我们需要明白HTTP位于OSI模型的第七层,属于应用层协议。
SSL位于OSI模型的第四层,属于传输层协议。
通俗来说,HTTP协议在从应用层到达传输层时,经过SSL协议加密后就是HTTPS协议。
需要注意的是:此处的加密并非针对数据包内单个的参数进行加密,而是将整个数据包加密。
A--B的传输过程如下
OSI七层模型每一层的作用如下:
应用层:针对特定功能提供对应协议,比如邮件功能对应电子邮件协议(SMTP),远程登陆对应远程登陆协议(SSH、Telnet),文件传输对应文件传输协议(FTP、SFTP)。(协议就像语言一样,跟不同国家的人交流需要用到不同的语言,不同国家的人相当于各种各样的系统功能,语言就相当于协议,只有使用相同的协议进行通信才能完成特定的系统功能)
表示层:将设备固有数据格式转换为网络标准数据格式。比如视频数据,表示层就是将Avi,RMVB,MP4等不同的格式的视频数据转换为,网络标准数据格式。感觉说的还是不好。
举个例子:为了方便不同地区的人进行沟通。表示层可以将开封话,山西话,商丘话,浙江话转换成普通话后在进行传输。接收端接收到普通话后,可根据设备或软件需要将普通话在转换为开封话等。
会话层:管理通信,负责建立和断开通信。制定通信方案,比如一共要发送6个数据包,会话层根据不同通信需求,控制数据包是一个一个发还是一起发还是3个3个发。
传输层:管理两个节点间的数据传输。保证数据被可靠的传输到对端地址。
网络层:提供地址和路由选择。也就是IP地址寻址。
数据链路层:负责物理层面上互联的设备间的通信。也就是MAC地址寻址。
物理层:将设备可识别的0、1串转换为电压的高低、灯光闪灭等物理信号。
在以上过程中,数据只有在从应用层到达传输层之前,在计算机内存中存在短暂的明文状态。
以OSI七层模型为例,数据每从高层向低层传输一层,低层都会在高层的发来的数据基础之上加上自己的协议包首部.
使用HTTPS协议的数据包在到达传输层时,传输层除了在数据包之前加上该层协议对应的包首部之外,SSL协议会将此数据包(HTTP协议的数据包)加密,然后再传输。所以说HTTPS协议是基于HTTP协议的,且它的安全性依赖于SSL协议。
经过SSL协议加密后的HTTP协议就是HTTPS协议.
数据到达接收方,接收方在传输层经过SSL解密之后,在应用层呈现的就是明文数据.
用户通过浏览器和服务器通信的正常过程:
中间人欺骗的过程:
这里的代理服务器就是实施中间人欺骗的攻击者。
1、攻击者需要诱使正常用户A安装自己的证书,并将其设置为受信任的根证书颁发机构。
然后将正常用户A的浏览器代理设置为攻击者的IP地址。
2、用户发送HTTPS请求,攻击者生成公钥和私钥对1,将自己的证书和公钥发送给用户A,用户A验证攻击者证书的合法性之后,随机生成自己的公钥私钥对,然后用攻击者的公钥1将自己的公钥和HTTP请求发送给攻击者。
3、攻击者收到用户A请求后,用自己的私钥1将数据包解密,得到用户A的请求和用户A的公钥,之后向服务器发送一个请求。服务器生成自己的公钥私钥对,然后将自己的证书和公钥发送给攻击者,攻击者浏览器验证服务器证书的合法性后,再随机生成公钥私钥对2,然后用服务器发送给自己的公钥将用户A的请求和自己的公钥2发送给服务器。
4.服务器收到攻击者发来的请求后,用自己的私钥解密得到攻击者发来的HTTP请求和公钥2,然后处理HTTP请求,处理完成后将处理结果用攻击者的公钥加密发送给攻击者。
5.攻击者收到服务器返回的结果后,用自己的私钥2进行解密,然后将结果用用户A的公钥加密,然后返回给用户A。
6.用户A浏览器得到攻击者返回的结果后,用自己的私钥进行解密,得到响应明文,之后由浏览器处理,呈现给用户。
由以上过程可以看出,使用HTTPS协议的网站,攻击者想使用中间人窃听的方式拿到用户明文数据,是有一定难度的。
关于HTTPS中使用的SSL协议的理解,大家可以参考如下链接,下面这篇文章看起来很舒服且极易理解:
https://www.cnblogs.com/hai-blog/p/8311671.html
文字表达能力太差。在这里总结下吧
使用Burp抓取数据包,看到数据包内的敏感信息以明文的方式存在,这里存在两种情况:
1.如果网站使用HTTP协议传输数据,则存在敏感信息明文传输问题。攻击者如果使用中间人欺骗的方式可轻易获取明文数据。
2.如果网站使用HTTPS协议,那么数据包在网络中传递时就是加过密的(这里的网络中是指数据包出了发送端A,但还未到达接收端B,这段时间)。攻击者如果使用中间人欺骗的方式获取数据包,拿到的也是经过加密后的数据包。如果攻击者想获得明文数据包,则需要在用户电脑上安装自己的HTTPS证书,并且需要将用户浏览器代理IP设置为攻击者自己的IP。
为了防止攻击者通过更改用户代理的方式截获用户数据,在这里建议即便网站使用HTTPS协议进行数据传输,也要将数据在前端经过JS加密后再进行传输。这样即使攻击者通过上述方式截获用户流量,在经过HTTPS解密后拿到的依然是通过JS加密后的敏感数据。这样就进一步给攻击者增加了攻击成本。