Heartbleed: วิธีการตรวจสอบเวอร์ชั่น OpenSSL อย่างเชื่อถือได้และพกพาได้อย่างไร


88

ฉันกำลังมองหาวิธีที่เชื่อถือได้และพกพาเพื่อตรวจสอบเวอร์ชัน OpenSSL บน GNU / Linux และระบบอื่น ๆ เพื่อให้ผู้ใช้สามารถค้นพบว่าพวกเขาควรอัปเกรด SSL ของพวกเขาหรือไม่เพราะ Heartbleed bug

ฉันคิดว่ามันจะง่าย แต่ฉันพบปัญหาอย่างรวดเร็วบน Ubuntu 12.04 LTS ด้วย OpenSSL 1.0.1g ล่าสุด:

openssl เวอร์ชัน -a

ฉันคาดหวังว่าจะเห็นเวอร์ชันเต็ม แต่ฉันได้รับสิ่งนี้:

OpenSSL 1.0.1 14 มีนาคม 2012
สร้างเมื่อ: อ. มิ.ย. 4 07:26:06 UTC 2013
แพลตฟอร์ม: [... ]

สำหรับความประหลาดใจอันไม่พึงประสงค์ของฉันจดหมายฉบับไม่แสดง ไม่ f ไม่มี g เพียงแค่ "1.0.1" และนั่นคือ วันที่ที่ระบุไว้ไม่ช่วยในการค้นหาเวอร์ชันที่มีช่องโหว่

ความแตกต่างระหว่าง 1.0.1 (af) และ 1.0.1g นั้นสำคัญมาก

คำถาม:

  • เป็นวิธีที่เชื่อถือได้ในการตรวจสอบรุ่นโดยเฉพาะข้าม distro อะไร
  • ทำไมตัวอักษรเวอร์ชั่นไม่แสดงตั้งแต่แรก? ฉันไม่สามารถทดสอบสิ่งนี้ได้นอกจาก Ubuntu 12.04 LTS

คนอื่น ๆ กำลังรายงานพฤติกรรมนี้เช่นกัน ตัวอย่างบางส่วน:

คำแนะนำ (เฉพาะ distro) บางคำแนะนำใน:

  • Ubuntu และ Debian: และapt-cache policy openssl apt-cache policy libssl1.0.0เปรียบเทียบหมายเลขรุ่นกับแพ็คเกจที่นี่: http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20: yum info openssl(ขอบคุณ @znmeb บนทวิตเตอร์) และyum info openssl-libs

ตรวจสอบว่า OpenSSL เวอร์ชั่นเก่ากว่านั้นยังคงใช้งานได้หรือไม่:

ปรากฎว่าการอัพเดทแพ็คเกจ OpenSSL บน Ubuntu และ Debian นั้นไม่เพียงพอเสมอไป คุณควรอัพเดตแพ็คเกจ libssl1.0.0 และ - จากนั้นตรวจสอบว่ามีการopenssl version -aระบุไว้built on: Mon Apr 7 20:33:29 UTC 2014หรือไม่


2
อย่างน้อยต้องแน่ใจว่าเวอร์ชั่น OpenSSL ที่คุณไม่มีนั้นเป็นเพราะวันที่ที่แสดง
Pato Sáinz

3
สิ่งนี้ใช้ได้กับ CentOS[root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013
Jacob

1
@ PatoSáinzฉันได้ตรวจสอบapt-cache policy opensslแล้วและตอบกลับด้วย: Installed: 1.0.1-4ubuntu5.12ซึ่งเป็น Ubuntu เวอร์ชั่น 1.0.1 ที่เพิ่งออกวางจำหน่ายในราคา 12.04 LTS ฉันออกจากระบบและกลับเข้ามามีอะไรอีกบ้างที่ฉันสามารถทำได้เพื่อตรวจสอบ?
Martijn

1
ฉันจะชี้ให้เห็นสำหรับสิ่งที่ไม่ทราบในกรณีที่เป็นประโยชน์ ... Ubuntu 12.04 LTS มาพร้อมกับ OpenSSL 1.0.1 (วานิลลา)
HopelessN00b

1
ถ้าว่าวันที่สร้างความถูกต้องคุณไม่สามารถมี "ปล่อย versioned" รหัสผ่านมามากกว่า 1.0.1e ตั้งแต่ 1.0.1f ออกมาในปี 2014 ต่อOpenSSL 1.0.1 บันทึกประจำรุ่น แต่ละบรรทัดหรือส่วนอาจถูก backported ไปยังรุ่น Ubuntu ของคุณก่อนที่จะมีการเปิดตัวอย่างเป็นทางการของ OpenSSL 1.0.1f และวันที่สร้างอาจมีประโยชน์น้อยกว่าอย่างสมบูรณ์
ต่อต้านรหัสผ่านอ่อนแอ

คำตอบ:


66

ตามวันที่ที่แสดงโดย OpenSSL เวอร์ชันของคุณดูเหมือนว่าคุณกำลังเห็นเวอร์ชันเต็มปรากฏอยู่ที่นั่น

เปิด SSL 1.0.1 ได้รับการปล่อยตัวเมื่อวันที่ 14 มีนาคม 2012 1.0.1a เปิดตัวเมื่อวันที่ 19 เมษายน 2012

ดังนั้นฉันจะไปข้างหน้าและยืนยันว่าopenssl version -aเป็นวิธีที่เหมาะสมข้ามทางแยกเพื่อแสดงเวอร์ชันเต็มของ OpenSSL ที่ติดตั้งบนระบบ ดูเหมือนว่าการทำงานสำหรับทุก distros Linux ฉันมีการเข้าถึงและเป็นวิธีการที่แนะนำในเอกสาร help.ubuntu.com OpenSSL เช่นเดียว Ubuntu LTS 12.04 มาพร้อมกับ vanilla OpenSSL v1.0.1 ซึ่งเป็นเวอร์ชั่นที่ดูเหมือนว่าเป็นรุ่นย่อเนื่องจากไม่ได้มีจดหมายตามมา

ต้องบอกว่ามันปรากฏว่ามีข้อผิดพลาดที่สำคัญใน Ubuntu (หรือวิธีที่พวกเขาทำแพ็กเกจ OpenSSL) ซึ่งopenssl version -aยังคงส่งคืนเวอร์ชัน 1.0.1 เดิมตั้งแต่วันที่ 14 มีนาคม 2012 โดยไม่คำนึงว่า OpenSSL ได้รับการอัปเกรดเป็นใด ๆ ของรุ่นที่ใหม่กว่า และเช่นเดียวกับสิ่งส่วนใหญ่เมื่อฝนตกก็เท

อูบุนตูไม่ได้เป็นเพียงผู้จำหน่ายปลีกย่อยรายใหญ่ที่มีนิสัยในการปรับปรุง backporting ให้กับ OpenSSL (หรือแพ็คเกจอื่น ๆ ) ให้คะแนนมากกว่าการใช้อัปเดตอัปสตรีมและการกำหนดหมายเลขเวอร์ชันที่ทุกคนจำได้ ในกรณีของ OpenSSL ซึ่งหมายเลขรุ่นตัวอักษรเป็นเพียงการแก้ไขข้อผิดพลาดและการปรับปรุงความปลอดภัยดูเหมือนว่าเกือบจะเข้าใจไม่ได้ แต่ฉันได้รับแจ้งว่านี่อาจเป็นเพราะปลั๊กอิน Linux ที่ตรวจสอบความถูกต้องหลักของFIPS distros Linux จัดส่งพร้อมกับ OpenSSL เนื่องจากข้อกำหนดเกี่ยวกับการตรวจสอบความถูกต้องที่ทริกเกอร์เนื่องจากการเปลี่ยนแปลงใด ๆ แม้แต่การเปลี่ยนแปลงที่ทำให้เกิดช่องโหว่ด้านความปลอดภัย

ตัวอย่างเช่นบน Debian เวอร์ชันที่แก้ไขจะแสดงหมายเลขเวอร์ชัน1.0.1e-2+deb7u5แทนเวอร์ชันอัปสตรี1.0.1g

ดังนั้นในเวลานี้จึงไม่มีวิธีพกพาที่เชื่อถือได้ในการตรวจสอบเวอร์ชั่น SSL ในการกระจาย Linuxเนื่องจากพวกเขาทั้งหมดใช้แพตช์และการปรับปรุง backported ของตัวเองด้วยโครงร่างการกำหนดหมายเลขเวอร์ชันที่แตกต่าง คุณจะต้องค้นหาหมายเลขเวอร์ชันคงที่สำหรับการกระจาย Linux แต่ละครั้งที่คุณใช้งานและตรวจสอบเวอร์ชัน OpenSSL ที่ติดตั้งจากการกำหนดหมายเลขรุ่นเฉพาะของการแจกจ่ายนั้นเพื่อตรวจสอบว่าเซิร์ฟเวอร์ของคุณใช้รุ่นที่มีช่องโหว่หรือไม่


3
การติดตั้งของฉันเป็น Ubuntu 12.04 LTS ที่เรียบง่ายไม่มีสิ่งใดที่ฉันได้รวบรวมตัวเองหรือดาวน์โหลดจากแหล่งอื่นนอกเหนือจากที่เก็บ Ubuntu ถ้า Ubuntu แจกจ่าย OpenSSL ด้วยหมายเลขเวอร์ชันย่อแสดงว่าopenssl version -aไม่ใช่วิธีการพกพา (อย่างน้อยไม่พกพาไปที่ Ubuntu) ฉันได้ตรวจสอบapt-cache policy opensslแล้วและมันตอบสนองด้วย: Installed: 1.0.1-4ubuntu5.12ซึ่งเป็น 1.0.1g เพิ่งเปิดตัวโดย Ubuntu ราคา 12.04 LTS ฉันออกจากระบบและกลับเข้ามาใหม่ก่อนที่จะตรวจสอบ
Martijn

19
HopelessN00b ไม่มีอะไรที่น่าสงสัยเกี่ยวกับนโยบายของการแก้ไข backporting แทนการชนรุ่น มันเป็นวิธีที่ดีมากในการรับรองความเสถียรของแพลตฟอร์มซึ่งเป็นที่ต้องการอย่างมากในสภาพแวดล้อมเซิร์ฟเวอร์ เช่นเดียวกับการตัดสินใจใด ๆ มันมีผลตามมาซึ่งผู้ใช้จะต้องระวัง แต่เพียงเพราะมันทำให้ " ฉันทำงาน foo xyz ดังนั้นฉัน / ฉันจะไม่เสี่ยงต่อการใช้เหตุผลล่าสุด " ในการให้เหตุผลนั่นไม่ได้ทำให้มันแย่
MadHatter

10
@towo มีหมายเลขเวอร์ชันด้วยเหตุผล หากเราเพียงแค่โยนหมายเลขเวอร์ชันต้นน้ำออกไปนอกหน้าต่างเพราะ "enterprisey" หรืออะไรก็ตามทำไมต้องกังวลกับหมายเลขเวอร์ชันเลยล่ะ? อาจเริ่มตั้งชื่อสิ่งของของเราด้วยการเขียนเรียงความ เราสามารถเรียกรุ่น OpenSSL ที่มีช่องโหว่ได้Holy Heartbleedและกลุ่มCunning Coagulant ที่แน่นอน
HopelessN00b

7
@ HopelessN00b ฉันคิดว่าคุณติดกับดัก "นี่ได้รับการแก้ไขในรุ่น XYZ" พวกเขาไม่ปฏิบัติตามหมายเลขรุ่นเพราะสิ่งที่นำเข้ามาในเวอร์ชั่นล่าสุดนั้นเป็นข้อผิดพลาดและการแก้ไขความปลอดภัย หากพวกเขาชนหมายเลขเวอร์ชันคุณอาจคาดหวังว่าฟังก์ชันการทำงานเพิ่มเติม .. "ฉันมี OpenSSL v XYZ ทำไมฉันไม่มี ECDHA ???? ..etc" มันสมเหตุสมผลเมื่อคุณเข้าใจว่ามันเป็นเพียงการแก้ไขข้อบกพร่อง
NickW

13
@NickW @Jubal @MadHatter สิ่งที่มี OpenSSL คือว่า: After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features.ดังนั้นไม่มีอะไรได้รับการละทิ้งรูปแบบการกำหนดเวอร์ชันต้นน้ำ; backporting การปรับปรุงเป็นหลักเช่นเดียวกับการใช้รุ่นที่ปรับปรุงเนื่องจากการปรับปรุงมีเพียงการรักษาความปลอดภัยและการแก้ไขข้อผิดพลาดอยู่แล้ว สิ่งที่จะทำคือทำให้เกิดความสับสนและทำให้เราไม่มีทางที่จะตรวจสอบเวอร์ชั่น OpenSSL ข้าม Linux distros ได้
HopelessN00b

18

หากคุณต้องการบางสิ่งบางอย่างข้ามแพลตฟอร์มอย่างแท้จริงตรวจสอบช่องโหว่ของตัวเองแทนที่จะพึ่งพาหมายเลขรุ่น

คุณอาจจะมีรหัสที่รายงานหมายเลขรุ่นที่เป็นที่รู้จักกันความเสี่ยงแต่รหัสจริงคือไม่เสี่ยง และสิ่งที่ตรงกันข้าม - โค้ดที่มีความเสี่ยงอย่างเงียบ ๆ - อาจเลวร้ายยิ่งกว่าเดิม!

ผู้ค้าหลายรายที่รวมผลิตภัณฑ์โอเพ่นซอร์สเช่น OpenSSL และ OpenSSH จะคัดเลือกการแก้ไขด่วนเร่งด่วนให้กับรหัสรุ่นเก่าเพื่อรักษาเสถียรภาพและการคาดการณ์ API นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับ "การวางจำหน่ายระยะยาว" และแพลตฟอร์มอุปกรณ์

แต่ผู้ค้าที่ทำสิ่งนี้อย่างเงียบ ๆ (โดยไม่ต้องเพิ่มส่วนต่อท้ายสตริงรุ่นของตนเอง) เสี่ยงต่อการเรียกใช้ผลบวกปลอมในเครื่องสแกนช่องโหว่ (และทำให้ผู้ใช้สับสน) ดังนั้นเพื่อให้โปร่งใสและตรวจสอบได้ผู้ขายบางรายจะผนวกสตริงของตนเองเข้ากับเวอร์ชันแพ็คเกจหลัก ทั้ง Debian (OpenSSL) และ FreeBSD (ใน OpenSSH ผ่านทางVersionAddendumคำสั่ง sshd_config) ทำเช่นนี้

ผู้ขายที่ไม่ทำเช่นนี้อาจทำเช่นนั้นเพื่อลดโอกาสที่จะเกิดความเสียหายเนื่องจากวิธีการทางตรงและทางอ้อมมากมายที่โปรแกรมอื่นตรวจสอบหมายเลขรุ่น

ดังนั้นจึงมีลักษณะเช่นนี้:

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

... แม้ว่าจะได้รับการติดตั้งแล้ว :

$ dpkg -l openssl | grep openssl
ii  openssl  1.0.1-4ubuntu5.12  [truncated]

$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr  7 12:37 /usr/bin/openssl

$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748  /usr/bin/openssl

ด้วยสิ่งที่กำลังเล่นอยู่นี้คุณจะดีขึ้นถ้าคุณไม่เชื่อถือหมายเลขเวอร์ชัน


เป็นที่ชัดเจนว่าการตรวจสอบเวอร์ชันไม่ใช่เรื่องง่ายและโปร่งใสอย่างที่ฉันหวังไว้ การตรวจสอบหาช่องโหว่นั้นข้ามแพลตฟอร์ม แต่ก็ยากที่จะทำเช่นนั้นคุณต้องมี PoC ที่เชื่อถือได้หรือทดสอบสะดวกสำหรับบริการซอฟต์แวร์ที่มีช่องโหว่ ในกรณีนี้มันเริ่มต้นด้วย PoC สำหรับ Apache และ nginx จะทำอย่างไรถ้าฉันใช้ SMTP กับ SSL ในขณะนั้นเท่านั้นและฉันต้องการตรวจสอบว่าฉันมีความเสี่ยงหรือไม่ ในที่สุดเราจะทำการทดสอบสำหรับบริการส่วนใหญ่ แต่อาจใช้เวลาสักครู่
Martijn

Martijn นั่นเป็นประเด็นที่ยุติธรรม เมื่อการทดสอบไม่พร้อมใช้งานวิธีการรอง (เช่นการติดตามผลการตรวจสอบสำหรับไบนารีที่ได้รับผลกระทบในระบบเป้าหมายของคุณ) นั้นเหมาะสมน้อยกว่า แต่อาจดีพอที่จะทำให้งานเสร็จ ... จากนั้นไปยังกองไฟถัดไป :-)
Royce Williams

14

แต่น่าเสียดายที่ผมไม่แน่ใจว่ามีเป็นวิธีที่ข้ามแพลตฟอร์มการทำเช่นนี้ ตามที่ฉันพูดถึงในการโพสต์บล็อกเวอร์ชันของ OpenSSL แสดงบน Ubuntu 12.04 ยังคงอยู่ 1.0.1 หลังจากอัปเกรดเป็นเวอร์ชันคงที่

สำหรับ Ubuntu 12.04 เท่านั้นคุณสามารถบอกได้ว่าคุณได้รับการอัปเดตหรือไม่หากทั้งหมดด้านล่างเป็นจริง:

  1. dpkg -s openssl | grep Version แสดงเวอร์ชั่น 1.0.1-4ubuntu5.12 หรือใหม่กว่า
  2. dpkg -s libssl1.0.0 | grep Version แสดงเวอร์ชั่น 1.0.1-4ubuntu5.12 หรือใหม่กว่า
  3. openssl version -a แสดงวันที่ "สร้างขึ้น" ในวันที่ 7 เมษายน 2014 หรือใหม่กว่า

ขอบคุณ @danny สำหรับข้อมูลเพิ่มเติม


2
ตกลงในกรณีนั้นฉันต้องเพิ่มรุ่นของแพ็คเกจ1.0.1-4ubuntu5.12นั้นเป็นเพียงสำหรับ Ubuntu 12.04 LTS หากคุณใช้ Ubuntu 12.10 คุณควรเห็นเวอร์ชันอย่างน้อย1.0.1c-3ubuntu2.7และถ้าคุณใช้เวอร์ชั่น13.10 ควรเป็นเวอร์ชั่นอย่างน้อยที่สุด1.0.1e-3ubuntu1.2ตามแหล่งที่มา: ubuntu.com/usn/usn-2us5-2-1
Martijn

1
น่าเสียดายที่นี่ไม่เพียงพอ คุณต้องอัพเกรดlibssl1.0.0อย่างชัดเจนบน Ubuntu หากคุณเห็นตัวสร้างก่อนวันที่ 7 เมษายน 2014 แม้ว่า openssl จะเป็นรุ่นที่ดูถูกต้อง ( 1.0.1-4ubuntu5.12สำหรับ Ubuntu 12.04) คุณอาจยังมีช่องโหว่อยู่
danny

@ แดนนี่คุณเพิ่งช่วยฉันทำงานได้มาก ฉันพยายามหาสาเหตุที่วันที่สร้างนั้นถูกต้องในระบบ 12.04 บางระบบและผิดกับคนอื่น ๆ คุณเป็นผู้ช่วยชีวิต!
Schof

openssl version -aอาจไม่ต้องการวันที่สร้างในวันที่ 7 เมษายนเนื่องจากการแก้ไขกำลังย้อนกลับไปที่รีลีสที่เก่ากว่า
Patrick James McDougle

4

ลองต่อไปนี้ มันจะแยกสตริงทั้งหมดจากไลบรารีcryptoที่ ssh เชื่อมโยงกับ มันสร้างเอาต์พุตมากกว่าหนึ่งบรรทัด แต่ถ้าจำเป็นสามารถแปลงเป็น 1 บรรทัด

ldd `which ssh` | awk '/\// { print $3 }' | grep crypto | xargs strings  | grep OpenSSL

ผลิต

OpenSSLDie
DSA_OpenSSL
...
MD4 part of OpenSSL 1.0.1f 6 Jan 2014 
MD5 part of OpenSSL 1.0.1f 6 Jan 2014
... 
etc

เช่นใน Gentoo ก่อนที่จะเกิดขึ้น

[ebuild     U  ] dev-libs/openssl-1.0.1f [1.0.1c] USE="bindist (sse2) tls-heartbeat%* zlib -gmp -kerberos -rfc3779 -static-libs {-test} -vanilla" 4,404 kB

ผลคำสั่งดังกล่าวข้างต้นมา

...
OpenSSL 1.0.1c 10 May 2012

หลังจาก

...
OpenSSL 1.0.1f 6 Jan 2014

อุ๊ยังคงไม่มี g


3
ฉันคิดว่าคุณสนิทกับการให้ทางออกที่ดี แต่น่าเสียดายที่นี่ไม่ได้ผลกับไลบรารี่ crypto บน Ubuntu 12.04 LTS มันจะแสดงสตริงทั้งหมดที่มีรุ่น[...] part of OpenSSL 1.0.1 14 Mar 2012เช่นเดียวกับที่openssl version -aทำ นี่เป็นเคล็ดลับที่อาจใช้งานได้ในกรณีอื่น!
Martijn

@ มาร์ตินเอาละโชคไม่ดี แต่มันใช้ได้กับอูบุนตู 12.10 แปลก ๆ ว่ามันจะระบุตัวเองผิดในวันที่ 12.04 มี libs หลายอันหรือไม่? เป็นไปได้หรือไม่ว่า ssh ไม่ได้ใช้ข้อมูลที่ทันสมัยที่สุด?
waTeim

ฉันไม่สามารถหาไบนารี openssl อื่นหรือไลบรารี crypto อื่น ๆ ได้ แนะนำโดยคนอื่นว่าความแตกต่างคือบน 12.04 LTS, Ubuntu กำลังย้อนกลับการเปลี่ยนแปลงเป็น 1.0.1 โดยไม่ต้องอัปเกรดรุ่น ในขณะที่ 12.10 ไม่ใช่ LTS ดังนั้น Ubuntu จึงใช้รุ่นล่าสุดที่นั่นแทนการใช้ backport
Martijn

2

ดำเนินการใด ๆ สคริปต์เหล่านี้ทดสอบบริการทั้งหมดหรือไม่พวกเขาเท่านั้นที่ทดสอบHTTPS ? AFAIK , PostgreSQLนั้นมีความเสี่ยง แต่เป็นเพียงข่าวลือจนกระทั่งพื้นผิวการโจมตีที่ดุร้าย

มีสคริปต์metasploitสำหรับใช้งาน

https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a

คุณสามารถพิมพ์สิ่งนี้ (ทดสอบด้วยGnuWin32 OpenSSL ไบนารีเวอร์ชัน 1.0.1.6 ลงวันที่ 2014-01-14) หรือเพียงแค่ใช้สคริปต์ในความคิดเห็นด้านล่างนี้ มันแม่นยำและเรียบง่ายกว่า!

s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state

เมื่อเชื่อมต่อประเภท B แล้วคุณจะเห็นโฮสต์ที่มีช่องโหว่และคุณจะไม่ถูกตัดการเชื่อมต่อ:

B

HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49   ....=.o 5 (0x5))
0000 - 18 03 03 00 3d                                    ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34   .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0   n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f   .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f            .#.w....w.+..
read R BLOCK

คุณจะได้รับการตอบสนองการเต้นของหัวใจที่มีลักษณะคล้ายกับนี้

ในโฮสต์ที่ได้รับการติดตั้งคุณจะเห็นคำตอบคล้ายกับด้านล่างและคุณจะถูกตัดการเชื่อมต่อ:

ป้อน B

HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c   ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56   .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95   .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51   .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6   .~.V..7.@...C...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87   !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47                                    ....G

ที่มา:

นอกจากนี้ยังมีเครื่องมือเหล่านี้:


0

สำหรับ Ubuntu คุณสามารถใช้:

aptitude show libssl1.0.0 | grep Version

และเปรียบเทียบกับhttp://www.ubuntu.com/usn/usn-2165-1/ หลังจากรีบูต (!!!) คุณสามารถตรวจสอบhttp://possible.lv/tools/hbได้



0

ฉันพบสคริปต์นี้เป็น devcentral :

openssl s_client -connect example.com:443 -tlsextdebug 2>&1| grep 'server extension "heartbeat" (id=15)' || echo safe

แทนที่example.comด้วยชื่อหรือที่อยู่ IP ของเซิร์ฟเวอร์ที่คุณต้องการตรวจสอบ

จะกลับมา"safe"หากเซิร์ฟเวอร์ของคุณโอเคหรือ"server extension "heartbeat" (id=15)"ไม่

สิ่งนี้ไม่ได้ขึ้นอยู่กับหมายเลขเวอร์ชั่น แต่ขึ้นอยู่กับการแสดงรายการส่วนขยายเซิร์ฟเวอร์ที่เป็นสาเหตุของปัญหา

เครื่องที่คุณใช้งานopenssl s_clientอยู่จะต้องใช้ OpenSSL 1.0.1 หรือใหม่กว่าเพื่อให้เครื่องใช้งานได้


4
มีประโยชน์ แต่ไม่ได้บอกคุณถ้าคุณมีรุ่นที่มีการขยายและการแก้ไข
mattdm

1
นี่เป็นวิธีที่ดีในการตรวจสอบช่องโหว่และเป็นสิ่งที่สคริปต์บางตัวทำ ไม่ต้องการการเข้าถึง SSH
Stefan Lasiewski

8
คำเตือนสำคัญยิ่งใหญ่ที่น่ากลัว - เครื่องที่คุณใช้งานopenssl s_clientอยู่ต้องใช้ OpenSSL 1.0.1 หรือใหม่กว่าเพื่อให้การทำงานนี้เป็นจริง ถ้าคุณเรียกใช้คำสั่งนี้ในเครื่องที่มี 0.9.8 หรือ 1.0.0ไอทีมักจะรายงาน "ปลอดภัย" แม้สำหรับเซิร์ฟเวอร์ที่มีช่องโหว่
voretaq7

แปลก ฉันใช้งาน OpenSSL รุ่นที่คาดว่าจะได้รับผลกระทบจากข้อผิดพลาดนี้ แต่สตริงนั้นไม่ปรากฏในผลลัพธ์ ...
Michael

@StefanLasiewski ฉันอัปเดตคำตอบของฉันและลบส่วน "need ssh"
egarcia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.