ฉันจะกู้คืนจาก Heartbleed bug ใน OpenSSL ได้อย่างไร


93

CVE-2014-0160 aka Heartbleedเป็นช่องโหว่ใน OpenSSL มันดูน่ากลัว

ฉันจะตรวจสอบว่าฉันได้รับผลกระทบได้อย่างไร?

หากฉันได้รับผลกระทบฉันต้องทำอย่างไร เห็นได้ชัดว่าการอัปเกรดไม่เพียงพอ


3
พวกเขาไม่ได้ดูเหมือนจะทำลองใช้
Uwe Keim

ไม่มันไม่ได้ดูน่ากลัว มันดูน่ากลัวกางเกง - เซ่อ
evamvid

คำตอบ:


95

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

ฉันกำลังเสี่ยงไหม

OpenSSL เวอร์ชัน buggy

ซอฟต์แวร์ buggy คือไลบรารี OpenSSL 1.0.1 ถึง 1.0.1fและ OpenSSL 1.0.2 ถึง beta1 รุ่นที่เก่ากว่า (0.9.x, 1.0.0) และรุ่นที่มีการแก้ไขข้อบกพร่อง (1.0.1g เป็นต้นไป, 1.0.2 beta 2 เป็นต้นไป) จะไม่ได้รับผลกระทบ มันเป็นข้อผิดพลาดในการใช้งานไม่ใช่ข้อบกพร่องในโปรโตคอลดังนั้นเฉพาะโปรแกรมที่ใช้ไลบรารี OpenSSL เท่านั้นที่จะได้รับผลกระทบ

คุณสามารถใช้เครื่องมือบรรทัดคำสั่งopenssl version -aเพื่อแสดงหมายเลขรุ่น OpenSSL โปรดสังเกตว่าบางดิสทริบิวชันพอร์ตแก้ไขข้อผิดพลาดเพื่อเผยแพร่ก่อนหน้า หากบันทึกการเปลี่ยนแปลงของแพคเกจของคุณกล่าวถึงการแก้ไขข้อผิดพลาด Heartbleed นั่นก็ดีแม้ว่าคุณจะเห็นเวอร์ชันเช่น 1.0.1f หากopenssl version -aกล่าวถึงวันที่สร้าง (ไม่ใช่วันที่ในบรรทัดแรก) ของ 2014-04-07 ในช่วงเย็น UTC หรือหลังจากนั้นคุณควรจะปรับ โปรดทราบว่าแพ็คเกจ OpenSSL อาจมีชื่อ1.0.0เป็นของตัวเองแม้ว่าเวอร์ชั่นนั้นจะเป็นเวอร์ชั่น 1.0.1 ( หมายถึงความเข้ากันได้ของไบนารี)1.0.0

แอปพลิเคชันที่ได้รับผลกระทบ

การแสวงหาผลประโยชน์จะดำเนินการผ่านการประยุกต์ใช้ซึ่งใช้ห้องสมุด OpenSSL ที่จะใช้การเชื่อมต่อ SSL แอปพลิเคชั่นจำนวนมากใช้ OpenSSL สำหรับบริการการเข้ารหัสลับอื่น ๆ และก็ไม่เป็นไร: ข้อผิดพลาดในการใช้งานคุณสมบัติเฉพาะของโปรโตคอล SSL,“ heartbeat”

คุณอาจต้องการตรวจสอบว่าโปรแกรมใดที่เชื่อมโยงกับห้องสมุดในระบบของคุณ บนระบบที่ใช้ dpkg และ apt (Debian, Ubuntu, Mint, …) คำสั่งต่อไปนี้จะแสดงรายการแพ็กเกจที่ติดตั้งนอกเหนือจากไลบรารีที่ใช้libssl1.0.0(แพ็กเกจที่ได้รับผลกระทบ):

apt-cache rdepends libssl1.0.0 | tail -n +3 |
xargs dpkg -l 2>/dev/null | grep '^ii' | grep -v '^ii  lib'

หากคุณใช้งานซอฟต์แวร์เซิร์ฟเวอร์บางตัวที่อยู่ในรายการนี้และรับฟังการเชื่อมต่อ SSLคุณอาจได้รับผลกระทบ สิ่งนี้เกี่ยวข้องกับเว็บเซิร์ฟเวอร์เซิร์ฟเวอร์อีเมลเซิร์ฟเวอร์ VPN ฯลฯ คุณจะรู้ว่าคุณเปิดใช้งาน SSL เพราะคุณต้องสร้างใบรับรองไม่ว่าจะโดยการส่งคำขอลงนามใบรับรองไปยังหน่วยงานผู้ออกใบรับรองหรือโดยการเซ็นชื่อด้วยตนเอง ใบรับรอง (เป็นไปได้ว่าบางขั้นตอนการติดตั้งได้สร้างใบรับรองที่ลงชื่อด้วยตัวเองโดยที่คุณไม่สังเกตเห็น แต่โดยทั่วไปแล้วจะทำเฉพาะกับเซิร์ฟเวอร์ภายในไม่ใช่สำหรับเซิร์ฟเวอร์ที่เปิดเผยต่ออินเทอร์เน็ต) หากคุณใช้เซิร์ฟเวอร์ที่เสี่ยงต่อการสัมผัสกับอินเทอร์เน็ต เว้นแต่ว่าไฟล์บันทึกของคุณจะไม่มีการเชื่อมต่อตั้งแต่ประกาศใน 2014-04-07 (สิ่งนี้อนุมานว่าช่องโหว่ไม่ได้ถูกนำไปใช้ก่อนประกาศ) หากเซิร์ฟเวอร์ของคุณถูกเปิดเผยภายในเท่านั้น

ซอฟต์แวร์ไคลเอ็นต์จะได้รับผลกระทบเฉพาะเมื่อคุณใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่เป็นอันตราย ดังนั้นหากคุณเชื่อมต่อกับผู้ให้บริการอีเมลของคุณโดยใช้ IMAPS คุณไม่จำเป็นต้องกังวล (เว้นแต่ผู้ให้บริการจะถูกโจมตี - แต่ถ้าเป็นกรณีที่พวกเขาควรแจ้งให้คุณทราบ) แต่ถ้าคุณเรียกดูเว็บไซต์สุ่มด้วยเบราว์เซอร์ที่มีช่องโหว่ ที่จะต้องกังวล. จนถึงตอนนี้ดูเหมือนว่าช่องโหว่ที่ไม่ได้ถูกนำไปใช้ก่อนที่จะถูกค้นพบดังนั้นคุณต้องกังวลถ้าคุณเชื่อมต่อกับเซิร์ฟเวอร์ที่เป็นอันตรายตั้งแต่ 2014-04-08

โปรแกรมต่อไปนี้ไม่ได้รับผลกระทบเนื่องจากไม่ได้ใช้ OpenSSL เพื่อใช้งาน SSL:

  • SSH (โปรโตคอลไม่ใช่ SSL)
  • Chrome / Chromium ( ใช้ NSS )
  • Firefox (ใช้ NSS) (อย่างน้อยกับ Firefox 27 บน Ubuntu 12.04 แต่ไม่ได้สร้างทั้งหมดหรือไม่?

ผลกระทบคืออะไร?

ข้อผิดพลาดช่วยให้ลูกค้าที่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSL ของคุณเพื่อเรียกคืนหน่วยความจำเกี่ยวกับ 64kB จากเซิร์ฟเวอร์ในเวลา ลูกค้าไม่จำเป็นต้องได้รับการตรวจสอบความถูกต้อง แต่อย่างใด โดยการโจมตีซ้ำลูกค้าสามารถถ่ายโอนข้อมูลส่วนต่าง ๆ ของหน่วยความจำในความพยายามอย่างต่อเนื่อง สิ่งนี้อาจทำให้ผู้โจมตีสามารถเรียกคืนข้อมูลใด ๆ ที่อยู่ในหน่วยความจำของกระบวนการเซิร์ฟเวอร์รวมถึงกุญแจรหัสผ่านคุกกี้ ฯลฯ

ข้อมูลสำคัญชิ้นหนึ่งที่ผู้โจมตีอาจสามารถเรียกคืนได้คือคีย์ส่วนตัว SSL ของเซิร์ฟเวอร์ ด้วยข้อมูลนี้ผู้โจมตีสามารถเลียนแบบเซิร์ฟเวอร์ของคุณ

ข้อผิดพลาดยังอนุญาตให้เซิร์ฟเวอร์ใด ๆ ที่ไคลเอ็นต์ SSL ของคุณเชื่อมต่อเพื่อเรียกข้อมูลเกี่ยวกับหน่วยความจำ 64kB จากไคลเอ็นต์ในแต่ละครั้ง นี่เป็นสิ่งที่น่ากังวลหากคุณใช้ไคลเอนต์ที่มีช่องโหว่เพื่อจัดการข้อมูลที่มีความละเอียดอ่อนจากนั้นเชื่อมต่อกับเซิร์ฟเวอร์ที่ไม่น่าเชื่อถือด้วยไคลเอนต์เดียวกัน สถานการณ์การโจมตีในฝั่งนี้จึงมีโอกาสน้อยกว่าฝั่งเซิร์ฟเวอร์อย่างมาก

โปรดทราบว่าสำหรับการแจกแจงทั่วไปไม่มีผลกระทบด้านความปลอดภัยต่อการกระจายแพคเกจเนื่องจากความสมบูรณ์ของแพ็คเกจขึ้นอยู่กับลายเซ็น GPG ไม่ใช่การส่งผ่าน SSL

ฉันจะแก้ไขช่องโหว่ได้อย่างไร

การฟื้นฟูเซิร์ฟเวอร์ที่เปิดเผย

  1. ทำให้เซิร์ฟเวอร์ที่ได้รับผลกระทบทั้งหมดออฟไลน์ ตราบใดที่พวกเขากำลังทำงานพวกเขากำลังรั่วข้อมูลสำคัญ

  2. อัพเกรดแพคเกจห้องสมุด OpenSSL การแจกแจงทั้งหมดควรมีการแก้ไขในตอนนี้ (ไม่ว่าจะเป็น 1.0.1g หรือด้วยโปรแกรมแก้ไขที่แก้ไขข้อบกพร่องโดยไม่ต้องเปลี่ยนหมายเลขเวอร์ชั่น) หากคุณรวบรวมจากแหล่งที่มาอัพเกรดเป็น 1.0.1g หรือสูงกว่า ตรวจสอบให้แน่ใจว่ามีการรีสตาร์ทเซิร์ฟเวอร์ที่ได้รับผลกระทบทั้งหมด
    บน Linux คุณสามารถตรวจสอบว่ากระบวนการที่อาจได้รับผลกระทบยังทำงานอยู่หรือไม่grep 'libssl.*(deleted)' /proc/*/maps

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

    • หากคุณใช้ใบรับรองที่ลงนามโดยผู้ออกใบรับรองให้ส่งกุญแจสาธารณะใหม่ของคุณไปที่ CA เมื่อคุณได้รับใบรับรองใหม่ให้ติดตั้งบนเซิร์ฟเวอร์ของคุณ
    • หากคุณใช้ใบรับรองที่ลงนามเองให้ติดตั้งบนเซิร์ฟเวอร์ของคุณ
    • ไม่ว่าจะด้วยวิธีใดให้ย้ายคีย์เก่าและใบรับรองออกไป (แต่ไม่ต้องลบทิ้งเพียงแค่ให้แน่ใจว่าพวกเขาจะไม่ได้ใช้งานอีกต่อไป)
  4. ตอนนี้คุณมีคีย์ที่ไม่ได้รับการรับรองใหม่คุณสามารถนำเซิร์ฟเวอร์ของคุณกลับมาออนไลน์ได้

  5. เพิกถอนใบรับรองเก่า

  6. การประเมินความเสียหาย : ข้อมูลใด ๆ ที่อยู่ในหน่วยความจำของกระบวนการที่ให้บริการการเชื่อมต่อ SSL อาจรั่วไหลออกมา ซึ่งอาจรวมถึงรหัสผ่านผู้ใช้และข้อมูลลับอื่น ๆ คุณต้องประเมินว่าข้อมูลนี้อาจเป็นอะไร

    • หากคุณใช้บริการที่อนุญาตให้ตรวจสอบรหัสผ่านรหัสผ่านของผู้ใช้ที่เชื่อมต่อตั้งแต่ก่อนที่จะมีการประกาศช่องโหว่ควรได้รับการพิจารณาว่าเป็นอันตราย ตรวจสอบบันทึกของคุณและเปลี่ยนรหัสผ่านของผู้ใช้ที่ได้รับผลกระทบ
    • ยังทำให้คุกกี้เซสชันทั้งหมดใช้งานไม่ได้เนื่องจากคุกกี้อาจถูกโจมตี
    • ใบรับรองไคลเอ็นต์จะไม่ถูกบุกรุก
    • ข้อมูลใด ๆ ที่มีการแลกเปลี่ยนกันมาตั้งแต่ก่อนที่ช่องโหว่อาจยังคงอยู่ในหน่วยความจำของเซิร์ฟเวอร์และอาจถูกรั่วไหลไปยังผู้โจมตี
    • หากมีคนบันทึกการเชื่อมต่อ SSL เก่าและดึงกุญแจเซิร์ฟเวอร์ของคุณตอนนี้พวกเขาสามารถถอดรหัสการถอดเสียงได้ (ยกเว้นว่ามีPFS ที่แน่นอน - หากคุณไม่รู้ก็ไม่ได้)

การฟื้นฟูในกรณีอื่น ๆ

เซิร์ฟเวอร์ที่รับฟังเฉพาะ localhost หรือบนอินทราเน็ตเท่านั้นที่ต้องพิจารณาหากผู้ใช้ที่ไม่น่าเชื่อถือสามารถเชื่อมต่อกับพวกเขาได้

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

  1. จัดการข้อมูลที่เป็นความลับ (เช่นรหัสผ่านใบรับรองลูกค้า ... );
  2. จากนั้นในกระบวนการเดียวกันเชื่อมต่อกับเซิร์ฟเวอร์ที่เป็นอันตรายผ่าน SSL

ดังนั้นตัวอย่างเช่นไคลเอนต์อีเมลที่คุณใช้เพื่อเชื่อมต่อกับผู้ให้บริการอีเมลของคุณเท่านั้น (ไม่ใช่คนที่ไม่น่าเชื่อถือ) ไม่ใช่ข้อกังวล (ไม่ใช่เซิร์ฟเวอร์ที่เป็นอันตราย) การรัน wget เพื่อดาวน์โหลดไฟล์นั้นไม่ได้เป็นเรื่องที่น่ากังวล

หากคุณทำเช่นนั้นระหว่าง 2014-04-07 ตอนเย็น UTC และอัปเกรดไลบรารี OpenSSL ของคุณให้พิจารณาข้อมูลใด ๆ ที่อยู่ในหน่วยความจำของลูกค้าเพื่อให้ถูกบุกรุก

อ้างอิง


5
"โดยทั่วไปคุณได้รับผลกระทบหากคุณเรียกใช้เซิร์ฟเวอร์บางตัวที่คุณสร้างคีย์ SSLในบางจุด" อาจทำให้เข้าใจผิด ในการเน้นย้ำถ้าคุณสร้างคีย์ของคุณบนเซิร์ฟเวอร์หนึ่งและใช้กับเซิร์ฟเวอร์อื่นคุณกำลังมีปัญหาหากเซิร์ฟเวอร์ที่ใช้รหัสดังกล่าวเรียกใช้ OpenSSL เวอร์ชันที่มีช่องโหว่
Matt Nordhoff

3
ใบรับรองลูกค้าจะได้รับผลกระทบ IIRC
Elazar Leibovich

2
@ElazarLeibovich ไม่ใช่ลูกค้าเฉพาะเจาะจง (ในความเป็นจริงใบรับรองลูกค้าไม่น่าจะรั่วไหลจากข้อผิดพลาดนี้) แต่ข้อมูลใด ๆ ในหน่วยความจำลูกค้าถ้าไคลเอนต์ที่ใช้เวอร์ชันไลบรารี่ที่มีช่องโหว่เชื่อมต่อกับเซิร์ฟเวอร์ที่เป็นอันตรายโดยใช้โปรโตคอลที่รองรับการเต้นของหัวใจ ฉันถามผู้เชี่ยวชาญเกี่ยวกับเรื่องนี้ยังไม่มีคำตอบที่ชัดเจน
Gilles

1
ฉันคิดว่า Firefox ใช้ OpenSSL หากฉันทำงานlsof -c firefox | grep 'ssl\|crypto'ฉันจะได้รับ /usr/lib64/libssl.so.1.0.0, /usr/lib64/libcrypto.so.1.0.0, /lib64/libk5crypto.so.3.1 และ /opt/firefox/libssl3.so .

1
@ B4NZ41 เพียงทำการอัพเกรดความปลอดภัย ที่ปรึกษาได้รับการออกมานานกว่า 20 ชั่วโมง
Gilles

11

เพื่อทดสอบว่าคุณมีความเสี่ยงไปที่นี่หรือไม่: http://filippo.io/Heartbleed/

หากคุณพบว่าคุณมีความเสี่ยงต่อการอัพเดทopensslและรีสตาร์ทเว็บเซิร์ฟเวอร์ของคุณ


1
ดังที่ Gilles กล่าวไว้ในคำตอบของเขาเพียงแค่อัปเดตและเริ่มใหม่ไม่เพียงพอ คุณต้องตอบสนองต่อการประนีประนอมคีย์ส่วนตัวของคุณ - ข้อกำหนดขั้นพื้นฐานที่สุดคือการเพิกถอนคีย์เหล่านั้น แต่คุณต้องจัดการกับข้อมูลที่อาจถูกบุกรุกโดยใช้กุญแจ เช่นรหัสเซสชัน
strugee

0

ไม่มีวิธีการกู้คืนจากข้อผิดพลาดนี้ บันทึกบันทึกทั้งหมดพวกเขาจะต้องในกรณีที่มีคนตระหนักถึงความเสี่ยงที่มีอยู่จริงก่อนที่จะประกาศ

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