天天看点

【转载】升级OpenSSL修复高危漏洞Heartbleed

背景: 

      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=&gt; 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=&gt; ..</code><code>/include/openssl/crypto</code><code>.h</code>

<code>opensslv.h=&gt; ..</code><code>/include/openssl/opensslv</code><code>.h</code>

<code>opensslconf.h=&gt; ..</code><code>/include/openssl/opensslconf</code><code>.h</code>

<code>ebcdic.h=&gt; ..</code><code>/include/openssl/ebcdic</code><code>.h</code>

<code>symhacks.h=&gt; ..</code><code>/include/openssl/symhacks</code><code>.h</code>

<code>ossl_typ.h=&gt; ..</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>) &gt;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/" &gt;&gt; /etc/ld.so.conf</code>

<code>[[email protected]]</code><code># ldconfig -v |grep openssl</code>

<code>        </code><code>libgnutls-openssl.so.13 -&gt;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的升级工作