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

Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)

漏洞说明

// 基于Nginx的https网站被扫描出SSL/TLS协议信息泄露漏洞(CVE-2016-2183),该漏洞是在安装Nginx时build的Openssl版本问题导致的漏洞,

// 需要重新编译安装Nginx并指定版本的Openssl(可以不升级系统的openssl,编译过程中只要指定新的openssl路径即可)。

加固方法和步骤

检查当前Nginx安装过程使用的openssl版本

[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

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

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就没报错,没报错就不要改下面文件了

# 错误信息

/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

解决方法

# 打开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版本

[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我们都会隐藏版本号

# 在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软件名

# 我们可以隐藏掉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 "


IIS
" CRLF

23 "

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值