背景:
openssl全称为secure socket layer,是netscape所研发,利用数据加密(encryption)作技术保障在internet上数据传输的安全。可确保数据在网络上的传输不会被窃听及截取。
当然,openssl是一个强大的密码库,我们在使用ssl协议的时候不一定非得采用openssl,不过目前基本上都是用的openssl,因为它更安全,使用起来也更简单。
在近期互联网安全协议openssl v1.0.1到1.0.1f的密码算法库中发现了一个非常严重bug(cve-2014-0160),该bug允许攻击者读取存在bug的系统的64k处理内存,暴露加密流量的密钥,用户的名字和密码,以及访问的内容。这个漏洞被称之为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或以上版本。
修复建议:
如果有使用openssl 1.0.1到openssl1.0.1f的版本建议升级到openssl1.0.1g或最新的openssl1.0.1h。
使用depenssl_no_heartbeats参数重新编译低版本的openssl以禁用heartbleed模块。
删除openssl组件。
【升级openssl修复heartbleed漏洞】
由于我们现在用的基本上都是rhel 5.8或oel5.8,其openssl的版本为openssl0.9.8e,是不存在该漏洞的,不过有些新上的项目可能会涉及到,当然他们对于修复这个漏洞的方法都是一样。
详细步骤如下:
1、 查看操作系统版本及openssl版本
<a href="http://my.oschina.net/moooofly/blog/354483#">?</a>
1
2
3
4
5
<code>[root@pru1~]</code><code># uname -a</code>
<code>linuxpru1 2.6.18-308.el5</code><code>#1 smp fri jan 27 17:17:51 est 2012 x86_64 x86_64 x86_64gnu/linux</code>
<code> </code>
<code>[root@pru1~]</code><code># openssl version</code>
<code>openssl0.9.8e-fips-rhel5 01 jul 2008</code>
3、 解压缩编译安装
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<code>[root@pru1openssl]</code><code># ls</code>
<code>openssl-1.0.1h.</code><code>tar</code><code>.gz</code>
<code>[root@pru1openssl]</code><code># tar -zxf openssl-1.0.1h.tar.gz</code>
<code>openssl-1.0.1h openssl-1.0.1h.</code><code>tar</code><code>.gz</code>
<code>[root@pru1openssl]</code><code># cd openssl-1.0.1h</code>
<code>[[email protected]]</code><code># ls</code>
<code>acknowledgments config e_os2.h install.djgpp install.w64 makefile.org openssl.doxy readme.asn1 tools</code>
<code>apps configure e_os.h install.macos install.wce makefile.shared openssl.spec readme.engine util</code>
<code>bugs crypto faq install.nw license makevms.com os2 shlib vms</code>
<code>certs demos include install.os2 macos ms perl ssl</code>
<code>changes doc install install.vms makefile netware problems </code><code>test</code>
<code>changes.ssleay engines </code><code>install</code><code>.com install.w32 makefile.bak news readme </code><code>times</code>
<code>[[email protected]]</code><code># ./config shared zlib</code>
<code>operatingsystem: x86_64-whatever-linux2</code>
<code>configuringfor linux-x86_64</code>
<code> </code><code>no-ec_nistp_64_gcc_128 [default] openssl_no_ec_nistp_64_gcc_128 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-gmp [default] openssl_no_gmp (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-jpake [experimental] openssl_no_jpake (skipdir)</code>
<code> </code><code>no-krb5 [krb5-flavor not specified]openssl_no_krb5</code>
<code> </code><code>no-md2 [default] openssl_no_md2 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-rc5 [default] openssl_no_rc5 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-rfc3779 [default] openssl_no_rfc3779 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-sctp [default] openssl_no_sctp (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-store [experimental] openssl_no_store (skipdir)</code>
<code> </code><code>no-zlib-dynamic [default]</code>
<code>ismk1mf=0</code>
<code>cc =</code><code>gcc</code>
<code>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</code>
<code>ex_libs =-ldl -lz</code>
<code>cpuid_obj =x86_64cpuid.o</code>
<code>bn_asm =x86_64-</code><code>gcc</code><code>.o x86_64-mont.ox86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o</code>
<code>des_enc =des_enc.o fcrypt_b.o</code>
<code>aes_enc =aes-x86_64.o vpaes-x86_64.obsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o</code>
<code>bf_enc =bf_enc.o</code>
<code>cast_enc =c_enc.o</code>
<code>rc4_enc =rc4-x86_64.o rc4-md5-x86_64.o</code>
<code>rc5_enc =rc5_enc.o</code>
<code>md5_obj_asm =md5-x86_64.o</code>
<code>sha1_obj_asm =sha1-x86_64.o sha256-x86_64.osha512-x86_64.o</code>
<code>rmd160_obj_asm=</code>
<code>cmll_enc =cmll-x86_64.o cmll_misc.o</code>
<code>modes_obj =ghash-x86_64.o</code>
<code>engines_obj =</code>
<code>processor =</code>
<code>ranlib =</code><code>/usr/bin/ranlib</code>
<code>arflags =</code>
<code>perl =</code><code>/usr/bin/perl</code>
<code>sixty_four_bit_longmode</code>
<code>des_unrollused</code>
<code>des_intused</code>
<code>rc4_chunkis unsigned long</code>
<code>e_os2.h=> include</code><code>/openssl/e_os2</code><code>.h</code>
<code>makinglinks</code><code>in</code> <code>crypto...</code>
<code>make</code><code>[1]:entering directory `</code><code>/root/openssl/openssl-1</code><code>.0.1h</code><code>/crypto</code><code>'</code>
<code>crypto.h=> ..</code><code>/include/openssl/crypto</code><code>.h</code>
<code>opensslv.h=> ..</code><code>/include/openssl/opensslv</code><code>.h</code>
<code>opensslconf.h=> ..</code><code>/include/openssl/opensslconf</code><code>.h</code>
<code>ebcdic.h=> ..</code><code>/include/openssl/ebcdic</code><code>.h</code>
<code>symhacks.h=> ..</code><code>/include/openssl/symhacks</code><code>.h</code>
<code>ossl_typ.h=> ..</code><code>/include/openssl/ossl_typ</code><code>.h</code>
<code>makinglinks</code><code>in</code> <code>crypto</code><code>/objects</code><code>...</code>
<code>………….</code>
<code>configuredfor linux-x86_64.</code>
<code>[[email protected]]</code><code># make</code>
<code>makingall</code><code>in</code> <code>crypto...</code>
<code>(</code><code>echo</code><code>"#ifndef mk1mf_build"</code><code>; \</code>
<code> </code><code>echo</code> <code>' /* auto-generated by crypto/makefile for crypto/cversion.c */'</code><code>; \</code>
<code> </code><code>echo</code> <code>' #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"'</code><code>; \</code>
<code> </code><code>echo</code> <code>' #define platform "linux-x86_64"'</code><code>; \</code>
<code> </code><code>echo</code> <code>" #define date \"`lc_all=c lc_time=cdate`\""</code><code>; \</code>
<code> </code><code>echo</code> <code>'#endif'</code> <code>) >buildinf.h</code>
<code>gcc</code> <code>-i.-i.. -i..</code><code>/include</code> <code>-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</code>
<code>cryptlib.c:in</code><code>function</code> <code>‘openssl_ia32cap_loc’:</code>
<code>cryptlib.c:677:warning: dereferencing</code><code>type</code><code>-punned pointer will</code><code>break</code> <code>strict-aliasing rules</code>
<code>gcc</code> <code>-i.-i.. -i..</code><code>/include</code> <code>-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</code>
<code>gcc</code> <code>-i.-i.. -i..</code><code>/include</code> <code>-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</code>
<code>…………….</code>
<code>[[email protected]]</code><code># make install</code>
<code>…….</code>
4、 将新编译的openssl替换系统老版本的
<code>[[email protected]]</code><code># rm -rf /usr/bin/openssl</code>
<code>[[email protected]]</code><code># rm -rf /usr/include/openssl/</code>
<code>[[email protected]]</code><code># ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl</code>
<code>[[email protected]]</code><code># ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl</code>
5、 配置文件搜索路径
<code>[[email protected]]</code><code># echo "/usr/local/ssl/lib/" >> /etc/ld.so.conf</code>
<code>[[email protected]]</code><code># ldconfig -v |grep openssl</code>
<code> </code><code>libgnutls-openssl.so.13 ->libgnutls-openssl.so.13.0.6</code>
6、 查看安装完成后的最新版本
<code>[[email protected]]</code><code># openssl version</code>
<code>openssl1.0.1h 5 jun 2014</code>
<code>[[email protected]]</code><code># openssl version -a</code>
<code>builton: sun jun 8 09:05:39 cst 2014</code>
<code>platform:linux-x86_64</code>
<code>options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int)idea(int) blowfish(idx)</code>
<code>compiler:</code><code>gcc</code> <code>-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</code>
<code>openssldir:</code><code>"/usr/local/ssl"</code>
<code>[[email protected]]</code><code>#</code>
7、 至此已全部完成openssl的升级工作