升级OpenSSL修复高危漏洞Heartbleed
背景:
OpenSSL全称为Secure Socket Layer。是Netscape所研发。利用数据加密(Encryption)作技术保障在Internet上传输数据的安全。可确保数据在网络上的传输不会被窃听及截取。
当然,OpenSSL是一个强大的password库,我们在使用SSL协议的时候不一定非得採用OpenSSL,只是眼下基本上都是用的OpenSSL,由于它更安全。使用起来也更简单。
在最近互联网安全协议OpenSSL v1.0.1到1.0.1f的password算法库中发现了一个很严重bug(CVE-2014-0160),该bug同意攻击者读取存在bug的系统的64k处理内存,暴露加密流量的密钥,用户的名字和password,以及訪问的内容。这个漏洞被称之为heartbleed,心脏流血。
据solidot 在April 7报道,OpenSSL已经公布了1.0.1g修复bug,Debian发行版也在半小时修复bug。Fedora公布了一个权宜的修正方案。该bug在2011年引入OpenSSL中。使用OpenSSL 0.9.8的发现版本号不受影响。但Debian Wheezy、Ubuntu 12.04.4、CentOS 6.5、Fedora 18、SUSE 12.2、OpenBSD 5.4、FreeBSD 8.4和NetBSD 5.0.2之后的版本号都收到影响。假设你的同意的系统有如上集中,建议将补丁修复到1.0.1g或以上版本号。
修复建议:
1、 假设有使用OpenSSL 1.0.1到OpenSSL1.0.1f的版本号建议升级到OpenSSL1.0.1g或最新的OpenSSL1.0.1h。
2、 使用DEPENSSL_NO_HEARTBEATS參数又一次编译低版本号的OpenSSL以禁用Heartbleed模块。
3、 删除OpenSSL组件。
升级OpenSSL修复Heartbleed漏洞
因为我们如今用的基本上都是RHEL 5.8或OEL5.8,其OpenSSL的版本号为OpenSSL0.9.8e,是不存在该漏洞的,只是有些新上的项目可能会涉及到,当然他们对于修复这个漏洞的方法都是一样。
具体过程例如以下:
1、 查看操作系统版本号及OpenSSL版本号
[root@pru1~]# uname -a Linuxpru1 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64GNU/Linux [root@pru1~]# openssl version OpenSSL0.9.8e-fips-rhel5 01 Jul 2008
3、 解压缩编译安装
[root@pru1openssl]# ls openssl-1.0.1h.tar.gz [root@pru1openssl]# tar -zxf openssl-1.0.1h.tar.gz [root@pru1openssl]# ls openssl-1.0.1h openssl-1.0.1h.tar.gz [root@pru1openssl]# cd openssl-1.0.1h [root@pru1openssl-1.0.1h]# ls ACKNOWLEDGMENTS config e_os2.h INSTALL.DJGPP INSTALL.W64 Makefile.org openssl.doxy README.ASN1 tools apps Configure e_os.h INSTALL.MacOS INSTALL.WCE Makefile.shared openssl.spec README.ENGINE util bugs crypto FAQ INSTALL.NW LICENSE makevms.com os2 shlib VMS certs demos include INSTALL.OS2 MacOS ms perl ssl CHANGES doc INSTALL INSTALL.VMS Makefile Netware PROBLEMS test CHANGES.SSLeay engines install.com INSTALL.W32 Makefile.bak NEWS README times [root@pru1openssl-1.0.1h]# ./config shared zlib Operatingsystem: x86_64-whatever-linux2 Configuringfor linux-x86_64 Configuringfor linux-x86_64 no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir) no-gmp [default] OPENSSL_NO_GMP (skip dir) no-jpake [experimental] OPENSSL_NO_JPAKE (skipdir) no-krb5 [krb5-flavor not specified]OPENSSL_NO_KRB5 no-md2 [default] OPENSSL_NO_MD2 (skip dir) no-rc5 [default] OPENSSL_NO_RC5 (skip dir) no-rfc3779 [default] OPENSSL_NO_RFC3779 (skip dir) no-sctp [default] OPENSSL_NO_SCTP (skip dir) no-store [experimental] OPENSSL_NO_STORE (skipdir) no-zlib-dynamic [default] IsMK1MF=0 CC =gcc CFLAG =-fPIC -DOPENSSL_PIC -DZLIB-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT-DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM-DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM-DGHASH_ASM EX_LIBS =-ldl -lz CPUID_OBJ =x86_64cpuid.o BN_ASM =x86_64-gcc.o x86_64-mont.ox86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o DES_ENC =des_enc.o fcrypt_b.o AES_ENC =aes-x86_64.o vpaes-x86_64.obsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o BF_ENC =bf_enc.o CAST_ENC =c_enc.o RC4_ENC =rc4-x86_64.o rc4-md5-x86_64.o RC5_ENC =rc5_enc.o MD5_OBJ_ASM =md5-x86_64.o SHA1_OBJ_ASM =sha1-x86_64.o sha256-x86_64.osha512-x86_64.o RMD160_OBJ_ASM= CMLL_ENC =cmll-x86_64.o cmll_misc.o MODES_OBJ =ghash-x86_64.o ENGINES_OBJ = PROCESSOR = RANLIB =/usr/bin/ranlib ARFLAGS = PERL =/usr/bin/perl SIXTY_FOUR_BIT_LONGmode DES_UNROLLused DES_INTused RC4_CHUNKis unsigned long e_os2.h=> include/openssl/e_os2.h makinglinks in crypto... make[1]:Entering directory `/root/openssl/openssl-1.0.1h/crypto' crypto.h=> ../include/openssl/crypto.h opensslv.h=> ../include/openssl/opensslv.h opensslconf.h=> ../include/openssl/opensslconf.h ebcdic.h=> ../include/openssl/ebcdic.h symhacks.h=> ../include/openssl/symhacks.h ossl_typ.h=> ../include/openssl/ossl_typ.h makinglinks in crypto/objects... …………. Configuredfor linux-x86_64. [root@pru1openssl-1.0.1h]# make makingall in crypto... make[1]:Entering directory `/root/openssl/openssl-1.0.1h/crypto' ( echo"#ifndef MK1MF_BUILD"; echo ' /* auto-generated by crypto/Makefile for crypto/cversion.c */'; echo ' #define CFLAGS "gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN-DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT-DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM-DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM-DGHASH_ASM"'; echo ' #define PLATFORM "linux-x86_64"'; echo " #define DATE "`LC_ALL=C LC_TIME=Cdate`""; echo '#endif' ) >buildinf.h gcc -I.-I.. -I../include -fPIC -DOPENSSL_PIC-DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H-Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2-DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM-DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM-DWHIRLPOOL_ASM -DGHASH_ASM -c -ocryptlib.o cryptlib.c cryptlib.c:In function ‘OPENSSL_ia32cap_loc’: cryptlib.c:677:warning: dereferencing type-punned pointer will break strict-aliasing rules gcc -I.-I.. -I../include -fPIC -DOPENSSL_PIC-DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H-Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2-DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM-DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM-DWHIRLPOOL_ASM -DGHASH_ASM -c -o mem.omem.c gcc -I.-I.. -I../include -fPIC -DOPENSSL_PIC-DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H-Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2-DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM-DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM-DWHIRLPOOL_ASM -DGHASH_ASM -c -omem_dbg.o mem_dbg.c ……………. [root@pru1openssl-1.0.1h]# make install …….
4、 将新编译的openssl替换系统老版本号的
[root@pru1openssl-1.0.1h]# rm -rf /usr/bin/openssl [root@pru1openssl-1.0.1h]# rm -rf /usr/include/openssl/ [root@pru1openssl-1.0.1h]# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl [root@pru1openssl-1.0.1h]# ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl
5、 配置文件搜索路径
[root@pru1openssl-1.0.1h]# echo "/usr/local/ssl/lib/" >> /etc/ld.so.conf [root@pru1openssl-1.0.1h]# ldconfig -v |grep openssl libgnutls-openssl.so.13 ->libgnutls-openssl.so.13.0.6 libgnutls-openssl.so.13 ->libgnutls-openssl.so.13.0.6
6、 查看安装完毕后的最新版本号
[root@pru1openssl-1.0.1h]# openssl version OpenSSL1.0.1h 5 Jun 2014 [root@pru1openssl-1.0.1h]# openssl version -a OpenSSL1.0.1h 5 Jun 2014 builton: Sun Jun 8 09:05:39 CST 2014 platform:linux-x86_64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int)idea(int) blowfish(idx) compiler:gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN-DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall-DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5-DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM-DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM OPENSSLDIR:"/usr/local/ssl" [root@pru1openssl-1.0.1h]#
7、 至此已所有完毕OpenSSL的升级工作