Тема оптимизации Android-приложений под платформу х86 не сходит со страниц нашего блога. Сегодня мы посмотрим на проблему под несколько специфическим углом. Портируются ли под Intel… вирусы? В чем заключаются нюансы функционирования антивирусов на разных платформах? С какими проблемами встречаются разработчики антивирусного ПО на пути оптимизации? С этими вопросами обратились к команде лаборатории Касперского, разрабатывающей антивирус для Android.
Начнем с начала. Мы устанавливаем приложение (пройдя по непроверенной ссылке или запустив установку вручную) – получаем APK, в состав которого входит не только заявленная функциональность, но и зловред, ворующий пароли, посылающий платные SMS или блокирующий смартфон с последующим требованием выкупа. Правильно?
В целом да. Наибольшему риску подвергаются посетители разного рода пиратских сайтов, но изредка зараза просачивается даже в крупные официальные магазины приложений.
Предполагаем, что имеется какая-то база сигнатур, по которой идет поиск вредоносного кода. Должна ли она быть различной для ARM и x86? Правильно ли мы понимаем, что для x86 пришлось создавать свою базу, причем основная работа в портировании под х86 была именно в создании этой базы?
База сигнатур и эвристических правил платформо-независима. Вообще, большинство вредоносных программ под Android не имеют нативной части вообще и весь их вредоносный код написан исключительно на Java, поэтому разница в архитектуре в данном случае не существенна.
В любом случае мы поддерживаем детектирование ARM объектов даже на x86.
Если авторы зловредов под Android оказались расторопнее некоторых авторов программ и портировали свои творения на x86, то означает ли это, что ваш антивирус под ARM (работающий через транслятор) в принципе не мог такие вирусы обнаружить, так как в нем не было соответствующих баз «с образцами кодов», а обнаруживал только зловреды на чистой Java и в ARM приложениях?
Для нас нет разницы, на чем код – ARM или x86. Наш движок рассматривает объекты независимо от платформы, на которой он работает. Т.е. наш продукт на любоей платформе способен обнаружить и ARM- и x86-зловреда, если они есть в базе.
А есть ли реально x86 зловреды? Насколько велика их база?
Таких, которые работают только на x86 и не работают на ARM – не встречали. Это противоречит логике вирусописателей, которые заинтересованы в максимальном распространении своего детища.
Но это – про зловреды. А существуют ли для Android реальные вирусы, т.е. куски кода, способные заражать другие файлы – распространяться, а также самомодифицироваться, чтобы обмануть антивирусы? Если да, то сколько их, включают ли они нативный код или Java достаточно, какие файлы они могут заразить?
Ну начнем с того, что для распространение нет необходимости заражать другие файлы. Можно, например, рассылать ссылки на себя по контакт-листу. Это поведение относится к классу Червей. А классических инфекторов (или полимрорфов) под Android пока нет.
Как вы уже сказали, код антивируса – почти весь нативный, но, как и положено приложениям под Android, построен в виде набора вызываемых библиотек. Библиотеки из «стандартного» места /lib спрятаны в более глубокой иерархии. Если можно, поясните, зачем это сделано?
Большинство библиотек лежит в папке lib, отдельно вынесены антивирусные базы, которые требуют регулярного обновления, в папки папке lib их обновлять нельзя, поскольку она не доступна на запись.
Как именно работает антивирус? Проверяет ли он приложения только перед запуском, или и на диске тоже; может ли отследить «подозрительные» операции в реальном времени? И что именно он делает при их обнаружении?
Антивирус в Kaspersky Internet Security for Android проверяет приложения при их установке и обновлении, по требованию пользователя (если пользователь нажал кнопку просканировать), по расписанию (расписание выбирается в настройках продукта). Кроме этого сканируются файлы сохраняемые в папку Download (туда сохраняются файлы, которые пользователь скачивает в браузере). Помимо этого, есть режим расширенной защиты, в этом случае проверяются файлы на карте памяти при любом их изменении, а также все новые файлы, записываемые на карту памяти.
Как и в «настольных» продуктах «Лаборатории Касперского», Kaspersky Internet Security for Android использует целый комплекс технологий для обнаружения вредоносных программ, в том числе эвристический движок, который позволяет обнаруживать целые семейства зловредов при помощи общих признаков. При этом у нас есть требование, чтобы медианная нагрузка на CPU от нас не превышала 10% при нормальном использовании устройства.
Что было сделано для добавления поддержки х86 в Android-продукт?
В нашем продукте под Android используется много кроссплатформенных компонентов собственной разработки, написанных на С++ и применяемых в большинстве продуктов «Лаборатории Касперского». То есть большинство защитных модулей изначально написаны для простой интеграции на разные платформы. Обеспечить их сборку под Android x86 не составило особого труда — небольшие изменения в make-файлах, нажатие кнопки, и продукт готов :). Основная нагрузка пришлась на отдел тестирования, поскольку в и без того длинный список тестовых конфигураций и сценариев добавились Android-устройства на базе x86, которые теперь поддерживаются официально.
Раньше на x86-устройствах наш продукт работал при помощи библиотеки Hoodini. Разумеется, в таком случае производится бинарная трансляция кода с определенным ущербом для производительности.
Да, конечно, разговор о сборке под х86 был бы неполным без измерения прироста производительности по сравнению со старой, «бинарно-транслированной», версией. Специалисты Intel протестировали скорость работы Kaspersky Internet Security 11, собранного для х86 и ARM, с помощью устройства на платформе Intel Clover Trail (процессор Intel Atom Z2760). Результаты оказались таковы: производительность нативного x86-приложения в режиме сканирования файлов увеличилась в 2,7 раза. Хотя, справедливости ради, надо отметить, что при этом наблюдалось некоторое (точнее – 15-процентное) повышение энергопотребления устройством во время работы. Но, с учетом уменьшения этого времени, общий результат x86 версии безоговорочно лучше исходного.
Итак, вирусы оптимизировать под х86, получается, не обязательно, а вот полезные программы, в том числе и антивирусы – весьма желательно. И чем важнее для ПО параметры производительности и быстродействия, тем тщательнее нужно подходить к этому вопросу.
Автор: saul