Можно ли полностью заменить bash в OS X?

Из-за CVE-2014-6271 и CVE-2014-7169 на OS XI возник вопрос: можно ли полностью заменить bash другой, незатронутой оболочкой (например, dash или другими)?

Пожалуйста, задайте часть этого вопроса об эксплойте DHCP как новый вопрос. Спасибо.

Ответы (6)

Во-первых, вам не нужно этого делать, если вы не предлагаете веб-службы общедоступному Интернету со своего Mac. Если нет, подождите, пока не выйдет официальное обновление безопасности от Apple.

Однако, если вы предлагаете веб-службы, вы можете захотеть обновить.

Официальный патч

Apple выпустила официальное обновление безопасности Bash здесь

Проверка на уязвимость

Сначала подтвердите, что вы используете устаревший bash:

$ which bash
/bin/bash
$ /bin/bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

Самая последняя версия bash — 4.3.25.

Если у вас не установлен Xcode, вам понадобятся инструменты командной строки Xcode, которые можно установить с помощью

$ xcode-select --install

Или с портала разработчиков .

Чтобы установить Brew ( http://brew.sh ):

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Затем выполните:

$ brew doctor

Следуйте инструкциям, если есть проблемы. Здесь решаются многие распространенные проблемы .

Затем обновите brew до последнего списка пакетов:

$ brew update

Чтобы получить последнюю версию bash 4.3.25:

$ brew install bash

Это устанавливает bash в/usr/local/Cellar/bash/4.3.25/bin/bash

Старый bashи shвсе еще существует по адресу /bin, поэтому после установки вы переименуете старые исполняемые файлы в новый файл.

$ sudo mv /bin/bash /bin/bash_old
$ sudo mv /bin/sh /bin/sh_old

Если вы очень параноик, вы можете удалить разрешения на выполнение наbash_old

$ sudo chmod a-x /bin/bash_old /bin/sh_old

Затем создайте символическую ссылку на новый bash 4.3.25, который установил brew.

$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh

Перезагружаемся и готово.

Предупреждение — это может привести к поломке некоторых существующих сценариев оболочки, которые могут полагаться на bash 3.2, или на различия, которые Mac shимеет по сравнению с linux sh. В этом посте есть гораздо более изощренный ответ на замену bash и sh из исходников .

В большинстве случаев лучше дождаться официальных обновлений.

«В большинстве случаев лучше дождаться официальных обновлений». Если кто-то не управляет сервером, ничего из этого на самом деле не нужно. Многие люди будут ломать свои установки OS X в ближайшие несколько дней, поскольку они паникуют, чтобы нейтрализовать угрозу, которую они едва понимают.
@JakeGould — согласен.
Я бы скопировал файлы вместо ссылки - если по каким-то причинам вы удалите установку brew, в вашей системе возникнет проблема....
Я думаю, что apple.stackexchange.com/a/146851/83347 - лучший ответ, потому что он использует источники из Apple....

Как сказал @webmarc, нет. Вы можете заменить /bin/bashего какой-нибудь другой оболочкой, но вы обязательно сломаете некоторые программы, потому что bash имеет несколько отличий в синтаксисе, которые делают его несовместимым. Я не смог найти альтернативную оболочку, совместимую с bash. Однако я сделал символическую ссылку на тире /bin/shи пока не обнаружил проблем.

Что касается DHCP, здесь есть доказательство концепции атаки. Статья о dhcpcd(клиенте для Linux). Я не уверен насчет Mac OS X. В обсуждении на Hacker News говорится, что клиент OS X вообще не использует bash.

Другой вектор может быть sshd. Но атака требует аутентификации. Итак, если вы не используете какую-либо службу ssh, например gitсервер, вы должны быть в безопасности.

«В обсуждении на Hacker News говорится, что клиент OS X вообще не использует bash». Где это обсуждение? Вы должны предоставить ссылку.
@JakeGould Ссылка уже есть в ответе. Прочитайте комментарии.

dashсодержит только крошечное подмножество команд, найденных в bashи даже sh(что само по себе является подмножеством вещей в bash). Замена любого из них dashна наверняка приведет к неработоспособным сценариям в вашей системе и, возможно, сломает вашу систему больше, чем защитит вашу систему.

Вы можете перекомпилировать bash , чтобы смягчить некоторые (на момент написания этой статьи) потенциальные опасности или подождать, пока Apple выпустит официальное исправление.

К сожалению, нет... разные оболочки имеют разный синтаксис, из-за чего сценарии, написанные для одной оболочки, могут быть несовместимы с другой оболочкой.

Я не видел заражение на основе DHCP, о котором вы говорите, можете ли вы предоставить ссылку в своем вопросе?

некоторые сайты указывают, что можно заразиться через DHCP-клиента.

Это не относится к OS X. В системах Linux сценарий оболочки обычно вызывается после получения от сервера аренды DHCP. В OS X такого нет.

Если вы не используете веб-сервер на своем Mac, который обслуживает сценарии CGI, у вас нет особых причин для беспокойства.

Да, если вы имеете в виду как /bin/sh, но это может быть проблематично, но если вы хотите заменить bash на /bin/bash или полностью удалить bash, в принципе нет, хотя это не невозможно, поскольку скрипты представляют собой текстовые файлы, вы можете отредактировать каждый сценарий оболочки, а затем самостоятельно поддерживать систему в остальное время ... Для bash нет замены.

Не то чтобы вам было легко заменить /bin/sh, но этому может быть конец. Если сценарий предполагает ваш /bin/sh , на самом деле является bash и использует вещи, уникальные для bash, тогда сценарий, начинающийся с #!/bin/sh , теперь сломается. Я переименовал свой /bin/sh в /bin/sh.was.bash , а затем сделал sh ссылкой на mksh , и перезагрузка была встречена приглашением #. Я снова перезагрузился с подробным флагом и нашел несколько строк в /etc/rc -- export -n, вещь bash, эквивалент оболочки korn - typeset +x, я изменил сценарий rc, и он загрузился, и ж/ все хорошо. Я экспериментирую с системой Tiger, поэтому есть rc-скрипт, и я не могу ожидать обновлений от Apple. В современной OSX нет rc-скрипта, НО современные приложения могут переходить от intel linux, где /bin/sh — bash, к intel-mac, где /bin/sh — тоже bash,

Так что, возможно, я должен сказать очень проблематично, потому что вы должны принять это как причину, НЕ делать этого. В свою защиту, я возился с демонами запуска и сценариями rc на этой и предыдущей неделе, играя с параметрами dynamic_pager, отключая несколько демонов запуска (делая их управляемыми с помощью переменных в hostconfig ), так что для меня , это я просто эксперимент, чуть более радикальный, чем я мог бы сделать сегодня, во всяком случае.

ЕСЛИ вы хотите что-то сделать, если думаете, что вы можете быть более уязвимы, чем другие, из-за дополнительного программного обеспечения и т. д., вы можете просмотреть каждый сценарий, который вас беспокоит, и изменить первую строку (shhbang), чтобы сделать что-то кроме #!/bin/sh или #/bin/bash, и будьте готовы отредактировать сценарии, поскольку они могут иметь специфические функции bash. BASH на самом деле похож на korn-shell, а не на bourne-подобную оболочку, такую ​​как ash или dash, поэтому, если вы хотите, чтобы изменения были тривиальными, используйте korn shell в качестве замены. На самом деле на tiger /bin/ksh это «НОВАЯ оболочка Korn», если это все еще верно, я бы сказал, что вам не нужно ничего устанавливать и оставить /bin в покое, что неплохая идея. , просто поменяйте скрипты на #!/bin/ksh, уберите башизмы для фич, общие для korn shell, но может повезет и их не будет.

Есть шанс, что "shhbang" можно будет игнорировать, так как если сценарий оболочки вызывается как "/bin/sh /etc/rc", то первая строка является просто комментарием и игнорируется, но с таким подходом вы можете сломать только то, что вы меняете, когда вы меняете их.