Ich entwickle gerade eine Anwendung, die ziemlich viele persönliche Benutzerinformationen enthält - Dinge wie Facebook-Kontakte, etc ... Nun, eines von Die Dinge, die ich tun möchte (und ziemlich effektiv getan habe), öffnen Teile der Anwendung für Anwendungen von "Drittanbietern", die das eingebaute Interprozesskommunikationsprotokoll (AIDL) von Android verwenden. So weit, ist es gut.Sicherheit auf Signaturebene für Android-Dienste mit mehr als einer erlaubten Signatur implementieren
Hier ist der Haken: Da wir eine ganze Reihe von persönlichen Informationen verarbeiten müssen, müssen wir sehr vorsichtig sein, wer und wie kann man nicht darauf zugreifen; Insbesondere sollten nur "vertrauenswürdige" Anwendungen dazu in der Lage sein. Daher können Sie in der Datei AndroidManifest.xml, in der wir die Dienste deklarieren, eine benutzerdefinierte Berechtigung verwenden. Mein Problem ist das: Ich möchte in der Lage sein, Signatur-Level-Schutz (ähnlich der normalen "Signatur" Berechtigungsstufe), aber mit einem bisschen ein catch:
Ich nicht nur wollen Anwendung signiert mit unserer internen Signatur, um auf die Dienste zugreifen zu können. Ich möchte in der Lage sein, eine Liste von "vertrauenswürdigen Signaturen" & zur Laufzeit (oder wenn es einen besseren Weg, dann vielleicht ein anderes Mal?) In der Lage sein, eingehende Anfragen gegen diese Liste der vertrauenswürdigen Schlüssel zu überprüfen.
Dies würde die Sicherheitsanforderungen auf die gleiche Weise erfüllen wie die normale "Signatur" Berechtigungsstufe Ich denke - nur Programme in der "trusted keys list" könnten auf die Dienste zugreifen, und Schlüssel sind schwer zu fälschen überhaupt möglich?) - aber mit dem zusätzlichen Vorteil, dass wir nicht jede Anwendung unterschreiben müssen, die die APIs mit dem Schlüssel unseres internen Teams nutzt.
Ist dies im Moment in Android möglich? Und wenn ja, gibt es spezielle Anforderungen?
Dank
Ausgezeichnete Informationen, danke. –
können wir nicht einfach den Paketnamen in der Onbind überprüfen und wenn die nicht autorisierte App. Das Paket versucht, auf den Wert zuzugreifen und dann den Nullwert zurückzugeben, der das ibinder-Objekt zurückgibt. –
@kamal_tech_view Leider glaube ich nicht, dass dieser Ansatz wie erwartet funktioniert, da 'onBind()' nur einmal vom Betriebssystem aufgerufen wird (siehe hier: https://groups.google.com/d/msg/ android-security-discuss/4B9jwsAkp2c/QJc4A5FSWCMJ). Hinweis zu dem Hinweis, eine Fabrik zu verwenden, um den empfindlichen Teil des Systems am _first_-Call-Point zu schützen, habe ich nicht untersucht, aber ich denke, dass Sie die Einstellungen auf dem aktuellen 'SecurityManager' überprüfen möchten (Sie könnten finden, dass die Angerufenen Ihre versteckten Felder über Introspektion bekommen können und vermeiden Sie Ihren Scheck). – jelford