Pull to refresh

Разработчики приложений не заботятся о безопастности пользователей, что приводит к утечке данных (с примерами java-кода)

Reading time4 min
Views19K
Копаясь в своем android телефоне я заметил, что в каталоге /storage/sdcard есть директории и файлы — приложений, которые я давно удалил, поэтому я спросил на toster.ru Может ли одно приложение на Android читать временные файлы другого приложения?

Что же это за временные файлы и почему на них следует обратить внимание? Это ваши фотографии, записи телефонных разговоров, базы данных ваших ежедневников.

В андроид есть общая директория /storage/sdcard. Туда пишут временные файлы все приложения, а когда приложение удаляешь, данные от него там остаются, если разработчик не позаботился о том чтобы их удалить.

Поэтому эти вопросы я задал на toster.ru:

1) By design система не удаляет эти временные файлы из этой директории?
2) Android не знает какие файлы какому приложению принадлежат?
3) Может ли одно приложение прочесть данные другого приложения из этой директории?

Пользователь NeiroNx написал:
/data достаточно четко разделен по правам — не обладая root правами приложения не видят даже какие файлы там есть.
Я отвечаю NeiroNx: Погодите, вот я только что скачал файловый менеджер из google.play и читаю временные файлы из директории популярного мессенджера, а там фотографии, которые мне прислали лежат в незашифрованном виде, устройство у меня не рутованое.

Пользователь dobergroup написал:
По какому пути находятся эти файлы? Если они в произвольной директории на разделе, который в fat32, то к ним нельзя применить разделяемый доступ. Поэтому, надо уточнять, что именно Вы понимаете под «временными файлами»
Я отвечаю dobergroup: По пути /storage/sdcard, не следует путать с /storage/extSdCard, здесь «временные файлы» всех установленных приложений на моем устройстве: мессенджеров, sip телефонии с незашифрованными записями телефонных разговоров, браузеров с историей просмота страниц, плееров с их плейлистами, соц сетей, ежедневников, с личными записями неотложных дел.

Под временными файлами я понимаю одно, а разработчики приложений видимо другое, если разработчики мессенджера whatsapp с аудиторией 33 000 000 там хранят незашифрованные фотографии и зашифрованную переписку. Whatsapp — это только пример, практически все популярные приложения хранят Ваши личные данные в /storage/sdcard/%appName% и к этой директории имеет доступ любое другое приложение.

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


* фотографии из бесплатного фотохостинга под лицензией Creative Commons CC0. 1, 2, 3, 4.

А вот популярный клиент sip хранит там же настройки Вашего sip аккаунта:



Временные файлы может прочесть любое другое приложение?


То есть кто-то может разместить в google.play игру «2048 — играй по сети с друзьями» и таскать фотографии полуобнаженных девушек с вашего телефона?

Я решил это проверить и написал небольшую программу на java для android. Она отсылает структуру каталога /storage/sdcard на email.

Исходный код. Он отправляет структуру каталога /storage/sdcard на email:
package android.com.testapp;

import android.content.Intent;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
    Button emailButton;
    EditText email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        email = (EditText) findViewById(R.id.email);
        emailButton = (Button) findViewById(R.id.emailButton);
        emailButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getFileStrucure();
            }
        });
    }

    protected void getFileStrucure(){
        Filewalker fw = new Filewalker();
        fw.walk(new File(Environment.getExternalStorageDirectory().getAbsolutePath()));
    }

    private class Filewalker {
        private int count = 0;
        private String sked = "";
        public void walk(File root) {
            count++;
            File[] list = root.listFiles();
            for (File f : list) {
                if (f.isDirectory()) {
                    sked += "time: " + new Date(f.lastModified()) + ", dir: " + f.getAbsoluteFile() + "\n";
                    walk(f);
                }
                else {
                    sked += "time: " + new Date(f.lastModified()) + ", size: " + f.length() + ", " + f.getAbsoluteFile() + "\n";
                }
            }
            count--;
            if (count == 0) {
                sendMail(sked);
            }
        }
    }

    protected void sendMail(String sked) {
        Intent i = new Intent(Intent.ACTION_SEND);
        i.setType("message/rfc822");
        i.putExtra(Intent.EXTRA_EMAIL, new String[]{email.getText().toString()});
        i.putExtra(Intent.EXTRA_SUBJECT, "android storage structure");
        i.putExtra(Intent.EXTRA_TEXT, sked);
        try {
            startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (android.content.ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(), "There are no email clients installed.", Toast.LENGTH_SHORT).show();
        }
    }

}




Вы вводите email, приложение отсылает структуру каталога /storage/sdcard, как Вы понимаете это можно делать и не спрашивая email и отправлять, не только структуру каталога, но и сами файлы. Врядли в google.play так чщательно проверяют приложения, которые там находятся. К сожалению, это очень хороший инструмент для мактетологов, они всегда хотят знать как можно больше о своих пользователях, неговоря уже о том, что таким образом можно получить личные данные.

А вот какое письмо приходит Вам с содержанием /storage/sdcard, там будут все файлы и каталоги приложений, установленных на Вашем устройстве:


* Здесь нет каталогов и файлов приложений из google.play, которые есть на Вашем мобильном устройстве, которое Вы используете каждый день — это директория sdcard эмулятора android.

Ссылка на репозиторий github, для ознакомительных целей.

Посмотрите свою директорию /storage/sdcard с помощью любого файлового менеджера для android, также, по-моему, она доступна при подключении устройства к PC как /phone, если Вы пользуетесь мессенджерами, соц сетями, планировщиком задач, посмотрите, что теоретически может увидеть любой разработчик android, который напишет в манифесте android.permission.READ_EXTERNAL_STORAGE.

Смысл статьи в том, что множество разработчиков приложений: соц. сетй, мессенджеров, клиентов sip телефонии, ежедневников, не заботятся о безопастности своих пользователей.
Tags:
Hubs:
Total votes 28: ↑18 and ↓10+8
Comments31

Articles