web-dev-qa-db-fra.com

Pourquoi pouvons-nous encore casser des photos de Snapchat dans 12 lignes de Ruby?

Je viens de rencontrer ce morceau de Ruby qui peut être utilisé pour décrypter les photos Snapchat prises dans le cache sur un téléphone, apparemment adaptées de ici . À ma grande surprise, il a fonctionné sans problème, compte tenu des problèmes de sécurité de Snapchat qui ont été bien médiatisés récemment (la plupart du temps, la fuite autour du numéro de téléphone/nom d'utilisateur pour autant que je m'en souvienne).

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

Donc, ma question est, qu'est-ce qu'ils font exactement mal ici, et que pourraient-ils faire mieux pour améliorer la sécurité de leur application à cet égard plutôt que ce qu'ils font maintenant, étant donné que les gens envoient souvent des choses intimes qui n'ont jamais été destinés à être partagés pendant plus de 10 secondes avec une seule personne, et compte tenu également de la popularité de cette application?

tldr/pour tous ceux qui ne se soucient pas vraiment de savoir comment fonctionnent les ordinateurs mais qui veulent tout de même savoir ce qui se passe: Fondamentalement, disons que vous avez - 40 millions de personnes qui utilisent Snapchat, avec 16,5 millions d'utilisateurs qui s'envoient des photos et chaque photo dans son petit coffre-fort verrouillé tous les jours. Maintenant, que se passerait-il si vous donniez à ces 16,5 millions de personnes la même clé en plastique fragile pour ouvrir chacune de ces boîtes de verrouillage pour capturer les médias Snapchat?

108
Dmitri DB

Il s'agit d'un grave problème de gestion des mots de passe. Le premier problème ici est la façon dont ils ont géré sa clé dans leur code source. SnapChat déclare qu'ils envoient les photos cryptées sur Internet, et c'est vrai après tout, mais ils utilisent une clé "pré-partagée" pour crypter ces données ( tilisant également mal AES en mode ECB ) donc , chaque utilisateur de la planète a la clé pour déchiffrer chaque photo.

Le problème ici est, comment Internet a-t-il obtenu la clé? Un morceau de gâteau, ils l'ont juste inclus dans chaque application, et quelqu'un vient de le chercher .

Quelle est cette clé de cryptage magique utilisée par toutes les applications Snapchat?

M02cnQ51Ji97vwT4

Vous pouvez le trouver (dans l'application Android) dans une chaîne constante située
dans com.sn Snapchat.Android.util.AESEncrypt; pas besoin de creuser, c'est
assis littéralement en attendant d'être trouvé par quelqu'un.

Sur une note plus positive (peut-être), dans la version 3.0.4 (18/08/2013)
de l'application Android Android, il y a - curieusement - une deuxième clé!

1234567891123456

C'est une très mauvaise pratique de coder en dur un mot de passe dans votre source (que ce soit dans vos en-têtes ou dans vos binaires), le principal problème étant que n'importe qui pourrait le trouver avec une simple commande "strings" dans votre binaire ( ou en regardant dans un endroit où vous partagiez votre code avec vos amis ):

strings binaryFile

L'utilisateur malveillant peut alors consulter chaque chaîne et vérifier s'il s'agit du mot de passe qu'il recherche. Donc, si vous avez vraiment besoin de coder en dur un mot de passe dans votre code, vous feriez mieux de le cacher, mais ce sera juste " la sécurité par l'obscurité " et l'utilisateur malveillant finira par trouver la clé (donc vous feriez mieux de penser dans une approche différente).

Que peuvent-ils faire pour améliorer leur sécurité? Eh bien, ils auraient pu générer une clé pour chaque photo, ou ils peuvent pré-partager une clé entre les clients qui vont partager une photo, des clés publiques/privées; Il y a plein d'options.

89
kiBytes

Parce que c'est un principe fondamental de la théorie de l'information.

Si une machine peut décrypter une information et la conserver pendant dix secondes, elle peut la décrypter et la conserver pour toujours.

Toute tentative de déguiser cela est simplement de la fumée et des miroirs.

79

Le code ne "craque" pas le chiffrement.

Vous décryptez simplement les données avec la bonne clé de cryptage obtenue par rétro-ingénierie de l'application.

Comment pourraient-ils faire mieux? Pas de code dur pour la clé de cryptage.

44
user10211

Parce que ce n'est pas censé être sécurisé de façon impénétrable. Snapchat est pour le partage, ce qui est contraire à la sécurisation.

Je pense qu'ils ont mis en place ce qu'ils considèrent comme une sécurité "suffisante" pour leur modèle. Ils ne sont pas trop préoccupés par les photos qui durent plus de quelques secondes, car les gens peuvent toujours les copier via le trou analogique. Ce cryptage empêche les gens de simplement enregistrer les fichiers à montrer à leurs amis, ils doivent donc faire un peu de travail supplémentaire. Cette étape simple protège suffisamment bien plus de 99% de leurs photographies.

19
John Deters

Intentionnellement. Je ne pense pas que le nombre de lignes soit pertinent. Je ne pense pas non plus que le langage soit pertinent.

La question simplifiée est "Pourquoi quelqu'un peut-il les déchiffrer". La réponse - parce que c'était l'intention.

L'arrière-plan est que le cryptage ne peut être que du bout des lèvres, de la même manière que les .pdf cryptés sont souvent envoyés avec des mots de dictionnaire à quatre lettres comme mots de passe.

Il y a de la sécurité, mais elle est contournable à un niveau d'effort symbolique. Le profane n'a aucune idée. Nous savons mieux. (Nous savons que dans un monde post Snowden, nous ne pouvons pas être sûrs que nous pouvons faire confiance aux sites Web protégés par SSL.)

En bref, c'est un cadenas en plastique pour satisfaire la promesse d'une transmission cryptée.

7
mckenzm

"Donc, ma question est, qu'est-ce qu'ils font exactement mal ici"

Celui-là est facile, ils promeuvent un faux sentiment de sécurité chez des gens qui ne sont pas assez familiers avec la technologie qu'ils sont prêts à faire confiance envoyer des informations qui seraient autrement considérées comme privées, à des étrangers .. .

C'est le vrai défaut de la conception.

Au lieu de faire des moyens plus pratiques pour ce faire, ils devraient aider à élever des générations plus intelligentes, ou tout simplement renoncer à l'installation afin que les victimes auto-infligées ne puissent pas crier au scandale.

Il existe des méthodes de cryptage et de transmission solides, éprouvées et véritables pour les communications Internet, et l'objectif final est que si vous voulez la sécurité, obtenez la sécurité, si vous voulez avoir la possibilité d'interception, de redistribution et de mauvaises pratiques de codage, puis téléchargez ce qui est le plus chaud sur le App Store cette semaine ...

La sécurité n'est pas pratique, elle n'est généralement pas amusante et ce n'est pas simple. toutes les choses qui tuent une mouche par l'application de nuit.

Personnellement, je serais BEAUCOUP plus préoccupé par le fait que le développeur ait accès en masse à des attaques individuelles ...

5
Lolol

Le problème avec snapchat est qu'ils font de la cryptographie ordinaire alors qu'en fait ils ont besoin de DRM . Ce dernier implique plus de sujets que le simple chiffrement de vos données, vous devez par exemple cacher vos clés à votre utilisateur. Il semble qu'ils aient échoué sur celui-ci.

4
Drunix

Les mauvaises pratiques associées à des normes de sécurité dépréciées ont ouvert cette vulnérabilité. Surtout étant donné que Snapchat 'mission' de rendre les images, les textes, etc. non reproductibles et visibles uniquement une fois, une meilleure approche aurait été de générer aléatoirement un PSK sur chaque démarrage et de l'utiliser pendant la durée que l'application est en cours d'exécution, ce qui rend les données inutiles à chaque relance. Et oui, comme beaucoup d'autres l'ont dit, coder en dur une clé de sécurité directement dans le code d'une application est une très, très mauvaise pratique et qui pourrait être facilement évitée.

En résumé, pour résoudre facilement ce problème:

Utilisez une chaîne générée aléatoirement (et un meilleur algorithme de chiffrement, bien que ce mauvais choix puisse être quelque peu lié aux exigences de processeur inférieures et au public cible principal [les jeunes] qui sont plus susceptibles d'avoir des smartphones datés) comme clé pré-partagée SSL qui cycles à chaque démarrage, rendant le cache inutile lors du redémarrage de l'application.

Très facile à résoudre, vraiment. On dirait qu'ils pourraient faire avec certains consultants sur les meilleures pratiques de sécurité.

2
Russell.Clare

Donc, j'ai appelé snapchat pour répondre à cette question que j'ai posée dans leur soutien, et j'ai obtenu ceci à la place. Donc, après un peu plus de quelques jours, voici la réponse officielle de Snapchat à une demande de support avec moi un lien vers ce post, et leur demandant s'ils pourraient peser eux-mêmes une réponse honnête à cette question. Personnellement, je considère que c'est à peu près la réponse la plus faible que j'aurais pu obtenir à peu près rien, et une indication d'un dysfonctionnement des pratiques de sécurité et sans parler des relations publiques:

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

Merci, snapchat!

1
Dmitri DB