天天看點

【轉載】更新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的更新工作