Тема уязвимостей в программном обеспечении навязла в зубах ещё к концу “нулевых”. Но даже на этом исхоженном поле, пусть и редко, случается найти самородок угрожающих размеров. Именно о таком сообщила на днях американская контора Bluebox Security: обнаруженная её специалистами ошибка в операционной системе Android ставит под удар без малого один миллиард устройств. К счастью, не компьютеров, а “всего лишь” смартфонов, планшетов и прочего недокомпьютерного железа: уязвимо всё, на чём работает Android версий от 1.6 вплоть до самой свежей. Все они имеют баг под скромным номером 8219321.

Чтобы понять опасность находки, нужно вспомнить, как организована дистрибуция приложений для Android. Несколько упрощая, можно сказать, что, выпуская новую версию программы («пакет» формата APK), разработчик сопровождает её контрольной суммой (хеш) и заверяет своей «цифровой подписью». Поскольку подпись и хеш подделать невозможно (задействована стойкая криптография), то теоретически без ведома автора невозможно незаметно изменить и ни один бит в APK-файле: прежде чем инсталлировать пакет на конкретное устройство, операционная система проверит контрольную сумму и в случае её несовпадения с эталонной откажется устанавливать программу. Проблема в том, что то ли механизм проверки, то ли механизм постановки подписи и хеша оказался с гнильцой. Действуя определённым образом, можно менять содержимое APK-файла незаметно для системы.

Распознать модифицированный пакет простому пользователю почти невозможно. В лучшем случае (если злоумышленник решит распространять заражённый APK-пакет через тот же апп-стор, что и оригинал пакета) другим будет имя автора приложения, в худшем - видимых отличий не окажется вовсе.
Распознать модифицированный пакет простому пользователю почти невозможно. В лучшем случае (если злоумышленник решит распространять заражённый APK-пакет через тот же апп-стор, что и оригинал пакета) другим будет имя автора приложения, в худшем – видимых отличий не окажется вовсе.

Представьте такую ситуацию. Злоумышленник находит APK-пакет с каким-нибудь важным системным обновлением от компании X, внедряет в него вредоносный код и размещает, скажем, на популярном форуме – якобы для удобства. Пользователи, скачавшие этот пакет, обнаружить подделку не смогут: автоматическая проверка контрольной суммы пройдёт без запинки, а в подписи по-прежнему фигурирует компания X. Пакет будет установлен – а значит, в ОС проникнет и вредоносный код. Поскольку системным приложениям по определению предоставляется максимум прав, malware получит доступ ко всем данным и ресурсам заражённого устройства.

Как много устройств подвержено этой проблеме? Согласно статистике, публикуемой Google, рыночная доля любой версии Android старше 1.6 составляет менее 0,1%. Следовательно, более 99% эксплуатируемых сегодня устройств содержат баг 8219321. Bluebox оценивает их число в 900 миллионов. Но не забывайте, что параллельно с “официальной” ветвью Android от Google существует множество неофициальных форков – изготовленных как крупными вендорами вроде Amazon.com, так и бесчисленной массой безымянных китайских производителей. Их считать никто не пытался, да и вряд ли это возможно. Так что итоговая фактическая численность потенциально уязвимых смартфонов, планшетов и прочих недокомпьютеров наверняка сильно превышает один миллиард.

Android 1.6 Donut, вышедшая четыре года назад, на текущий момент является самой ранней из версий системы, сохранивших заметное присутствие на рынке. Впрочем, и её доля оценивается всего в 0,1%, так что на этом графике от Google она даже не показана (а будучи видимой, заняла бы тонкую полосочку, сравнимую с 3.2 Honeycomb).
Android 1.6 Donut, вышедшая четыре года назад, на текущий момент является самой ранней из версий системы, сохранивших заметное присутствие на рынке. Впрочем, и её доля оценивается всего в 0,1%, так что на этом графике от Google она даже не показана (а будучи видимой, заняла бы тонкую полосочку, сравнимую с 3.2 Honeycomb).

Если принять во внимание масштабы возможной эпидемии, неудивительно, что Bluebox, сделавшая своё открытие ещё зимой, до последнего момента держала абсолютно все детали в тайне. В известность были поставлены лишь Google и крупные Android-вендоры. И только на днях авторы находки обнародовали некоторую информацию о сути уязвимости и продемонстрировали скриншот приложения, модифицированного таким образом, – как доказательство практической осуществимости атаки. Любопытно, кстати, что заплатка, устраняющая баг в операционной системе, состоит всего из пары строчек кода. Однако производителей ещё нужно заставить эти две строчки в свои версии Android внести! Собственно говоря, при наблюдаемых сумасшедших темпах эволюции модельного ряда и невообразимой фрагментированности платформы задача представляется неосуществимой. Ведь даже именитые вендоры прекращают поддержку своих устройств через год–два после выпуска, что уж говорить про китайский ноунейм.

Есть, правда, и другой способ защитить пользователей – принудительно проверять каждый APK-пакет, попадающий в магазин приложений. Google именно так и поступила – и пользователи, устанавливающие программное обеспечение только из Google Play (запретившие установку пакетов из посторонних источников; в настройках системы есть соответствующий пункт), могут быть спокойны. Но, к сожалению, и тут силами одного игрока не справиться. На многих Android-устройствах включен доступ к альтернативным апп-сторам, а на тех, что используют Android без гугловской лицензии, Google Play недоступен вовсе. Понятное дело, достучаться до владельцев каждого магазина приложений и заставить их проверять пакеты едва ли возможно. А ведь только популярных альтернативных апп-сторов насчитывается дюжина (включая отечественный “Яндекс.Store”).

В разработке Android принимают участие организации из самых разных профессиональных областей. Есть среди них даже АНБ. Стоп... Та самая АНБ?! (Графика: Davidsancar.)
В разработке Android принимают участие организации из самых разных профессиональных областей. Есть среди них даже АНБ. Стоп… Та самая АНБ?! (Графика: Davidsancar.)

Что ж, насколько известно, в ходе проверки Google Play ни одного пакета, модифицированного с применением бага 8219321, выявлено не было. Так что проблема оставалась теоретической и обещала остаться таковой вплоть до конца июля, когда Bluebox планирует обнародовать детали на конференции Black Hat. Однако её опередили. На днях компания viaForensics опубликовала свой эксплойт того же бага – утилиту, позволяющую распаковать, модифицировать и запаковать обратно APK-файл с сохранением его контрольной суммы и подписи.

Как предупредить заражение, вы уже знаете: не устанавливать «левые» пакеты и по возможности ограничиться гугловским апп-стором. Простые, стандартные, в общем-то, правила. Но вот кто донесёт их до человека с улицы?

P. S. Проверить свои Android-устройства на наличие бага 8219321 можно с помощью бесплатного приложения от Bluebox Security.