Следующая новость
Предыдущая новость

Android: безопасность умных гаджетов, история создания Magisk и впечатляющие трюки в Kotlin

16.01.2018 13:26
Android: безопасность умных гаджетов, история создания Magisk и впечатляющие трюки в Kotlin

Содержание статьи

  • Инструменты
  • Почитать
  • Уязвимости домашних голосовых ассистентов
  • О (не)безопасности IoT
  • 13 функций, исчезнувших из Android
  • История создания Magisk
  • О правильном использовании датчика отпечатка пальца
  • Кодинг
  • Как работают Instant Apps
  • Класс Parcelable в одну строку
  • Простой способ создания RecyclerView с помощью Kotlin
  • Как Kotlin работает с коллекциями
  • Введение в Android Architecture Components
  • Библиотеки

Сегодня в выпуске: безопасность домашних голосовых ассистентов и других умных гаджетов, безопасность приложений, использующих датчик отпечатка пальца, история создания Magisk, рассказанная автором проекта. А также: внутренности Instant Apps, введение в Android Architecture Components, по-настоящему впечатляющие трюки в Kotlin и свежая подборка библиотек.

Инструменты

  • balckhat-arsenal-tools — коллекция всех инструментов, показанных в рамках Black Hat Arsenal начиная с 2011 года;
  • poc-exp — коллекция эксплоитов и PoC для различных Android-уязвимостей;
  • AndroTickler — метаинструмент анализа Android-приложений, позволяющий получить исчерпывающую информацию о приложении, декомпилировать его, найти строки, URL, компоненты баз данных; плюс интеграция с Frida;
  • Most usable tools for iOS penetration testing — список самых полезных приложений для пентеста iOS.

Почитать

Уязвимости домашних голосовых ассистентов

The Insecurity of Home Digital Voice Assistants — исследование, посвященное безопасности домашнего голосового ассистента Amazon Echo, а также других подобных ассистентов (Google Home, Apple HomePod).

В нашей стране не многие слышали об этих устройствах, но они очень популярны в США. Amazon продала более пяти миллионов колонок Amazon Echo, а количество ее скиллов (возможностей, которые доступны посредством голоса) уже перевалило за десять тысяч. С помощью Amazon Echo можно совершать интернет-покупки, заказывать еду, открывать двери, включать свет и делать огромное количество других вещей. Получив контроль над этим устройством, злоумышленник может открыть дверь в квартиру (если она оборудована смарт-замком, подключенным к устройству) или выполнить от его имени заказ в интернет-магазине.

При всех своих возможностях Amazon Echo очень слабо защищены. Единственный метод аутентификации, который они используют, — это своего рода парольная фраза (по умолчанию Alexa), после произнесения которой устройство просыпается и переходит в режим прослушивания команды. Неважно, кто и каким голосом произнес эту фразу, главное, чтобы громкость была не ниже 60 dB, а система распознавания голоса ее поняла.

Более того, Amazon Echo не различает присутствие человека в помещении и реагирует на любой голос, вне зависимости от того, кому он принадлежит: человеку, телевизору, смартфону, Bluetooth-колонке или говорящей собаке. Авторы исследования провели тест и выяснили, что Amazon Echo прекрасно распознает команды, произнесенные синтезированным голосом (на разных скоростях) Bluetooth-колонкой, расположенной на расстоянии до восьми метров.

В качестве метода борьбы с уязвимостями авторы предлагают использовать технологию VSButton. Несмотря на название, она не имеет ничего общего с физическими кнопками, но позволяет регистрировать искажения электромагнитных волн человеческим телом. С помощью этого метода можно выявить движение в помещении и таким образом определить присутствие человека. При этом VSButton не отдельное устройство, а может быть интегрирована в Amazon Echo с помощью обновления программного обеспечения.

О (не)безопасности IoT

IDIoT: Securing the Internet of Things like it’s 1994 — ресерч, посвященный безопасности IoT-устройств. По оценкам авторов, к 2020 году к интернету будет подключено более двадцати миллиардов разнообразных устройств, начиная от веб-камер и заканчивая холодильниками и стиральными машинами. И если учесть тотальную небезопасность текущих устройств, это может стать настолько серьезной проблемой, что бот Mirai, не так давно заваливший пол-интернета с помощью веб-камер, покажется детской игрушкой.

IT-специалисты предлагают разные решения этой проблемы, но пока ни одно из них не может быть воплощено в жизнь даже на небольшом числе устройств. IoT развивается очень быстро, поэтому компании-производители ставят на первое место скорость выпуска устройства на рынок, жертвуя безопасностью. Попытки стандартизации протоколов доступа к устройствам проваливаются одна за другой по причине инертности и стремления компаний протолкнуть свой стандарт. SDN-решения вроде специальных мидлбоксов, которые должны соединять IoT-устройства с внешним миром, никому не нужны. Попытки регулировать рынок IoT заканчиваются на бюрократическом выяснении отношений и бесконечном разбирательстве, кто и как должен его регулировать.

Документ интересен именно описанием текущей ситуации. Решение авторов, под названием IDIoT, — это довольно топорный сетевой фильтр, который пропускает наружу и внутрь локальной сети только тот трафик, который реально нужен девайсу, и отсекает все остальное. К примеру, веб-камера будет способна загружать видео на удаленный сервер, но не сможет «отключить» интернет UDP-запросами к корневым DNS-серверам. Решение может быть как софтверное, устанавливаемое на роутер или телефон, так и железное, например Raspberry Pi со специальной прошивкой.

13 функций, исчезнувших из Android

Android nostalgia: 13 once-trumpeted features that quietly faded away — интересная статья о технологиях, которые когда-то были в Android, но теперь удалены. Из наиболее печальных потерь:

  • виджеты на экране блокировки. Появились в Android 4.2 и сразу получили поддержку в лице виджета DashClock, написанного одним из сотрудников Google. Через два года столь давно ожидаемая функция исчезла;
  • планшетный интерфейс. В Android 3.0, выпущенном исключительно для планшетов, был реализован прекрасный интерфейс в стиле десктопа. Нижнюю часть экрана занимала строка с традиционными кнопками навигации слева и часами с «треем» справа. Клик по часам открывал быстрые настройки и панель уведомлений. В Android 4.2 этот интерфейс сменился на телефонный;
  • живые папки. В Android 1.5 появилась весьма интересная функция, позволяющая упаковать в папку любую информацию. Приложения могли предоставлять реализацию папок, содержащих, к примеру, email-адреса, номера телефонов, заметки и многое другое. Функция была удалена в Android 3.0 в угоду виджетам.
Планшетный интерфейс Android 3.0

История создания Magisk

The Magisk Story — история создания Magisk, написанная автором проекта. Magisk — едва ли не самый популярный сегодня менеджер прав root, а также система модификации Android без внесения изменений в системный раздел (если по-простому: он модифицирует boot-раздел и во время загрузки вносит изменения поверх system-раздела без его модификации, это называется systemless). Наиболее интересные выдержки:

  • Magisk был создан под впечатлением от SuperSU для Android 6.0 (в котором впервые появился режим systemless). Автор пытался заставить режим systemless работать не только в отношении root-доступа, но и для установки Xposed, в результате чего родился новый проект;
  • Magisk использует довольно простой трюк: он внедряет себя в boot-скрипт и на стадии загрузки post-fs-data, когда все файловые системы уже подключены, но Zygote не запущен (в Android Zygote фактически запускает ОС), подключает поверх файловой системы system все необходимые модификации (в Linux такое можно сделать с помощью так называемого bind mount);
  • популярности Magisk способствовала игра Pokemon Go, использующая в своей работе систему Google SafetyNet для проверки, что на устройстве не получены права root и не произведены модификации (в Magisk есть система обхода SafetyNet);
  • между Google и Magisk до сих пор идет ожесточенная борьба: первая встраивает новые правила проверок SafetyNet, второй с каждым новым релизом учится их обходить;
  • на первых порах развития проекта автор просил помощи у знаменитого Android-хакера и создателя SuperSU ChainFire, но тот отказал ему, сославшись на интеллектуальную собственность. Автор Magisk в результате просто украл его утилиту для патчинга правил SELinux (supolicy) и интегрировал в свой проект.
Android: безопасность умных гаджетов, история создания Magisk и впечатляющие трюки в Kotlin

Логика работы Magisk

О правильном использовании датчика отпечатка пальца

Broken Fingers: On the Usage of the Fingerprint API in Android — исследование, посвященное безопасности приложений, использующих датчик отпечатка пальца. Авторы написали утилиту для анализа кода таких приложений и применили ее к 501 APK из маркета. Выводы обычны: разработчикам приложений не стоит рассчитывать, что малварь не сможет запустить свой экран поверх их, но среди подобных стандартных рассуждений особо выделяется один результат исследования.

54% приложений (включая Google Play) не генерируют и не используют открывшиеся в результате касания датчика отпечатка пальца криптографические ключи (другими словами, датчик служит только для подтверждения действия, но не для того, чтобы, например, получить доступ к ключу и затем применить его для подписи транзакции или другого действия). Это значит, что злоумышленник с правами root сможет совершить покупку, просто симулировав касание сенсора (при помощи вызова метода onAuthenticationSucceeded самого приложения).

Кодинг

Как работают Instant Apps

Inside Instant Apps — вводная статья об Instant Apps, сравнительно новой функции Android (а точнее, Google Mobile Services), позволяющей создавать «одноразовые приложения», которые можно запустить мгновенно без необходимости в установке.

Instant Apps базируются на концепции feature, когда одно комплексное приложение делится на несколько своего рода мини-приложений. Каждое такое мини-приложение может включать в себя код, ресурсы и данные, необходимые для работы только одной активности приложения. Feature может быть, к примеру, просто страницей покупки какого-либо товара. Оно имеет собственный URL, перейдя по которому пользователь мгновенно (ну или почти мгновенно) увидит определенную активность приложения.

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

Класс Parcelable в одну строку

Yet Another Awesome Kotlin Feature: Parcelize — небольшая заметка о новой возможности Kotlin 1.1.4 под названием Parcelize. Суть ее в следующем: для передачи объектов между активностями в Android следует описывать эти объекты с помощью громоздкого и неудобного интерфейса Parcelable, представляющего возможности сериализации.

Описание одного простого объекта с помощью Parcelable может занимать десятки строк кода, большая часть которого будет иметь весьма опосредованное отношение к логике работы приложения. Parcelize позволяет описать такой объект буквально с помощью двух строк:

@Parcelize data class Student(val id: String, val name: String, val grade: String) : Parcelable 

Возможность в данный момент экспериментальная, поэтому для ее использования следует добавить в build.gradle проекта такие строки:

apply plugin: 'kotlin-android-extensions'  androidExtensions {     experimental = true } 

Простой способ создания RecyclerView с помощью Kotlin

RecyclerView plusAssign Kotlin power — статья с описанием весьма интересной техники создания RecyclerView (списка). Краткая предыстория: чтобы создать список с помощью RecyclerView, необходимо создать класс на основе RecyclerView.adapter, а также класс на основе RecyclerView.ViewHolder. Второй будет содержать описание интерфейса каждого элемента, а первый — создавать элементы списка, наполняя ViewHolder нужными данными.

Очевидно, такой способ описания списков довольно громоздкий и выматывающий, если списков будет много. Автор предлагает заменить его такой конструкцией:

recyclerView.setUp(users, R.layout.item_layout, {     nameText.text = it.name     surNameText.text = it.surname }) 

Само собой, RecyclerView не имеет метода setUp, это функция-расширение, добавленная с помощью Kotlin. И именно ее описанию посвящена статья. Все сводится к созданию универсального адаптера и универсального ViewHolder, после чего автор описывает функцию-расширение setUp, которая и подключает адаптер к RecyclerView:

fun <ITEM> RecyclerView.setUp(items: List<ITEM>, layoutResId: Int, bindHolder: View.(ITEM) &rarr; Unit, manager: RecyclerView.LayoutManager = LinearLayoutManager(this.context)): Kadapter<ITEM> {     return Kadapter(items, layoutResId, {         bindHolder(it)     }).apply {         layoutManager = manager         adapter = this     } } 

Плюс некоторые шаманства, связанные с написанием колбэков для обработки нажатий на элементы списка.

Как Kotlin работает с коллекциями

Kotlin Collections Inside. Part 1 — исследование того, как в Kotlin работают коллекции: Collection, Set, MutableSet, List, MutableList. Интересные наблюдения:

  • Несмотря на то что в Kotlin есть изменяемые и неизменяемые коллекции (например, MutableList и List), на деле все коллекции изменяемые. Их можно преобразовать, если использовать из кода на Java, однако при попытке изменить тот же List из Kotlin будет выброшено исключение java.lang.UnsupportedOperationException.
  • Функция listOf(), предназначенная для создания списков, на самом деле создает массив Java, а затем вызывает его метод asList(), чтобы преобразовать его в ArrayList. Так что на деле тип List в Kotlin — это вполне стандартный ArrayList.
Android: безопасность умных гаджетов, история создания Magisk и впечатляющие трюки в Kotlin

Иерархия коллекций Kotlin

Введение в Android Architecture Components

Realtime applications using Android Architecture Components with Kotlin — хорошее и не затянутое введение в Android Architecture Components, представляющие собой реализацию паттерна Model — View — ViewModel (MVVM). AAC базируются на четырех ключевых компонентах:

  • Lifecycle — хранит состояния компонентов приложения (таких как активности и фрагменты) и позволяет другим компонентам реагировать на изменения состояния (например, завершить обновление местоположения при сворачивании активности);
  • ViewModel — хранит состояние графических элементов приложения и связывает эти элементы с моделью;
  • LiveData — хранит данные элементов, позволяя наблюдать за их обновлением и реагировать;
  • Room — обертка над SQLite, обеспечивающая более удобный доступ к данным и обновления данных в режиме реального времени.

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

Библиотеки

  • Cipher.so — позволяет разместить важные данные в зашифрованной нативной библиотеке;
  • SecureControls — классы SecureButton и SecureImageButton, реализующие стандартные кнопки Android, способные определять, не перекрыты ли они оверлеем;
  • ReActiveAndroid — мощная ORM-библиотека с поддержкой многих БД и RxJava2;
  • hyperlog-android — библиотека логирования, отправляющая логи на удаленный сервер;
  • kotlin-math — удобная в использовании Kotlin-библиотека для выполнения различных математических операций;
  • Barista — простая в использовании библиотека для тестирования интерфейсов;
  • AQuery — библиотека для работы с UI, созданная под впечатлением от JQuery;
  • CustomToggleButton — переключатель с красивой анимацией;
  • circular-progress-bar — круговой прогресс-бар;
  • TicketView — View в форме отрывного билета;
  • transitioner — библиотека динамической трансформации одного View в другой;
  • CalendarPicker — окно выбора календаря с множеством настроек внешнего вида;
  • TableView — библиотека для отображения сложных таблиц, содержащих множество данных;
  • TimeLineView — элемент интерфейса для отображения таймлайнов с датой и описанием;
  • SimpleRatingBar — панель рейтинга, предлагающая пользователю оценить что-либо с помощью звезд.

Источник

Последние новости