Czy można użyć uprawnienia RECEIVE_SMS do przechwytywania wiadomości SMS?

13

Zauważyłem, że sporo aplikacji prosi o RECEIVE_SMSpozwolenie . Dwie rzeczy są dla mnie jasne:

  • RECEIVE_SMS umożliwia aplikacji „przyciąganie” przychodzących wiadomości SMS
  • READ_SMS dotyczy tylko SMS-ów już zapisanych

Ponieważ niektóre aplikacje właśnie o to prosili RECEIVE_SMS, ale nie o to READ_SMS, zainteresowałem się: wydaje się, że sugeruje RECEIVE_SMSto, że nie jest ono skierowane tylko na część odbierającą, ale aplikacja może również robić to, co chce z otrzymaną wiadomością - np. Ją przeczytać, a następnie wyrzucaj je w ciszy (aby użytkownik nawet nie zauważył wiadomości SMS - może to być sposób, w jaki trojany TAN działają w celu przechwytywania identyfikatorów transakcji bankowości internetowej).

Ale czy taka aplikacja mogłaby również „przechwycić” wiadomość, tj. Odebrać ją, odczytać (i przetworzyć jej treść w jakikolwiek sposób, np. Przekazać ją innymi sposobami, np. Przez IP), a następnie przekazać jako jeśli nic się nie stało? Innymi słowy: czy może w ten sposób szpiegować użytkownika?

Izzy
źródło

Odpowiedzi:

13

Tak, ale tylko na Androidzie 4.3 i nowszych. Jest to używane na przykład w Whatsapp. Po aktywacji aplikacji Whatsapp wysyła SMS na podany numer, a aplikacja przechwytuje ją cicho i informuje serwery, że otrzymała SMS. W ten sposób konto jest powiązane z twoim numerem.

Oczywiście można tego również użyć w szkodliwych aplikacjach. Jeśli aplikacja zarejestruje się jako odbiorca SMS o najwyższym priorytecie, aplikacja może nasłuchiwać przychodzących SMS-ów, przetwarzać je i albo odrzucać bez powiadomienia użytkownika, albo przekazywać do następnego odbiornika SMS z drugim najwyższym priorytetem.

Zostało to powtórzone w Androidzie 4.4 i jeśli dobrze zrozumiałem, tylko domyślna aplikacja SMS ma dostęp do wszystkich przychodzących wiadomości SMS ( SMS_DELIVER_ACTION), a inne aplikacje z prawidłowymi uprawnieniami będą otrzymywać tylko powiadomienia o wiadomości przychodzącej ( SMS_RECEIVED_ACTION). Ponadto SMS_RECEIVEDzamiar jest nie do przerwania, nie można go zatrzymać. Zakładam, że w Androidzie 4.4 dzieje się tak, aby użytkownik mógł zobaczyć wszystkie przychodzące wiadomości SMS w domyślnej aplikacji.

Edycja: Znalazłem więcej przydatnych informacji na blogu programistów Androida . Przetestowałbym to dalej, ale mój jedyny telefon z Androidem jest obecnie wyposażony tylko w Wi-Fi, więc brak SMS-ów:

onik
źródło
Wielkie dzięki za spostrzeżenia, onik! Nie wiedziałem o tych zmianach KitKat. Po ich wdrożeniu, czy poprawnie zrozumiałem, że np. WhatsApp będzie teraz potrzebował również READ_SMSpozwolenia, aby uzyskać dostęp do swojego „kodu aktywacyjnego” - lub robić aplikacje z RECEIVE_SMSuprawnieniem „otrzymaj kopię” teraz (z wyjątkiem domyślnej aplikacji SMS, która „ otrzymać oryginał ”)?
Izzy
@Izyzy Też mam pytanie na ten temat. Czy użytkownik zobaczy teraz te teksty kontrolne bezpośrednio w domyślnej aplikacji? Czy byłaby to opcja, aby zobaczyć „zużyte” teksty, ale nie wyświetlać się w zwykłej aplikacji tekstowej?
Cruncher
1
@Izzy Jeśli dobrze zrozumiałem, aplikacje, które nie są ustawione jako domyślna aplikacja SMS, mogą uzyskać dostęp do dostawcy tylko do odczytu, co oznacza, że ​​nie potrzebują READ_SMSpozwolenia, ale nie mogą edytować wiadomości SMS (oznacz jako przeczytane, usuń itp. ).
onik
1
@Cruncher Wiadomości powinny pojawiać się w domyślnej aplikacji SMS, ponieważ tylko ta aplikacja może pisać do SMSProvider w celu usunięcia wiadomości.
onik
1
"Tak, może". Ale tylko na Androidzie 4.3 i niższych. Ponieważ 4.4 SMS_RECEIVED jest nieusuwalnym zamiarem. Dodaj ten ważny fakt. Zobacz także stackoverflow.com/questions/20021492/…
Flow
10

W tej sytuacji

  1. Android 4.3 i nowsze wersje bez aplikacji Hangouts: każda aplikacja z uprawnieniem SMS_RECEIVE może czytać / przerywać przychodzące wiadomości SMS (ala Whatsapp)
  2. Android 4.3 i nowsze wersje z Hangouts (włączony tryb SMS): każda aplikacja z uprawnieniem SMS_RECEIVE może czytać, ale nie przerywać przychodzących SMS-ów
  3. Android 4.4 i nowsze: każda aplikacja z uprawnieniem SMS_RECEIVE może czytać przychodzące wiadomości SMS, ale nie może ich przerywać

We wszystkich trzech przypadkach READ_SMS da aplikacji zezwolenie na odczytanie wszystkich SMS-ów, a nie tylko nowych SMS-ów przychodzących.

Jak wspomniano w onik, w Androidzie 4.4 wszystko się zmieniło

daamitt
źródło
1
Dziękujemy za wskazanie, że Hangouty mogą mieć znaczenie dla Androida <4.4! Zgadnij, co odpowiada temu, na co wskazywał onik z aplikacją, rejestruje się jako odbiorca SMS o najwyższym priorytecie , a Hangouts robi dokładnie to (więc żadna inna aplikacja nie może tego zrobić)?
Izzy