ฉันจะแก้ไขช่องโหว่ SSLv3 POODLE ได้อย่างไร (CVE-2014-3566)


157

ภายหลังการโจมตี BEASTและข้อผิดพลาด Heartbleedตอนนี้ผมเคยได้ยินเกี่ยวกับช่องโหว่ใหม่ใน SSL / TLS เรียกว่าพุดเดิ้ล ฉันจะป้องกันตัวเองจากการถูกเอาเปรียบได้อย่างไร

  • เฉพาะเซิร์ฟเวอร์หรือลูกค้าที่ได้รับผลกระทบด้วยหรือไม่?
  • OpenSSL / GnuTLS นี้มีความเฉพาะเจาะจงหรือไม่?
  • บริการประเภทใดที่ได้รับผลกระทบ เฉพาะ HTTPS หรือ IMAPS, SMTPS, OpenVPN เป็นต้น

โปรดแสดงตัวอย่างเกี่ยวกับวิธีหลีกเลี่ยงช่องโหว่นี้


2
ดูข้อมูลเพิ่มเติมได้ที่นี่ช่องโหว่ SSL3 "พุดเดิ้ล"
Braiam

1
@Braiam ใช่ฉันรู้ว่าโทมัสที่ยอดเยี่ยมอีกครั้ง! อย่างไรก็ตามนั่นเป็นคำถามที่ถามบ่อยเกี่ยวกับการเข้ารหัสลับ คำถามและคำตอบเกี่ยวกับ AU นี้ควรให้ข้อมูลที่เป็นประโยชน์และ Ubuntu เป็นแนวทาง :-)
gertvdijk

10
ฮะ? คุณคาดหวังได้อย่างไรว่าวิธีแก้ปัญหาที่ใช้งานได้ดีกว่า "ถ้าคุณไม่ได้ติดตั้งแผ่นแปะNíðhöggrจะทำลายม้ามของคุณ"
Braiam

2
@Braiam ก่อนอื่น: ไม่มีการแก้ไข (อ่านคำตอบของฉัน) ฉันคิดว่าโทมัสอ้างถึงเครื่องมือมากกว่าโฮสติ้งเซิร์ฟเวอร์ DIY-Ubuntu อุปกรณ์เช่น load balancer มักจะเสนอการอัพเดตเฟิร์มแวร์สำหรับการเปลี่ยนแปลงการตั้งค่าเริ่มต้นหรือจะให้ฟังก์ชันการทำงานเพื่อให้สามารถกำหนดค่าได้ อย่างไรก็ตามใน Ubuntu ทุกอย่างขึ้นอยู่กับผู้ใช้ / ผู้ดูแลระบบ
gertvdijk

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

คำตอบ:


209

ข้อมูลความเป็นมา

SSL ถูกออกแบบมาเพื่อรักษาความปลอดภัยระดับการขนส่งบนอินเทอร์เน็ต สำหรับ HTTP 'aka' เว็บคุณจะรู้ว่านี่เป็น HTTPS แต่มันก็ใช้สำหรับโปรโตคอลแอปพลิเคชันอื่น SSLv2 เป็นโปรโตคอลความปลอดภัยการขนส่งที่ใช้กันอย่างแพร่หลายเป็นครั้งแรก แต่ไม่ปลอดภัยหลังจากนั้นไม่นาน ตอนนี้รองรับ SSLv3 และ TLSv1 อย่างกว้างขวาง TLSv1.1 และ TLSv1.2 เป็นรุ่นใหม่กว่าและได้รับการสนับสนุนเป็นจำนวนมากเช่นกัน เว็บเบราว์เซอร์ส่วนใหญ่ถ้าไม่ใช่ทุกรุ่นที่ออกจำหน่ายในปี 2014 จะมีการสนับสนุน

การค้นพบล่าสุดโดยวิศวกรของ Google ชี้ให้เห็นว่าไม่ควรใช้ SSLv3 อีกต่อไป (เช่น SSLv2 ถูกคัดค้านเมื่อนานมาแล้ว) ลูกค้าที่ไม่สามารถเชื่อมต่อกับเว็บไซต์ / บริการของคุณอาจมีข้อ จำกัด มาก CloudFlare ประกาศว่าผู้เยี่ยมชมน้อยกว่า 0.09% ของพวกเขายังคงใช้ SSLv3

วิธีแก้ปัญหาง่าย ๆ : ปิดการใช้งาน SSLv3

Ubuntu ให้การปรับปรุงใด ๆ หรือไม่?

ใช่ผ่านusn-2385-1พร้อมกับการเพิ่มคุณสมบัติ SCSV แต่ก็ไม่ได้ช่วยลดปัญหาอย่างสมบูรณ์เนื่องจากไม่ได้ปิดการใช้งาน SSLv3 และแพทช์จะทำงานได้ก็ต่อเมื่อการเชื่อมต่อทั้งสองด้านได้รับการแก้ไขแล้ว คุณจะได้รับผ่านการอัพเดทความปลอดภัยปกติของคุณในแพ็คเกจผู้จัดการ

ดังนั้นคุณยังต้องดำเนินการเองเพื่อปิดใช้งาน SSLv3 (สามารถกำหนดค่าได้) ไคลเอ็นต์ / เบราว์เซอร์เวอร์ชันในอนาคตจะปิดใช้งาน SSLv3 ได้มากที่สุด เช่น Firefox 34 จะทำเช่นนั้น

การปิดใช้งาน SSLv3 อย่างสมบูรณ์โดยค่าเริ่มต้นใน Ubuntu ในระดับการใช้งานอาจเป็นสิ่งที่แตกต่างออกไปสำหรับการใช้งานที่ไม่ใช่ HTTPS SSL ซึ่งไม่ได้รับความเสี่ยงมากนักดังนั้นฉันจึงสันนิษฐานว่าผู้ดูแลระบบจะไม่ทำเช่นนั้น

เหตุใดการอัปเดต SCSV ใน OpenSSL ผ่าน usn-2385-1 จึงไม่สามารถบรรเทาปัญหาได้

จริงๆหยุดถามคำถามดังกล่าวและเพียงข้ามสองสามย่อหน้าและปิดการใช้งาน SSLv3 แต่เดี๋ยวก่อนถ้าคุณไม่มั่นใจคุณไปที่นี่:

POODLE แสดงให้เห็นว่า SSLv3 ที่มี CBC ciphers ใช้งานไม่ได้การใช้ SCSV จะไม่เปลี่ยนแปลง SCSV ทำให้แน่ใจว่าคุณไม่ได้ลดระดับจากโปรโตคอล TLS บางตัวเป็นโปรโตคอล TLS / SSL ใด ๆ ที่ต่ำกว่าตามที่จำเป็นด้วยการโจมตีแบบ Man-in-the-Middle ที่จำเป็นสำหรับกรณีปกติ

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

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

สำหรับการบรรเทาปัญหาอย่างสมบูรณ์การปิดใช้งาน SSLv3 จุดจบของคุณก็เพียงพอแล้วและคุณสามารถมั่นใจได้ว่าคุณจะไม่ถูกลดระดับ และคุณจะไม่สามารถคุยกับเซิร์ฟเวอร์ SSLv3 เท่านั้นได้

ตกลงฉันจะปิดใช้งาน SSLv3 ได้อย่างไร

ดูด้านล่างในส่วนเฉพาะของแอปพลิเคชัน: Firefox, Chrome, Apache, Nginx และ Postfix ได้รับการคุ้มครองแล้ว

เฉพาะเซิร์ฟเวอร์หรือลูกค้าที่ได้รับผลกระทบด้วยหรือไม่?

ช่องโหว่นี้มีอยู่หากทั้งเซิร์ฟเวอร์และไคลเอนต์ยอมรับ SSLv3 (แม้ว่าทั้งคู่จะมีความสามารถใน TLSv1 / TLSv1.1 / TLS1.2 เนื่องจากการโจมตีที่ลดระดับ)

ในฐานะที่เป็นผู้ดูแลระบบเซิร์ฟเวอร์ที่คุณควรปิด SSLv3 ตอนนี้เพื่อความปลอดภัยของผู้ใช้

ในฐานะผู้ใช้คุณควรปิดการใช้งาน SSLv3 ในเบราว์เซอร์ของคุณตอนนี้เพื่อความปลอดภัยของตัวเองเมื่อเยี่ยมชมเว็บไซต์ที่ยังคงรองรับ SSLv3

OpenSSL / GnuTLS / เบราว์เซอร์นี้เฉพาะเจาะจงหรือไม่

ไม่มันเป็นข้อผิดพลาดของโปรโตคอล (การออกแบบ) ไม่ใช่ข้อผิดพลาดในการใช้งาน ซึ่งหมายความว่าคุณไม่สามารถแก้ไขได้ (เว้นแต่คุณจะเปลี่ยนการออกแบบ SSLv3 เก่า)

และใช่มีการเปิดตัวการรักษาความปลอดภัย OpenSSLใหม่แต่อ่านด้านล่าง ( แต่ฉันต้องการการสนับสนุน SSLv3 จริงๆ ... ด้วยเหตุผล X, Y, Z! ) เกี่ยวกับสาเหตุที่คุณควรให้ความสำคัญกับการปิดใช้งาน SSLv3 โดยสิ้นเชิง

ฉันสามารถฆ่า SSLv3 ในระดับเครือข่าย (ไฟร์วอลล์) ได้หรือไม่

ก็ใช่ ฉันใส่สิ่งนี้ในบล็อกโพสต์แยกต่างหากสำหรับความคิดและการทำงานเพิ่มเติม เราอาจมีiptablesกฎเวทมนต์ที่คุณสามารถใช้ได้!

โพสต์บล็อกของฉัน: จะลบ SSLv3 ในเครือข่ายของคุณโดยใช้ iptables สำหรับ POODLE ได้อย่างไร

เกี่ยวข้องกับ HTTPS เท่านั้นหรือสำหรับ IMAP / SMTP / OpenVPN และโปรโตคอลอื่น ๆ ที่รองรับ SSL หรือไม่

เวกเตอร์การโจมตีในปัจจุบันดังที่แสดงโดยนักวิจัยทำงานกับการควบคุมข้อความธรรมดาที่ส่งไปยังเซิร์ฟเวอร์โดยใช้ Javascript ที่ถูกเรียกใช้บนเครื่องของเหยื่อ เวกเตอร์นี้ใช้ไม่ได้กับสถานการณ์ที่ไม่ใช่ HTTPS โดยไม่ต้องใช้เบราว์เซอร์

นอกจากนี้โดยทั่วไปแล้วไคลเอนต์ SSL จะไม่อนุญาตให้ลดระดับเซสชันเป็น SSLv3 (มี TLSv1 + เห็นในความสามารถในการจับมือกัน) แต่เบราว์เซอร์ต้องการใช้งานร่วมกันได้มาก การรวมกันกับการควบคุมข้อความธรรมดาและวิธีเฉพาะที่ส่วนหัว HTTP ถูกสร้างขึ้นทำให้สามารถใช้ประโยชน์ได้

สรุป: ปิดการใช้งาน SSLv3 สำหรับ HTTPS ในขณะนี้ , ปิดการใช้งาน SSLv3 สำหรับบริการอื่น ๆ ในหน้าต่างบริการของคุณต่อไป

ผลกระทบคืออะไร? ฉันต้องเพิกถอนและสร้างใบรับรองเซิร์ฟเวอร์ของฉันใหม่หรือไม่ (เช่นเดียวกับ Heartbleed)

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

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

มีอะไรอีกบ้างที่ฉันสามารถทำได้เพื่อปรับปรุงการกำหนดค่า SSL โดยทั่วไป

ในฐานะผู้ใช้นอกเหนือจากการปิดใช้งาน SSLv3 ในเบราว์เซอร์ของคุณไม่ใช่อย่างแท้จริง ดีเพียงติดตั้งการปรับปรุงความปลอดภัยล่าสุดเสมอ

สำหรับเซิร์ฟเวอร์ทำตามคู่มือเซิร์ฟเวอร์ของ Mozilla TLS และการทดสอบกับQualys' ทดสอบ ไม่ใช่เรื่องยากที่จะได้รับคะแนน A + บนเว็บไซต์ของคุณ เพียงอัปเดตแพ็คเกจของคุณและใช้คำแนะนำจากคู่มือ Mozilla

แต่ฉันต้องการการสนับสนุน SSLv3 จริงๆ ... ด้วยเหตุผล X, Y, Z! ตอนนี้คืออะไร

มีแพตช์ที่หลีกเลี่ยงการจู่โจมการดาวน์เกรดของ TLSv1 ที่มีความสามารถซึ่งเรียกว่า SSLv3 Fallback Protection มันจะปรับปรุงความปลอดภัยของ TLSv1 + ด้วยเช่นกัน (การลดระดับการโจมตีนั้นยาก / เป็นไปไม่ได้) มันนำเสนอเป็นย้ายกลับจากรุ่น OpenSSL ที่ผ่านมามากขึ้นในการรักษาความปลอดภัยที่ปรึกษาอูบุนตูUSN-2385-1

Big catch: ทั้งไคลเอนต์และเซิร์ฟเวอร์ต้องการแพตช์นี้เพื่อให้ทำงานได้ ดังนั้นในความคิดของฉันในขณะที่คุณกำลังอัปเดตทั้งไคลเอนต์และเซิร์ฟเวอร์คุณควรอัปเกรดเป็น TLSv1 + ต่อไป

อย่างไรก็ตามโปรดได้โปรดเกษียณ SSLv3 ในเครือข่ายของคุณในตอนนี้ ใช้ความพยายามในการอัพเกรดมาตรฐานความปลอดภัยและเพียงทิ้ง SSLv3

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

เฉพาะในกรณีที่คุณต้องการ SSLv3 ด้วยเหตุผลแปลก ๆ แต่ก็ช่วยเพิ่มความปลอดภัยใน TLSv1 + ด้วยใช่ฉันอยากแนะนำให้คุณติดตั้ง อูบุนตูให้การปรับปรุงสำหรับคุณลักษณะนี้ในUSN-2385-1 คุณจะได้รับผ่านการอัพเดทความปลอดภัยปกติของคุณในแพ็คเกจผู้จัดการ

ทดสอบช่องโหว่สำหรับไซต์ที่โฮสต์เป็นส่วนตัว (เช่นอินทราเน็ต / ออฟไลน์)

เซิร์ฟเวอร์ของคุณมีช่องโหว่หากรองรับ SSLv3 ตัวเลือกมากมายที่นี่:

  • ด้วย OpenSSL s_client:

    openssl s_client -connect <server>:<port> -ssl3
    

    หากการเชื่อมต่อสำเร็จ sslv3 จะถูกเปิดใช้งาน ถ้ามันล้มเหลวมันถูกปิดใช้งาน เมื่อล้มเหลวคุณควรเห็นสิ่งต่อไปนี้:

    error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
    
  • การใช้nmap:

    nmap --script ssl-enum-ciphers -p 443 myhostname.tld
    

    มันควรจะออก ' SSLv3: No supported ciphers found' ปรับสำหรับชื่อโฮสต์ / พอร์ตของคุณ

  • ใช้cipherscan โคลน / ดาวน์โหลดไบนารีและดำเนินการ:

    ./cipherscan myhostname.tld
    

    ไม่ควรแสดงรายการอะไรด้วย SSLv3 ใต้คอลัมน์ 'โปรโตคอล'


เบราว์เซอร์ Firefox

เปิดabout:configการค้นหาและการตั้งค่าsecurity.tls.version.min 1จากนั้นรีสตาร์ทเบราว์เซอร์ของคุณเพื่อปล่อยการเชื่อมต่อ SSL ที่เปิดอยู่

Firefox จากเวอร์ชัน 34 เป็นต้นไปจะปิดใช้งาน SSLv3 โดยค่าเริ่มต้นดังนั้นจึงไม่จำเป็นต้องดำเนินการใด ๆ (ที่มา ) อย่างไรก็ตามในขณะที่เขียนมีเพียง 33 ที่เพิ่งเปิดตัวและ 34 ถูกตั้งค่าสำหรับ 25 พฤศจิกายน


Google Chrome (Linux)

แก้ไข/usr/share/applications/google-chrome.desktopไฟล์เช่น

sudo nano /usr/share/applications/google-chrome.desktop

แก้ไขทุกสายเริ่มต้นด้วยการที่จะรวมExec=--ssl-version-min=tls1

เช่นบรรทัดที่ชอบ

Exec=/usr/bin/google-chrome-stable %U

กลายเป็น

Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U

จากนั้นตรวจสอบให้แน่ใจว่าได้ปิดเบราว์เซอร์อย่างสมบูรณ์ (แอป Chrome อาจทำให้เบราว์เซอร์ของคุณทำงานอยู่ในพื้นหลัง!)

หมายเหตุ: คุณอาจต้องทำซ้ำทุกครั้งที่มีการอัปเดตแพ็คเกจ google-chrome โดยเขียนทับ.desktopไฟล์ตัวเรียกใช้นี้ เบราว์เซอร์ Google Chrome หรือ Chromium ที่ปิดใช้งาน SSLv3 เป็นค่าเริ่มต้นยังไม่ได้ประกาศในขณะที่เขียน


เซิร์ฟเวอร์ Apache HTTPD

หากคุณใช้งานเว็บเซิร์ฟเวอร์ Apache ที่อนุญาต SSLv3 ในปัจจุบันคุณจะต้องแก้ไขการกำหนดค่า Apache ใน Debian และ Ubuntu ระบบไฟล์เป็น/etc/apache2/mods-available/ssl.conf บน CentOS และ Fedora ไฟล์เป็น/etc/httpd/conf.d/ssl.conf คุณจะต้องเพิ่มบรรทัดต่อไปนี้ในการกำหนดค่า Apache ของคุณด้วยคำสั่ง SSL อื่น ๆ

SSLProtocol All -SSLv2 -SSLv3

สิ่งนี้จะอนุญาตโปรโตคอลทั้งหมดยกเว้น SSLv2 และ SSLv3

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

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLCompression          off
# Read up on HSTS before you enable it (recommended)
# Header add Strict-Transport-Security "max-age=15768000"

จากนั้นตรวจสอบว่าการกำหนดค่าใหม่นั้นถูกต้อง (ไม่มีการพิมพ์ผิดหรือไม่):

sudo apache2ctl configtest

และรีสตาร์ทเซิร์ฟเวอร์เช่น

sudo service apache2 restart

ใน CentOS และ Fedora:

systemctl restart httpd

ข้อมูลเพิ่มเติม: เอกสาร Apache

ตอนนี้ทดสอบ: ถ้าเว็บไซต์ของคุณเป็นที่เปิดเผยต่อสาธารณชนทดสอบโดยใช้Qualys' เครื่องมือ


เซิร์ฟเวอร์ Nginx

หากคุณใช้ Nginx เพียงแค่รวมบรรทัดต่อไปนี้ในการกำหนดค่าของคุณในคำสั่ง SSL อื่น ๆ :

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

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

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
# Read up on HSTS before you enable it (recommended)
# add_header Strict-Transport-Security max-age=15768000;

และรีสตาร์ทเซิร์ฟเวอร์เช่น

sudo service nginx restart

การอ้างอิง: เอกสารประกอบ Nginx

ตอนนี้ทดสอบ: ถ้าเว็บไซต์ของคุณเป็นที่สาธารณะที่มีอยู่แล้วให้ทดสอบโดยใช้เครื่องมือ Qualys' SSL Labs


เว็บเซิร์ฟเวอร์ Lighttpd

Lighttpd เวอร์ชั่น> 1.4.28 รองรับตัวเลือกการกำหนดค่าเพื่อปิดใช้งาน SSLv2 และ v3 Lighttpd ออกก่อน 1.4.28 อนุญาตให้คุณปิดการใช้งาน SSLv2 เท่านั้น โปรดทราบว่า Ubuntu 12.04 LTS และการติดตั้งรุ่นก่อนหน้านี้ที่ lighttpd v1.4.28 ที่ดีที่สุดและดังนั้นจึงไม่มีการแก้ไขที่ง่ายสำหรับการแจกจ่ายเหล่านั้น ดังนั้นการแก้ไขนี้ควรใช้กับอูบุนตูที่มีรุ่นมากกว่า 12.04 เท่านั้น

สำหรับ Ubuntu รุ่น 12.04 หรือ Debian 6 แพ็คเกจ lighttpd ที่อัปเดตมีอยู่ในที่เก็บ openSUSE: http://download.opensuse.org/repositories/server:/http/Debian_6.0

แพคเกจมีไว้สำหรับ Debian 6 (บีบ) แต่ทำงานบน 12.04 (แม่นยำ)

แก้ไขของคุณ/etc/lighttpd/lighttpd.confเพื่อเพิ่มบรรทัดต่อไปนี้หลังจากssl.engine = "enable"คำสั่ง

ssl.use-sslv2          = "disable"
ssl.use-sslv3          = "disable"

จากนั้นคุณควรรีสตาร์ทเซอร์วิส lighttpd ด้วยsudo service lighttpd restartและทำการทดสอบ ssl3 handshake ดังที่อธิบายไว้ในส่วนก่อนหน้าเพื่อให้แน่ใจว่าการเปลี่ยนแปลงนั้นได้ดำเนินการเรียบร้อยแล้ว

ที่นำมาจากhttp://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL


SMTP Postfix

สำหรับ 'ฉวยโอกาส SSL' (ไม่บังคับใช้นโยบายการเข้ารหัสและธรรมดาก็ยอมรับได้เช่นกัน) คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรเลย แม้ SSLv2 จะดีกว่าธรรมดาดังนั้นหากคุณต้องการรักษาความปลอดภัยเซิร์ฟเวอร์ของคุณคุณควรใช้โหมด 'SSL ที่จำเป็น' ต่อไป

สำหรับโหมด 'ข้อบังคับ SSL' ที่กำหนดค่าไว้แล้วให้เพิ่ม / เปลี่ยนการตั้งค่าsmtpd_tls_mandatory_protocolsสำหรับการเชื่อมต่อขาเข้าและsmtp_tls_mandatory_protocolsสำหรับการเชื่อมต่อขาออก:

smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3

ทางเลือกถ้าคุณต้องการปิดการใช้งาน SSLv3 สำหรับการเข้ารหัสแบบฉวยโอกาสเช่นกัน (แม้ว่าจะไม่จำเป็นตามที่อธิบายไว้ข้างต้น) ให้ทำดังนี้:

smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3

และรีสตาร์ท Postfix:

sudo service postfix restart

ส่งอีเมล์

(แก้ไขโดยผู้ใช้ที่ไม่ระบุชื่อฉันไม่พอใจกับ Sendmail โปรดยืนยัน)

ตัวเลือกเหล่านี้ได้รับการกำหนดค่าในLOCAL_CONFIGส่วนของคุณsendmail.mc

LOCAL_CONFIG
O CipherList=HIGH
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3

Dovecot

ใน Dovecot v2.1 + ให้เพิ่มสิ่งต่อไปนี้/etc/dovecot/local.confในไฟล์ (หรือไฟล์ใหม่ของคุณ/etc/dovecot/conf.d):

ssl_protocols = !SSLv2 !SSLv3

และรีสตาร์ท Dovecot:

sudo service dovecot restart

สำหรับรุ่นเก่าคุณจะต้องแก้ไขรหัสที่มา


Courier-imap (imapd-ssl)

Courier-imap อนุญาตให้ SSLv3 เป็นค่าเริ่มต้นบน Ubuntu 12.04 และอื่น ๆ คุณควรปิดการใช้งานและใช้ STARTTLS แทนเพื่อบังคับใช้ TLS แก้ไข/etc/courier/imapd-sslไฟล์กำหนดค่าของคุณเพื่อสะท้อนถึงการเปลี่ยนแปลงต่อไปนี้

IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CIPHER_LIST="<take those from the Mozilla TLS Server guide!>"

เซิร์ฟเวอร์ HAProxy

SSL รองรับ HAProxy> = 1.5

แก้ไข/etc/haproxy.cfgไฟล์และค้นหาbindบรรทัดของคุณ no-sslv3ผนวก ตัวอย่างเช่น:

bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3

การอ้างอิง: เอกสาร HAProxy


OpenVPN

ดูเหมือนจะไม่ได้รับผลกระทบ ( แหล่งที่มา )

OpenVPN ใช้ TLSv1.0 หรือ (พร้อม> = 2.3.3) เป็นทางเลือก TLSv1.2 และดังนั้นจึงไม่ได้รับผลกระทบจาก POODLE


หุ่นเชิด

Puppet ใช้ SSL ผ่าน HTTPS แต่ไม่ได้ใช้งานโดยไคลเอนต์ 'เบราว์เซอร์' เพียงตัวแทนหุ่นเชิดซึ่งไม่เสี่ยงต่อการถูกโจมตีจากเวคเตอร์ อย่างไรก็ตามวิธีที่ดีที่สุดคือปิดใช้งาน SSLv3

คำแนะนำของฉันคือการใช้โมดูล stephenrjohnson / puppetmodule Puppet เพื่อตั้งค่า Puppet master ของคุณซึ่งฉันฆ่า SSLv3เมื่อไม่นานมานี้


7
คำตอบนี้ถูกสร้างขึ้นอย่างรวดเร็วมากหลังจากมีการเปิดเผยช่องโหว่ อาจมีข้อผิดพลาดเกิดขึ้น - เช่นเคยโปรดแก้ไข / ปรับปรุง
gertvdijk

1
การกำหนดค่า Nginx ไม่ควรมีโคลอนหลังจากคำสั่ง ssl_protocols
มิเชล

1
เอาล่ะสำหรับ Firefox ฉันเชื่อว่านี่คือสิ่งที่เกิดขึ้น
fuglede

4
โพสต์บล็อกของ Mozilla Security นี้แนะนำให้ติดตั้งAdd-on นี้แทนการปรับแต่งด้วยตนเอง
legoscia

1
@muru นี่คือจุดเริ่มต้นของการฆ่า SSLv3 ในระดับไฟร์วอลล์ blog.g3rt.nl/take-down-sslv3-using-iptables.html
gertvdijk

4

อาจจะไม่ได้อูบุนตูที่เฉพาะเจาะจง แต่เพื่อที่จะทำงานรอบ vulnerablity พุดเดิ้ลใน Node.js คุณสามารถตั้งค่าsecureOptionsการrequire('constants').SSL_OP_NO_SSLv3เมื่อคุณสร้าง https หรือ TLS เซิร์ฟเวอร์

ดูhttps://gist.github.com/3rd-Eden/715522f6950044da45d8สำหรับข้อมูลเพิ่มเติม


1
IMO คุณไม่ควรเปิดเผย HTTP (S) ด้วย Node / Python / Ruby หรืออะไรทำนองนั้นโดยตรง ใส่ HTTPd ที่เหมาะสมไว้ข้างหน้าอย่าง Apache / Nginx / ...
gertvdijk

ใช่คุณไม่ควรเปิดเผยโดยตรง ภาษานั้นไม่ค่อยดีกับ tcp เลเยอร์ HTTP แต่มันใช้งานซ็อกเก็ตได้ดี ให้ nginx อ่านจากซ็อกเก็ต :-)
jrg

4
สิ่งนี้ไม่สมควรได้รับการโหวต มีหลายกรณีที่ใช้ tls นอกเหนือจากการโฮสต์เซิร์ฟเวอร์ http
psanford

@gertvdijk & jrg Node.js ไม่ใช่ภาษา มันเป็นกรอบสำหรับการสร้างแอปพลิเคชั่นเครือข่ายที่ปรับขนาดได้ และตามที่คุณระบุว่าคุณควรวาง Node.js ไว้ข้างหลังเซิร์ฟเวอร์ Apache (และเรียกว่า "ดี") แล้วทำให้ชัดเจนว่าคุณไม่มีความคิดอย่างแน่นอนว่าคุณกำลังพูดถึงอะไร ระบุว่าพวกเขาไม่ดีกับ tpc / http เป็นอคติส่วนตัวอย่างเห็นได้ชัด โปรดอยู่ในหัวข้อที่ไม่ต้องสนใจเทคโนโลยีการลงคะแนนแบบเด็ก ๆ ที่คุณไม่เข้าใจ
3rdEden

@ 3rdEden บางทีคำพูดของฉันอาจพูดได้นิดหน่อย แต่นี่คือบันทึกย่อที่ฉันอยากจะทำ 1) ฉันไม่ได้ลงคะแนน 2) ความคิดเห็นของฉันเป็น 'IMO' ที่อ่อนโยน 3) บางทีมันอาจเป็นเพียงพื้นหลังของฉันในด้านความปลอดภัย แต่ฉันได้เรียนรู้ว่าไม่ควรเปิดเผยกรอบแอปพลิเคชันโดยตรงกับ 80/443 ต่อโลกใน การผลิต (เว้นแต่เพื่อจุดประสงค์ในการสาธิต) 4) ฉันไม่เห็นว่าโพสต์ของคุณเป็น 'คำตอบ' สำหรับคำถามสำหรับผู้เข้าชม Ask Ubuntu ทั่วไปอย่างไร มันเฉพาะเจาะจงมากกับกรณีเฉพาะของการปรับใช้ Node.js
gertvdijk

0

"แก้ไข" สำหรับผู้ส่งเอกสารปิดการใช้งาน tls 1.1 และ tls 1.2 ดูเหมือนจะไม่มีทางเรียกใช้ courier ด้วย tls 1.1 หรือสูงกว่า การสแกน PCI บนเซิร์ฟเวอร์ของคุณอาจกลับมาพร้อมกับคำแนะนำ:

กำหนดค่าเซิร์ฟเวอร์ SSL / TLS เพื่อใช้ TLS 1.1 หรือ TLS 1.2 เท่านั้นหากได้รับการสนับสนุน กำหนดค่าเซิร์ฟเวอร์ SSL / TLS เพื่อรองรับเฉพาะชุดรหัสที่ไม่ได้ใช้บล็อกเลขศูนย์


-1

เนื่องจากช่องโหว่ของพุดเดิ้ลเป็นข้อบกพร่องในการออกแบบในโพรโทคอลและไม่ใช่ข้อผิดพลาดในการใช้งานจึงไม่มีแพตช์ วิธีเดียวที่จะลดสิ่งนี้คือปิดใช้งาน SSLv3 ในเซิร์ฟเวอร์ apache เพิ่มบรรทัดด้านล่างลงใน ssl.conf และทำการรีสตาร์ท apache ที่งดงาม

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

1
-1 สำหรับการรวม RC4 และ ECDSA ที่ไม่ทำงานเนื่องจากคนส่วนใหญ่มีใบรับรอง RSA โปรดอ่านวิธีกำหนดค่าเซิร์ฟเวอร์ของคุณอย่างถูกต้อง wiki.mozilla.org/Security/Server_Side_TLS
gertvdijk

2
@ gertvdijk ฉันเห็นด้วยกับคุณเกี่ยวกับ RC4 แต่ก็ไม่เจ็บที่จะรวมชุด ECDSA ไม่เป็นอันตรายหากคุณมีใบรับรอง RSA และช่วยคุณแก้ไขปัญหาการกำหนดค่าของคุณหากคุณได้รับใบรับรอง ECDSA ในภายหลัง
Matt Nordhoff

@MattNordhoff ยุติธรรมเพียงพอ แต่สิ่งที่ฉันหมายถึงคือไม่มี ciphers จำนวนมากเหลืออยู่สำหรับการกำหนดค่าตามใบรับรอง RSA ปกติ มันจะทำงานในเบราว์เซอร์ส่วนใหญ่ แต่อาจประสบปัญหาความเข้ากันได้
gertvdijk

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