mysql 升级 openssl_升级openssl

升级openssl

依赖openssl的软件,如果是静态编译openssl,那么需要重新编译软件,如果是利用openssl的so动态库,那么只需要替换一下so文件并重启软件即可

openssh也依赖openssl

参考文章

http://www.111cn.net/sys/CentOS/61326.htm

http://bguncle.blog.51cto.com/3184079/1392870/

http://www.cnblogs.com/doomsword/p/3654131.html

http://baike.baidu.com/link?url=-JPAJup4lhmkzO__PjR9IeyHzJ46WjSHYQQSxaQYOxnjc2DVrkzJHRV5M56vhFgiif7Ir_-9spu2mgj8VtMXMq

今天用rkhunter检测了一下服务器,检测结果报:openssl版本太低

# grep  -i OpenSSL /var/log/rkhunter.log

[13:43:50]     Checking for string '/usr/include/openssl'    [ Not found ]

[13:44:11]   Checking version of OpenSSL                     [ Warning ]

[13:44:11] Warning: Application 'openssl', version '1.0.1e', isout of date, and possibly a security risk.

ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl              静态编译用  静态库

ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so  动态编译用   动态库

strings /usr/lib64/libssl.so.10 |grep -i openssl

OpenSSLDie

OPENSSL_cleanse

OPENSSL_DIR_read

OPENSSL_DIR_end

OPENSSL_init_library

OPENSSL_1.0.1OPENSSL_1.0.1_EC

SSLv2 part of OpenSSL1.0.1e-fips 11 Feb 2013SSLv3 part of OpenSSL1.0.1e-fips 11 Feb 2013TLSv1 part of OpenSSL1.0.1e-fips 11 Feb 2013DTLSv1 part of OpenSSL1.0.1e-fips 11 Feb 2013OpenSSL1.0.1e-fips 11 Feb 2013

rpm -ql openssl/usr/bin/openssl/usr/lib64/libcrypto.so.1.0.1e/usr/lib64/libcrypto.so.10

/usr/lib64/libssl.so.1.0.1e/usr/lib64/libssl.so.10

/usr/lib64/openssl

http://baike.baidu.com/link?url=-JPAJup4lhmkzO__PjR9IeyHzJ46WjSHYQQSxaQYOxnjc2DVrkzJHRV5M56vhFgiif7Ir_-9spu2mgj8VtMXMq

Heartbleed漏洞之所以得名,是因为用于.

安全传输层协议(TLS)及

数据包传输层安全协议(DTLS)

的 Heartbeat扩展存在漏洞。

Heartbeat扩展为TLS/DTLS提供了一种新的简便的连接保持方式,但由于OpenSSL 1.0.2-beta与OpenSSL 1.0.1在处理TLS heartbeat扩展时的边界错误,

攻击者可以利用漏洞披露连接的客户端或服务器的存储器内容,导致攻击者不仅可以读取其中机密的加密数据,还能盗走用于加密的密钥

受影响的OpenSSL版本:

最后更新于2014年4月9日,据Heartbleed和OpenSSL网站上的信息。[8]

受影响:

OpenSSL 1.0.2-beta[8]

OpenSSL 1.0.1 - OpenSSL 1.0.1f[8]

除非针对CVE-2014-0160的操作系统补丁已经安装,而没有更改库版本,如Debian、Red Hat Enterprise Linux(及其派生版,如CentOS、Amazon Linux)或Ubuntu(及其派生版,如Linux Mint)。

不受影响:

OpenSSL 1.0.2-beta2(将来版本)[8]

OpenSSL 1.0.1g[8]

OpenSSL 1.0.0(及1.0.0的分支版本)[8]

OpenSSL 0.9.8(及0.9.8的分支版本)[8]

要解决此漏洞,建议服务器管理员或使用1.0.1g版,或使用-DOPENSSL_NO_HEARTBEATS选项重新编译OpenSSL,从而禁用易受攻击的功能,直至可以更新服务器软件。[8] .

单独应用这个补丁并不能修复漏洞。还必须重新启动相关服务和/或重启服务器,这样修补过的OpenSSL才能被应用,然后重新生成所有的私钥和密码。[8]

鉴于openssl 1.0.1的安全漏洞, 现在都升级1.0.1g版本的openssl了, 这里记录下升级流程.0. 先查看当前安装的版本ssh -V 查看ssh版本

openssl version-a 查看openssl版本1. 首先到官网下载新版的源码包

openssh: http://www.openssh.com/portable.html 这里, 官网上找到的下载有两种, 一种是直接下载OpenBSD的(附带openssh, 显然不是我等需要的), 另外一种就是这种portable版的

openssl: http://www.openssl.org/source/

2. 先安装openssl, 一定记得加上--shared选项, 否则openssh编译的时候会找不到新安装的openssl的library, 会报错: openssl的 header和library版本不匹配

./config --prefix=/usr --sharedmake

maketestmake install完毕后查看openssl版本安装是否正确3. 安装openssh

./configure --prefix=/usr --with-pam --with-zlib --with-md5-passwordsmake

make install这种安装会把sshd的配置文件放在/usr/etc/sshd_config

需要重启sshd服务并且重新登录shell, 才能查看openssh是否已经安装新版本, 建议先保留安装openssh的这个shell, 另开一个shell测试, 防止设置错误导致服务器无法连接

相关软件下载地址Apache:http://httpd.apache.org/

Nginx:http://nginx.org/en/download.html

OpenSSL:http://www.openssl.org/

openssl-poc

附件说明PoC.py : 漏洞利用测试PoC脚本

showssl.pl:OpenSSL动态库版本检测脚本

安装OpenSSL步骤

由于运营环境不同,以下过程仅供参考。openssl属于系统应用,被较多应用依赖,由于环境不同等因素,请先在测试环境进行充分测试。

从官方下载最新版本的opensssl库

wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz

解压下载的openssl压缩包

tar -zxvf openssl-1.0.1g.tar.gz

进入解压后的openssl文件夹

cd openssl-1.0.1g

执行文件夹中的config文件,这里openssl的安装目录默认是/usr/local/ssl(由于系统环境差异路径可能不一致,下同),注意添加zlib-dynamic参数,使其编译成动态库

代码如下

复制代码

./config shared zlib-dynamic

config完成后执行 make 命令

make

make 命令执行完后再执行 make install 命令,安装openssl

make install

重命名原来的openssl命令

mv /usr/bin/openssl  /usr/bin/openssl.old

重命名原来的openssl目录

mv /usr/include/openssl  /usr/include/openssl.old

将安装好的openssl 的openssl命令软连到/usr/bin/openssl

ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl

将安装好的openssl 的openssl目录软连到/usr/include/openssl

ln -s /usr/local/ssl/include/openssl  /usr/include/openssl

修改系统自带的openssl库文件,如/usr/local/lib64/libssl.so(根据机器环境而定) 软链到升级后的libssl.so

ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so

执行命令查看openssl依赖库版本是否为1.0.1g:

strings /usr/local/lib64/libssl.so |grep OpenSSL

在/etc/ld.so.conf文件中写入openssl库文件的搜索路径

echo "/usr/local/ssl/lib" >> /etc/ld.so.conf

使修改后的/etc/ld.so.conf生效

ldconfig -v

查看现在openssl的版本是否是升级后的版本

openssl version

更新Webserver的 OpenSSL依赖库

如果webserver在安装编译时加载了openssl,还需对webserver进行重启或者重新编译操作。因webserver安装时分为动态编译和静态编译openssl两种方式,所以具体操作方式也不同。

判断webserver是否为动态编译ssl的两种方法

通过ldd命令查看依赖库

ldd查看程序依赖库,存在libssl.so则为动态编译ssl(如上图),反之为静态(如下图):

查看编译参数

如输入以命令/usr/sbin/nginx -V,查看nginx的编译参数,参数中不存在--with-openssl则为动态编译ssl的,反之为静态:

更新OpenSSL库a) 如果webserver是动态编译ssl安装的,直接重启apache,nginx等相应webserver服务即可。

b) 如果webserver是静态编译ssl安装的,可参照以下方法更新:

apache静态编译ssl的情况:

源码重新安装apache,使用ssl静态编译:

执行apache的configure文件时,除了业务需要的参数外,需要指定ssl为静态编译

代码如下

复制代码

./configure --enable-ssl=static --with-ssl=/usr/local/ssl

(openssl的安装路径)

安装apache

代码如下

复制代码

make && make install

恢复原有apache配置,重启服务即可

nginx静态编译ssl的情况:

源码重新安装nginx,使用ssl静态编译:

执行nginx的configure文件时,除了业务需要的参数外,需要指定ssl为静态编译,编译参数带上--with-openssl便表明为静态编译ssl

代码如下

复制代码

./configure  --with-http_ssl_module --with-openssl=/usr/local/ssl

(openssl的安装路径)

安装nginx

代码如下

复制代码

make && make install

恢复原有nginx配置,重启服务即可

如有其他使用openssl的情况,参照apache和nginx的解决方式。

测试漏洞是否存在

使用附件PoC.py根据脚本提示检测是否存在漏洞。

如:

测试https://192.168.0.1漏洞是否存在执行命令如下

代码如下

复制代码

pythonPoC.py -p 443,8443 192.168.0.1

检测动态库libssl.so版本

检测当前进程使用的libssl.so版本

执行附件showssl.pl检查脚本,无信息输出或无漏洞版本openssl输出,表示升级成功;如输出中有unknown,请业务自查libssl.so.1.0.0的版本是否是受影响的版本。

(详情见附件)

代码如下

复制代码

#!/usr/bin/perl -w

my @listInfo = `lsof |grep libssl|awk '{print $1" "$2" "$NF}'|sort -u`;

foreachmy $info (@listInfo)

{

my ($procName, $procPid, $libPath) = split(/s/, $info);

next if (!defined($procName) || !defined($procPid)|| !defined($libPath));

my $version = `strings $libPath|grep -E "^OpenSSL [0-9]+.[0-9]+"`;

chomp $version;

if ($version =~ /s*OpenSSLs*1.0.1[a-f]{0,2}/)

{

print "$procName($procPid) : $libPath ($version).n";

}

}

检测系统使用的libssl.so版本

执行命令:

代码如下

复制代码

strings /usr/local/lib64/libssl.so |grep OpenSSL

查看openssl依赖库版本是否为1.0.1g

注:/usr/local/lib64/libssl.so 路径仅供参考,由具体机器环境决定,参考升级步骤

你可能感兴趣的:(mysql,升级,openssl)