Учитывая, что Bash 3.2 (версия, поставляемая OS X) уязвима для эксплойта удаленного выполнения, известного как «Шок оболочки» ( CVE-2014-6271 и CVE-2014-7169 ), как мне перестроить Bash и защитить свою систему перед официальный патч Apple?
ОБНОВЛЕНИЕ: Обратите внимание, что Apple выпустила официальный патч. Смотрите ниже для деталей.
Ответы:
Статус
Apple выпустила исправления безопасности Bash для Shellshock и связанных с ними уязвимостей как « OS X bash Update 1.0 ». Они могут быть установлены через обычное обновление системы для людей, использующих OS X Mountain Lion v10.8.5 или OS X Mavericks v10.9.5 (они включены в Обновление безопасности 2014-005 ), а также могут быть установлены вручную. Официальные исправления Apple также доступны для OS X Lion v10.7.5 и OS X Lion Server v10.7.5, но доступны только при ручной загрузке. Исправления безопасности доступны по различным URL-адресам в зависимости от версии операционной системы:
(Если выпущены новые патчи, разместите их здесь, но, пожалуйста, сохраните их и для справки.)
Патч Apple заботится о Shellshock и некоторых других уязвимостях и подходит для большинства людей. TL; д-р люди могут перестать читать здесь.
ОДНАКО внимание, привлеченное к bash из-за ошибки Shellshock, заставило многих исследователей внимательно взглянуть на bash, и все больше и больше (трудно эксплуатируемых) уязвимостей продолжают обнаруживаться. Если вы очень обеспокоены безопасностью (потому что, возможно, вы используете OS X Server для размещения общедоступного веб-сайта), вы можете (попытаться) не отставать от уязвимостей и исправлений, поскольку они продолжают действовать, компилируя bash самостоятельно. В противном случае, не беспокойтесь об этом.
Ищите, что Apple выпустит еще одно обновление, которое выйдет в будущем, когда пыль осядет в поисках новых уязвимостей.
Доступен официальный набор патчей самого bash для bash 3.2, патчей 52, 53 и 54 (которые соответствуют патчам 25, 26 и 27 Bash 4.3), исправляющих как CVE-2014-6271, так и CVE-2014-7169, а также «Игра окончена», показанная ниже. Это было проверено мной ( @alblue ), и пост был обновлен соответствующим образом (и затем были сделаны дополнительные обновления: см. Редакцию 41 для поста, который останавливается на патче 54).
Сообщалось о множестве дополнительных уязвимостей в отношении bash. По словам Михала Залевский посту , если у вас есть участок 54 (и , предположительно , официальный патч от Apple) «нет никакого смысла увлеченно о статусе этих индивидуальных ошибок, потому что они больше не должны представлять угрозу безопасности:»
CVE-2014-6271 - оригинальная RCE, найденная Стефаном. Исправлено bash43-025 и соответствующими записями 24 сентября для других версий.
CVE-2014-7169 - ошибка создания файла / использования токена, найденная Тависом. Исправлено bash43-026 & co (26 сентября)
CVE-2014-7186 - вероятный сбой 10-ти с лишним риска здесь и сейчас, обнаруженный Флорианом и Тоддом. Исправлено bash43-028 & co (1 октября).
CVE-2014-7187 - Флориан обнаружил безаварийный, вероятно, без риска второй раз. Исправлено bash43-028 & co (1 октября).
CVE-2014-6277 - проблема неинициализированной памяти, почти наверняка RCE, обнаруженная Михалом Залевским. Никаких конкретных патчей пока нет.
CVE-2014-6278 - команда впрыска RCE, найденная Михалом Залевским. Никаких конкретных патчей пока нет.
Это становится довольно запутанным. К счастью, Chet Ramey, официальный разработчик bash, опубликовал CVE для исправления карт . Его пост ссылается на патчи для bash 4.3, я (@OldPro) перевел их на патчи для bash 3.2, что применимо к OS X. Кроме того, начиная с этого поста он выпустил патч 57, поэтому я добавил его ниже:
См Дэвид А. Уилера пост на временной шкале и более подробно.
@alblue опубликовал инструкции по сборке через патч 55. Я (@OldPro) добавил патчи 56 и 57 в инструкции, но не проверял их.
Тестирование на оригинальную уязвимость
Вы можете определить, уязвимы ли вы к исходной проблеме в CVE-2014-6271 , выполнив этот тест:
Приведенный выше вывод является примером неуязвимой
bash
версии. Если вы видите словоvulnerable
в выходных данных этой команды, выbash
уязвимы, и вам следует обновить. Ниже приведена уязвимая версия от OS X 10.8.5:Тестирование на новую Уязвимость
Было обновлено оригинальное сообщение, и Bash 3.2.52 (1) по-прежнему уязвим к вариации уязвимости, определенной в CVE-2014-7169.
Приведенный выше вывод является примером уязвимой
bash
версии. Если вы видите дату в выводе этой команды, выbash
уязвимы.Отключение автоматически импортируемых функций для предотвращения «Game Over»
Исследователи отметили, не классифицируя это как уязвимость, что сценарий может захватить функцию в подоболочке с помощью автоматически импортируемых функций:
Приведенный выше код в уязвимой системе будет отображаться
Game Over
вместо списка каталогов, от которого вы ожидаетеls
. Очевидно,echo 'Game Over'
может быть заменен любым вредоносным кодом, который вы хотите. Это стало известно как ошибка "Game Over".До появления исправления 54 и NetBSD, и FreeBSD по умолчанию отключали автоматический импорт функций bash, частично для того, чтобы предотвратить «окончание игры», но в основном для того, чтобы содержать любые дальнейшие ошибки в синтаксическом анализаторе (такие как CVE-2014-7169 ), какими они были продолжает обнаруживаться, и добавлен новый флаг командной строки
--import-functions
чтобы повторно включить старое поведение по умолчанию. Я (@alblue) подготовил патч (против 3.2.53), чтобы другие могли его использовать, если они тоже хотят принять это поведение, и включил его ниже. По умолчанию этот патч не включен в скрипт сборки ниже. Я (@OldPro) считаю, что этот патч больше не нужен или не является хорошей идеей, потому что он нарушает обратную совместимость, и уязвимости, от которых он защищает, очень хорошо устраняются патчем 54 и более ранними патчами, и включение этого неофициального патча предотвращает применение будущих патчей ,(Примечание для редакторов вопросов; пожалуйста, не включайте это по умолчанию, так как это неофициальный патч.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
Патч можно включить, запустив
export ADD_IMPORT_FUNCTIONS_PATCH=YES
перед запуском сборки. Обратите внимание, что включение этого исправления отключит исправление 54 и любые будущие исправления, потому что нельзя гарантировать совместимость будущих исправлений с неофициальным исправлением.В Apple Patch есть уязвимость Game Over, своего рода
Как отметил @ake_____ в твиттере, официальный патч Apple по-прежнему уязвим для засорения среды исполняемыми файлами:
Пользователи должны решить для себя, насколько это важно. Я (@OldPro) думаю, что беспокоиться не о чем, потому что нет никакого известного эксплойта для этого поведения (ему даже не был дан идентификатор CVE), потому что в общем случае непривилегированные удаленные злоумышленники не могут установить имя переменной среды, а злоумышленники с привилегиями не могут используйте это, чтобы получить привилегии, которых у них еще нет (по крайней мере, без использования дополнительной уязвимости).
Чтобы обеспечить небольшую предысторию, bash позволяет вам определять функции и, кроме того, позволяет экспортировать эти функции в подоболочки с помощью
export -f
команды. Раньше это реализовывалось путем создания переменной среды с тем же именем, что и у функции со значением, установленным для определения функции. ТакЭто произошло потому, что
export -f ls
создали переменную среды с именемls
. Уязвимость «Game Over» заключалась в том, что вы могли напрямую создавать эту переменную среды без необходимости сначала определять функцию, что означало, что если вы можете ввести правильное имя переменной, вы можете перехватить команду. Apple попыталась исправить это, затруднив создание переменной с правильным именем. Официальный патч 54 для bash фактически делает невозможным создание переменной с правильным именем, используя имена переменных, которые включают%
символ, который не допускается в имени переменной, эффективно помещая определения экспортированных функций в другое, зарезервированное пространство имен.Если ничего из вышеперечисленного не имеет для вас смысла, не беспокойтесь об этом. Вы в порядке с патчем Apple на данный момент.
Системные двоичные файлы
OS X 10.9.5 (последний стабильный выпуск на данный момент) поставляется с Bash v3.2.51:
Вы можете получить и перекомпилировать Bash следующим образом , при условии, что у вас установлен Xcode (и вы
xcodebuild
хотя бы раз запускали его, чтобы принять лицензию):(Примечание: вы можете запустить это, скопировав и вставив вышеуказанный блок кода, зайдя в Терминал и затем запустив его
pbpaste | cut -c 2- | sh
. Всегда будьте осторожны при запуске случайных сценариев из Интернета, хотя ...)После этого версия Bash должна быть v3.2.57:
В целях безопасности и после тестирования я рекомендую вам
chmod -x
старые версии, чтобы они не использовались повторно, или перенести их на резервный сайт.Другие ответы имеют решения для тех, кто использует MacPorts или Homebrew; они не решают проблему, они просто устанавливают дополнительные версии Bash. Пожалуйста, смотрите эти ответы, если вы хотите обновить их специально.
Спасибо
Спасибо Чету, который присматривает за bash и делает эти патчи доступными. Спасибо всем, кто прокомментировал это и улучшил его с течением времени.
Теперь Apple выпустила реальное исправление, хотя это все еще может быть полезно. Поскольку они выпустили исправление только для Lion и выше, а официальный патч предоставляет GNU bash, версия 3.2.53 (1) -release (x86_64-apple-darwin13), тем не менее, ошибка Game over все еще несколько уязвима. На этом этапе перестройка вашей собственной версии Bash для 3.2.57, вероятно, более безопасна, чем использование патча Apple, если вы не ошиблись.
источник
MacPorts
В результате вы получите версию bash 4.3.28 (1), в которой исправлены обе уязвимости (CVE-2014-6271 и CVE-2014-7169), а также некоторые обнаруженные впоследствии. Это полезно, если вы изменили оболочки для использования Macports bash для получения функций версии 4.
Это не решит проблему стандартных скриптов ОС как первой
#!/bin/sh
или#!/bin/bash
первой строки. Проблема такого рода заключается в том, что Macports старается не использовать предоставленные Apple версии программ, поскольку Macports обычно обновляется быстрее, например, имеет более новую версию bash)Вы можете сделать так, чтобы терминал использовал это как в Homebrew answer
Чтобы установить macports, выполните следующие инструкции :
1. Установите XCode и инструменты командной строки
XCode. 2. Согласитесь с лицензией XCode в терминале: sudo xcodebuild -license.
3. Загрузите MacPorts pkg для вашей версии OS X: ссылки приведены на странице
4. Запустить пкг
Когда у вас установлен macports, вам нужно установить последние версии, это можно сделать, запустив
и перекомпилируйте или получите последние двоичные файлы
источник
bash
обычно появляются в OS X - так что исправления системы, Homebrew и MacPorts исправлены. Возможно Fink, а также. Я лично предпочел бы, чтобы это было сделано в качестве редактирования ответа @ AlBlue. Так что это все один, самый правильный ответ.ПРИМЕЧАНИЕ относительно официального обновления 1.0 для Apple OS X bash. Это обновление программного обеспечения приводит только к официальной версии Apple bash до версии 3.2.53. Версия исправления 3.2.54 предлагает следующее изменение:
Для пользователей, которые уже установили исправления в системе с помощью двоичных файлов 3.2.54, вы можете либо заменить скомпилированные двоичные файлы исправлением Apple, либо оставить все как есть, но это не рекомендуется. Хотя Apple и оставила бинарную версию 3.2.53, патч Apple содержит исправление для следующего теста эксплойта:
env X='() { (a)=>\' sh -c "echo date"; cat echo
Это означает, что официальный двоичный файл Apple 3.2.53 содержит эквивалентную безопасность для двоичного файла GNU 3.2.54 vanilla. К сожалению, путаница, но это то, что есть. Исправление Apple не наполовину испечено. Похоже, это полное решение проблемы. Таким образом, приведенная ниже дорожная карта для компиляции ванили
bash
иsh
из источника GNU должна рассматриваться как исторический артефакт и, возможно, будет использоваться в качестве шаблона для того, как делать исправления в будущем, если они будут необходимы.ПРИМЕЧАНИЕ. В исходном GNU-источнике
sh
возникают проблемы с повышением привилегий, которые приводят к сбоям в различных установщиках, например в Adobe Flash. Я настоятельно рекомендую придерживаться исправленных двоичных файлов Apple. Считайте эту схему исправления устаревшей и опрометчивой.Существует новый патч GNU bash 3.2.55, который описывает следующее исправление:
Мы оставляем на усмотрение внимательного читателя решить, сидеть ли с официальными двоичными файлами Apple или исправлять свои собственные, чтобы справиться с новыми возможными эксплойтами. Лично я буду придерживаться двоичных файлов Apple.
Это сообщение подробно описано , как собрать и установить ваниль
bash
иsh
на OS X. Я выбрал этот путь следующим образом примеров с подробными использованием Apple, конкретный источника не оставил меня с правильным пересмотром патча. YMMV. Эта ванильная установка, однако, нацелена на замену двоичных файлов OS X таким образом, что, когда Apple наконец выпустит обновление для системы безопасности, эти ванильные замены будут узурпированы их соответствующими коллегами Apple.Моя базовая конфигурация:
OS X Lion 10.7.5 и Xcode 4.6.3 со всеми установленными утилитами командной строки.
Мои шаги, чтобы исправить это были:
Загрузите базовый исходный код bash для 3.2.48 с:
https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz
Загрузите исправления bash3.2.49, .50, .51, .52, .53, .54 и .55 из:
https://ftp.gnu.org/gnu/bash/bash-3.2-patches/
Я сохранил их как $ filename.patch, например, bash3.2.50.patch.
Компакт-диск в каталог загрузки и ...
Распакуйте основную ветку с исходным кодом:
Предполагая, что вы переименовали загруженные файлы исправлений, как описано ранее,
Затем …
Это должно показать успешные исправления различных файлов. Если нет, будьте готовы сделать некоторые исследования и расследования.
Следующий:
Это в основном поддержало ваши старые уязвимые оболочки bash и sh и удалило их исполняемые привилегии. Это дает вам возможность восстанавливать команды по мере необходимости, но устраняет их способность наносить урон в это время.
Следующий:
Это должно правильно настроить, скомпилировать и установить новый двоичный файл bash в / bin. После этого выйдите из Терминала и снова откройте.
Вы должны, все вещи счастливые и улыбающиеся, быть в состоянии
bash --version
и теперь увидеть 3.2.55, например:Точный вывод в приведенной выше команде будет отличаться в зависимости от вашей версии OS X.
Вы также должны иметь возможность проверить свою уязвимость
bash
и обнаружить, что это нормально.ПРИМЕЧАНИЕ. Пока мы исправили только bash, но
/bin/sh
исполняемый файл все еще находится в уязвимом состоянии. Простое копирование наbash
вершинеsh
это стиль Linux делать вещи. Однакоsh
реализация OS X имеет некоторые отличияbash
, поэтому вы захотите снова вытащить компилятор. Дополнительную информацию о том, какbash
и чемsh
отличаются OS X, можно найти здесь:https://apple.stackexchange.com/a/89327/91441
В вашем каталоге загрузки сделайте:
В вашем любимом редакторе, откройте файл
Makefile.in
и перейдите к строке 99. Мы собираемся изменить строку программы , так что двоичный выход мы этоsh
вместо того , чтобыbash
выглядеть примерно так:Сохраните это и затем
Теперь вы построите
sh
почти так же, как Apple.И последнее замечание: в некоторых (всех?) Системах Apple обычно помещает
bashbug
исполняемый файл в/usr/bin
. Наша компиляция поместит это в/bin
. Итак, последние шаги здесь:источник
READLINE_LIB = /usr/local/lib/libreadline.a
и выполните чистую компиляцию. Затем разденьте и скопируйте новый двоичный файл bash поверх/bin/bash
и/bin/sh
HISTORY_LIB = /usr/local/lib/libhistory.a
. В противном случае bash будет динамически связан с / usr / локальной версией libhistory.bash
как-то не сможет себя вести, просто потому что ядро другое. В любом случае я считаю свое решение временным; в конечном итоге Apple исправит проблему, и мои скомпилированные двоичные файлы будут заменены (/bin
в первую очередь это моя главная причина для компиляции .Для тех, кто борется с компиляцией из исходного кода, по состоянию на 29 сентября Apple официально выпустила исправления для Mac OS X 10.9.5, 10.8.5, а также 10.7.5:
источник
Во-первых, исправление bash и sh для этой уязвимости может повредить некоторые скрипты на вашем Mac. Вам действительно не нужно делать это, если вы не предлагаете веб-сервисы общедоступному Интернету прямо с вашего Mac. Поэтому, если это действительно не нужно, дождитесь официального обновления безопасности от Apple.
Будучи предупрежденным, вот несколько инструкций о том, как сделать это обновление, используя Brew на Mavericks 10.9.
Сначала убедитесь, что вы используете устаревший bash:
Самый актуальный bash - 4.3.25
Если у вас не установлен Xcode, вам понадобятся инструменты командной строки Xcode, которые могут быть установлены
Или с портала разработчиков .
Чтобы установить Brew ( http://brew.sh ):
Затем сделайте:
Следуйте инструкциям, если есть проблемы. Многие общие проблемы решаются здесь .
Затем обновите brew до последнего списка пакетов:
Чтобы получить последнюю версию bash 4.3.25:
Это устанавливает Bash в
/usr/local/Cellar/bash/4.3.25/bin/bash
Старый
bash
иsh
все еще существует в/bin
, поэтому после установки вы переименуете старые исполняемые файлы в новый файл.Если вы очень параноик, вы можете удалить разрешения на выполнение
bash_old
Затем создайте символическую ссылку на новый bash 4.3.25, который установлен brew.
Перезагрузите компьютер, и он завершен.
Предупреждение - это может нарушить некоторые существующие сценарии оболочки, которые могут опираться на bash 3.2 или отличия, которые есть у Mac
sh
над linuxsh
. Существует гораздо более изощренный ответ на замену bash и sh из исходников, из ответа @TraneFranks в этой же теме.источник
/bin/bash
и/bin/sh
это, вероятно, вызовет меньше проблем, чем обновление до последней версии Brew.OS X 10.6.8 - Снежный барс
Пост @AlBlue очень завершен. Однако на моем сервере OS X 10.6.8 его исправление не будет работать. У Apple нет исправлений для 10.6.8, а действия, описанные @AlBlue, не работают с Xcode 3.2.6 (последней версией для Snow Leopard). Я получаю ошибку:
По этой причине я использую brew.sh . Пожалуйста, прокомментируйте свои мысли, когда у вас есть лучшее решение для OS X 10.6.8 Snow Leopard. Смотрите также комментарий @Jerome, у него был успешный патч на OS X 10.6.8 Snow Leopard с использованием решения @ AlBlue. Так или иначе:
Сначала установите напиток со следующим вкладышем:
Обновить
brew
Теперь просто установите последнюю версию
bash
и замените текущую:Вы можете установить оболочку входа по умолчанию '
Command (complete path)
' для Terminal.app в его настройках ( Command,)примечание: в комментариях некоторые пользователи не считают этот метод подходящим. Но для меня это единственный приемлемый метод обновления BASH на OS X 10.6.8 Snow Leopard.
источник
sh
- вам тоже нужно это делать./bin/sh
! =/bin/bash
. Многие инструменты выкладываются,/bin/sh
когда вы запускаете системные команды.system()
Например, вызов Ruby используется,/bin/sh
когда у вас есть символ расширения оболочки, который необходимо раскрыть в строке. Вы играете в проигрышную игру, используя Homebrew, чтобы обновить системные бинарные файлы IMO. Вы должны обновить Homebrewbash
в дополнение к правильному обновлению двоичных файлов системы.xcodebuild
? Если так, то я этого не испытывал. У меня есть несколько веских советов, которые стоит уточнить: проверьте, есть ли у вас несколько сборок bash, рассмотрите возможность очистки (brew uninstall) и, возможно, переустановите xcode ... затем запустите процесс обновления заново.Вы можете следовать инструкциям здесь: https://github.com/tjluoma/bash-fix. В терминале выполните следующие действия:
источник