Bezpieczeństwo aplikacji: wielka moc wiąże się z wielką odpowiedzialnością

Aleksander Wędrychowski, iOS Developer

Bezpieczeństwo aplikacji: kiedy to staje się ważne?

Bezpieczeństwo aplikacji stało się kluczowe. Dostęp do usług z wykorzystaniem najnowszych sposobów komunikacji, w szczególności sieci internetowej, zmienia codzienne życie zarówno konsumentów jak i przedsiębiorców. Aby pozostać konkurencyjnym, nie wystarczy już oferować dobrej usługi lub produktu, ale trzeba też zapewnić potencjalnym użytkownikom łatwy dostęp do niego. Nawet lojalny klient może przejść do konkurencji, gdy oferuje ona atrakcyjniejszy model obsługi. Te nowoczesne kanały komunikacji, oprócz oczywistej szansy, niosą ze sobą również zagrożenia nieznane w poprzednich dekadach.  Bezpieczeństwo aplikacji – w tym artykule omówimy tylko jedną z kategorii powyższych zagrożeń w danym kontekście.

Wyłączenie serwera. Pełna penetracja systemu przez złodziei danych osobowych. Wykorzystanie luki do wypłaty środków. Znalezienie się na liście podmiotów, których programy nie są bezpieczne, dlatego nie są polecane do użytku przez konsumentów. To tylko niektóre z wielu niebezpieczeństw bezpośrednio zagrażających inwestorowi, a pośrednio użytkownikom.

Bezpieczeństwo aplikacji: wielka moc wiąże się z wielką odpowiedzialnością

OWASP – by wszystkimi rządzić

Bezpieczeństwo aplikacji to tematyka, którą m. in. zajmuje się organizacja OWASP. Na kontach projektu OWASP Mobile Security wyróżniono 10 głównych kanałów naruszenia integralności tego typu programów mogących prowadzić do ujawnienia danych, które powinny pozostać poufne, lub innych form zagrożenia bezpieczeństwa.

10. Brak zabezpieczeń binarnych

W sytuacji, gdy program nie posiada zabezpieczeń binarnych (mechanizmów obronnych utrudniających atakującemu odczytanie kodu źródłowego), system zostaje poddany procesowi inżynierii odwrotnej, który potencjalnie dostarczy mu wszelkich informacji o systemie, w tym podpowiedzi, jak komunikować się z serwerem i wymuszać na nim określone działania (np. wypłata pieniędzy na określone konto).

9. Nieprawidłowa obsługa sesji

Nieprawidłowa obsługa sesji prowadzi do sytuacji, w której atakujący może wykorzystać poświadczenia użytkownika i podszyć się pod niego. W ten sposób może dokonywać dalszych nadużyć lub korzystać z konta bez upoważnienia.

8. Podejmowanie ważnych dla systemu decyzji na podstawie niezaufanych danych wejściowych

Przykładem sytuacji, w której ważne decyzje podejmowane są na podstawie niezaufanych danych, jest ta, w której dopuszczamy ryzyko przejęcia danych autoryzacyjnych użytkownika przez inny program zainstalowany na urządzeniu. Taki program może korzystać z powyższych informacji do nielegalnych operacji na koncie użytkownika.

7. Możliwość uruchomienia iniekcyjnego ataku po stronie aplikacji

Ataki iniekcyjne są potencjalnie bardzo niebezpieczne. Polegają one między innymi na przekazaniu aplikacji określonego podprogramu do uruchomienia i wykonania akcji. Taki program może w zasadzie wszystko, ogranicza go tylko cierpliwość i doświadczenie atakującego. Wyciek danych, atak na serwer, nieautoryzowane wypłaty, usuwanie konta, przekazywanie korespondencji pod wskazany adres? A może wszystko jednocześnie?

6. Niewłaściwa obsługa i wykorzystanie kryptografii

Wykorzystanie kryptografii jako jednej z form zabezpieczania systemów informatycznych jest wysoce pożądanym zachowaniem. Niestety, podobnie jak w wielu innych sytuacjach, w tym przypadku niewłaściwie zastosowane zabezpieczenia są bezużyteczne. Pomimo pozornie poprawnej implementacji, atakujący jest w stanie uzyskać dostęp do czytelnych wpisów tekstowych. Rezultatem może być sytuacja, w której zamiast nieco utrudnionego dostępu (poprzez zastosowanie standardowych form zaciemniania kodu), atakujący ma ułatwione zadanie (ze względu na niedziałającą kryptografię, a co za tym idzie, zwiększoną ekspozycję danych).

5. Niewystarczający mechanizm autoryzacji i uwierzytelniania

Istotnym elementem bezpieczeństwa programu jest mechanizm autoryzacji użytkowników, czyli zespół działań mających na celu zapewnienie, że tylko uprawniony użytkownik będzie korzystał z konta w sposób zapewniany przez programistów. Nieprawidłowa implementacja może prowadzić do nieuprawnionego korzystania z konta przez osoby niekompetentne lub korzystania przez osobę upoważnioną w sposób nieprzewidziany przez właściciela aplikacji. Takie działania mogą nawet doprowadzić do uszkodzenia serwera lub narazić właściciela aplikacji na nieprzewidziane koszty (np. dodatkowa opłata za korzystanie z usług Google czy Amazon Web Service).

4. Niezamierzony wyciek danych

Niezamierzony wyciek danych to sytuacja, w której, w wyniku nieprawidłowego zaprojektowania programu, osoby nieuprawnione otrzymają legalny dostęp do określonych danych. W skrajnych sytuacjach możesz w ten sposób udostępniać dane logowania użytkownika innym aplikacjom. Taka sytuacja niestety zdarza się znacznie częściej niż można by się tego spodziewać. Zdaniem badaczy wynika to z bezrefleksyjnego stosowania narzędzi niezgodnie z ich pierwotnym przeznaczeniem – np. tymczasowe przechowywanie danych (które nie jest w żaden sposób zabezpieczone) do przechowywania hasła użytkownika.

3. Niewystarczająca ochrona komunikacji

Warstwa transportowa, czyli warstwa komunikacyjna, to część systemu operacyjnego i programu odpowiedzialna za ruch sieciowy (a tym samym wymianę danych z innymi urządzeniami, w tym z serwerem). Jego ekspozycja ma miejsce, gdy dane przesyłane do określonego (prawidłowego) odbiorcy są czytelne dla osób postronnych, takich jak programy słuchowe.

W ten sposób atakujący może uzyskać kluczowe informacje o dostępie do systemu i wykorzystać je do ataków Man in the Middle. Sposobem na uniknięcie tego bardzo poważnego zagrożenia jest objęcie przesyłanych danych odpowiednim szyfrowaniem i umiejętne wykorzystanie certyfikatów autoryzacyjnych TLS, ze szczególnym uwzględnieniem techniki zwanej Certificate Pinning, która sprawia, że ​​tylko określony odbiorca może odczytać dane zawarte w przesyłanej paczce.

2. Niezabezpieczony magazyn danych

Jest to bardzo poważny problem napotykany, gdy poufne dane używane przez aplikację mobilną są przechowywane w postaci zwykłego tekstu (lub innej łatwej do odczytania) w niezabezpieczonym miejscu. Potencjalne konsekwencje obejmują kradzież tożsamości, oszustwo lub skandal prowadzący do utraty reputacji. Dostęp do ww. magazynu możliwy jest poprzez fizyczny dostęp do urządzenia (np. skradziony telefon), ale także poprzez wykorzystanie szkodliwego oprogramowania.

1. Słaba kontrola po stronie serwera

Ostatnia i najpoważniejsza kategoria naruszeń bezpieczeństwa aplikacji mobilnych: słaba kontrola po stronie serwera. Zawiera bardzo poważne błędy implementacji po stronie serwera, które mogą mieć poważne konsekwencje biznesowe. Dotyczy to wszelkich luk w zabezpieczeniach, które występują w usługach WWW, konfiguracjach serwerów WWW i tradycyjnych aplikacjach internetowych. Klasyfikacja jako największe zagrożenie dla aplikacji mobilnych po stronie serwera pokazuje, jak ważne jest holistyczne podejście do zapewnienia odpowiedniego zabezpieczenia każdego komponentu, w myśl zasady, że system jest tak silny, jak jego najsłabsze ogniwo.

Dlaczego tak?

Ostatnia dekada przyniosła niezwykłe upowszechnienie się nowoczesnych smartfonów, co de facto wprowadziło rewolucję telekomunikacyjną w kolejną fazę. W tym czasie programy uruchamiane na urządzeniach mobilnych przeszły od prostych wyświetlaczy danych do centrów usług dla złożonych systemów.

Wiele aspektów natury ekonomicznej, technicznej i ludzkiej miało konsekwencje w postaci stosunkowo niskiego poziomu bezpieczeństwa standardowej aplikacji mobilnej, z narażeniem użytkowników i całego systemu, do którego ta aplikacja daje dostęp.

Znajomość potencjalnych problemów jest pierwszym krokiem do ich eliminacji, a tym samym doprowadzenia do stanu, w którym firma, jej dane i reputacja są bezpieczne. Nie sądzę, żeby ktokolwiek chciał mieć własną Cambridge Analitica?

Interesuje Cię bezpieczeństwo aplikacji? Skontaktuj się z nami.

Aleksander Wędrychowski

Aleksander Wędrychowski

iOS Developer

Dobrze, a więc
zróbmy to!

Wycena
Dobrze, a więc
zróbmy to!