Comments 14
Для начала хотелось бы поблагодарить вас за хорошую статью о безопасности приложений, это приятно читать.

Возник следующий вопрос: вы упомянули хранение данных на SD-карте:
«Вторые связаны с проблемой хранения данных: это когда ваши данные хранятся где-то в открытом виде, могут даже где-то на SD-карте храниться, либо они не зашифровываются, в общем, когда к ним есть доступ извне.» Некоторое время назад я писал в Yandex Bug Bounty о подобной проблеме в одном из приложений, но получил ответ, что это больше проблема Android, чем приложения, поэтому это не является уязвимостью. Можно узнать ваше мнение об этом?
Здравствуйте
Здесь имелось в виду что при определенных манипуляциях приложение может сохранить на «sd» карту свои внутренние файлы из /data/data/<app_package>/*
Стоит дополнить, что если ваше приложение поддерживает < Android 6.0, то лучше вообще не принимать со сторонних приложений файлы путь которых начинается с "/data/data/" (потому что там может передаваться hard link, который уже не так просто проверить (но можно) какой это реально файл)
С Android 6.0 сторонние приложения не имеют возможности создавать hard link, поэтому тут достаточно проверять путь file.getCanonicalPath()
Я надеюсь что в ближайшее время (месяц-полтора) мы с коллегой подготовим более обширное исследование по этой теме
Добрый день.

Большое спасибо за развернутый ответ. Можно ли еще один вопрос: как вы относитесь к хранению данных пользователя в External Storage? Насколько это опасно, учитывая возможный доступ со стороны других приложений?
На мой взгляд это не очень хорошая практика когда данные хранятся в открытом виде, например так делают многие приложения Telegram, Whatsapp, Yahoo, Viber и тд.
Поэтому надо быть осторожным передавая что-то важное во вложениях)
С позицией согласен, а вот с выводом — не очень. Не так давно решил попробовать приложение Яндекс.Диска для Android, Скачал, запустил, все удобно. А потом заметил, что оно пишет все файлы на SD карту. Получается, что на Диске нельзя хранить ничего важного?)
Прошу прощения, что поднимаю вопрос, но не могли бы вы ответить на мой комментарий выше?
По-моему Яндекс.Диск не скачивает все директории на девайс, он скачивает только по запросу. Те если на телефоне есть какие-то сомнительные приложения, которым есть повод не доверять в их порядочности, я бы просто не скачивал важную информацию с Диска.
Поэтому хранить важную информацию можно:)
Насколько я понимаю, тут вопрос примерно такой:

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

Касательно непорядочных приложений: если правильно разрабатывать приложения с учетом рекомендации Google и OWASP, то данные будут в безопасности. На бытовом уровне это выглядит так, вы купили сейф, в котором что-то храните, но из соседнего ящика можно достать вещи из сейфа сквозь стенку.
Вот так читаешь статью и вроде бы сначала думаешь — да, круто. Безопасность. А потом вспоминаешь, что все это почему-то не работает в самом Яндексе, в тех самых мобильных приложениях. Пример — бесплатные +50Gb в диске. Типа:

merged = headers['X-Install-DeviceId']
merged = merged + headers['X-Install-SerialNumber']
merged = merged + headers['X-Install-Manufacturer']
merged = merged + headers['X-Install-Product']

headers['X-Install-Yms'] = hashlib.sha256(merged).hexdigest()

Потом читаешь статью от Яндекса по алгоритмам, обработке бигдата, туда-сюда. И вроде все красиво, а потом смотришь в Яндекс.Карты — и видишь на месте гор море. Такие вот алгоритмы.

Уныние.

Это сильно отличается от модели доверия, на которой построены десктопы. Можно её критиковать, но лично мне очень некомфортно находиться за компьютером, на котором нормой считается наличие ПО с злоумышлением. Современный десктоп, в котором приложения полагаются доверенными, куда комфортнее.

Потому что если я всерьёз начинаю считать используемое ПО потенциально-вредоносным, то это же страх и ужас, а не жизнь. Зачем такой компьютер, который «пермишеннами только» спасаем от того, чтобы мне навредить?
А за счёт чего современный десктоп считается по-умолчанию защищенным? Немалая (может даже бОльшая) часть десктопных пользователей сидит под Windows, под админской учёткой, с отключенным контролем учетных записей и отвечает «ОК» на любой непонятный запрос прав или доступов. Под маком — аналогично, пользователи с удовольствием всё сами разрешат. Не вижу большой разницы.
Пользователи, отвечающие «ок» на что попало — это совсем другой класс угроз.

Windows-desktop имеет очень дурную безопасность, потому что все привыкли грузить и запускать soft-install.exe.

Появление app store (или как оно там у ms называется) должно было чуть-чуть улучшить ситуацию.

Но даже в этих дурных условиях, в целом модель доверия софту, всё-таки комфортнее. Я не изолирую свой текстовый редактор от своего фоторедактора — я доверяю им обоим. Если я их начинаю друг от друга изолировать, это это неудобно раз, и безнадёжно, два.
Как-то даже расстроили. Открывал и ожидал увидеть что-то интересное — про реверс, MitM, уязвимости самой системы, а тут… Вьювер манифеста, интенты, SQL инъекции, а как вишенка на торте — опасность яваскрипта в вебвьювах, про которую даже Android Studio скажет несколько раз.

Хотя сильнее всего убило вот это

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

Oh really?

А в примере со Slack что мешает злоумышленнику создать свое приложение с applicationId "com.Slack" и получать явный интент?

Only those users with full accounts are able to leave comments. Log in, please.
Information
Founded

23 October 1997

Location

Россия

Employees

over 10,000 employees

Registered

9 August 2008

Habr blog