Анализ сомнительных функций приложения «Социальный мониторинг», предложенного больным COVID-19 москвичам

Анализ сомнительных функций приложения «Социальный мониторинг», предложенного больным COVID-19 москвичам

В России продолжают ужесточать меры, необходимые для самоизоляции граждан в период пандемии заболевания COVID-19, вызываемого новым коронавирусом. Впереди всех в этом плане идёт Москва, что вполне логично. Частью одной из недавно принятых мер, призванных ограничить передвижение по городу, стало мобильное приложение «Социальный мониторинг», вызвавшее ряд вопросов у специалистов по защите информации. Предлагаем изучить его изнанку и проанализировать сомнительные функции.

На днях в магазине Google Play для мобильных устройств под управлением ОС Android опубликовали приложение «Социальный мониторинг». В описании было указано, что оно предназначено «для социального мониторинга граждан и вызова помощи в экстренной ситуации».

Для авторизации требовалось предоставить абонентский номер и сфотографироваться. В интерфейсе приложения — две кнопки: вызов экстренных служб и переход на портал мэрии. По словам оппозиционера Леонида Волкова, жители г. Москвы должны будут зарегистрироваться на портале, указав «фактическое место жительства», определив «домашний район» и прикрепив собственное фото.

Приложение привлекло внимание ряда Telegram-каналов. В частности, канал «IT и СОРМ» опубликовал сообщение с просьбой провести реверс-инжиниринг «Социального мониторинга». Позже результаты декомпиляции программы появились на известном ресурсе GitHub.

В результате анализа выложенного кода удалось установить следующее.

  1. Данные в приложении отправляются по незашифрованному протоколу HTTP, а также отсутствует обфускация кода.

Код приложения:

public final class ConfigKt {
    public static final long ALARM_JOB_PERIOD = 600000;
    public static final String BUILDER_GASKAR_HOST = "http://watch.telemetry.mos.ru";
    public static final long REMOVAL_FROM_HAND_JOB_PERIOD = 900000;
}

Код приложения:

public enum CustomerCategory implements KoinComponent {
PATIENT_PHONE("http://185.221.153.208", 120000, 60000),
PATIENT_WATCH("http://185.221.153.208", 120000, 60000),
BUILDER_WATCH("http://195.93.229.67:12310", 1200000, PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS);
}
  1. Используется множество разрешений, среди которых — доступ к местоположению, осуществление телефонных вызовов, просмотр сетевых подключений, использование камеры и т.д.

Разрешения, используемые приложением:

    ...android.permission.READ_PHONE_STATE"/>
    ...android.permission.WRITE_EXTERNAL_STORAGE"/>
    ...android.permission.ACCESS_FINE_LOCATION"/>
    ...android.permission.CAMERA"/>
    ...android.permission.ACCESS_COARSE_LOCATION"/>
    ...android.permission.INTERNET"/>
    ...android.permission.ACCESS_NETWORK_STATE"/>
    ...android.permission.RECEIVE_BOOT_COMPLETED"/>
    ...android.permission.BODY_SENSORS"/>
    ...android.permission.VIBRATE"/>
    ...android.permission.ACCESS_WIFI_STATE"/>
    ...android.permission.CHANGE_WIFI_STATE"/>
    ...android.permission.BLUETOOTH"/>
    ...android.permission.BLUETOOTH_ADMIN"/>
    ...android.permission.WAKE_LOCK"/>
    ...android.permission.CALL_PHONE"/>
    ...android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    ...android.permission.PREVENT_POWER_KEY"/>
    ...com.google.android.c2dm.permission.RECEIVE"/>
    ...com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>
    ...android.permission.FOREGROUND_SERVICE"/>
    ...android.permission.READ_EXTERNAL_STORAGE"/>
  1. В приложение добавлен сервис identix.one, который предназначен для распознавания лиц. Фотоизображения передаются на адрес, принадлежащий немецкому хостинг-провайдеру Hetzner, а разработчиком данного сервиса является компания из Эстонии.

Код приложения:

public interface IdentixOneApi {
public static final Factory Factory = Factory.$$INSTANCE;
public static final String HOST = "api.identix.one";
public static final String TOKEN = "a2879be8028a654f81c5a94b7a2472e943efb927a14ede776a5f5d039717bffdffad94e14c1e68e0248be4bda355d2b747e156e508ac5fc8dadec5b600ce7bdc";
        public static final String URL = "https://api.identix.one";
    @Multipart
    @POST("/v1/persons/search/")
    @Headers({"Authorization: Token a2879be8028a654f81c5a94b7a2472e943efb927a14ede776a5f5d039717bffdffad94e14c1e68e0248be4bda355d2b747e156e508ac5fc8dadec5b600ce7bdc"})
    Call<IdentixOneResponse> searchUser(@Part MultipartBody.Part part, @Part("asm") boolean z, @Part("liveness") boolean z2);

Токен API для использования сервиса identix.one:

«a2879be8028a654f81c5a94b7a2472e943efb927a14ede776a5f5d039717bffdffad94e14c1e68e0248be4bda355d2b747e156e508ac5fc8dadec5b600ce7bdc».
  1. При генерации QR-кода используются MAC-адрес и IMEI устройства.

Код приложения:

public static final String getID(Context context) {
    Intrinsics.checkParameterIsNotNull(context, "$this$getID");
    if (Build.VERSION.SDK_INT >= 29) {
    return getMac(context);
        }
    return getImei(context);
    }
public static final String getImei(Context context) {
    String str;
    Intrinsics.checkParameterIsNotNull(context, "$this$getImei");
    if (ActivityCompat.checkSelfPermission(context, "android.permission.READ_PHONE_STATE") == -1) 
{
LogKt.toLog$default("Request IMEI failed", (String) null, (String) null, (String) null, 7, (Object) null);
return FAIL_IMEI;
        }

Разработчиком приложения «Социальный мониторинг» является компания «Гаскар Интеграция». Согласно информации в СМИ, у неё есть контракты на общую сумму 180 млн рублей, заключённые с Департаментом информационных технологий города Москвы.

На текущий момент программа удалена из магазина Google Play, однако, как было отмечено выше, на GitHub можно ознакомиться с исходным кодом разобранного приложения.

Anti-Malware Яндекс ДзенПодписывайтесь на канал "Anti-Malware" в Telegram, чтобы первыми узнавать о новостях и наших эксклюзивных материалах по информационной безопасности.

RSS: Новые статьи на Anti-Malware.ru