จะทดสอบได้อย่างไรว่าเซิร์ฟเวอร์ของฉันเสี่ยงต่อข้อผิดพลาด ShellShock หรือไม่


80

ฉันจะมั่นใจได้อย่างไรว่าการติดตั้ง Bash ของฉันไม่เสี่ยงต่อข้อผิดพลาดของShellShockอีกต่อไปหลังจากการอัพเดต



โปรดทราบว่ามีช่องโหว่อีกสองช่องทางในการทุบตียังไม่ได้ทำการแก้ไข (CVE-2014-7186 และ CVE-2014-7187)
Deer Hunter

แพทช์ที่แก้ไข CVE-2014-7186 และ CVE-2014-7187 มีวางจำหน่ายแล้วไม่นานหลังจาก Deer Hunter โพสต์ความคิดเห็นของเขา หากคุณมีแพตช์ให้ distro สำหรับ CVE-2014-7169 คุณอาจมีเพียงพอที่จะบล็อก 7186/7187 ทดสอบระบบของคุณด้วยคำสั่งด้านล่างและดู ตรวจสอบการอัพเดทความปลอดภัยเพิ่มเติมสำหรับ distro ของคุณด้วย
BeowulfNode42

คำตอบ:


83

เพื่อตรวจสอบช่องโหว่ CVE-2014-6271

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

ไม่ควรสะท้อนกลับคำที่มีช่องโหว่


วิธีตรวจสอบช่องโหว่ CVE-2014-7169
(คำเตือน: หากคุณล้มเหลวจะทำการสร้างหรือเขียนทับไฟล์ที่เรียก/tmp/echoว่าคุณสามารถลบได้หลังจากนั้นและจำเป็นต้องลบก่อนทำการทดสอบอีกครั้ง)

cd /tmp; env X='() { (a)=>\' bash -c "echo date"; cat echo

cat: echo: No such file or directoryมันควรจะพูดว่าวันที่คำแล้วบ่นด้วยข้อความเช่น ถ้ามันบอกคุณว่าวันที่และเวลาปัจจุบันเป็นอย่างไรระบบของคุณจะมีความเสี่ยง


วิธีตรวจสอบ CVE-2014-7186

bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"

CVE-2014-7186 vulnerable, redir_stackมันไม่ควรสะท้อนกลับข้อความ


วิธีตรวจสอบ CVE-2014-7187

(for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"

CVE-2014-7187 vulnerable, word_linenoมันไม่ควรสะท้อนกลับข้อความ


วิธีตรวจสอบ CVE-2014-6277 ฉันไม่แน่ใจ 100% เกี่ยวกับสิ่งนี้เนื่องจากดูเหมือนว่าจะใช้ระบบที่ได้รับการติดตั้งแล้วบางส่วนซึ่งฉันไม่สามารถเข้าถึงได้อีกต่อไป

env HTTP_COOKIE="() { x() { _; }; x() { _; } <<`perl -e '{print "A"x1000}'`; }" bash -c "echo testing CVE-2014-6277"

ผลการผ่านในสิ่งนี้คือมันสะท้อนกลับข้อความtesting CVE-2014-6277เท่านั้น ถ้ามันทำงาน Perl หรือถ้ามันบ่นว่า Perl ไม่ได้ติดตั้งที่แน่นอนล้มเหลว ฉันไม่แน่ใจเกี่ยวกับลักษณะความล้มเหลวอื่น ๆ เนื่องจากฉันไม่มีระบบที่ไม่ได้จับคู่อีกต่อไป


วิธีตรวจสอบ CVE-2014-6278 อีกครั้งฉันไม่แน่ใจ 100% ว่าถ้าการทดสอบนี้เพราะฉันไม่มีระบบที่ไม่มีการแก้ไขอีกต่อไป

env HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c "echo testing CVE-2014-6278"

ผ่านสำหรับการทดสอบนี้คือควรสะท้อนกลับข้อความtesting CVE-2014-6278เท่านั้น หากคุณสะท้อนกลับไปhi momทุกที่ที่แน่นอนล้มเหลว


1
เราสามารถเพิ่มการทดสอบทั่วไปfoo='() { echo not patched; }' bash -c fooลงในสิ่งนี้ได้หรือไม่? จนกว่าการส่งออกฟังก์ชั่นจะอยู่ในเนมสเปซที่แยกจากกันเราจะไม่หยุดทำงานจากตัวแยกวิเคราะห์ข้อผิดพลาดตัวหนึ่งไปยังตัวถัดไป
billyw

การทดสอบนั้นมี CVE หรือไม่? คุณมีข้อมูลอ้างอิงเพื่ออธิบายปัญหานี้หรือไม่? นอกจากนี้ข้อมูลประเภทนี้อาจเป็นหนึ่งในคำถามอื่น ๆ เกี่ยวกับ shellshock เนื่องจาก Q นี้เกี่ยวกับวิธีการทดสอบความสำเร็จหรือความล้มเหลวของแพทช์ที่มีอยู่
BeowulfNode42

นั้นมาจากการโพสต์บล็อกของ Michal Zalewski ในบางส่วนของ Shellshock CVE ( lcamtuf.blogspot.com/2014/09/… ) เป็นการทดสอบที่แนะนำสำหรับ CVE-2014-6278 ซึ่งยังไม่เปิดเผยต่อสาธารณะ ดูเหมือนว่าฉันผิดเกี่ยวกับการทดสอบทั่วไปแม้ว่า; ฉันพบกรณีที่การทดสอบของ Zalewski ผ่านไปแล้ว แต่การทดสอบ CVE-2014-7187 ล้มเหลว
billyw

และนี่คือการเปิดเผยอย่างเต็มรูปแบบใน CVE-2014-6277 และ CVE-2014-6278 พร้อมกับคำสั่งเพื่อตรวจสอบพวกเขา: seclists.org/fulldisclosure/2014/Oct/9
billyw

สิ่งหนึ่งที่ควรทราบ: แม้ว่าเวอร์ชันของ BASH นั้นมีความเสี่ยงหากไม่มีสิ่งใดใช้ (เช่นบัญชีทั้งหมดที่ใช้โดย daemons เช่น "www" หรือ "ถ้วย" หรืออะไรก็ตาม) จะถูกกำหนดค่าด้วย BASH เป็นเชลล์เริ่มต้นและไม่มี รหัสของคุณเรียกระบบ () หรือสิ่งที่คล้ายกันการมีเวอร์ชั่นที่มีช่องโหว่อาจมีความเสี่ยงน้อยลง แต่ยังคงอัปเกรด BASH โดยเร็วที่สุด
DTK

32

ส่งออกตัวแปรสภาพแวดล้อมที่สร้างขึ้นเป็นพิเศษซึ่งจะได้รับการประเมินโดยอัตโนมัติโดยเวอร์ชันที่มีช่องโหว่ของ Bash:

$ export testbug='() { :;}; echo VULNERABLE'

ทีนี้ลองใช้ echo ง่ายๆเพื่อดูว่า Bash จะประเมินโค้ดเป็น $ testbug หรือไม่แม้ว่าคุณจะไม่ได้ใช้ตัวแปรนั้น:

$ bash -c "echo Hello"
VULNERABLE
Hello

หากแสดงสตริง "VULNERABLE" คำตอบนั้นชัดเจน ไม่เช่นนั้นคุณไม่ต้องกังวลและรุ่น Bash ที่แพตช์แล้วก็โอเค

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


5
นอกจากนี้ในการ CVE-2014-6271 การแก้ไขที่ไม่สมบูรณ์จาก Red Hat โดยเฉพาะอย่างยิ่งมีของตัวเองว่ายังคุ้มค่าต่อไปนี้: CVE-2014-7169
DocMax

3
หนึ่งซับที่ไม่ก่อให้เกิดมลพิษ env เปลือกของคุณและเกิดขึ้นในการทำงานแม้ว่า 'คุณกำลังใช้เปลือกเข้าสู่ระบบสำรอง (ซึ่งอาจไม่ทราบเกี่ยวกับexport):env testbug='() { :;}; echo VULNERABLE' bash -c "echo Hello"
Lloeki

1
มีรายละเอียดเฉพาะบางอย่างของ Ubuntu ที่นี่askubuntu.com/questions/528101/ … - ส่วนตัวฉันต้องอัปเกรดจาก Ubuntu 13.10 ถึง 14.04 เพื่อแก้ไขปัญหา
dodgy_coder

2

ShellShock เป็นกลุ่มของช่องโหว่ทุบตีมากกว่าหนึ่งช่องโหว่และในขณะนี้ยังมีช่องโหว่ที่ช่องโหว่นี้ดังนั้น ShellShock จึงเป็นปัญหาที่ยังเปิดอยู่มีเธรดพร้อมอัปเดตจาก RedHat เกี่ยวกับปัญหานี้

Redhat recommeds ต่อไปนี้:

เรียกใช้คำสั่ง:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"

หากผลลัพธ์คือ:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
test

คุณไม่มีการแก้ไขใด ๆ

หากผลลัพธ์คือ:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
bash: error importing function definition for `BASH_FUNC_x()'
test

คุณมีการCVE-2014-6271แก้ไข

หากผลลัพธ์ของคุณคือ:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `BASH_FUNC_x'
test

คุณไม่ได้อ่อนแอ

อีกส่วนหนึ่งของการตรวจสอบ ShellShock คือการตรวจสอบช่องโหว่ CVE-2014-7169 เพื่อให้แน่ใจว่าระบบได้รับการปกป้องจากปัญหาการสร้างไฟล์ เพื่อทดสอบว่าเวอร์ชั่น Bash ของคุณเสี่ยงต่อ CVE-2014-7169 หรือไม่ให้รันคำสั่งต่อไปนี้:

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
bash: x: line 1: syntax error near unexpected token `='
bash: x: line 1: `'
bash: error importing function definition for `x'
Fri Sep 26 11:49:58 GMT 2014

หากระบบของคุณมีความเสี่ยงเวลาและวันที่จะปรากฏขึ้นและ / tmp / echo จะถูกสร้างขึ้น

หากระบบของคุณไม่เสี่ยงคุณจะเห็นผลลัพธ์คล้ายกับ:

$ cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
date
cat: /tmp/echo: No such file or directory

2

ฉันเขียนโปรแกรมอรรถประโยชน์ CLI ชื่อShellShockerเพื่อทดสอบเว็บเซิร์ฟเวอร์ของคุณเพื่อหาช่องโหว่ในสคริปต์ CGI หากต้องการทดสอบเว็บไซต์ของคุณคุณจะต้องเรียกใช้:

python shellshocker.py <your-server-address>/<cgi-script-path>

กล่าวคือ

python shellshocker.py http://example.com/cgi-bin/possibly-vulnerable-script.cgi

แก้ไข: ยูทิลิตี้นี้ถูกนำมาลงขออภัย: '(


ลิงก์ของคุณเสียชีวิต
SSK

@SSK ขออภัย;) Mistype
เลียมมาร์แชลล์

ลิงก์ของคุณยังไม่ตาย
Mxx

ใช่ขอโทษฉันเอามันลงมา มันถูกใช้ประโยชน์ในวิธีที่ฉันไม่ชอบ
เลียมมาร์แชลล์

1

คุณสามารถส่ง CGI URL ของคุณไปยังการทดสอบออนไลน์นี้:

http://shellshock.iecra.org


4
มันสุภาพที่จะให้เหตุผลสำหรับการลงคะแนน
David

4
"เราบันทึกการสแกนทั้งหมด" ??? น่าขนลุก ฉันจะดาวน์โหลดไพ ธ อนและรันด้วยตัวเอง
แบรด

1
@brad อย่างน้อยพวกเขากำลังบอกคุณ ฉันแน่ใจว่าถ้าฉันให้บริการรักษาความปลอดภัย whitehat ที่ให้บริการนี้ฉันอาจเก็บบันทึกไว้ (ถ้าเพียงเคาน์เตอร์ที่ไม่มีรายละเอียดส่วนตัว) ว่ามีคนเข้ามาที่รายละเอียดไซต์ของพวกเขาในเว็บไซต์ที่บอกว่ามันจะเป็นอย่างไร พยายามทดสอบการเจาะระบบโดยไม่ต้องรับรู้มากเกี่ยวกับความถูกต้องของเว็บไซต์ที่เสนอการทดสอบ ... และพวกเขาต้องการบันทึกของผู้ที่ทดสอบสิ่งที่ในกรณีที่มีคนใช้บริการของพวกเขาในการค้นหาไซต์ที่มีช่องโหว่ของผู้อื่นด้วย ...
Rob Moir

-1

พิมพ์ env x = '() {:;}; echo ที่มีช่องโหว่ 'bash -c "echo นี่เป็นการทดสอบ" และถ้าสิ่งนี้ส่งคืนความเสี่ยงและนี่เป็นการทดสอบหมายความว่าเครื่อง OSX / Linux ของคุณได้รับผลกระทบ วิธีแก้ไขคือการอัพเดตเป็นเวอร์ชันล่าสุดของ bash


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