Устаревшие версии Debian и Bash Shellshock

11

Мы используем Debian Etch, Lenny и Squeeze, потому что в этом магазине никогда не производились обновления; у нас более 150 систем с различными версиями Debian. В свете «шокового удара» на этой неделе, я предполагаю, что мне нужно обновить bash. Я не знаю Debian, поэтому я обеспокоен.

Могу ли я просто выполнить apt-get install bashна всех моих системах Debian и получить правильный пакет Bash, пока мой репозиторий указывает на запись Squeeze. Если нет, то какой у меня другой курс действий?

DavidH
источник
7
Вы можете выборочно перенести bash на эти системы. это, вероятно, будет работать нормально на них. Но вы действительно, действительно, должны обновить. Вы понимаете, что все, что старше oldstable, не имеет обновлений безопасности, верно? И имейте в виду, что эта уязвимость является лишь одной из многих.
Фахим Митха
Это даже проблема? Что в system shellэтой системе? (То есть оболочка, которую вы получаете, когда запускаете systemвызов POSIX, то есть / bin / sh). Если / bin / sh это bash, то вам нужно обновить. Если это не так ... Тогда вы, вероятно, в порядке (но вы все равно должны обновить сам bash)
Arafangion

Ответы:

11

У вас есть возможность просто обновить bash. Для этого используйте следующую apt-getкоманду:

apt-get update

Затем после получения обновления запустятся все доступные обновления:

apt-get install --only-upgrade bash

Чтобы получать обновления старых версий, например Squeeze, вам, вероятно, потребуется добавить репозиторий Squeeze-LTS в ваш список sources.list.

Чтобы добавить этот репозиторий, отредактируйте /etc/apt/sources.listи добавьте следующую строку в конец файла.

deb http://ftp.us.debian.org/debian squeeze-lts main non-free contrib

Чтобы проверить конкретную систему на наличие уязвимостей (или посмотреть, работает ли обновление), вы можете проверить версии bash, которые вы используете, и посмотреть, не подвержены ли они уязвимости (возможно, так оно и есть), или в Интернете доступно множество сценариев тестирования оболочки .

РЕДАКТИРОВАТЬ 1

Чтобы bashвыполнить обновление на Lenny или Etch, взгляните на приведенный ниже ответ Ильи Ширшоффа о том, как скомпилировать bashиз исходного кода и вручную обновить версию, bashкоторую использует ваш выпуск.

РЕДАКТИРОВАТЬ 2

Вот пример sources.listфайла с сервера Squeeze, который я успешно обновил:

deb http://ftp.us.debian.org/debian/ squeeze main
deb-src http://ftp.us.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.us.debian.org/debian/ squeeze-updates main
deb-src http://ftp.us.debian.org/debian/ squeeze-updates main

# Other - Adding the lsb source for security updates
deb http://http.debian.net/debian/ squeeze-lts main contrib non-free
deb-src http://http.debian.net/debian/ squeeze-lts main contrib non-free
111 ---
источник
Новичок может не знать, что он должен сначала запустить apt-get update, чтобы получить последний каталог пакетов.
Бренда Дж. Батлер
Мне пришлось использовать: deb ftp.us.debian.org/debian squeeze main contrib для обновления bash до версии 4.1-3, а затем использовать пропатченные источники, чтобы сделать его не уязвимым.
@ BrendaJ.Butler Хорошее предложение, я тоже добавил этот шаг.
111 ---
4

Если apt-get installопция не сработала, вам нужно перекомпилировать bash из исходников. Примеры Ленни и Этча в ответе. У меня нет машин Squeeze, но можно легко понять, что делать.

Решение от TaNNkoST я нашел в сети:

Проверьте количество доступных исправлений и измените их в части "(seq", если есть новые.

ДЛЯ ЛЕННИ

#first find out the version you have so you know what to get for the patches and source files
dpkg-query -l|grep bash
ii bash 4.1-3 The GNU Bourne Again SHell

#do this in the /usr/src dir
cd /usr/src
wget http://ftp.gnu.org/gnu/bash/bash-4.1.tar.gz
tar zxvf bash-4.1.tar.gz
cd bash-4.1

# fetch all patches, including latest ones that patches CVE-2014-6271
for i in $(seq -f "%03g" 0 14); do
wget -nv http://ftp.gnu.org/gnu/bash/bash-4.1-patches/bash41-$i
patch -p0 < bash41-$i
done

# check if yacc is installed. if not - install yacc
apt-get install bison

# configure,compile and install bash (this will install bash into /usr/local/bin/bash)
./configure && make
make install

# make a symlink from /bin/bash to the new binary
mv /bin/bash /bin/bash.old
ln -s /usr/local/bin/bash /bin/bash

# check that you're not vulnerable anymore wiith the output of the following
# it should not output vulnerable word anymore
env x='() { :;}; echo vulnerable' bash -c echo

#you can  Delete the old one thats a problem
rm /bin/bash.old

Для ETCH Я следовал той же логике, но я не был yaccустановлен в системе, поэтому мне пришлось установить bisonпакет для этого. Вот что я придумал:

#first find out the version you have so you know what to get for the patches and source files
dpkg-query -l|grep bash
ii bash 3.2-4 The GNU Bourne Again SHell

#do this in the /usr/src dir
cd /usr/src
wget http://ftp.gnu.org/gnu/bash/bash-3.2.tar.gz
tar zxvf bash-3.2.tar.gz
cd bash-3.2

# fetch all patches, including latest ones that patches CVE-2014-6271
for i in $(seq -f "%03g" 0 54); do
wget -nv http://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-$i
patch -p0 < bash32-$i
done

# check if yacc is installed. if not - install yacc
apt-get install bison

# configure,compile and install bash (this will install bash into /usr/local/bin/bash)
./configure && make
make install

# at this point my system is not vulnerable already, test your system
env VAR='() { :;}; echo Bash is vulnerable!' bash -c "echo Bash Test"

# if this is not the case for your system - try the following

# make a symlink from /bin/bash to the new binary
mv /bin/bash /bin/bash.old
ln -s /usr/local/bin/bash /bin/bash

# check that you're not vulnerable anymore wiith the output of the following
# it should not output vulnerable word anymore
env x='() { :;}; echo vulnerable' bash -c echo

#you can Delete the old one thats a problem
rm /bin/bash.old
Илья Ширсхофф
источник
1
Я обнаружил, что получил ошибку make: yacc: Command not foundдля решения Lenny, и исправил ее с помощью apt-get install bison.
SharpC
1

Не уверен, хотите ли вы доверять этим пакетам, но кто-то создал пакеты для woody (3.0), sarge (3.1), etch (4.0) и lenny (5.0). Они доступны здесь:

http://blog.bofh.it/debian/id_451

Будьте осторожны, нет репозитория для установки этих пакетов через apt-get. Вам нужно использовать dpkgили создать свой собственный локальный репозиторий.

TLO
источник
« если вы хотите доверять этим пакетам »? Они подписаны ключом GPG разработчика Debian. Как и любой другой официальный пакет Debian.
peppe
0

Для обновления Bash на многих разных ОС вы можете использовать универсальный скрипт Deshellshock .

апостол
источник