суббота, 20 февраля 2016 г.

Уязвимость Comodo: они проверяют репутацию по 32-битному хешу. По 32-битному, Карл!

Статья для Блога о COMODO на сайте COMSS.RU, автор — Максим Бояренко. См. условия использования.

Любой вирус можно сделать доверенным для Comodo Internet Security, подогнав связанную с ним контрольную сумму CRC32 к какому-нибудь безопасному файлу.

Собственно, см. заголовок. Теперь детали.

До сих пор пользователи Comodo могли считать репутацию файлов главной своей надеждой и опорой. Мол, блокируем все неопознанное и чувствуем себя стерильно чистыми. Обнаруживались, правда, способы обойти эту блокировку, но само понятие доверенного файла сомнений не вызывало... Почти не вызывало. Разве что иногда облачный анализ выделывал номера, признавая доверенным полное «непонятно что» (как странный файл prompt[1].ht, похожий на огрызок скрипта-даунлодера, при отключенном облаке убивавшийся антивирусом, а при включенном — попадавший в доверенные).

Но в действительности давно следовало бить тревогу. По крайней мере, уже тогда, когда в списке файлов (если смотреть непосредственно базу) обнаружилось загадочное поле SHA1CRC32. Зачем оно, если там уже есть поле SHA1?

Как оказалось, сначала Comodo вычисляет для файлов хеш SHA1. С опорой на этот хеш еще можно мириться, хотя теоретически он считается взломанным. Но затем Comodo вычисяет от этого хеша контрольную сумму CRC32 и уже по ней проверяет репутацию. Вот так, худо-бедно криптостойкий хеш сворачивается в жалкие 4 байта.

Об использовании Comodo слабого хеша предупреждали еще в 2007 году! Спасибо Дису за ссылку. Как видим, ситуация с тех пор не особо улучшилась.

Напомню, что репутация программы определяет ее разрешения в различных компонентах CIS: файлы, получившие репутацию «доверенных», не сканируются антивирусом; Auto-Sandbox, HIPS и фаервол по умолчанию также практически ничего не запрещают доверенным программам; а при наличии признака установщика контроль проактивной защиты снимается еще и с дочерних процессов таких программ.

Файлы получают репутацию «доверенных» разными путями. Соответственно, чтобы судить об уязвимости, нужно рассмотреть каждый случай в отдельности.

Первый случай — совпадение с каким-либо файлом, уже присутствующим в списке. Не играет роли ни расположение файла, ни его имя, ни даже расширение (тип) — только содержимое. И именно в этом случае проявляется означенная уязвимость: идентичность содержимого проверяется по 32-битному хешу.

Надо добавить, что алгоритмы вычисления хешей SHA1 и CRC32 в Comodo практически стандартные, на разных машинах одинаковые. Таким образом, коллизия, найденная в одном месте, сможет использоваться везде. А ведь обычное добавление к файлам числа, случайно сгенерированного для каждой отдельной машины, усложнило бы эксплуатацию этой уязвимости.

Второй случай — попадание в некую особую, скрытую базу доверенных файлов. Признаюсь, вид и расположение этой базы для меня остается загадкой. О ее существовании говорят лишь наблюдения: CIS «доверяет» некоторым программам, несмотря на то, что они не подписаны (или доверие подписанным отключено) и отсутствует интернет. При этом сами эти программы в список файлов не заносятся. Бывает, что «доверие» возникает не сразу, а после офлайн-обновления антивирусной базы.

В этом «втором» случае, скорее всего, используется более надежная проверка идентичности, чем по 32 битам. По крайней мере, я с 35 миллионов попыток не смог подогнать файл к совпадению с чем-нибудь из этой базы. Навскидку, если в «скрытую базу» входит хотя бы 300 файлов, с 90% вероятностью должно было найтись совпадение по 32-битному хешу.

Третий случай — цифровая подпись доверенного поставщика. Тут тоже подбор по короткому хешу пролетает: проверяется именно наличие подписи. Если подписи нет, доверия не будет — даже если файл совпадает по хешу с каким-то подписанным, но отсутствующим в списке файлов.

Четвертый случай — облачная проверка. Увы, онлайн-проверка сильно замедляет тестирование: удавалось разогнаться лишь где-то до 10 файлов в секунду. Сделал полмиллиона попыток — доверия не получил. По идее, облачная база Comodo огромна: если она содержит хотя бы 20 тысяч файлов, я бы с 90% вероятностью напоролся на коллизию короткого хеша. Скорее всего, облачная проверка тоже не сводится к 32 битам. Так что аномалии, подобные упомянутой в начале статьи, остаются без объяснения.

Пятый случай — создание файла доверенной программой-установщиком — рассматривался много раз в статьях. Это серьезная брешь, но прямого отношения к данной теме не имеет. К тому же легко закрывается настройкой.

Оставшиеся случаи — занесение программы в доверенные самим пользователем — не рассматриваем...

Итак, злоумышленнику потребуется лишь подогнать свой зловред к 32-битному хешу любой программы, которая наверняка присутствует у жертвы в списке файлов. В частности, туда обязательно войдут компоненты самого CIS. Поскольку контрольная сумма CRC32 вычисляется не от файла, а от его криптографического хеша, подгонку придется выполнять «грубой силой». Однако для 32 бит это не проблема: совпадение отыскивается за считанные минуты.

Как видим, надеяться на защиту по «белому списку» мы можем лишь до тех пор, пока Comodo, как неуловимый Джо, никому не нужен. Окажись он в прицеле — мокрое место останется, особенно с учетом других его скандальных проблем. Однако, пока мы «неуловимы», попробуем принять хоть какие-то меры, чтобы выстоять перед коллизией хеша.

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

Отмечу, что нельзя особо рассчитывать на параноидальный режим, так как, начиная с 8-й версии, даже в этом режиме не контролируется активность доверенных установщиков, а сделать вирус «установщиком» не составляет труда. Только жесткие запреты в правилах HIPS могут сдержать такой вирус.

По-прежнему рекомендую отключить облачную проверку. Хотя с конкретно этой уязвимостью она, скорее всего, не связана, облачная проверка угрожает подобными казусами.

Сомнительная мера — отказ от занесения всех исполняемых файлов в доверенные. С одной стороны, десятки тысяч записей увеличивают шанс случайной коллизии хеша, а также облегчают «наивный» ее поиск неумелым вирусописателем. С другой — случайная коллизия остается маловероятной, а целенаправленный поиск занимает считанные минуты. Все же, в качестве защиты от дурака, я удаляю из своих статей инструкцию по занесению всех файлов в доверенные и заменяю ее рекомендацией временно запустить свои программы при отключенной защите, а затем сделать доверенными только те файлы, которые папали в список.

Также настоятельно рекомендую использовать системные средства защиты, в частности, UAC.