Сложно переоценить масштабы распространения уязвимости Bash Shellshock, ведь она присутствует во всех версиях Bash, начиная с версии 1.14, выпущенной в 1994 году. На фоне масштабов распространения Shellshock, недавно обнаруженная уязвимость OpenSSL Heartbleed просто меркнет, ведь она затрагивала версии openssl, выпущенные только за последние два года.
Казалось бы, чтобы получить доступ к bash, нужно иметь shell на соответствующем сервере, поэтому какая разница уязвим
ваш сервер или нет, ведь shell от него есть только у вас? Увы, все гораздо хуже. Если у вас на сервере запускаются
CGI/FastCGI скрипты, а это может быть и даже php, ведь он запускается в режиме FastCGI с помощью скрипта-wrapper’а,
написанного на … bash. Поэтому если на вашем сервере установлен bash с уязвимостью Shellshock, злоумышленник может
выполнять произвольные команды на вашем сервере просто указывая их в полях http-заголовков, например в поле
User-Agent
.
Если мы уже в достаточной степени убедили вас проверить вашу систему и обновить ее по необходимости, давайте приступим к активным действиям.
1. Проверим наличие уязвимости
Для проверки вашего bash на предмет уязвимости достаточно зайти в консоль сервера и выполнить вот такую команду:
env X="() { :;} ; echo vulnerable" bash -c "echo stuff"
Если в результате выполнения этой команды вы увидите две строки и одна из них будет со словом ‘vulnerable’, ваш bash уязвим.
2. Выясняем версию debian
Чтобы выяснить, какая версия debian установлена на вашем сервере, нужно выполнить команду
cat /etc/debian_version
Если в результате вы видите цифру, начинающуюся с 7 или со слова wheezy, вам повезло и debian у вас самый свежий, поэтому обновить его весьма просто (см.следующий раздел). Если же debian у вас версии 6 или 5, отчаиваться все равно не стоит и мы чуть ниже покажем что вы можете сделать в вашем случае.
3. Обновляем Debian версии 7 (Wheezy)
Все просто. Выполняем в консоли от имени пользователя root команды:
apt-get update
apt-cache policy bash
В выводе последней команды нас интересуют строки Installed:
и Candidate:
(“Установлен” и “Кандидат” в случае русской
локали в консоли). Скорее всего вы увидите что-то вроде:
Installed: 4.2+dfsg-0.1
Candidate: 4.2+dfsg-0.1+deb7u3
Если вдруг версия Candidate тоже равна 4.2+dfsg-0.1
, значит вам необходимо в файл /etc/apt/sources.list
добавить
строку:
deb http://security.debian.org/ wheezy/updates main contrib non-free
И снова выполнить apt-get update
Наконец, обновляем bash:
apt-get install bash
После этого необходимо открыть новую консоль, либо выйти из текущей консоли и зайти в нее снова, и снова повторить тест из первого раздела этой статьи.
4. Обновляем более старые версии Debian (Lenny, Squeeze)
Мы предлагаем весьма простой вариант обновления bash для вашего случая: установить пакет bash-static
из Debian Wheezy.
На многих сайтах вы прочитаете советы по сборке bash из исходных текстов, либо установки обновления bash из squeeze-lts,
но нам кажется, что наш вариант наиболее простой.
Для начала необходимо выяснить установлена у вас 32х битная система или 64х битная. Это можно сделать, выполнив команду:
file /bin/ls
Если в результате ее выполнения вы увидите строку “/bin/ls: ELF 32-bit ...
”, значит система 32 битная.
Если строка будет “/bin/ls: ELF 64-bit ...
”, соответственно, система у вас 64 битная.
Теперь скачаем требуемый пакет. Для 32 битной версии debian выполним:
wget -c http://security.debian.org/debian-security/pool/updates/main/b/bash/bash-static_4.2+dfsg-0.1+deb7u3_i386.deb
dpkg -i bash-static_4.2+dfsg-0.1+deb7u3_i386.deb
Для 64 битной версии выполним:
wget -c http://security.debian.org/debian-security/pool/updates/main/b/bash/bash-static_4.2+dfsg-0.1+deb7u3_amd64.deb
dpkg -i bash-static_4.2+dfsg-0.1+deb7u3_amd64.deb
Далее, независимо от версии debian:
dpkg-divert --divert /bin/bash.old-diverted --rename /bin/bash
ln -s /bin/bash-static /bin/bash
ln -sf /bin/bash /bin/sh
Готово, bash обновлен. После этого необходимо открыть новую консоль, либо выйти из текущей консоли и зайти в нее снова, и снова повторить тест из первого раздела этой статьи.