Из-за CVE-2014-6271 и CVE-2014-7169 на OS XI возник вопрос: можно ли полностью заменить bash другой, незатронутой оболочкой (например, dash или другими)?
Во-первых, вам не нужно этого делать, если вы не предлагаете веб-службы общедоступному Интернету со своего 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 из исходников .
В большинстве случаев лучше дождаться официальных обновлений.
Как сказал @webmarc, нет. Вы можете заменить /bin/bash
его какой-нибудь другой оболочкой, но вы обязательно сломаете некоторые программы, потому что bash имеет несколько отличий в синтаксисе, которые делают его несовместимым. Я не смог найти альтернативную оболочку, совместимую с bash. Однако я сделал символическую ссылку на тире /bin/sh
и пока не обнаружил проблем.
Что касается DHCP, здесь есть доказательство концепции атаки. Статья о dhcpcd
(клиенте для Linux). Я не уверен насчет Mac OS X. В обсуждении на Hacker News говорится, что клиент OS X вообще не использует bash.
Другой вектор может быть sshd
. Но атака требует аутентификации. Итак, если вы не используете какую-либо службу ssh, например git
сервер, вы должны быть в безопасности.
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", то первая строка является просто комментарием и игнорируется, но с таким подходом вы можете сломать только то, что вы меняете, когда вы меняете их.
Джакомо1968
Ян С.