В сентябре были отысканы пара неточностей в командном процессоре Bash, употребляющемся в большинстве дистрибутивов Linux и некоторых UNIX-подобных системах, включая Mac OS X. Разные предположения этого интерпретатора и основанные на нём модификации командной оболочки распространены очень обширно. Они видятся не только в персональных компьютерах, но и на серверах, маршрутизаторах, точках доступа, мобильных устройствах и камерах наблюдения. Все они оказались под ударом, и в этом случае неприятность не решится несложным написанием патчей.
Как и большая часть командных процессоров, Bash поддерживает работу с функциями и переменными, включая переменные окружения. Сущность неприятности в том, что в случае если записать переменную среды как функцию и внедрить в её определение какие-либо команды, то они будут выполнены без проверки. К примеру, в случае если написать команду «echo: test» сразу после объявления функции «funct», то на экране отобразится «test», не смотря на то, что эта часть указана неверно и обязана игнорироваться.
VAR=() { fucnt; }; echo: “test”
Иными словами, каждые команды возможно передать при указании значения переменной, и Bash их выполнит. Специалист компании Errata Security Роберт Грэм (Robert Graham) приводит пример, в котором заставляет удалённую машину пинговать его компьютер. Это произошло из-за некорректной обработки её интерпретатором Bash поменянного запроса на сохранение Cookie.
http-header = Cookie:() { :; }; ping -c 3 209.126.230.74
Обратите внимание: удалённая команда выполнить пинг указанного IP-адреса также передаётся по окончании объявления функции. «Серьезность отысканной уязвимости пребывает в том, что командная оболочка Bash употребляется огромным числом программ», – писал Роберт Грэм. В перечень возможно уязвимого оборудования попадают кроме этого рутированные планшеты и смартфоны с ОС Android, гаджеты с iOS, для которых был выполнен jailbreak, и многие камеры наблюдения. Как это будет смотреться на практике? Приблизительно вот так.
Удалённый доступ к одной из камер работы безопасности в Ванкувере (фото: А.В.).
Firmware большинства IP-камер представляет собой один из вариантов Linux, адаптированный для встраиваемых совокупностей. У них и без того полно своеобразных неприятностей с ограничением доступа, но уязвимость в bash открывает новые возможности. Она разрешает ещё легче нападать их, а в отдельных случаях кроме того приобретать удалённый доступ к управляющим совокупностям.
Но, главной целью очевидно станут серверы. На веб-серверах (особенно Apache с модулем mod_cgi) Bash довольно часто употребляется для исполнения CGI-скриптов. Исходя из этого они и рассматриваются как основное направление атаки, делаемой за счёт отправки поменянных HTTP-запросов. Процесс поиска уязвимых серверов уже автоматизирован. Сейчас функционируют ботнеты, определяющих и поражающих уязвимые совокупности.
Среди вторых вероятных вариантов применения уязвимостей в Bash разглядывают атаку на OpenSSH, PHP и Pyton, и получение имени пользователя, встраиваемого в заголовок авторизации, посредством переменной REMOTE_USER. Воображают атаки и опасность по типу «отказ в обслуживании». На уязвимых совокупностях легко устроить флуд простым пингом либо загрузить сервер нескончаемой обработкой циклического запроса GET.
Уязвимость, названную Shellshock либо Bashdoor – это следствие не единичной неточности в Bash, а нарушения правил обработки экспортированных функций и переменных. Из-за некорректной интерпретации синтаксиса на уязвимых совокупностях делается вероятным удалённо запустить произвольные команды – загрузить любой файл либо получить доступ к файлам конфигурации. В первом случае удалённый компьютер будет заражён, а во втором – атакующая сторона возьмёт пароли и заберёт сервер под собственный полный контроль.
Shellshock – Tux отделается лёгкой контузией, в случае если Bash своевременно уведут из-под обстрела (изображение: Stanley Q Woodvine).
О первой неточности стало известно ещё 12 сентября. Её отыскал Стефан Чазелас (Stephane Chazelas) – сотрудник компании Akamai, деятельно участвующий во многих проектах с открытым исходным кодом. Соответствующий бюллетень CVE-2014-6271 в базе MITRE был скрыт от посторонних глаз практически на 15 дней. Это было сделано чтобы дать разработчикам время устранить уязвимость раньше, чем ей смогут воспользуются преступники. Но к моменту истечения срока ожидания стало известно, что неточность не единичная, а написанные патчи только частично решают проблему.
Как показывает анализ не хорошо сохранившейся истории трансформаций, первая неточность для того чтобы рода вкралась в Bash приблизительно в первой половине 90-ых годов двадцатого века – спустя четырнадцать лет по окончании появления его первой версии. Именно сейчас Брайан Фокс (Brian J. Fox) прекратил работу над усовершенствованиями интерпретатора, и дальше его продолжили развивать силами сообщества. Уязвимость показалась на протяжении расширения функциональности командной оболочки “всем миром” и двадцать два года оставалась без внимания.
Для Red Hat, Debian, CentOS и их форков уже вышли патчи, дешёвые через официальные репозитории. Apple выпустила обновления для Mac OS X Mavericks Lion и Mountain Lion Для OS X Yosemite исправления до тех пор пока нет. Ссылки на исправления для Bash предположений 3.0 – 4.3 были добавлены в бюллетень разработчиком GNU bash Четом Рэми (Chet Ramey).
Как мы знаем, беда не приходит одна. В прошлые выходные при анализе кода Bash сотрудник Гугл Михаил Залевский нашёл уязвимости другого рода, кроме этого допускающие удалённое исполнение кода. Их описанию посвящены другие бюллетени: CVE-2014-6277 и CVE-2014-6278. Они не касаются пользователей FreeBSD, NetBSD и OpenBSD, потому, что применяемые в этих ОС версии bash очень сильно модифицированы.
Инженер по информационной безопасности Гугл Тави Орманди (Tavis Ormandy) отыскал другую неточность, являющуюся следствием неполного устранения первой из отысканных в сентябре уязвимостей Bash. Подробности будут размещены в следующем бюллетене по окончании проверки исправлений.
На этом перечень уязвимостей Bash, основанных на неточностях в обработке команд, не заканчивается. За время написания статьи показались сообщения о трёх новых баг-репортах, находящихся на рассмотрении. Выполнить первичную диагностику собственной совокупности на присутствие уязвимости Bashdoor возможно различными методами. Несложный из них – собрать в Bash следующий код:
env a='() { :;}; echo vulnerable’ bash
Тут команда echo, отображающая на экране слово «vulnerable» указана как часть присваиваемого значения переменной «а». Исправленная версия bash выводит на экран сообщение об неточности в синтаксисе. Возможно уязвимыми считаются все версии Bash до 4.3 включительно. Проверить установленную версию возможно следующей командой.
echo $BASH_VERSION
Специалисты уверены в том, что уязвимости для того чтобы рода продолжат существовать в командном интерпретаторе Bash и его аналогах ещё неизвестно продолжительно, потому, что нет единого механизма обнаружения проблемных совокупностей и их своевременного обновления.