Aby zwiększyć zaufanie do aplikacji Google, zobowiązujemy się teraz do umieszczania w naszym dzienniku przejrzystości wszystkich aplikacji Google. Opublikowaliśmy dziennik przejrzystości, aby publicznie weryfikować stwierdzenia dotyczące tych plików APK.
Model zagrożeń
Systemy przejrzystości mogą służyć do wykrywania, a tym samym do odstraszania ataków na łańcuch dostaw. Ilustrujemy to kilkoma przykładami.
Załóżmy, że haker złośliwie modyfikuje aplikację Google, a nawet udaje mu się podpisać ją kluczem podpisywania używanym do dystrybucji w Google Play. Dzięki dziennikowi przejrzystości binarnej każda osoba, która otrzyma podejrzany plik APK, może go użyć jako weryfikowalnego źródła informacji podstawowych do sprawdzenia autentyczności pliku APK. Odkryją, że Google nie dodało do logu odpowiednich metadanych pliku APK, i będą wiedzieć, że nie mogą ufać naruszonemu plikowi APK.
Publikowanie w dzienniku to proces odrębny od procesu wydawania z podpisywaniem (co ilustruje diagram ekosystemu), co podnosi poprzeczkę dla atakującego, ponieważ nie wystarczy już tylko przejęcie klucza.
Planujemy też zintegrować ten dziennik z publiczną siecią świadków za pomocą standardowego protokołu świadków. Zachęcamy jednak zewnętrzne, niezależne podmioty do monitorowania integralności tego publicznie dostępnego dziennika. Te podmioty mogą potwierdzić, że dziennik jest tylko do odczytu, i zgłosić wszelkie próby manipulacji.
Istnienie takiego systemu przejrzystości i dodatkowa możliwość wykrywania ataków zniechęcają do szkodliwych działań. Jeśli plik APK zostanie naruszony, ale użytkownicy ufają tylko tym, które znajdują się w dzienniku, naruszony plik APK będzie musiał zostać publicznie ujawniony. Zwiększa to prawdopodobieństwo wykrycia, że istnieje przejęty plik APK, i umożliwia podjęcie działań w celu usunięcia go z dystrybucji.
Model roszczącego
Model podmiotu zgłaszającego to struktura służąca do definiowania ról i artefaktów w systemie weryfikowalnym. W przypadku przejrzystości aplikacji własnych Google oświadczamy, że skrót pliku APK zapisany w tym dzienniku reprezentuje konkretną wersję oficjalnej aplikacji Google przeznaczonej dla użytkowników.
- ClaimGoogleApp: (I, Google, claim that
$hashAppis for$googleApp), where:$hashAppto kryptograficzny skrót (np. SHA256) pliku APK (w tym podzielonych plików APK) konkretnej wersji$googleApp.$googleAppto pakiet na Androida (APK), który składa się na aplikację tworzoną i dystrybuowaną przez Google.
Każda osoba, która ma kopię $googleApp, może zweryfikować to oświadczenie. Szczegółowo opisujemy ten proces na stronie weryfikacji.
Treść dziennika
Gdy Google udostępnia nową wersję pliku APK, dodaje odpowiedni wpis do dziennika przejrzystości plików APK Google.
Każdy wpis w tym logu zawiera 4 rodzaje metadanych:
- Skrót pliku APK aplikacji podpisanej przez Google. Jest to ciąg szesnastkowy skrótu SHA256 całego pliku.
- Opis typu poprzedniego skrótu. To jest ciąg znaków.
- Nazwa pakietu pliku APK. To jest ciąg znaków.
- Numer wersji (versionCode) pliku APK. Jest to liczba całkowita różna od zera.
Format wpisu logu to konkatenacja 4 rodzajów informacji ze znakiem nowego wiersza (\n), jak pokazano poniżej:
hash\nSHA256(APK)\npackage_name\npackage_version\n
Ponieważ mierzymy cały plik APK, opis skrótu jest ustawiony na SHA256(APK). Zapewnia to kompleksowe pokrycie treści każdego pliku i ułatwia użytkownikom uzyskanie tego pomiaru.
Diagram ekosystemu
