Cztery sposoby na wzmocnienie bezpieczeństwa aplikacji mobilnych
Dostarczanie użytkownikom mobilnych komputerów ciekawych wrażeń to z pewnością bardzo satysfakcjonujący aspekt pracy programisty, jednak nie jest to najważniejsze zadanie dewelopera. Najwyższy priorytet przy opracowywaniu i wdrażaniu każdej aplikacji należy zawsze przypisać bezpieczeństwu. Umieszczenie zabezpieczeń urządzeń czy danych na niższej pozycji na liście priorytetów może narazić użytkowników na zagrożenia, z których każde jest w stanie doprowadzić nie tylko do utraty zaufania i lojalności klientów, ale również pociągnąć za sobą konsekwencje finansowe dla programistów, klientów, partnerów oraz użytkowników, którzy są przecież w pełni uzależnieni od wykorzystywanych aplikacji. Dlatego właśnie ważne jest, by programiści, analizując solidność opracowywanych przez siebie funkcji aplikacji mobilnych, pamiętali o następujących wytycznych:
- Zawsze stawiaj bezpieczeństwo nad wygodę
Każdy klucz interfejsu aplikacji (API) wykorzystywany do komunikowania się z usługami innych podmiotów z natury rzeczy nie jest bezpieczny. Programiści starają się zaszyfrować klucze aplikacji wykorzystując narzędzia typu ProGuard lub inne, jednak wszelkie te bariery można pokonać, jeśli zaangażuje się odpowiednie środki.
Jeżeli chodzi o użycie kluczy API, ważne jest zastosowanie odpowiednich restrykcji. Przykładowo, jeśli opracowujemy aplikację webową, należy ustawić obsługę zapytań pochodzących wyłącznie z odpowiednich domen lub adresów IP. Dla aplikacji natywnych, wykorzystanie klucza może zostać ograniczone w oparciu o identyfikator paczki aplikacji lub nazwę pakietu oraz certyfikat z podpisem, dzięki czemu wyłącznie aplikacje podpisane przez nas będą w stanie korzystać z naszego klucza API.
Gdy usługi podmiotów zewnętrznych nie zapewniają odpowiedniej ochrony naszego klucza API, należy rozważyć wykorzystanie serwerów proxy oraz zabezpieczeń oferowanych przez dużych zewnętrznych dostawców usług chmurowych. W takich sytuacjach nie należy nigdy stosować własnych mechanizmów identyfikacyjnych. Wprowadzenie prostego systemu użytkowników i haseł to z pewnością kusząca opcja, jednak zapewnienie odpowiedniego poziomu bezpieczeństwa jest w tym przypadku niezwykle trudne. Jeśli potrzebujemy systemu identyfikacji użytkowników własnej aplikacji, należy skorzystać z dostawców odpowiednich rozwiązań identyfikacyjnych, takich jak usługa Active Directory w środowisku korporacyjnym czy też Gmail lub Apple ID w przypadku rozwiązań konsumenckich.
- Zabezpieczaj klucze podpisów oraz środowisko programistyczne
To oczywiste, że żadnych kluczy czy poświadczeń wykorzystywanych przez naszą aplikację, a więc również kluczy stosowanych do publikacji i podpisywania aplikacji, nie należy nigdy dodawać do publicznych repozytoriów kodów źródłowych. Nawet dodawanie kluczy do repozytoriów prywatnych niesie ze sobą pewne ryzyko, ponieważ w przyszłości możemy zdecydować o zmianie typu aplikacji na open source. Kod może również wyciec lub zostać przypadkowo udostępniony przez dewelopera.
Dostęp do kluczy produkcyjnych powinien być udzielany wyłącznie inżynierom pracującym nad tworzeniem aplikacji. Gdy przekazujemy programistom klucze testowe, należy upewnić się, że ograniczają się one do wymaganych przez nich funkcjonalności. Klucze powinny zawsze być przechowywane w oddzielnych plikach i podlegać regularnej rotacji. Należy pamiętać, że wiele kluczy do aplikacji zewnętrznych będzie powiązanych z informacjami księgowymi, co może wiązać się z kwestiami finansowymi, nawet jeśli nie nastąpi żaden wyciek danych.
- Stosuj narzędzia do analizy statycznej, aby identyfikować potencjalne problemy z aplikacją
W idealnym świecie, przed wdrożeniem produkcyjnym wszystkie aplikacje przechodziłyby testy penetracyjne, aby ograniczyć problemy z kodem źródłowym, co mogłoby prowadzić do incydentów bezpieczeństwa. Powstała cała gałąź IT zajmująca się testami penetracyjnymi, jednak w większości przypadków budżety projektów nie przewidują testowania każdego wydania aplikacji.
Statyczną analizę kodu pod kątem naruszeń bezpieczeństwa można przeprowadzić z użyciem narzędzi open source, a jej wyniki powinny należy uwzględnić w procesie rozwoju i wydania aplikacji. Spróbujmy wykształcić w naszej firmie kulturę bezpieczeństwa opartą na najlepszych praktykach, ponieważ nawet najbardziej doświadczony deweloper nie jest w stanie napisać bezbłędnego kodu za każdym razem.
- Zapobiegaj wyciekom danych
Tworzenie logów to świetna decyzja. Logi zawierają niewyobrażalną ilość danych, natomiast część z nich może posłużyć hakerom do znalezienia słabych punktów naszej aplikacji. Oczywiście dane poufne nigdy nie powinny się znaleźć w logach, jednak nawet niewinne z pozoru informacje mogą zdradzać szczegóły architektury aplikacji lub wykorzystywanych przez nią bibliotek, a te z kolei mogą zawierać różnego rodzaju podatności.
Kolejnym niezamierzonym sposobem utraty danych jest proces ich przechowywania. Jeśli nasza aplikacja zapisuje lub odczytuje dane w folderze udostępnianym innym aplikacjom, zapisywane pliki są dostępne dla innych osób, a pliki przez nas odczytywane z udostępnianych folderów są narażone na działanie złośliwych aplikacji.
Deweloperzy muszą bezwzględnie pamiętać, że to oni tworzą pierwszą linię zabezpieczeń aplikacji mobilnych. Jednak wykształcenie i utrzymanie kultury bezpieczeństwa w całym zespole pracującym nad programowaniem i wdrożeniem aplikacji to warunek niezbędny do zdobycia zaufania klientów.