Warum Code Signing?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Warum Code Signing?

    Hi!

    Ich frage mich gerade, warum es überhaupt beim Hochladen in den App Store das Code Signing gibt, und denke, dass ich da irgendetwas falsch verstanden haben muss (Xcode macht ja vieles automatisch...), denn auf mich wirkt das ganze ziemlich unsinnig.

    Ich gehe von folgendem Ablauf aus:
    - Ich erstelle eine Code Signing Identity (dafür muss ich mich mit meiner Apple ID & Passwort einloggen)
    - Ich signiere bzw. Xcode signiert eine App damit
    - Ich melde mich in Xcode oder dem Application Loader mit meiner Apple ID & Password an
    - Die App wird hochgeladen
    - Apple sieht "Aha, OK, das ist wirklich von dem"
    - Apple schaltet die App im App Store frei

    Aber was soll das? Um in meinem Namen etwas hochzuladen, braucht der "fiktive Bösewicht" ja schließlich meine Apple ID und mein Passwort.
    -> Dann kann er aber auch eine neue Code Signing Identity anlegen!!!

    Ich raffs nicht ?(

    Wer weiß es besser als ich?

    mfg, T. :)
  • Durch das Code-Signing muss ein Angreifer – platt gesagt – an drei Daten kommen: Login, Passwort und privater Schlüssel. Im Gegensatz zu den beiden ersten Daten überträgt Dein Rechner den privaten Schlüssel nicht auf den Apple-Server, sondern nur den öffentlichen. Apple kann aber anhand der Signatur erkennen, dass der Absender im Besitz des richtigen privaten Schlüssels sein muss. Natürlich kann ein Angreifer auch in Deinen Rechner eindringen und Deinen privaten Schlüssel klauen, der hoffentlich durch ein weiteres Passwort des Schlüsselbundes gesichert ist. Das ist erschwert den Angriff aber erheblich gegenüber dem Ablauschen der Login/Passwort-Kombination. Aus diesem Grund musst Du auch jedes Jahr da Zertifikat erneuern: Falls es doch jemandem geglückt ist, Deinen privaten Schlüssel zu erhaschen, machst Du damit seine Bemühungen obsolet. Paranoiker aktualisieren das Zertifikat übrigens gerne auch häufiger. ;)

    Ein weiterer Vorteil besteht besteht für Dich: Denn die Code-Signatur stellt sicher, dass das App-Bundle genau den Inhalt hat, den Du hochgeladen hast. Ohne den privaten Schlüssel kann niemand den Paketinhalt ändern, ohne die Signatur zu verletzen.
    „Meine Komplikation hatte eine Komplikation.“
  • Dies zur "offiziellen" Erklärung. Die "inoffizielle" Erklärung geht meiner Meinung nach eher in die Richtung, dass keiner versucht eine App in den App Store zu laden der nicht dazu berechtigt ist bzw. dafür bezahlt hat. Weiterhin sollen Apps nicht ohne Kontrolle durch Apple auf diverse Geräte installiert werden können. Es könnte ja jemand auf die Idee kommen einen alternativen App Store anzubieten und das schöne Geschäftsmodell und der Profit wären dahin.

    Man stelle sich auch mal vor, wie einfach es wäre eine App ohne Signatur in den Store laden zu können. So könnte dann viel einfacher Apps für Kunden entwickeln und diese dann problemlos für den Account des Kunden einstellen, ohne irgendwie mit Zertifikaten, Provisioning Profiles oder evtl. sogar dem Resigning von App Bundles herum zu fummeln. Schöne heile Welt und im Apple Universum leider nur schwer vorstellbar.
  • Das Verwenden von Code Signing ist ein Sicherheitsfeature wie alle anderen auch. Es hängt die Latte für Angreifer, die Schadcode auf einen Rechner bringen wollen, höher, ist aber natürlich kein Allheilmittel. Zumindest hält man sich damit aber wenigstens die Möchtegern-Hacker vom Hals. Für eine App ist das schon eine sehr gute Sache. Guck Dir den ganzen Malware-Mist auf Android an. Das ist das Ergebnis, wenn der Zugang zum Store nicht reglementiert ist (und man sich obendrein Software von $JWD installieren kann. Für die einen ist das grenzenlose Freiheit (ölf!), für die anderen Murks. Ich halte es für Murks.

    Microsoft verwendet schon lange Signaturprüfungen bei der *Installation* von Software. Und siehe da: jede halbwegs gut entwickelte Malware in den letzten Jahren war mit einem irgendwo geklauten Zertifikat signiert. Wer es drauf anlegt, für den ist Code Signing genauso wenig ein Hindernis wie alle anderen Barrieren. Aber s.o.: im App-Umfeld ist das eine gute Sache, denn in der Regel ist eine App kein besonders lohnenswertes Ziel. Um darüber einen gezielten Angriff hinzukriegen, müsste der Angreifer erstmal eine Code Signing Entity bekommen, den ganzen iTunes-Connect-Prozess unbemerkt durchlaufen und dann seine Opfer dazu bringen, die App zu installieren. Arg konstruiert.
  • Erstmal Danke für eure Antworten :)

    Mir ist schon klar, wie das mit der Signatur und dem privaten Schlüssel funktionert (so ähnlich wie TLS/SSL, denke ich mal)

    Aber wenn jemand mein Passwort hat, kann derjenige doch einfach einen neuen privaten & öffentlichen Schlüssel anlegen unter developer.apple.com/account/ios/certificate/, oder? Da habe ich ja meine am Anfang schließlich auch eingestellt...
  • Ein hundertprozentig sicheres System ist wahrscheinlich nicht möglich. Wenn Dir jemand auf die beschriebene Art die Identität klaut, bekommst Du das spätestens beim nächsten App-Upload mit. Der Angreifer kann seinen Angriff zumindest nicht dadurch vertuschen, dass er Dein altes Zertifikat nach dem Angriff wieder installiert.
    „Meine Komplikation hatte eine Komplikation.“
  • Noch ein weiterer Punkt: Du kannst die Signatur auch als Unterschrift unter Deine App sehen, die relativ schwer zu fälschen ist. Angenommen Deine App richtet einen schweren Schaden an. Dann kannst Du Dich nicht damit entschuldigen, dass der Fehler erst nach dem Code-Signing (z. B. beim Upload) in den App-Code gelangt ist.
    „Meine Komplikation hatte eine Komplikation.“