なぜ、今でもスナップチャットの写真を12行のRubyでクラックできるのでしょうか?

携帯電話のキャッシュから取り出したSnapchatの写真を復号化するために使用できるこのrubyのビットを見つけました。驚いたことに、最近よく知られているSnapchat'のセキュリティに関する問題(私の記憶では、電話番号とユーザー名の全漏洩に関するものがほとんど)を考慮すると、問題なく動作したのです。

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

そこで質問なのですが、10秒以上共有されるはずのない親密なものを1人にしか送らないことが多いことや、このアプリの人気を考えると、今やっていることではなく、この点に関してアプリのセキュリティを向上させるには、一体何が間違っていて、何をすればいいのでしょうか。

tldr/for all those who don't really care to know how computers work but still want to know what is up: 基本的には、Snapchatを使う4000万人の人々がいるとします。1,650万人がお互いに写真を送り合い、それぞれの写真は毎日それぞれの小さな鍵付き金庫に入っています。では、その1,650万人全員に、Snapchatのメディアをキャプチャするために、これらのロックボックスの一つ一つを開けるための薄っぺらいプラスチックの鍵を与えたらどうでしょう?

質問へのコメント (4)
ソリューション

これは、パスワード管理における重大な問題である。まず、最初の問題は、ソースコードで鍵を管理する方法です。SnapChatは、写真をインターネット上で暗号化して送信すると述べており、それは結局のところ事実ですが、彼らはこのデータを暗号化するために"pre-shared" keyを使っており(1BモードのAESも使っていてひどい)1 、地球上のすべてのユーザがそれぞれの写真を解読するキーを持つことになるのです。

ここで問題なのは、インターネットがどうやってキーを手に入れたか、ということです。簡単なことです。すべてのアプリに含まれていて、誰かがそれを検索しただけです。

あらゆるSnapchatアプリで使用されているこの魔法の暗号キーとは何ですか?

M02cnQ51Ji97vwT4

これは(Androidアプリの)定数文字列のところにあります。 com.snapchat.android.util.AESEncrypt で、掘り下げは必要ありません、です。 文字通り、誰かに見つけてもらうために、その場で待機しているのです。

もっとポジティブな話として(たぶん)、3.0.4(2013/08/18)ビルドでは Androidアプリの、2つ目のキーがあります。

1234567891123456

パスワードをソースにハードコードするのは非常に悪い習慣です(ヘッダやバイナリに関係なく)。主な問題は、バイナリに "strings" を実行するだけで、誰でもパスワードを見つけることができることです(あるいは、あなたが友人とコードを共有するために使っていた場所を探すことです]3)。

strings binaryFile

そうすれば、悪意のあるユーザはそれぞれの文字列を見て、それが自分の探しているパスワードかどうかをチェックすることができます。ですから、どうしてもパスワードをコードにハードコードする必要がある場合は、それを隠した方がよいでしょう。しかし、これでは、曖昧さによるセキュリティ"となるだけで、悪意のあるユーザーは結局キーを見つけてしまいます(だから、別のアプローチを考えた方がよいでしょう)。

セキュリティを向上させるためにはどうしたらいいのでしょうか?写真ごとに鍵を生成したり、写真を共有するクライアント間で鍵を事前に共有したり、公開鍵/秘密鍵など、選択肢はいくらでもあります。

解説 (22)

これは情報理論の基本原則だからです。

機械が情報を解読して10秒間保持できる場合、それを解読して永久に保持することができます。

これを偽装しようとする試みは、単に煙と鏡です。

解説 (5)

暗号は"cracking"ではありません。

アプリケーションをリバースエンジニアリングして得た正しい暗号化キーでデータを復号しているに過ぎません。

どうすればもっとうまくいくのか?一つは、暗号化キーをハードコードしないことです。

解説 (1)

なぜなら、それは不可解なほど安全であるはずがないからです'。 Snapchatは共有するためのものであり 安全確保とは相反するものです。

彼らは、自分たちのモデルにとって十分なセキュリティと考えるものを実装していると思います。 アナログの穴からいつでもコピーできるので、数秒以上の長さの写真についてはあまり気にしていないようです。 この暗号化は、単に友達に見せるためにファイルを保存することを防ぐため、少し余分な作業をする必要があります。このシンプルなステップで、99%以上の写真を十分に保護することができます。

解説 (0)

設計上。 行数は関係ないと思います。 言語も関連があるとは思いません。

簡略化された質問は、「なぜ誰もがこれらを解読できるのか」です。 答え-それが意図だったからです。

背景は、暗号化された.pdfがパスワードとして4文字の辞書ワードで送信されることが多いのと同じように、暗号化はリップサービスのみである可能性があることです。

セキュリティはありますが、ある程度の努力で回避できます。 素人には手掛かりがありません。 私たちはよく知っています。 (* Snowdenのポストの世界では、SSLで保護されたWebサイトを信頼できるかどうか確信が持てないことを知っています。)。

つまり、暗号化された送信の約束を満たすのはプラスチック製の南京錠です。

解説 (0)

「それで、私の質問は、彼らがここで正確に何を間違っているのかということです」。

それは簡単です、彼らは、他の方法では非公開と見なされる情報を見知らぬ人に送信することを信頼することをいとわないテクノロジーに十分に精通していない人々に誤った安心感を促進しています。..

それがデザインの本当の欠点です。

これを行うためのより便利な方法を作る代わりに、彼らはより賢い世代の育成を支援するか、または自己に負わされた犠牲者が反抗できないようにインストールを放棄するべきです。

インターネット通信には、しっかりとした、実証済みの真の暗号化および送信方法があります。最終的な目標は、セキュリティが必要な場合はセキュリティを取得し、傍受、再配布、および不十分なコーディングの慣行が必要な場合は、最もホットなものをダウンロードすることです。今週のアプリストア。..

セキュリティは便利ではなく、一般的に楽しくなく、単純ではありません。 夜のアプリでハエを殺すすべてのもの。

個人的には、開発者が個々の攻撃に対して大量にアクセスできることにもっと関心があります。..

解説 (0)

snapchatの問題は、実際には DRM が必要である一方で、単純な暗号を実行していることです。 後者には、単にデータを暗号化するだけでなく、たとえばユーザーからキーを非表示にするなどのトピックが含まれます。 彼らはこれで失敗したようです。

解説 (3)

減価償却されたセキュリティ標準と組み合わせた悪い慣行は、この脆弱性を開いています。 特に、Snapchatが画像やテキストなどを作成するという 'mission' を考えると。 再現できず、一度だけ表示できる、より良いアプローチは、すべてのブーツでPSKをランダムに生成し、アプリが実行されている間それを使用して、すべての再起動時にデータを役に立たなくすることでした。 そして、はい、他の多くの人が言ったように、セキュリティキーをアプリケーションのコードに直接コーディングすることは非常に悪い習慣であり、簡単に回避できるものです。

要約すると、この問題を簡単に解決するために:

ランダムに生成された文字列を使用します。 (より良い暗号化アルゴリズム。, ただし、この不十分な選択は、プロセッサの要件の低下と主要なターゲットオーディエンスに多少関連している可能性があります。 [若い人たち。] スマートフォンとデートした可能性が高い人。) すべてのブートで循環するSSL事前共有キーとして。, アプリの再起動時にキャッシュを役に立たなくする。

解決は非常に簡単です。 彼らはセキュリティのベストプラクティスに関するコンサルタントと関係があるように思えます。

解説 (1)

それで、私は彼らのサポートで尋ねたこの質問に答えるためにスナップチャットに電話をかけ、代わりにこれを手に入れました。 それで、数日以上経ってから、サポートリクエストに対するSnapchatの公式返信がここにあります。この投稿にリンクして、この質問への正直な返信で彼らが検討できるかどうか尋ねます。 私は個人的に、これは私がほとんど何も得られなかった最も弱い返答であり、セキュリティ慣行の機能不全の配慮の兆候であり、広報は言うまでもありません。

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

ありがとう、スナップチャット。!

解説 (0)