it-swarm.com.de

Warum können wir immer noch Snapchat-Fotos in 12 Zeilen Ruby knacken?

Ich bin gerade auf dieses Bit von Ruby] gestoßen, mit dem Snapchat-Fotos entschlüsselt werden können, die auf einem Telefon aus dem Cache entnommen wurden und anscheinend von hier angepasst wurden. Zu meiner Überraschung funktionierte ohne Probleme, angesichts der Probleme mit der Sicherheit von Snapchat, die in letzter Zeit gut bekannt gemacht wurden (Soweit ich mich erinnere, lecken die meisten Dinge rund um die gesamte Telefonnummer/den Benutzernamen).

require 'openssl'

ARGV.each do|a, index|
    data = File.open(a, 'r:ASCII-8BIT').read
    c = OpenSSL::Cipher.new('AES-128-ECB')
    c.decrypt
    c.key = 'M02cnQ51Ji97vwT4'
    o = ''.force_encoding('ASCII-8BIT')
    data.bytes.each_slice(16) { |s| o += c.update(s.map(&:chr).join) }
    o += c.final
    File.open('decyphered_' + a , 'w') { |f| f.write(o) }
end

Meine Frage ist also, was genau machen sie hier falsch und was könnten sie besser machen, um die Sicherheit ihrer Anwendung in dieser Hinsicht zu verbessern, anstatt was sie jetzt tun, wenn man bedenkt, dass die Leute oft intime Dinge senden, die sollten nie länger als 10 Sekunden nur an eine Person weitergegeben werden und auch angesichts der Beliebtheit dieser App?

tldr/für alle, die nicht wirklich wissen wollen, wie Computer funktionieren, aber trotzdem wissen wollen, was los ist: Grundsätzlich nehmen wir an, Sie haben - 40 Millionen Menschen die Snapchat verwenden, wobei 16,5 Millionen Benutzer sich gegenseitig Bilder senden und jedes Bild jeden Tag in einem eigenen kleinen verschlossenen Safe. Was wäre, wenn Sie diesen 16,5 Millionen Menschen den gleichen schwachen Plastikschlüssel geben würden, um jedes einzelne dieser Schließfächer zu öffnen und die Snapchat-Medien zu erfassen?

108
Dmitri DB

Dies ist ein ernstes Problem bei der Passwortverwaltung. Das erste Problem hierbei ist die Art und Weise, wie sie seinen Schlüssel in ihrem Quellcode verwaltet haben. SnapChat gibt an, dass sie die Fotos verschlüsselt über das Internet senden, und es ist immerhin wahr, aber sie verwenden einen "Pre-Shared" -Schlüssel, um diese Daten zu verschlüsseln ( schlecht verwendet auch AES im EZB-Modus ) Jeder Benutzer auf der ganzen Welt hat den Schlüssel, um jedes Foto zu entziffern.

Das Problem hier ist, wie hat das Internet den Schlüssel bekommen? Ein Kinderspiel, sie haben es einfach in jede App aufgenommen und jemand hat gerade danach gesucht .

Was ist dieser magische Verschlüsselungsschlüssel, der von allen Snapchat-Apps verwendet wird?

M02cnQ51Ji97vwT4

Sie finden dies (in der App Android)) in einer konstanten Zeichenfolge
in com.snapchat.Android.util.AESEncrypt; es ist kein Graben erforderlich
sitzen buchstäblich herum und warten darauf, von irgendjemandem gefunden zu werden.

Positiver (vielleicht) im Build 3.0.4 (18/08/2013)
der Android App, es gibt - seltsamerweise - einen zweiten Schlüssel!

1234567891123456

Es ist eine sehr schlechte Praxis, ein Passwort in Ihrer Quelle fest zu codieren (egal ob in Ihren Headern oder in Ihren Binärdateien). Das Hauptproblem besteht darin, dass jeder es mit einem einfachen Befehl "strings" in Ihrer Binärdatei finden kann ( oder indem Sie an einen Ort schauen, an dem Sie Ihren Code mit Ihren Freunden geteilt haben ):

strings binaryFile

Dann kann der böswillige Benutzer einen Blick auf jede Zeichenfolge werfen und prüfen, ob dies das gesuchte Passwort ist. Wenn Sie also wirklich ein Passwort in Ihrem Code fest codieren müssen, verstecken Sie es besser, aber dies ist nur " Sicherheit durch Dunkelheit " und der böswillige Benutzer findet am Ende den Schlüssel (also überlegen Sie besser in einem anderen Ansatz).

Was können sie tun, um ihre Sicherheit zu verbessern? Nun, sie könnten einen Schlüssel für jedes Foto generiert haben, oder sie können einen Schlüssel zwischen den Kunden, die ein Bild teilen möchten, vorab teilen, öffentliche/private Schlüssel; Es gibt viele Möglichkeiten.

89
kiBytes

Weil dies ein Grundprinzip der Informationstheorie ist.

Wenn ein Computer eine Information entschlüsseln und zehn Sekunden lang aufbewahren kann, kann er sie entschlüsseln und für immer aufbewahren.

Jeder Versuch, dies zu verschleiern, ist einfach Rauch und Spiegel.

79

Der Code "knackt" die Verschlüsselung nicht.

Sie entschlüsseln lediglich die Daten mit dem richtigen Verschlüsselungsschlüssel, der durch Reverse Engineering der Anwendung erhalten wurde.

Wie könnten sie es besser machen? Nicht hart codieren Sie den Verschlüsselungsschlüssel für einen.

44
user10211

Weil es nicht undurchdringlich sicher sein soll. Snapchat dient zum Teilen, was der Sicherung widerspricht.

Ich denke, sie haben das implementiert, was sie für "genug" Sicherheit für ihr Modell halten. Sie sind nicht allzu besorgt über Fotos, die länger als ein paar Sekunden dauern, da die Leute sie immer über das analoge Loch kopieren können. Diese Verschlüsselung verhindert, dass Benutzer die Dateien einfach speichern, um sie ihren Freunden anzuzeigen, sodass sie ein wenig zusätzliche Arbeit leisten müssen. Dieser einfache Schritt schützt über 99% ihrer Fotos gut genug.

19
John Deters

Von Entwurf. Ich denke nicht, dass die Anzahl der Zeilen relevant ist. Ich denke auch nicht, dass die Sprache relevant ist.

Die vereinfachte Frage lautet: "Warum kann jemand diese entschlüsseln?". Die Antwort - denn das war die Absicht.

Der Hintergrund ist, dass die Verschlüsselung möglicherweise nur ein Lippenbekenntnis ist, genauso wie verschlüsselte PDF-Dateien häufig mit Wörterbuchwörter aus vier Buchstaben als Kennwörter gesendet werden.

Es gibt Sicherheit, die jedoch bei einem gewissen Token-Aufwand umgangen werden kann. Der Laie hat keine Ahnung. Wir wissen es besser. (Wir wissen, dass wir in einer Post-Snowden-Welt nicht sicher sein können, dass wir SSL-geschützten Websites vertrauen können.)

Kurz gesagt, es ist ein Kunststoff-Vorhängeschloss, um das Versprechen einer verschlüsselten Übertragung zu erfüllen.

7
mckenzm

"Also, meine Frage ist, was genau machen sie hier falsch?"

Das ist einfach, sie fördern ein falsches Sicherheitsgefühl bei Menschen, die nicht genug mit der Technologie vertraut sind, zu der sie bereit sind Vertrauen Informationen, die sonst als privat gelten würden, an Fremde zu senden. .

Das ist der wahre Fehler im Design.

Anstatt bequemere Wege zu finden, sollten sie bei der Erziehung intelligenterer Generationen behilflich sein oder einfach die Installation ablehnen, damit die selbst zugefügten Opfer nicht schlecht weinen können.

Es gibt solide, bewährte Verschlüsselungs- und Übertragungsmethoden für die Internetkommunikation. Das Endziel besteht darin, dass Sie, wenn Sie Sicherheit wünschen, Sicherheit erhalten, wenn Sie die Möglichkeit des Abfangens, der Umverteilung und schlechter Codierungspraktiken wünschen, das herunterladen können, was auf dem Internet am heißesten ist App Store diese Woche ...

Sicherheit ist nicht bequem, macht im Allgemeinen keinen Spaß und ist nicht einfach. all die Dinge, die eine Fliege bei Nacht App töten.

Persönlich würde ich mich VIEL mehr darum kümmern, dass der Entwickler über einzelne Angriffe in großen Mengen Zugriff hat ...

5
Lolol

Das Problem mit Snapchat ist, dass sie einfache Krypto machen, während sie tatsächlich DRM benötigen. Letzteres beinhaltet mehr Themen als nur das Verschlüsseln Ihrer Daten. Sie müssen beispielsweise Ihre Schlüssel vor Ihrem Benutzer verstecken. Es sieht so aus, als hätten sie in diesem Fall versagt.

4
Drunix

Schlechte Praktiken in Kombination mit veralteten Sicherheitsstandards haben diese Sicherheitsanfälligkeit geöffnet. Insbesondere angesichts der 'Mission' von Snapchat, Bilder, Texte usw. nicht reproduzierbar und nur einmal sichtbar zu machen, wäre ein besserer Ansatz gewesen, bei jedem Start zufällig eine PSK zu generieren und diese für die Dauer zu verwenden dass die App ausgeführt wird und ihre Daten bei jedem Neustart unbrauchbar werden. Und ja, wie viele andere gesagt haben, ist die harte Codierung eines Sicherheitsschlüssels direkt in den Code einer Anwendung eine sehr, sehr schlechte Praxis, die leicht vermieden werden kann.

Zusammenfassend, um dieses Problem einfach zu beheben:

Verwenden Sie eine zufällig generierte Zeichenfolge (und einen besseren Verschlüsselungsalgorithmus, obwohl diese schlechte Wahl möglicherweise etwas mit den niedrigeren Prozessoranforderungen und der primären Zielgruppe [jüngeren Personen] zusammenhängt, die mit größerer Wahrscheinlichkeit Smartphones datiert haben) als vorinstallierten SSL-Schlüssel Zyklen bei jedem Start, wodurch der Cache beim Neustart der App unbrauchbar wird.

Wirklich sehr einfach zu lösen. Klingt so, als könnten sie eine Beratung in Bezug auf bewährte Sicherheitsmethoden gebrauchen.

2
Russell.Clare

Also rief ich Snapchat an, um auf diese Frage zu antworten, die ich zu ihrer Unterstützung gestellt habe, und bekam diese stattdessen. Nach etwas mehr als ein paar Tagen ist hier die offizielle Antwort von Snapchat auf eine Supportanfrage, bei der ich auf diesen Beitrag verlinke und frage, ob sie selbst eine ehrliche Antwort auf diese Frage geben könnten. Ich persönlich halte dies für die schwächste Antwort, die ich so gut wie gar nicht hätte bekommen können, und für einen Hinweis auf eine gestörte Berücksichtigung der Sicherheitspraktiken und ganz zu schweigen von der Öffentlichkeitsarbeit:

Team Snapchat replied:
Hi Dmitri,

Thank you for sharing your concerns. We remain committed to maintaining 
the security and integrity of the Snapchat community.

Best,
Tobias

Danke, Snapchat!

1
Dmitri DB