Android-alkalmazások aláírása: hogyan működik és miért számít
Minden alkalommal, amikor telepít egy alkalmazást Android telefonjára, egy csendes, de kritikus biztonsági ellenőrzés történik a háttérben. Telefonja ellenőrzi az APK-csomag digitális aláírás kódját. Ez a kriptográfiai kézfogás megakadályozza, hogy a rosszindulatú hackerek „megmérgezzék” az alkalmazásait rosszindulatú programokkal, miközben biztosítja a fejlesztők számára, hogy identitásuk elvesztése nélkül küldhessenek frissítéseket.
Ha alkalmazásokat ír, az aláírást egyszerűen meg kell oldania; ha csak szeret az Androiddal bütykölni, ez a rendszer egyik legkielégítőbb része. Akárhogy is, a hogyan működik az alkalmazás-aláírás megéri az idejét. Az alábbiakban végigjárjuk a technológiát, hogyan fejlődtek az aláírási sémák, és hogyan teheti meg a manuálisan ellenőrizze a tanúsítványokat-t online.
- Miért kell minden Android-alkalmazást aláírni, és milyen titkosításról van szó (RSA / EC).
- A különbség a v1 (JAR), v2, v3 és v4 aláírási sémák között, és azt, hogy melyiket kell használnia az alkalmazásnak ma.
- Hogyan dönti el az Android, hogy engedélyezi-e a frissítést az aláírás folytonossága alapján.
- A kulcsrotáció hogyan teszi lehetővé a fejlesztő számára az aláírási kulcs megváltoztatását a meglévő telepítések megszakítása nélkül.
- Hogyan ellenőrizheti saját maga az APK aláírását a parancssorban vagy a böngésző alapú ellenőrző segítségével.
Mi az az alkalmazás-aláírás?
Lényegében az alkalmazás-aláírás egy olyan folyamat, amelyben a fejlesztő Privát kulcs segítségével aláírási blokkot hoz létre az alkalmazás fájljaihoz. A megfelelő Nyilvános kulcs ezután beágyazódik az APK-ba a META-INF mappában. Amikor a telefon megpróbálja telepíteni az alkalmazást, a nyilvános kulcsot használja annak ellenőrzésére, hogy az aláírás egyezik-e a fájl tartalmával.
Ez két fő tulajdonságot biztosít:
- Állandóság: Ha az alkalmazás kódjának egyetlen bájtja megváltozik (például egy trójai), az aláírás többé nem fog megegyezni a fájllal, és az Android megtagadja annak telepítését.
- Személyazonosság igazolása: Ha egy alkalmazás frissíteni próbál egy meglévőt, akkor az aláírásának egyeznie kell. Ez az oka annak, hogy nem telepíthet manipulált Facebook-alkalmazást a hivatalos alkalmazás fölé.
Aláírási sémák fejlődése
A Google folyamatosan frissítette az aláírási mechanizmust a sebesség és a biztonság javítása érdekében:
- V1 (tégely aláírása): Egyedi fájlokat ír alá az APK-n belül (ZIP). Ez lassú, mert az operációs rendszernek minden fájlt ki kell csomagolnia és ellenőriznie kell. Ezenkívül ki van téve bizonyos ZIP-manipulációknak.
- V2 (APK aláírási séma): Az APK teljes bináris blokkját írja alá. Az ellenőrzéshez nincs szükség kicsomagolásra, így hihetetlenül gyors. Az Android 7.0 (Nougat) verzióban jelent meg.
- V3 (billentyűk elforgatása): Kibővíti a V2-t a kulcsok „vonalának” hozzáadásával. Lehetővé teszi a fejlesztő számára annak bizonyítását, hogy egy új kulcs a régebbi kulcs engedélyezett utódja. Bevezetett Android 9.0 (Pie).
- V4 (Streaming aláírás): Kifejezetten növekményes telepítésekhez tervezték, lehetővé téve az alkalmazások ellenőrzését, miközben USB-n vagy Wi-Fi-n keresztül még letöltés alatt állnak.
Miért fontosak a tanúsítványok az oldalbetöltésnél?
Amikor letölt egy APK-t egy nem hivatalos forrásból, a Tanúsítvány kivonatolás a legjobb barátod. A tanúsítvány ujjlenyomata (például egy SHA-256 hash) egyedileg azonosítja a fejlesztő aláíró kulcsát. Minden alkalmazás ugyanazt az aláíró kulcsot használja az összes frissítésben, így összehasonlíthatod az APK ujjlenyomatát a fejlesztő közzétett értékével, hogy megbizonyosodj arról, hogy az eredeti.
Ha azt gyanítja, hogy egy APK hamis, futtassa le a Online APK-ellenőrző-n keresztül. Eszközünk megmutatja:
- Az aláíró Közönséges név (CN)-je (pl. „Android”).
- A tanúsítvány Érvényességi időszak-je.
- A SHA-1/SHA-256 ujjlenyomatok.
Hogyan ellenőrzi az Android az aláírást telepítéskor
A „tanúsítvány ellenőrzése” lépést olyan gyakran elhallgatják, hogy érdemes végigjárni, mit csinál az operációs rendszer, amikor megérinti az APK-t, és az Android eldönti, hogy telepíti-e:
- Nyissa meg az APK-t ZIP-fájlként, és keresse meg az aláíró blokkot. V2/v3 aláírásokhoz, amelyek egy strukturált blokk közvetlenül a központi könyvtár előtt; az örökölt v1 séma esetében ez a META-INF/*.RSA, *.DSA vagy *.EC tartalma.
- Számítsa ki az APK minden második bájtjának SHA-256 kivonatát. Az aláíró blokk ki van zárva a saját kivonatából; minden más meghatározott darabokban van kivonatolva.
- Ellenőrizze az egyes darabok kivonatait az aláíró blokkban rögzített kivonatokkal összehasonlítva. Ha csak egy bájt is megváltozott azóta, hogy a fejlesztő aláírta a fájlt, a kivonatok nem egyeznek meg, és a telepítés elutasításra kerül egy általános „Alkalmazás nincs telepítve” hibaüzenettel.
- Ellenőrizze, hogy maga az aláíró blokk a tanúsítvány privát kulcsával készült. A tanúsítvány nyilvános kulcsa a blokkban lévő kriptográfiai aláírás ellenőrzésére szolgál. A sikeres ellenőrzés azt jelenti, hogy aki aláírta a fájlt, az rendelkezik a tanúsítvánnyal párosított privát kulccsal.
- Hasonlítsa össze a tanúsítvány ujjlenyomatát az azonos csomagnévvel rendelkező bármely meglévő telepítéssel. Ha a csomag már telepítve van, és az új APK egy másik tanúsítvánnyal van aláírva, a telepítést a INSTALL_FAILED_UPDATE_INCOMPATIBLE elutasítja. Ez az operációs rendszer fő védelme a megszemélyesítéssel szemben: egy rosszindulatú szereplő nem cserélheti le a banki alkalmazást saját példányára, hacsak el nem lopta a bank aláírási kulcsát is.
Mindezek egyike sem bizonyítja önmagában, hogy a fejlesztő megbízható, csupán azt, hogy a telepítendő fájl bájtról bájtra megegyezik azzal, amit aláírtak, és harmadik fél nem módosította. A fejlesztőbe vetett bizalom egy külön döntés, amelyet azzal hoz meg, hogy megválasztja, milyen forrásból telepít.
Mit jelent valójában az "aláírási eltérés"?
A külső forrásból történő telepítés (sideloading) során a leggyakoribb meglepetés az „aláírás-eltérés” (signature mismatch) hiba frissítéskor. Íme, mi történik valójában:
- Telepítette a App X 1.0 verzió-t a Play Áruházból.
- A App X 1.1-es verzió-t nem Play forrásból tölti le.
- Az operációs rendszer ugyanazt a csomagnevet látja (com.example.app), de az APK más tanúsítvánnyal van aláírva (az oldalsó forrás aláíró kulcsa, nem az eredeti kiadóé). Nem hajlandó telepíteni.
Ez a gyakorlatban kétféleképpen történik:
- A harmadik féltől származó APK valóban egy másik kiadótól származik, például egy „módosított” vagy „patchelt” másolat. A telepítés megtagadása a helyes viselkedés; a telepítése azt jelentené, hogy egy idegenre bízza ugyanazokat az adatokat, amelyeket a banki alkalmazása már kezelt.
- A harmadik féltől származó APK a a hivatalos APK újrafeltöltése, de a Google Play App Signing rendszere minden egyes felhasználó letöltését aláírja a felhasználó feltöltési kulcs burkolójával. Két eszköz néha kissé eltérő aláírási adatokat láthat ugyanahhoz az alkalmazásverzióhoz. Ebben az esetben a tanúsítvány gyökérben lévő ujjlenyomata továbbra is megegyezik; ellenőrizheti a APK-ellenőrző termékünkkel.
Ha a valóban tanúsítvány ujjlenyomata eltér a meglévő telepítésétől, akkor az egyetlen lehetőség az, ha először eltávolítja az aktuális másolatot (az adatok elvesztése), mielőtt a csere oldalbetöltését elvégezné, és soha nem tiltja le az aláírás ellenőrzését.
Saját aláíró kulcs létrehozása (fejlesztőknek)
Ha Android-alkalmazásokat készít, végül alá kell írnia saját buildjeit. A Java SDK-ból származó keytool szabványú egysoros parancs a következő:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Két dolgot kell tudni:
- A érvényesség számít: 10000 nap (nagyjából 27 év) a hagyományos érték, mivel az operációs rendszer a közel lejárt vagy lejárt kulccsal aláírt frissítéseket veszélyeztetettként kezeli. Hozzon létre egyszer egy hosszú élettartamú kulcsot, és védje meg.
- A közzététel után nem lehet egyszerűen kulcsot váltani. A v3-as aláírási séma kifejezett funkcióként vezeti be a kulcsforgatást: a régi tanúsítvány egy tárolt igazoláson keresztül hitelesíti az újat, lehetővé téve az operációs rendszer számára, hogy az identitás folytonosságának megőrzése mellett elfogadja az új kulccsal aláírt frissítéseket. A v3 nélkül az eredeti kulcs elvesztése az összes meglévő telepítés elárvulását jelenti.
Oldalról betöltött teszt buildekhez az aláíratlan hibakeresési kulcstároló megfelelő; termeléshez használjon jelszóval védett, hosszú érvényességű kulcstárolót, amelyet offline biztonsági mentésben tárolnak.
Ellenőrizze az alkalmazás identitását, mint egy profi
Ne bízzon az általános fájlnevekben. Nézze meg az APK-k kriptográfiai szívét másodpercek alatt.
Igazolja a tanúsítványokat mostGyakori aláírási buktatók
- Önaláírt tanúsítványok: A legtöbb Android-alkalmazás önaláírt. A webhelyek SSL-jével ellentétben az Android-alkalmazások aláírására nincs központi hatóság. Közvetlenül a fejlesztőben kell megbíznia.
- Hibakeresési tanúsítványok: A tesztelésre készült alkalmazások általános „hibakereső” kulcsot használnak. Ezeket az alkalmazásokat soha nem szabad nyilvánosságra hozni, és számos biztonsági szűrő blokkolja őket.
- Kulcsvesztés: Ha egy fejlesztő elveszíti privát kulcstárát, a soha újra frissítheti az alkalmazását. Egy "Új" alkalmazást kellene kiadniuk más csomagnévvel.
A megfelelő aláírási séma kiválasztása a cél SDK-hoz
Az alkalmazás-aláírás csendesen alátámasztja az Android biztonságát. Amint a privát/nyilvános kulcs kapcsolat kattan, az oldalról betöltött alkalmazást érdemei alapján ítélheti meg, és megerősítheti, hogy a telepített tartalmat nem változtatták meg azóta, hogy a fejlesztő aláírta. Ha többet szeretne megtudni az Android belső részeiről, tekintse meg a útmutató az XAPK formátumhoz oldalunkat.