Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)和HTTP服务器的缺省banner漏洞

Nginx升级加固SSL/TLS协议信息@R_502_332@(CVE-2016-2183)

漏洞说明
@H_502_4@// 基于Nginx的https网站被扫描出SSL/TLS协议信息@R_502_332@(CVE-2016-2183),该漏洞是在安装Nginx时build的Openssl版本问题导致的漏洞, // 需要重新编译安装Nginx并指定版本的Openssl(可以不升级系统的openssl,编译过程中只要指定新的openssl路径即可)。

加固方法和步骤

检查当前Nginx安装过程使用的openssl版本
@H_502_4@[root@server ~]# Nginx -V Nginx version: Nginx/1.16.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled
下载新版本Openssl
@H_502_4@cd /tmp wget https://www.openssl.org/source/openssl-1.1.0k.tar.gz tar zxvf openssl-1.1.0k.tar.gz -C /usr/local
下载安装源码Nginx
@H_502_4@yum install -y gcc gcc-c++ openssl-devel pcre-devel make zlib-devel wget wget http://Nginx.org/download/Nginx-1.14.2.tar.gz cd /root/Nginx-1.14.2 ./configure --prefix=/usr/local/Nginx1.14 --with-http_ssl_module --with-http_stub_status_module --with-openssl=/usr/local/openssl-1.1.0k make && make install

我之前make时如果将openssl放到root目录可能会编译报错,/usr/local就没报错,没报错就不要改下面文件

@H_502_4@# 错误信息 /bin/sh: line 2: ./config: No such file or directory make[1]: *** [/usr/local/ssl/.openssl/include/openssl/ssl.h] Error 127 make[1]: Leaving directory `/usr/local/src/Nginx-1.9.9' make: *** [build] Error 2

解决方法

@H_502_4@# 打开Nginx文件下的/usr/local/src/Nginx-1.9.9/auto/lib/openssl/conf文件: vi /root/Nginx-1.14.2/auto/lib/openssl/conf # 找到以下代码,差不多三四十行 CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a" CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a" CORE_LIBS="$CORE_LIBS $NGX_LIBDL" # 修改成以下代码 CORE_INCS="$CORE_INCS $OPENSSL/include" CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h" CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a" CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a" CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
验证Nginx使用Openssl版本
@H_502_4@[root@JD sbin]# ./Nginx -V Nginx version: Nginx/1.14.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.1.0k 28 May 2019 TLS SNI support enabled configure arguments: --prefix=/usr/local/Nginx1.14 --with-http_ssl_module --with-http_stub_status_module --with-openssl=/usr/local/openssl-1.1.0k

HTTP服务器的缺省banner

能让攻击者了解远程系统类型和远端HTTP Server信息以便进行下一步的攻击

Nginx

一般Nginx我们都会隐藏版本号

@H_502_4@# 在http{}里面加上 http { include mime.types; default_type application/octet-stream; server_tokens off; # 隐藏PHP版本只需要在PHP.ini配置文件修改expose_PHP = On改为expose_PHP=Off # 但是我们访问时候还是能看到关键信息,让人窃取到你使用的是Nginx [root@JD Nginx-1.14.2]# curl localhost -I HTTP/1.1 200 OK Server: Nginx Date: Wed,09 Sep 2020 13:36:34 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Wed,09 Sep 2020 13:08:03 GMT Connection: keep-alive ETag: "5f58d3b3-264" Accept-Ranges: bytes

由于Nignx没有提供相关配置项改变缺省banner,所以我们需要修改源码,隐藏Nginx软件名

@H_502_4@# 我们可以隐藏掉server信息也可以制造假的server迷惑攻击者 # 修改第一个配置文件Nginx.h ls /usr/local/src/Nginx-1.12.2/ auto CHANGES.ru configure html Makefile objs src CHANGES conf contrib LICENSE man README # 我们找到当初make之前的那个源码包 cd /usr/local/src/Nginx-1.12.2/src/ vim core/Nginx.h # 修改下面三行 #define Nginx_version 1012002 #define Nginx_VERSION "7.0" #define Nginx_VER "IIS/" Nginx_VERSION #ifdef NGX_BUILD #define Nginx_VER_BUILD Nginx_VER " (" NGX_BUILD ")" #else #define Nginx_VER_BUILD Nginx_VER #endif #define Nginx_VAR "IIS" # OR #define Nginx_version 1014002 #define Nginx_VERSION "" #define Nginx_VER "UNKNOW/" Nginx_VERSION #ifdef NGX_BUILD #define Nginx_VER_BUILD Nginx_VER " (" NGX_BUILD ")" #else #define Nginx_VER_BUILD Nginx_VER #endif #define Nginx_VAR "Nginx" #define NGX_OLDPID_EXT ".oldbin" #endif /* _Nginx_H_INCLUDED_ */ # 修改第二个配置文件为ngx_http_header_filter_module.c,49行 grep IIS http/ngx_http_header_filter_module.c static u_char ngx_http_server_string[] = "Server:IIS" CRLF; # OR static u_char ngx_http_server_string[] = "" CRLF; static u_char ngx_http_server_full_string[] = "" Nginx_VER CRLF; static u_char ngx_http_server_build_string[] = "" Nginx_VER_BUILD CRLF; # 修改第三个配置文件为ngx_http_special_response.c,对外页面报错时,他会控制是否展示敏感信息,修改如下列 21 static u_char ngx_http_error_full_tail[] = 22 "<hr><center>IIS</center>" CRLF 23 "</body>" CRLF 24 "</html>" CRLF 25 ; 26 27 28 static u_char ngx_http_error_build_tail[] = 29 "<hr><center>IIS</center>" CRLF 30 "</body>" CRLF 31 "</html>" CRLF 32 ; # OR static u_char ngx_http_error_full_tail[] = "<hr><center>" Nginx_VER "</center>" CRLF "</body>" CRLF "</html>" CRLF ; static u_char ngx_http_error_build_tail[] = "<hr><center>" Nginx_VER_BUILD "</center>" CRLF "</body>" CRLF "</html>" CRLF ; # Nginx -V 查看原来编译的参数,从新编译并且make && make install 才会生效,如果源码修改错误会编译不过去.如果编译前服务是启动的哪怕编译成功也是不生效的,需要重启服务. # 编译,重启请看上面,接下来我们访问看下效果 [root@JD Nginx1.14]# curl localhost -I HTTP/1.1 200 OK [root@JD Nginx1.14]#

还有一种办法比较另类,我没试过

@H_502_4@ sub_filter '<hr><center>Nginx</center>' '<hr><center>ws</center>';
Tomcat

1)我们可以编辑Tomcat(安装目录)/conf/server.xml 文件 ,找到我们应用程序端口对应的元素,新增 server="自定义" 属性,覆盖掉原来的server属性

2) 重启服务即可

CVE-2019-9511,CVE-2019-9513,CVE-2019-9516

CVE-2019-9511

Nginx 1.9.51 至 16.0版本及1.17.2.版本中的HTTP/2实现中存在拒绝服务漏洞,攻击者以多个数据流请求特定资源上的大量数据,通过操纵窗口大小和流优先级,强迫服务器将数据排列在1字节的块中,导致cpu及内存资源耗尽,造成拒绝服务。

CVE-2019-9513

Nginx 1.9.51 至 16.0版本及1.17.2.版本中的HTTP/2实现中存在拒绝服务漏洞,攻击者以多个数据流请求特定资源上的大量数据,通过操纵窗口大小和流优先级,强迫服务器将数据排列在1字节的块中,导致cpu及内存资源耗尽,造成拒绝服务。

CVE-2019-9516

Nginx 1.9.51 至 16.0版本及1.17.2.版本中的HTTP/2实现中存在拒绝服务漏洞,攻击者以多个数据流请求特定资源上的大量数据,通过操纵窗口大小和流优先级,强迫服务器将数据排列在1字节的块中,导致cpu及内存资源耗尽,造成拒绝服务。

修复

Nginx 于近日同时为稳定版和主线版两个分支发布了更新,分别是 nginx-1.16.1nginx-1.17.3。主要修复了在 HTTP/2 中的安全漏洞 ()。

Nginx 1.17.3

安全:当使用 HTTP/2 时,客户端可能会导致过多的内存消耗和 cpu 使用 (CVE-2019-9511,CVE-2019-9516)

Bugfix:使用 gzipping 时 "zero size buf" 警告可能会出现在日志中(此 bug 在 1.17.2 中出现)

Bugfix:如果在 SMTP 中使用了 "resolver 指令,worker 进程可能会出现段错误

Nginx 1.16.1

安全:当使用 HTTP/2 时,客户端可能会导致过多的内存消耗和 cpu 使用 (CVE-2019-9511,CVE-2019-9516)

相关文章

一、Linux下Nginx的安装 1.去官网&#160;http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...