Недавно, были распространяющийся вокруг новостей относительно "CVE-2014-6271" (См. USN-2362-1), который является уязвимостью в Bash. Как я знаю, затронут ли я этим, как я могу зафиксировать его, и почему я должен заботиться?
Это разработано как канонический ответ для этой уязвимости, из-за ее объема и серьезности.
Bash является интерактивной оболочкой по умолчанию в Ubuntu. Когда Вы взаимодействуете через интерфейс с терминалом (или через эмулятор терминала, по tty, или через ssh), Вы обычно вводите команды это bash
будет читать и выполняться. Даже если Вы не используете терминал вообще, у Вас все еще есть Bash.
На Ubuntu, /bin/sh
не удар (это - тире). Только удар затронут этой уязвимостью.
Bash и ОС отслеживают ряд переменных среды, которые описывают текущего зарегистрированного пользователя, где искать программы на жестком диске и другие такие функции. Путем обработки переменной среды с определенной структурой взломщик смог выполнять код в следующий раз, когда Bash запускается.
Взломщик может установить ту переменную среды несколько путей:
ForceCommand
опция является вектором атаки. Учетные записи, оболочка которых не является ударом, не затронуты.После того как они устанавливают эту переменную, в следующий раз bash
открывается по любой причине, код Вашего взломщика будет выполнен. Это является особенно внушающим страх с sudo -s
, поскольку это порождает удар как суперпользователя (правило административного пользователя, которое имеет полный контроль над данными и программами Вашего компьютера). Даже если Вы только запускаете удар как типичный пользователь, что файлы пользователя могут быть удалены.
Важно отметить, что, даже если Вы не используете, колотят себя, много программ породят удар собой как часть их операции. Даже в этом случае Вы уязвимы. Однако Ubuntu /bin/sh
не удар, настолько только программы, которые явно вызывают удар а не оболочку сценариев значения по умолчанию, затронуты.
Согласно митре:
векторы, вовлекающие функцию ForceCommand в OpenSSH sshd, mod_cgi и mod_cgid модули в Apache Сервер HTTP, сценарии, выполняемые неуказанными клиентами DHCP и другими ситуациями, в которых установка среды происходит через границу полномочия от выполнения Bash.
Используйте dpkg для проверки установленной версии пакета:
dpkg -s bash | grep Version
Это будет искать информацию о Вашем bash
пакет и фильтр вывод, чтобы только показать Вам версию. Исправленные версии 4.3-7ubuntu1.4
, 4.2-2ubuntu2.5
, и 4.1-2ubuntu3.4
.
Например, я вижу:
wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4
и может решить, что я не уязвим.
Типичный менеджер по обновлению предложит Вам это обновление. Это - главный пример того, как обновления системы защиты важны, независимо от того, что ОС Вы используете или насколько хорошо сохраняемый это.
Бюллетень USN заявляет, что новые версии были выпущены для Тара Надежного человека Ubuntu 14.04, 12.04 Точных Ящеров и 10,04 Ясных Lynx. Если Вы не будете на одной из этих версий LTS, но будете на обоснованно-последней-версии, то Вы, скорее всего, сможете найти исправленный пакет.
Во-первых, проверьте если Вы
Если Вы уязвимы, необходимо сначала захватить новейшие списки пакета:
sudo apt-get update && sudo apt-get install bash
Первая команда удостоверяется, что у Вас есть новейший список пакета, который включает исправленную версию, и вторая команда устанавливает новейшую (фиксированную) версию удара.
В то время как ошибка только, кажется, играет роль, когда удар порожден, это - все еще хорошая идея перезагрузить сразу по возможности.
Украл это прочь cft в Hacker News . Если Вы испытываете затруднения из-за своего repos как я (Odroid-XU), то это должно работать приятно, если Вы хотите исправить/создать из источника.
TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do
wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
if [[ $? -ne "0" ]]; then
MAX=$(expr $i - 1)
break;
fi
done
tar zxf bash-4.3.tar.gz
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
echo apply patch bash43-$i
patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR
Тогда выполненный:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
И если Вы добираетесь:
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
Тогда Вы - вся польза!
<час> ПРЕДУПРЕЖДЕНИЕ: делают установку, установит, избивают /usr/local/bin
, таким образом /bin/bash
не изменяется и может быть вызван от завихрения!!
Если Вы находитесь на 11,04: используйте ниже шагов (это работало на меня)
cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
, если это не загружается, требуемые patche тогда устанавливают пакет ftp
apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install
, Чтобы видеть, был ли патч применен:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Примечание: Патч безопасности для CVE-2014-7169 был выпущен как обновление стандартной защиты. Нет никакой потребности добавить дополнительный ppa's для получения этого патча. Только следующее необходимо.
sudo apt-get update
sudo apt-get upgrade
Для обеспечения Вы исправили удар правильно, выполнили следующую команду
dpkg -s bash | grep Version
, Если Вы находитесь на 14.04 LTS, необходимо видеть вывод:
Version: 4.3-7ubuntu1.4
, Если Вы находитесь на 12.04 LTS, Ваш вывод должен быть:
Version: 4.2-2ubuntu2.5
Я использую Аккуратные 11.04, который является EOL (и я обновил/etc/apt/sources.list для использования old-releases.ubuntu.com), таким образом, я должен создать из источника. Я хотел создать .deb, таким образом, по крайней мере, пакет справляется, "знает", что версия удара не является по умолчанию. Я не на 100% успешен - однако, пакет регистрируется как "более новый" и bash
двоичный файл заканчивается зафиксированный, таким образом, вот то, что я сделал:
apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/
Теперь, в (sub) каталоге bash-4.2/
, существует: файл bash-4.2.tar.xz
, который должен быть распакован для получения до bash
источник; и названный подкаталог debian
.
Я внес следующие изменения для предотвращения зависимостей от texlive
: в bash-4.2/debian/control
:
Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript
... и в bash-4.2/debian/rules
:
binary-doc: bash-install #bash-doc-build
dh_testdir
dh_testroot
mkdir -p $(d_doc)/usr/share/doc/$(p)
dh_installdocs -p$(p_doc)
ifeq ($(with_gfdl),yes)
#cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
rm -f $(d_doc)/usr/share/doc-base/bashref
endif
rm -f $(d_doc)/usr/share/info/dir*
#cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
# $(d_doc)/usr/share/doc/$(p)/
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
# /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
...
Изменить версию, в этом bash-4.2/
каталог, сделайте:
bash-4.2$ dch --local patchCVE
... и заполните примечания в журнале изменений при выяснении. Это гарантирует, что .deb (и связанные метаданные) называют (в моем случае) bash_4.2-0ubuntu3patchCVE1_i386.deb
.
Затем можно попытаться создать с dpkg-buildpackage -us -uc
или debuild
команда. Отметьте - любой из них повторно распакует источник от zip - таким образом переопределяющий любые патчи, которые Вы, возможно, имели! Однако, выполните один из них однажды, таким образом, источник распакован и создан (примечание debuild
может все еще перестать работать в конце из-за texlive, но он должен распаковать и создать источник).
Затем примените патчи; обратите внимание, что необходимо использовать -p1
здесь, потому что в настоящее время Вы находитесь в bash-4.2/
каталог:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
Затем восстановите исправленную версию путем выполнения:
bash-4.2$ fakeroot debian/rules build
Это восстановило бы исполняемый файл; протестировать его:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
Для создания .deb файлов работайте:
bash-4.2$ fakeroot debian/rules binary
Это сохранит .deb файлы в родительском каталоге; перечислять их содержание:
bash-4.2$ dpkg -c ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Устанавливать .deb:
bash-4.2$ sudo dpkg -i ../bash_4.2-0ubuntu3patchCVE1_i386.deb
Однако по некоторым причинам этот .deb содержит неисправленный двоичный файл (?!), таким образом, я должен был дополнительно сделать:
bash-4.2$ sudo cp bash-4.2/build-bash/bash /bin/
... и после этого, тест начал передавать правильно для меня:
$ env VAR='() { :;}; echo Bash is!' bash -c "echo Bash Test"
bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR'
Bash Test