Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Książka: Application Security for the Android Platform
Przegląd pozycji książkowych dotyczących bezpieczeństwa platformy Android pozwolił odkryć krótką, ale dość ciekawą książkę: „Application Security for the Android Platform” autorstwa Jeff’a Six.
Dla kogo przeznaczona jest ta książka? Od razu należy stwierdzić, że użycie wyrazu „książka” może być pewnym nadużyciem z uwagi na objętość tej pozycji. Na 100 stronach znajdziemy informacje o mechanizmach bezpieczeństwa i dobrych praktykach programowania aplikacji na Androida. Ta informacja daje nam już pewien obraz, że książka skierowana jest do programistów Androida, którym do tej pory obce były zagadnienia uprawnień do plików, szyfrowania danych czy poprawnej weryfikacji certyfikatów. Jednakże z uwagi na skondensowane podejście, ta publikacja może być polecana jako wprowadzenie dla osób, które chcą rozpocząć przygodę z badaniem zagadnień bezpieczeństwa w Androidzie. Deweloperzy znajdują tutaj bardziej szczegółowo opisane zagadnienia: uprawnień aplikacji, współdzielenia danych między procesami lub aplikacjami oraz granularnego ograniczania dostępu.
Mimo daty wydania (grudzień 2011), książka nie straciła na aktualności z uwagi na fundamentalne tematy:
- Architektura – autor przypomina budowę platformy Androida, która u swych podstaw ma jądro linuksowe wraz z natywnymi bibliotekami (2D,3D, WebKit, SQLite itp.), co w silnym stopniu determinuje model bezpieczeństwa w oparciu o uprawnienia i identyfikatory użytkowników. W wyższych warstwach znajduje się framework aplikacyjny zarządzający uruchamianiem i współpracą pisanych przez developerów aplikacji.
Jeff Six zwraca w tym rozdziale uwagę na izolację danych przechowywanych lokalnie (pliki XML preferencji lub bazy danych) od pozostałych aplikacji, a także na problem zewnętrznych kart SD, gdzie dane są dostępne dla wszystkich.
- Uprawnienia aplikacji – w tym rozdziale autor oprócz krótkiego opisu uprawnień podzielonych na 4 podstawowe kategoria skupia się na deklaracjach pisanych przez deweloperów uprawnień i sposobie ich weryfikacji. Warto zwrócić w tym miejscu uwagę na problem tzw. wycieku uprawnień (ang. Permission leaking) związanego z niektórymi niebezpiecznymi metodami (m.in. checkCallingOrSelfPermission(), których wywołanie może spowodować przydzielenie uprawnień procesowi, który ich nie powinien posiadać.
- Bezpieczeństwo komponentów aplikacyjnych – w tej części znajdziemy dokładny opis zabezpieczania komponentów aplikacyjnych, czyli Aktywności (ang. Activities), Usług (ang. Services), Dostawców treści (ang. Content Providers), Odbiorników rozpowszechnianych informacji (ang. Broadcast Receivers). Komponenty te są stosowane w aplikacjach, które muszą komunikować się z zewnętrznymi komponentami. Dobrze przygotowany opis stosowania uprawnień dla powyższych komponentów zapewnia aplikacji ograniczenie i dostęp wyłącznie do danych, które muszą być współdzielone zgodnie z zasadą Principle of Least Privilege. Godny uwagi jest podrozdział Securing Content Providers, gdzie autor prezentuje przykład projektowania bazy danych, który umożliwia bezpieczne udostępnienie określonych informacji poprzez Dostawcę treści.
- Ochrona przechowywanych danych – ta część poświęcona jest szyfrowaniu przechowywanych lokalnie danych. Wszystko co znajduje się po stronie klienta w tym aplikacja i jej dane nie jest tak naprawdę bezpieczne. Mimo, że poprzednie rozdziały nie obfitowały w znaczne ilości przykładowego kodu to, tu znajdziemy szerszy przykład szyfrowania danych za pomocą klucza generowanego na podstawie poświadczeń użytkownika (ang. Key derivation function (KDF) for password based encryption (PBE)).
- Zabezpieczanie komunikacji z serwerem – ostatni rozdział skupia się na poprawnym zestawieniu szyfrowanej komunikacji z serwerem, t.j. poprawnej weryfikacji certyfikatu (nie tylko sprawdzeniu ważności jak miało to miejsce w przypadku słynnego kalkulatora wyborczego PKW). Ostatnim zagadanieniem jest wskazanie, w jaki sposób implementować zapytania paramteryzowane (ang. parameterized query) w Androidzie w celu uniknięcia SQLinjection.
Podsumowując, książka “Application Security for the Android Platform” jest godna polecenia programistom piszącym aplikacje na Androida, których zadaniem jest współdzielenie danych i współpraca z innymi aplikacjami. Niewątpliwie książka napisana jest w sposób przystępny a jej małą objętość traktowałbym w tym przypadku jako zaletę, która zachęca do przeczytania i szybkiego wzrostu świadomości zagrożeń i zabezpieczeń w Androidzie. Dla osób zainteresowanych testami bezpieczeństwa aplikacji mobilnych jest to dobry wstęp i podręczne kompendium, gdzie można poszukiwać potencjalnych błędów programistów.
–j23