我一直在尝试演示 CRIME 攻击,这需要启用 SSL 压缩的浏览器和服务器。我购买了这样的浏览器,并在 localhost 上设置了一个 nginx HTTPS 服务器,并设置了我认为可以启用压缩的选项 (DEFLATE)。
这是我的nginx.conf
:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# victim's bank server - HTTPS
server {
listen 443 ssl;
#listen 81; # used to observe GET requests
server_name www.thebank.com thebank.com;
ssl_certificate path/to/bank.crt;
ssl_certificate_key path/to/bank.key;
ssl_protocols SSLv2 SSLv3 TLSv1; #TLSv1.1 TLSv1.2;
gzip on;
#gzip_types *;
#gzip_min_length 0;
#gzip_comp_level 9;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root path/to/bank;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# evil server
server {
listen 80;
server_name evil.com www.evil.com;
location / {
root path/to/evil;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# ...
include servers/*;
}
(免责声明:我从未使用过 nginx,因此如果这违反了某些惯例,我深表歉意,我基本上只是复制了提供的 conf 文件并根据需要对其进行了修改。这就是为什么有很多额外的评论。)
很难找到有关启用不安全功能的信息,但我认为该gzip on;
线路启用了 SSL 压缩。然而,当我使用 Wireshark 监听环回流量时,我看到 DEFLATE 在客户端 hello 中被列为压缩方法,但仅null
在服务器 hello 的压缩方法中。
我一直在使用旧版本的 nginx (1.1.6) 和 OpenSSL (0.9.8zb),希望这个能起作用。还试过 nginx 1.0.6,但还是不行。
有人能帮帮我吗?我觉得我已经尝试了一切。
编辑:即使使用 OpenSSL 0.9.7 和 nginx 1.0.6,Server Hello 仍然不显示压缩方法。
编辑:应@Steffen Ullrich 的要求,为了提供有关 OpenSSL 和 nginx 编译的更多详细信息,以下是我最新尝试的输出:
# install OpenSSL from source in /path/to/Downloads
wget https://www.openssl.org/source/old/0.9.x/openssl-0.9.8zb.tar.gz
tar xvf openssl-0.9.8zb.tar.gz
cd openssl-0.9.8zb
./config zlib
make
sudo make install
# check for zlib support
openssl version -a
# OpenSSL 0.9.8zb 6 Aug 2014
# built on: Fri Sep 27 01:59:42 EDT 2019
# platform: linux-x86_64
# options: bn(64,64) md2(int) rc4(1x,char) des(idx,cisc,16,int) idea(int) blowfish(idx)
# compiler: gcc -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
# OPENSSLDIR: "/usr/local/ssl"
# install nginx 1.0.6 from source with custom OpenSSL source
wget http://nginx.org/download/nginx-1.0.6.tar.gz
tar xvfz nginx-1.0.6.tar.gz
cd nginx-1.0.6
./configure --with-http_ssl_module --without-http_rewrite_module --with-openssl=/path/to/Downloads/openssl-0.9.8zb
sudo make
sudo make install
# check for zlib support
openssl version -a
# OpenSSL 0.9.8zb 6 Aug 2014
# built on: Fri Sep 27 02:57:12 EDT 2019
# platform: linux-x86_64
# options: bn(64,64) md2(int) rc4(1x,char) des(idx,cisc,16,int) idea(int) blowfish(idx)
# compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
# OPENSSLDIR: "/path/to/Downloads/openssl-0.9.8zb/.openssl/ssl"
答案1
根据此信息你需要一个旧的 nginx 和旧的 OpenSSL - 比你使用的要旧得多:
CRIME 攻击使用 SSL 压缩来发挥其魔力。默认情况下,nginx 1.1.6+/1.0.9+(如果使用 OpenSSL 1.0.0+)和 nginx 1.3.2+/1.2.2+(如果使用旧版本的 OpenSSL)中 SSL 压缩处于关闭状态。
因此,使用 nginx 1.1.5 或 nginx 1.0.8 应该可以工作,但前提是您还使用 OpenSSL 0.9.8。较新版本的 OpenSSL 默认禁用 TLS 压缩。请注意,此旧版本的 OpenSSL 不支持 TLS 1.1 或 TLS 1.2。