30 сентября 2014

Bash-ествие: серьёзнейший баг в популярной командной оболочке

Бизнес

Прошлая неделя ознаменовалась очередным глобальным «сигналом тревоги» для нашей области: во всех *Nix-подобных системах, включая Mac OS X, обнаружилась критическая уязвимость, по масштабам и серьёзности близкая, а, возможно, и превосходящая пресловутый Heartbleed, выявленный в апреле. Некоторые эксперты склонны преуменьшать серьёзность этого бага, другие, наоборот, считают, что это Heartbleed 2.0, а то и хуже. Познакомьтесь с BASH-уязвимостью, также известной под наименованием ShellShock.

В чём дело?

Уязвимость выявлена в командной оболочке Bourne again shell (сокр. BASH), написанной для Unix в 1989 году. Эта оболочка по умолчанию используется в Linux и Mac OS X, что означает уязвимость и этих систем.

Брешь, которую обнаружил Стефан Чазелас из Akamai, позволяет атакующему удалённо «присоединить» вредоносный исполняемый код к переменной, которая исполняется при вызове Bash.

В Национальной базе уязвимостей США эта брешь фигурирует под индексом CVE-2014-6271. Специалисты из американской Компьютерной группы реагирования на чрезвычайные ситуации (CERT) описали её так: «Эта уязвимость позволяет злоумышленникам передавать специально созданные переменные окружения, содержащие произвольные команды, которые могут выполняться на уязвимых системах. Это особенно опасно по причине того, что оболочка Bash очень распространена и может быть вызвана приложениями разными способами».

Более техническое описание доступно на сайте Национальной базы уязвимости. Там упоминается, что атакующие могут использовать в качестве вектора атаки функцию ForceCommand в OpensSH sshd, модули mod_cgi и mod_cgid в HTTP-сервере Apache, скрипты, исполняемые DHCP-клиентами и др.

Проблеме почти четверть века. И поскольку Bash используется повсеместно, брешь также оказывается вездесущей.

Подробности также можно найти на Securelist.

Что говорят?

Крайнюю серьёзность уязвимости не отрицает никто. Тот факт, что её очень просто эксплуатировать, а также её высокая потенциальная вредоносность и присутствие почти в любой *Nix-системе, делает её особенно устрашающей. CERT присвоил ей 10 из 10 баллов по шкале угроз.

В сообщении от Red Hat говорится: «Эта уязвимость CVE-2014-6271 допускает запуск произвольного кода. Определённые службы и приложения позволяют атакующим, удалённо и в обход какой-либо аутентификации задавать переменные сред и тем самым эксплуатировать проблему… Эта проблема затрагивает все продукты, которые используют Bash и осуществляют парсинг значений переменных сред. Угроза особенно велика, поскольку существует множество способов вызова Bash со стороны разных приложений. Довольно частно если приложение исполняет другой двоичный код, для этого также вызывается Bash.»

Согласно Ars Technica, «Если Bash является системной командной оболочкой по умолчанию, злоумышленники могут использовать его для удалённых атак на серверы и другие устройства, использующие Unix и Linux, через сетевые вызовы, защищённую командную оболочку, сессии telnet и другие программы, которые используют Bash для запуска скриптов».

Роберт Грэм из Errata Security уверен, что #BashBug ничуть не менее опасен, чем Heartbleed, a то и представляет ещё большую угрозу.

«Огромное количество ПО взаимодействует с этой оболочкой тем или иным способом», — написал он. — «Таким образом, мы никогда не сможем составить полный список ПО, уязвимого из-за бреши Bash. Тем самым проявляется сходство с брешью в OpensSSL: OpenSSL присутствует в бесчисленном множестве ПО, так что в полной мере оценить, какая часть ПО уязвима, не представляется возможным».

Грэм также указывает, что баг особенно опасен для устройств, относящихся к т.н. «интернету-вещей» — видеокамерам, например, поскольку «значительная часть их прошивок состоит из скриптов Bash с прямым подключением к Сети. Таким образом, их не только сложно пропатчить, через них эту уязвимость ещё и проще всего эксплуатировать».

Ну, а если вспомнить, что значительная часть устройств такого рода вообще невозможно перепрошить, ситуация выглядит, мягко говоря, неважно.

Ну, а с другой стороны, эксперты Rapid7 говорят, что они бы не торопились встраиваться в общий тревожный хор по поводу того, что новая уязвимость — это Heartbleed 2.0, поскольку, дескать, необходимые условия для удалённой эксплуатации не являются общераспространёнными.

«Для каждого затронутого приложения вектор эксплуатации будет несколько другим или условия доступа к уязвимому коду будут выглядеть иначе, нежели в другом приложении. Это может значительно ограничить распространённость атак. Насчёт Heartbleed проще было сделать какие-либо окончательные выводы, и последствия были куда более широкими».

Тем не менее, Роберт Грэм указывает в своём посте, что Shellshock можно эксплуатировать с помощью червя. Он произвёл первичное сканирование и немедленно обнаружил «около 3000 систем, уязвимых через один только порт 80, через корень URL («/»), без поля Host». По мнению Грэма, уязвимостей на самом деле куда обольше. И — внимание! — кто-то уже производит массовое сканирование и пытается распространять вредоносное ПО. «Скорее всего, они уже успеют скомпрометировать большую часть систем, которые я обнаружил, к утру. Если они будут использовать другие URL и поправят поле Host, «успехи» их будут намного обширнее».

Как вам звук тикающих часов?

wide

Удалённые атаки

Ключевой вопрос: как просто будет эксплуатировать эту уязвимость для производства удалённых атак? Условия для эксплуатации «не являются общераспространёнными» (кстати, Red Hat их перечисляет). Однако атаки всё равно вполне вероятны. Вольфганг Кандек, технический директор компании Qualys, предлагает такой сценарий:

«Bash очень часто используется при установке ПО через Сеть для выполнения команд, что открывает довольно любопытный вектор атаки. Представьте себе вебсервер, который позволяет опрашивать командой ping IP-адрес (такая функция есть у моего домашнего роутера, например); скорее всего, он просто вызовет исполняемый файл, который произведёт процедуру ping, используя заданные вами параметры, вероятнее всего, проверяя, насколько заданная величина корректно отформатированна — то есть, является ли это IP-адресом. С уязвимостью CVE-2014-6271, если вы можете контролировать значение переменной среды, заданной командной оболочке, то вы можете запускать произвольные команды. Контролировать переменную серды не так сложно, поскольку у атакующего уже есть большой их диапазон — например, установки для реферера или UserAgent. Соответственно, несложно вообразить сценарий, в рамках которого установка CGI-BIN используется для выполнения команд на сервере, — атаку произвести оказывается вполне просто».

Патчи

А вот тут всё сложно. Исправление для CVE-2014-6271 Red Hat выпустил весьма оперативно, однако быстро выяснилось, что заплатка неполная и что уязвимость по-прежнему можно эксплуатировать.

В Национальный реестр уязвимостей внесли новую строку — CVE-2014-7169, и для неё тоже были написаны патчи. Однако и те, которые были уже написаны, оказались по разным причинам практически бесполезными. В итоге зарегистрированы ещё два индекса — CVE-2014-7186 и CVE-2014-7187.

К счастью, исправления всё-таки поступают. О них в следующем посте.

Не пора ли немного попаниковать?

Это непрактично.

И что теперь?

Для начала, проверьте, есть ли у вас где-нибудь уязвимые версии Bash. Можно воспользоваться вот этим инструментом.

Если в вашей сети есть embedded-устройства с прошивками, которые не поддаются изменению, их надо прятать — за большой, жирный фаерволл.

Пользователи Apple Mac OS X могут выдохнуть: по умолчанию Mac OS X не подвержена этой уязвимости. Если, конечно, на ней не сконфигурированы какие-либо «специфические службы UNIX». Для тех, у кого эти службы есть, готовится патч.

О патчах для остальных пострадавших читайте в следующем посте.