Ten przykład ma wiele różnych aspektów. Wspomnę o kilku kwestiach, które moim zdaniem nie zostały wyraźnie omówione w innym miejscu.
Ochrona tajemnicy podczas transportu
Pierwszą rzeczą, na którą należy zwrócić uwagę, jest dostęp do interfejsu API Dropbox przy użyciu uwierzytelniania aplikacji mechanizmu wymaga przesłania klucza i tajnego klucza. Połączenie to HTTPS, co oznacza, że nie można przechwycić ruchu bez znajomości certyfikatu TLS. Zapobiega to przechwyceniu i odczytaniu pakietów przez osobę podróżującą z urządzenia mobilnego na serwer. Dla zwykłych użytkowników jest to naprawdę dobry sposób na zapewnienie prywatności ich ruchu.
To, co nie jest dobre, polega na zapobieganiu pobieraniu aplikacji i sprawdzaniu ruchu przez złośliwą osobę. Naprawdę łatwo jest korzystać z pośredniczącego proxy dla całego ruchu do i z urządzenia mobilnego. W tym przypadku nie wymaga demontażu ani inżynierii wstecznej kodu, aby wyodrębnić klucz aplikacji i klucz tajny ze względu na charakter interfejsu API Dropbox.
Możesz wykonać przypinanie, które sprawdza, czy certyfikat TLS otrzymany z serwera jest tym, którego oczekujesz. To dodaje kontrolę do klienta i utrudnia przechwytywanie ruchu. Utrudniłoby to kontrolę ruchu w locie, ale kontrola pinowania ma miejsce u klienta, więc prawdopodobnie nadal można wyłączyć test pinowania. Utrudnia to jednak.
Ochrona sekretu w spoczynku
Pierwszym krokiem jest użycie czegoś takiego jak proguard , który sprawi, że będzie mniej oczywiste, gdzie kryją się jakieś tajemnice. Możesz także użyć NDK do przechowywania klucza i tajemnicy oraz bezpośredniego wysyłania wniosków, co znacznie zmniejszy liczbę osób posiadających odpowiednie umiejętności do wydobywania informacji. Dalsze zaciemnianie można osiągnąć, nie przechowując wartości bezpośrednio w pamięci przez dłuższy czas, możesz je zaszyfrować i odszyfrować tuż przed użyciem, jak sugeruje inna odpowiedź.
Bardziej zaawansowane opcje
Jeśli masz teraz obsesję na punkcie umieszczenia sekretu w dowolnym miejscu w swojej aplikacji i masz czas i pieniądze na inwestowanie w bardziej kompleksowe rozwiązania, możesz rozważyć przechowywanie poświadczeń na swoich serwerach (zakładając, że je masz). Zwiększy to opóźnienie wszelkich wywołań interfejsu API, ponieważ będzie on musiał komunikować się za pośrednictwem serwera, i może zwiększyć koszty prowadzenia usługi z powodu zwiększonej przepustowości danych.
Następnie musisz zdecydować, jak najlepiej komunikować się z serwerami, aby zapewnić ich ochronę. Jest to ważne, aby zapobiec ponownemu pojawieniu się tych samych problemów z wewnętrznym interfejsem API. Najlepszą ogólną zasadą, jaką mogę podać, to nie przekazywać żadnych tajemnic bezpośrednio z powodu zagrożenia „człowiek w środku”. Zamiast tego możesz podpisać ruch przy użyciu swojego tajnego klucza i zweryfikować integralność wszelkich żądań przychodzących na twój serwer. Jednym ze standardowych sposobów jest obliczenie HMAC wiadomości wpisanej w tajny klucz. Pracuję w firmie, która ma produkt zabezpieczający, który również działa w tej dziedzinie, dlatego takie rzeczy mnie interesują. W rzeczywistości, oto artykuł na blogu jednego z moich kolegów, który omawia większość tego.
Ile powinienem zrobić?
W przypadku takich porad dotyczących bezpieczeństwa musisz podjąć decyzję dotyczącą kosztów / korzyści dotyczącą tego, jak bardzo chcesz zmusić kogoś do włamania. Jeśli jesteś bankiem chroniącym miliony klientów, twój budżet jest zupełnie inny niż ktoś, kto wspiera aplikację w ich wolny czas. Jest praktycznie niemożliwe, aby uniemożliwić komuś złamanie twojego bezpieczeństwa, ale w praktyce niewiele osób potrzebuje wszystkich dzwonków i gwizdków, a przy pewnych podstawowych środkach ostrożności można uzyskać długą drogę.