SSL weak ciphers 漏洞修复过程

@[toc]

故事前言

最近接到了一个安全漏洞:ssl weak ciphers。一开始接到这个漏洞讲真,觉得一脸懵逼。发现触及知识点盲区了。。没办法,那我们一步一步去解剖。
首先这个问题在网上查阅时候,大多数都会带上 TLS/SSL ciphers。所以这里也一起讲解一下。

知识储备

什么是 TLS

TLS定义

TLS(Transport Layer Security,安全传输层),一种加密协议。TLS是建立在传输层TCP协议之上的协议,服务于应用层,它的前身是SSL(Secure Socket Layer,安全套接字层),以SSL 3.0 作为基础版。它实现了将应用层的报文进行加密后再交由TCP进行传输的功能。

TLS如何工作

TLS可以用于传输层安全协议(例如TCP)之上。TLS包含三个主要组件:加密,身份验证和完整性。

  • 加密:隐藏从第三方传输的数据。(通过加密方式实现)
  • 认证:确保交换信息的各方是他们声称的身份。(双方认证证书)
  • 完整性:验证数据是否未被伪造或篡改。(MAC 地址)

TLS握手过程

sequenceDiagram
    Client->>Server:ClientHello
    Server->>Client:ServerHello
    Server-->>Client:SendCertificate、Request Certificate
    Server->>Client:ServerHelloDone
    
    Client->>Server:ClientKeyExchange
    Client->>Server:ChangeCipherSpec
    Client->>Server:Finashed
    
    Server->>Client:ChangeCipherSpec
    Server->>Client:Finished

TLS 发展过程

  • 1995: SSL 2.0, 由Netscape提出,这个版本由于设计缺陷,并不安全,很快被发现有严重漏洞,已经废弃。
  • 1996: SSL 3.0. 写成RFC,开始流行。目前(2015年)已经不安全,必须禁用。
  • 1999: TLS 1.0. 互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版
  • 2006: TLS 1.1. 作为 RFC 4346 发布。主要修复了CBC模式相关的如BEAST攻击等漏洞
  • 2008: TLS 1.2. 作为 RFC 5246 发布 。增进安全性,目前应该主要部署的版本
  • 2015之后: TLS 1.3,还在制订中,支持0-rtt,大幅增进安全性,砍掉了aead之外的加密方式

什么是 SSL

其实就是上面说的 Secure Socket Layer,安全套接字层。位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
TLS 则是以SSL 3.0 作为基础推出的。

问题分析

漏洞定义

参考 :https://www.acunetix.com/vulnerabilities/web/ssl-weak-ciphers/

语言 漏洞 描述
English SSL weak ciphers The remote host supports the use of SSL ciphers that offer either weak encryption or no encryption at all.
中文 SSL弱密码 远程主机支持使用SSL密码,该密码提供弱加密或完全不加密。

漏洞理解

估计就是开放了 SSL ,以及一些密码套件问题。为了确保数据传输的安全,TLS / SSL使用一个或多个密码套件。密码套件是身份验证,加密和消息身份验证代码(MAC)算法的组合。在TLS / SSL连接的安全设置协商以及数据传输期间使用它们。

处理办法

1. 禁用SSL 2.0 和 SSL 3.0

SSL 2.0是SSL的第一个公开版本。它于1995年发布。此版本的SSL包含多个安全问题。1996年,对协议进行了完全重新设计,并发布了SSL 3.0。

由于安全问题,SSL 2.0协议不安全,您应该完全禁用它。由于存在POODLE(在降级的传统加密上填充Oracle)漏洞,SSL 3.0也不安全,您也应该禁用它。如果启用,攻击者可能会检索安全连接的纯文本内容。此外,您不能在SSL 3.0中使用椭圆曲线密码术(请参阅下文)。

Internet Explorer 6是唯一仍使用SSL 3.0的浏览器。因此,除非仍然需要支持旧版Internet Explorer 6浏览器,否则应禁用SSL 3.0,如下所述。

2. 禁用 TLS 1.0 和 1.1

除非需要支持旧版浏览器,否则还应禁用TLS 1.0和TLS 1.1。PCI DSS(支付卡行业数据安全标准)指定从2018年6月30日起,将不再使用TLS 1.0。它还强烈建议您禁用TLS 1.1。这些协议可能会受到诸如FREAK,POODLE,BEAST和CRIME之类的漏洞的影响。如果您仍然必须支持TLS 1.0,请禁用TLS 1.0压缩以避免CRIME攻击。

您还应该禁用弱密码,例如DES和RC4。DES可能会在几个小时内损坏,并且发现RC4比以前认为的要弱。过去,建议使用RC4作为减轻BEAST攻击的一种方法。但是,由于对RC4的最新攻击,Microsoft已发布了针对它的公告。PCI DSS还禁止使用RC4批量密码。

如果禁用TLS 1.0和TLS 1.1,则以下用户代理及其旧版本可能会受到影响(不同操作系统上的特定用户代理版本可能会有所不同)。

  • Android 4.3
  • 铬29
  • 火狐26
  • Internet Explorer 10
  • Java 6u45、7u25
  • OpenSSL 0.9.8y
  • Safari 6.0

如何配置 TLS

Nginx的

根据您的业务用例(例如,需要支持旧版浏览器和法规要求),您可能需要使用略有不同的密码套件配置。您可以使用Mozilla SSL配置生成器来使用不同的浏览器配置文件(现代,中级或旧版)获得最佳的TLS配置。或者可以手动生成:https://ssl-config.mozilla.org/#server=nginx&server-version=1.17.0&config=intermediate

  1. 高级
# generated 2019-12-30, https://ssl-config.mozilla.org/#server=nginx&server-version=1.17.0&config=modern
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # modern configuration
    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    # replace with the IP address of your resolver
    resolver 127.0.0.1;
}
  1. 中级
# generated 2019-12-30, https://ssl-config.mozilla.org/#server=nginx&server-version=1.17.0&config=intermediate
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam.pem
    ssl_dhparam /path/to/dhparam.pem;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    # replace with the IP address of your resolver
    resolver 127.0.0.1;
}
  1. 旧版
# generated 2019-12-30, https://ssl-config.mozilla.org/#server=nginx&server-version=1.17.0&config=old
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # openssl dhparam 1024 > /path/to/dhparam.pem
    ssl_dhparam /path/to/dhparam.pem;

    # old configuration
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA;
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    # replace with the IP address of your resolver
    resolver 127.0.0.1;
}

参考文献:https://www.acunetix.com/blog/articles/tls-ssl-cipher-hardening/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容