• HTTP劫持


    HTTP劫持

    想了解什么是HTTPS,要先知道什么是HTTP

    HTTP

    HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML文件,图片文件,查询结果等,一般基于B/S架构,即浏览器作为HTTP客户端通过URL向HTTP服务端(WEB服务器)发送所有请求。

    我们以访问百度为例:

     

    而实际使用中,绝大说的网站现在都采用的是https协议,这也是未来互联网发展的趋势。

    一些网站访问时,可以看到访问的账号密码都是明文传输, 这样客户端发出的请求很容易被不法分子截取利用,因此,HTTP协议不适合传输一些敏感信息,比如:各种账号、密码等信息,使用http协议传输隐私信息非常不安全。

    所以,http存在一些问题:

    • 请求信息明文传输,容易被窃听截取。
    • 数据的完整性未校验,容易被篡改
    • 没有验证对方身份,存在冒充危险

    HTTPS

    为了解决上述的问题,就用到了HTTPS

    HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。

    • 1.浏览器想服务器发送https请求(包含一套支持的加密规则)
    • 2.服务端收到请求之后,生成SSL密钥,包括公钥(服务器)和私钥(服务器)
    • 3.返回公钥
    • 服务器从浏览器的加密算法规则中选出一组加密算法和HASH算法,并将自己的身份信息(公钥)以证书的形式发送给浏览器,证书里包括网站地址、加密公钥以及证书的颁发机构等;
    • 4.客户端验证公钥(服务器)
    •     4.1.验证证书的合法性:颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致
    •     4.2.若证书受信任,或者用户接受了不信任的证书,浏览器会产生一串随机数的密码(密钥(客户端))),并用证书中提供的公钥(服务器)对其加密
    •     4.3.使用约定好的HASH值计算握手消息,并用生成的随机数对消息进行加密,过程如下图:
    • 5.客户端将所有信息(握手消息+密钥(客户端))发送给服务器 
    • 6.服务器端接收信息 用私钥(服务器)将信息解密,得到客户端的密钥,然后用密钥(客户端)解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致;对握手消息加密是对称加密,对客户端密钥加密是非对称加密
    • 7.服务器端使用使用密钥(客户端)加密一段握手消息,发送给浏览器
    • 8.浏览器获取信息后,用密钥(客户端)解密并计算握手消息的HASH,若与服务器发来的HASH一致,此时握手结束,之后所有的听信数据将由之前浏览器生成的随机密码(客户端密钥)利用对称密码算法加密

    PS:非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性

    那什么是SSL/TLS呢?

    SSL(Secure Sockets Layer)安全套接层协议

    TLS(Transport Layer Security)传输层安全性协议,TLS是SSL+HTTPS安全传输层协议名称

    它们都属于加密协议,在网络数据传输中起到保护隐私和数据的完整性。保证了该网络传输的信息不会被未经授权的元素拦截或修改,从而确保只有合法的发送者和接收者才能完全访问并传输信息。

    在应用层和传输层之间使用SSL协议。最广泛的用途在HTTP协议,从而产生HTTPS加密协议。

    SSL握手

    SSL协议使用非对称和对称加密

    SSL/TSL协议保证信息的完整性:

    SSL/TLS协议不仅提供信息的机密性,还保证其完整性。为此,它使用消息认证码(MAC,消息认证码)。该认证码使用具有密码密钥的散列函数来计算,该密钥仅通信的发送者和接收者(客户端和服务器)知道。以这种方式,如果修改了所有信息的单个比特,则MAC将完全不同,并且双方当时可以知道信息已被修改。

    HTTP劫持

    常见的http劫持有DNS劫持和内容劫持

    DNS劫持

    举例:

    在浏览器输入如下域名https:// www.zhihu.com那浏览器要打开这个网站,首先要解析域名www.zhihu.com,结果这个域名被黑客劫持到他的私人服务器1.2.3.4,结果我的浏览器和他 的私人服务器1.2.3.4建立SSL连接,他的服务器1.2.3.4也和www.zhihu.com建立SSL的连接,我收发的数据都通过他的服务器1.2.3.4中转,也就是黑客的服务器1.2.3.4相当于一个https代理服务器,结果我收发的所有数据,他都能看到。可能这样被劫持吗?

    这种攻击就是中间人攻击,跳转1.2.3.4就是DNS劫持,DNS被劫持到一个非源端的IP上

    1、中间人截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信;将服务器返回给客户端的内容发送给客户端,伪装成服务器与客户端进行通信。
    2、通过这样的手段,便可以获取客户端和服务器之间通信的所有内容。
    3、使用中间人攻击手段,必须要让客户端信任中间人的证书,如果客户端不信任,则这种攻击手段也无法发挥作用。

    下面用SSL握手来分析一下流程:

    1、首先如果黑客要跟你的浏览器建立SSL连接,那么他需要有一个CA证书,而通常系统内置根证书都是大型机构的根证书,几乎无法伪造。如果非要做一个只能是自签名证书。

     

    2、浏览器拿着对方的自签名证书和系统证书进行校验,结果一定是如下图所示:

     

    3、如果他要假冒其他机构颁发证书,因为没有颁发机构的秘钥,那么这个证书的指纹一定没办法对上,还是一样会报警。

    4、除非用户自己主动导入一个自己信任的证书

    所以,最好不要随便安装证书

    若出现中间人用HTTPS跟服务器通信,然后用HTTP跟客户端通信

    只要利用HSTS(HTTP+Strict+Transport+Security,RFC6797)就可以解决这个问题。通过在HTTP+Header中加入Strict-Transport-Security的声明,告诉浏览器在一定时间内必须通过HTTPS协议访问本域名下的资源。

    这种情况下,只要用户曾经在安全网络环境下访问过一次某站,中间人在指定时间内也无法让其回落到HTTP

    内容劫持

    作为中间人,没有服务器的私钥,是不能解密客户端发送的内容的,若没有客户端自己生成的秘钥,就不能解密客户端发送的内容

    PS:
    1.CA证书保证了公钥的可靠性。
    2.服务端私钥+公钥的非对称加解密保证了客户端生成的随机数传输安全,不会被中间人拦截获取。但是非对称加密对服务端开销大。
    3.所以利用随机数的对称加密保证后续通讯的安全性,也可以降低服务器的解密开销。
    4.HTTPS只针对传输内容进行加密,保证的是客户端和网站之间的信息就算被拦截也无法破解。如果不是全站HTTPS,仅仅只是在登录页采用HTTPS,那些HTTP连接的页面同样是危险的,从HTTP->HTTPS跳转依然可能被劫持。国内的部分银行就是这样,对安全性的考量还比不上百度,百度早就全站HTTPS了。

    如何预防HTTP劫持

    因为使用中间人攻击,必须让客户端信任中间人的证书

    1、证书校验:针对安全性要求比较高的 app,可采取客户端预埋证书的方式锁死证书,只有当客户端证书和服务端的证书完全一致的情况下才允许通信,如一些银行类的app,但这种方式面临一个问题,证书过期的问题,因证书有一定的有效期,当预埋证书过期了,只有通过强制更新或者要求用户下载证书来解决

    2、域名检验

    写死在代码中?

    问题

    1、如何验证CA证书的合法性?或者是颁发机构的合法性?通过HASH值?

    作者: Pam

    出处: https://www.cnblogs.com/pam-sh/>

    关于作者:网安在读

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(mir_soh@163.com)咨询.

  • 相关阅读:
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第一题
    fiddler模拟发送post请求
  • 原文地址:https://www.cnblogs.com/pam-sh/p/14679595.html
Copyright © 2020-2023  润新知