Як перевірити, чи мій сервер вразливий до помилки ShellShock?


80

Як я можу переконатися, що моя інсталяція Bash більше не вразлива для помилки ShellShock після оновлень?



Зверніть увагу, є ще дві вразливості в bash, які ще не є виправленими (CVE-2014-7186 та CVE-2014-7187).
Мисливець на оленів

Патчі, які виправляють CVE-2014-7186 та CVE-2014-7187, доступні невдовзі після того, як опублікував свій коментар Мисливець на оленів. Якщо у вас є патч, наданий дистрибутивом для CVE-2014-7169, можливо, вам вже вистачить для блокування 7186/7187, протестуйте свою систему за допомогою наведених нижче команд і перегляньте. Також перевірте, чи немає оновлень безпеки для вашого дистрибутива.
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? Чи є у вас посилання на опис цієї проблеми? Також така інформація може належати до одного з інших питань щодо оболонки, оскільки цей Q стосується того, як перевірити успіх чи невдачу існуючих патчів.
BeowulfNode42

Це повідомлення з блогу Міхала Залевського про майбутні програми CVE Shellshock ( lcamtuf.blogspot.com/2014/09/… ). Це його запропонований тест для CVE-2014-6278, який досі не є загальнодоступним. Здається, я помилявся щодо загальності тесту; Я вже стикався з випадком, коли тест Залевського пройшов, але тест CVE-2014-7187 не вдався.
billyw

Ось повне розкриття інформації про CVE-2014-6277 та CVE-2014-6278, а також команди для перевірки на них: seclists.org/fulldisclosure/2014/Oct/9
billyw

Одне зауваження: навіть якщо версія BASH є вразливою, якщо ніщо не використовує її (тобто всі облікові записи, які використовуються демонами, такими як "www" або "чашки" чи будь-що інше), налаштовані з BASH як їх оболонка за замовчуванням, і жодна з Ваша система викликів кодів () тощо), що має вразливу версію, можливо, менш ризикована, але все-таки оновити BASH як можна швидше.
DTK

32

Експортуйте спеціально створену змінну середовища, яка буде оцінена автоматично вразливими версіями Bash:

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

Тепер виконайте просте ехо, щоб побачити, чи оцінить Bash код у $ testbug, навіть якщо ви самі не використовували цю змінну:

$ bash -c "echo Hello"
VULNERABLE
Hello

Якщо він показує рядок "РЕЧЕНИЙ", відповідь очевидна. Інакше вам не потрібно хвилюватися, і ваша виправлена ​​версія Bash в порядку.

Зверніть увагу, що основні дистрибутиви Linux були випущені декількома виправленнями, а іноді вони не повністю виправляють вразливість. Продовжуйте перевіряти рекомендації щодо безпеки та записи CVE щодо цієї помилки.


5
Крім CVE-2014-6271, неповний виправлення з Red Hat, зокрема, має своє, що також варто дотримуватися: CVE-2014-7169 .
DocMax

3
Одне вкладиш, який не забруднює вашу оболонку оболонки і працює, навіть якщо ви використовуєте альтернативну оболонку для входу (про яку, можливо, не знаєте 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 - це практично поєднання декількох вразливих версій bash , і в цей момент також існує програмне забезпечення, яке використовує цю вразливість , тому ShellShock може бути проблемою, яка досі відкрита, є тема з оновленнями RedHat щодо цих питань .

Редхат повторив наступне:

Виконати команду:

$ 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

EDIT: ця утиліта знята, вибачте: '(


Ваше посилання мертве
SSK

@SSK Вибачте;) Неправильний тип.
Ліам Маршалл

Ваше посилання ще мертве.
Mxx

Так, вибачте, я зняв це. Це експлуатувались способами, які мені не подобалися.
Ліам Маршалл

1

Ви можете надіслати свою URL-адресу CGI до цього онлайн-тесту:

http://shellshock.iecra.org


4
Ввічливо вказувати на причину припущення.
Девід,

4
"Ми реєструємо всі сканування" ??? Моторошно. Я б завантажив пітон і запустив його сам.
Бред

1
@brad, принаймні, вони тобі говорять. Я впевнений, що якби я надавав службу безпеки Whitehat, яка пропонувала цю послугу, я можу добре вести журнал (якщо тільки лічильник без окремих деталей) про те, скільки людей сліпо ввели дані про свій сайт на веб-сайт, який сказав, що це буде спробувати тест на проникнення, не знаючи багато про справжність сайту, що пропонує тест ... і вони хочуть, щоб журнал того, хто тестував, на випадок, якщо хтось використовував їх послугу, щоб знайти вразливі сайти, що належать і іншим ...
Роб Моїр

-1

введіть env x = '() {:;}; echo уразливий 'bash -c' echo це тест ', і якщо це повертається вразливим і це тест, це означає, що ваша машина OSX / Linux постраждала. Засіб усунення - це оновлення до останньої версії bash.


6
Чому як корінь? Зовсім непотрібне.
Мат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.