Автор: Troy Hunt
Помните историю с
Heartbleed? (уязвимость в OpenSSL). Если вы почитываете желтую прессу, то история с Shellshock в чем-то напоминает тот случай. Такое же запоминающееся имя, хотя без крутого логотипа (маркетологам следует обратить на это внимание). А теперь о серьезном. Эта уязвимость может привести к более серьезным и масштабным последствиям.
Как и в случае с Heartbleed, в этой статье я постараюсь собрать воедино всю информацию и отделить слухи и домыслы от реального риска, связанного с данной уязвимостью.
Для начала приведу некоторые выдержки из
статьи Роберта Грехема, который провел прекрасный анализ этой проблемы. Представим себе такой HTTP-запрос:
target = 0.0.0.0/0
port = 80
banners = true
http-user-agent = shellshock-scan (
http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html)
http-header = Cookie:() { :; }; ping -c 3 209.126.230.74
http-header = Host:() { :; }; ping -c 3 209.126.230.74
http-header = Referer:() { :; }; ping -c 3 209.126.230.74
При «применении» этого запроса против уязвимых IP-адресов получаем следующие результаты:
Рисунок 1: Массовый пинг со стороны нескольких внешних машин
Попросту говоря, Роберт только организовал массовый пинг собственной машины со стороны кучи внешних систем при помощи специально сконструированного запроса. По сути, у него получилось выполнить произвольную команду на множестве машин (пусть даже простой пинг), что открывает нам массу новых возможностей. Теперь подробнее.
Что такое Bash, и зачем он нужен?
Если вы уже знаете, что такое
Bash, можете не читать этот раздел. Я буду вещать для тех, кто не знаком с этим вопросом. Bash – командная оболочка в системах *nix или другими словами – интерпретатор, позволяющий выполнять различные команды, обычно после подключения к машине через SSH или Telnet. Bash также может выполнять роль парсера CGI-скриптов на веб-сервере, что мы обычно наблюдаем на запущенном Apache. Интерпретатор Bash зародился в конце 80-х годов (имя унаследовалось от
Bourne shell) и приобрел огромную популярность. Существует и другие командные оболочки, но Bash по умолчанию используется в операционных системах Linux и Mac OS X, которые чрезвычайно распространены. Именно из-за этого фактора («повсеместность» Bash или
как еще говорят – «наиболее часто устанавливаемая утилита в Linux») проблемы, связанные с уязвимостью в этой оболочке, потенциально могут быть весьма серьезными.
Представление о масштабах использования Bash можно получить из
последних данных Netcraft о процентном соотношении веб-серверов в интернете:
Рисунок 2: Динамика процентного соотношения веб-серверов в интернете
Когда на половине всех серверов установлен Apache (который обычно используется в Linux), то можно примерно представить количество систем, где установлен Bash (огромный кусок пирога). В этой же статье Netcraft сообщает, что недавно пройдена отметка в миллиард веб-сайтов, многие из которых разделяют те же самые хосты. Даже несмотря на это, количество систем, где установлен Bash, огромно. Ах, да, ведь до этого речь шла только о веб-серверах. Не забывайте, что есть и другие Linux-системы, и мы также коснемся их чуть позже.
Bash используется для выполнения целого ряда типичных административных задач, начиная от конфигурирования вебсайтов до управления портативными устройствами (например, веб-камерой). Естественно, подобные привилегии не доступны широкому кругу пользователей, и по идее мы ведем речь о пользователях, которые уполномочены выполнять эти функции. Посмотрим, как обстоят дела на практике.
В чем суть уязвимости?
Изучение вопроса начнем с
описания уязвимости, что даст хорошее представление об уровне угрозы.
GNU Bash (включительно до версии 4.3) обрабатывает присоединенные строки (trailing strings) после объявлений функций внутри переменных окружения, что
позволяет злоумышленнику удаленно выполнять произвольный код через специально сконструированную переменную. Уязвимость была продемонстрирована при использовании ForceCommand в OpenSSH sshd, mod_cgi/mod_cgid модулей веб-сервера Apache, при запуске скриптов произвольными DHCP-клиентами и других ситуациях, когда происходила установка переменных окружения из Bash (в обход прав доступа).
Уязвимости был присвоен самый высокий уровень опасности (10 из 10), то есть хуже некуда. Кроме того, этот факт отягощается легкостью выполнения атаки (уровень сложности самый низкий) и, что самое важное,
отсутствием необходимости аутентификации при эксплуатации Bash через CGI-скрипты. Описание, приведенное выше, немного запутанно, так что давайте по подробнее разберемся с технической стороной вопроса.
Основная угроза заключается в возможности произвольной установки переменных окружения внутри интерпретатора, в которых объявляются функции. Проблема возникает тогда, когда Bash продолжает обрабатывать команды после объявления функции, в результате чего мы наблюдаем атаку, связанную с внедрением кода. Давайте еще раз взглянем на следующую строку из примера Роберта:
http-header = Cookie:() { :; }; ping -c 3 209.126.230.74
Объявление функции - () { :; };, после чего идет команда ping с соответствующими параметрами. При обработке этой строки внутри Bash выполняется произвольная команда. В контексте веба это означало бы использование, например, CGI-скриптов, когда необязательно прописывать команду в заголовке запроса. Более подробно можно ознакомиться с
seclists.org advisory, где детально рассмотрен этот вопрос и заявляется о том, что переменные path и query string могут использоваться злоумышленниками.
Самый простой способ предотвратить угрозу – запретить использование интерпретатора команд через CGI.
Некоторые рекомендуют это сделать. Хотя после подобных изменений следует тщательно протестировать функциональность веб-сайта, поскольку могут возникнуть проблемы. И часто такие проблемы возникают.
Пример с HTTP-запросом, упомянутый выше, - прост и эффективен, однако реализация подобной схемы не ограничивается только одним протоколом. Этот метод можно применить и при использовании Telnet, SSH и, очевидно, DHCP, а область действия потенциальной угрозы значительно увеличивается, не ограничиваясь лишь веб-серверами (вероятно,
риск присутствует только в SSH post-auth, однако на такой ранней стадии появления описания угрозы, мы неизбежно видим другие потенциальные направления атак).
Все, о чем нужно помнить, - потенциальная сфера применения уязвимости выходит далеко за рамки простого пинга из примера Роберта (который, очевидно, был продемонстрирован лишь с целью демонстрации проблемы).
Главный вопрос – какой ущерб могут нанести злоумышленники, если у них будет возможность запускать любые команды на уязвимой машине?
Потенциальные последствия от угрозы
Если коротко, то последствия могут быть существенными. Получение шелла всегда является одной из главных задач злоумышленников, поскольку позволяет практически полностью контролировать целевую систему (получать доступ к конфиденциальной информации, перенастраивать среды, запускать вредоносный код и т. п.). По сути, возможности безграничны (которые, к тому же, легко автоматизируются). Уже есть
множество эксплоитов, которые можно использовать против большого количества уязвимых машин.
Когда речь заходит о выполнении произвольного кода в интерпретаторе команд половины веб-сайтов всего интернета, потенциальные возможности весьма широки. К примеру, можно
скопировать файлы для внутреннего использования и придать эту информацию публичной огласке. В эту категорию попадают не только конфигурационные файлы с учетными записями, но и другая информация.
Кроме того, при помощи тех же самых методов, можно не только скачивать, но и перезаписывать файлы, что позволяет не только взламывать сайты, но и распространять вредоносные программы.
После появления информации об этой уязвимости, я часто слышу слово «червь»:
Перевод с рисунка: «Я на конференции Virus Bulletin 2014 и принимаю ставки на то, как скоро появится червь, эксплуатирующий уязвимость Shellshock»
Когда речь заходит о червях, имеется ввиду самовоспроизводимая атака, когда злоумышленник создает код, способный к самораспространению среди жертв. Например, мы видели весьма
эффективную реализацию подобной схемы, когда умело смастеренный Javascript смог инфицировать миллион страниц менее чем за день.
Вредоносные программы, созданные на основе уязвимости Shellshock, также могут распространяться с молниеносной скоростью, особенно на ранних стадиях, когда в огромном количестве систем присутствует эта уязвимость. Теоретически, во вредоносной программе может быть реализован сканер уязвимых машин и автоматическое распространение среди новых жертв. Эта уязвимость касается не только публично доступных, но и корпоративных систем.
Люди уже работают над эксплуатацией этой уязвимости. Ближайшее время будет интересно понаблюдать за баталиями между теми, кто пишет патчи и теми, кто пытается атаковать уязвимые системы.
Какие версии Bash подвержены угрозе?
Заявляется, что угрозе подвержены все версии вплоть до 4.3 (то есть все версии, вышедшие за последние 25 лет). Многие продолжают сравнивать HeartBleed и Shellshock. Однако в случае с HeartBleed были затронуты версии OpenSSL, вышедшие за последние два года, что является каплей в море по сравнению с Shellshock. Даже несмотря на то, что в системах обновляется программное обеспечение, делается это не столь последовательно, и количество уязвимых машин будет значительно выше.
Кроме того, новые версии также могут быть подвержены риску. Мы уже наблюдаем за
отчетами о патчах, которые не столь эффективны. Это неудивительно, учитывая скорость появления новых патчей. При обновлении системы следует «держать ухо востро», а не просто «пропатчить и забыть».
Когда появилась информация об уязвимости?
Впервые
короткое упоминание об этой уязвимости появилось 24 сентября в 14:00 (по GMT). Через час в
бюллетене, о котором я упоминал ранее, появилась детальная информация. Новость все еще остается популярной и сопровождается стандартными спекуляциями в прессе. Слишком рано говорить о масштабах распространения в «дикой природе», но, полагаю, очень скоро мы об этом узнаем, если хотя бы небольшая часть потенциала этой уязвимости будет реализована.
Просматривая более раннюю информацию о публично раскрытых уязвимостях, весьма вероятно, что брешь была обнаружена на прошлой неделе
Стефаном Чазеласом, специалистом по Unix/Linux, сетям и телекоммуникациям из Великобритании. С другой стороны, в
блоге компании Akamai говорится о существовании уязвимости «в течение продолжительного времени» и, конечно, о том, что брешь присутствует во всех версиях Bash, выпущенных за последние 25 лет. Главный вопрос (как и в случае с Heartbleed) - владели ли этой информацией злоумышленники, и эксплуатировалась ли данная уязвимость до настоящего момента.
Подвержены ли наши «штучки» этой угрозе?
С этого момента все становится еще интереснее. У нас есть множество «штучек», где установлен Bash. Под «штучками» я подразумеваю
интернет вещи (Internet of Things, IoT), которые являются следствием повального желания «еще куда-нибудь» прицепить IP-адрес и воткнуть беспроводной адаптер, начиная от
столовых приборов и заканчивая
дверными замками и
лампами накаливания.
Большинство подобных штук работает на Linux с установленным Bash. Это те самые устройства, на примере которых уже были продемонстрированы проблемы в безопасности. Например, пару месяцев назад в лампах накаливания компании LIFX была найдена
уязвимость, связанная с утечкой учетных записей. Конечно, масштаб не такой, как в случае с Shellshock, однако дает хорошее понимание того, что угрозы появляются в тех местах, где их до этого не было.
В связи с этим появляется много новых проблем. К примеру, кто размышляет о том, что нужно регулярно обновлять программное обеспечение у ламп накаливания? Также учитывайте долгий срок службы подобных устройств. В качестве примера можно привести
случай с уязвимыми камерами компании Trendnet. Несомненно, до сих пор в интернете можно найти огромное количество уязвимых устройств, которые в основном относятся к категории «установил и забыл». Есть даже специальный
канал в Twitter, где публикуются снимки с камер, хозяева которых даже не подозревают о том, что их устройства уязвимы. Главная проблема в том, что обновить программное обеспечение на подобных устройствах не так-то просто, и это будет продолжаться еще долгое время.
Интерпретатор Bash присутствует и в более «традиционных» устройствах, например, в домашних роутерах, которые, как правило, подключены к интернету. Помните ли вы, когда в последний раз обновляли прошивку у вашего роутера? Если вы читаете эту статьи и технически подкованы, то, возможно, эта проблема к вам не относится. Однако поставьте себя на место среднестатистического покупателя, и задайте этот вопрос сами себе снова.