Hanya datang di ini sedikit ruby yang dapat digunakan untuk mendekripsi Snapchat foto diambil dari cache pada ponsel, rupanya diadaptasi dari disini. Untuk mengejutkan saya, bekerja tanpa masalah, mengingat masalah-masalah di sekitar Snapchat's security yang telah dipublikasikan akhir-akhir ini (Sebagian besar barang-barang di sekitar seluruh nomor telepon/username kebocoran sejauh yang saya ingat).
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
Jadi, pertanyaan saya adalah, apa sebenarnya yang mereka lakukan salah di sini, dan apa yang dapat mereka lakukan baik dalam rangka untuk meningkatkan keamanan aplikasi mereka dalam hal ini daripada apa yang mereka're lakukan sekarang, mengingat bahwa orang-orang yang sering mengirim hal-hal intim yang tidak pernah dimaksudkan untuk menjadi bersama selama lebih dari 10 detik hanya untuk satu orang, dan juga mempertimbangkan popularitas dari aplikasi ini?
tldr/untuk semua orang yang don't benar-benar peduli untuk mengetahui bagaimana komputer bekerja tapi masih ingin tahu apa yang terjadi: pada Dasarnya, let's mengatakan anda memiliki 40 juta orang yang menggunakan Snapchat, dengan 16,5 juta pengguna saling mengirim gambar lain, dan masing-masing gambar dalam dirinya sendiri kecil terkunci aman setiap hari. Sekarang, bagaimana jika anda memberi mereka 16,5 juta orang semua sama tipis, plastik kunci untuk membuka masing-masing dan setiap salah satu dari ini lockboxes untuk menangkap Snapchat media?
Ini adalah masalah yang serius di password-manajemen. Pertama masalah di sini adalah cara mereka berhasil kuncinya di kode sumber mereka. SnapChat menyatakan bahwa mereka mengirim foto dienkripsi melalui internet, dan memang benar setelah semua, tetapi mereka menggunakan "pre-shared" kunci untuk mengenkripsi data ini (buruk juga menggunakan AES dalam mode ECB) jadi, setiap pengguna di seluruh planet ini memiliki kunci untuk menguraikan masing-masing foto.
Masalahnya di sini adalah, bagaimana internet mendapatkan kunci? Sepotong kue, mereka hanya disertakan dalam setiap aplikasi, dan seseorang baru saja mencari untuk itu.
Apa yang ajaib ini kunci enkripsi yang digunakan oleh setiap dan semua aplikasi Snapchat?
M02cnQ51Ji97vwT4
Anda dapat menemukan ini (di aplikasi Android) di sebuah konstanta string yang terletak di di com.snapchat.android.util.AESEncrypt; tidak menggali diperlukan, hal ini secara harfiah duduk sekitar menunggu untuk ditemukan oleh siapa pun.
Pada catatan yang lebih positif (mungkin), di 3.0.4 (18/08/2013) membangun aplikasi Android, ada - anehnya - kunci kedua!
1234567891123456
Itu adalah praktik yang buruk untuk hardcode password di sumber anda (tidak peduli apakah itu di header atau dalam biner), masalah utama yang siapa pun bisa menemukannya dengan mudah "strings" perintah ke biner (atau dengan mencari di tempat yang anda gunakan untuk berbagi kode dengan teman-teman anda):
strings binaryFile
Kemudian pengguna yang jahat bisa melihat-lihat untuk setiap string dan memeriksa apakah itu adalah password yang ia cari. Jadi, jika anda benar-benar perlu untuk hardcode password dalam kode anda anda lebih baik menyembunyikan itu, tapi ini hanya akan menjadi "keamanan melalui ketidakjelasan" dan berbahaya pengguna akan menemukan tombol (jadi anda lebih baik berpikir dalam pendekatan yang berbeda).
Apa yang dapat mereka lakukan untuk meningkatkan keamanan mereka? Nah mereka bisa menghasilkan kunci untuk foto masing-masing, atau mereka dapat pra-berbagi kunci antara klien yang akan berbagi gambar, kunci publik/swasta; ada banyak pilihan.
Karena ini adalah prinsip dasar dari teori informasi.
Jika sebuah mesin dapat mendekripsi informasi dan menyimpannya selama sepuluh detik, hal ini dapat mendekripsi dan tetap selamanya.
Setiap upaya untuk menyamarkan ini hanya asap dan cermin.
Karena itu's tidak seharusnya impenetrably aman. Snapchat adalah untuk berbagi, yang merupakan antitesis untuk mengamankan.
Saya pikir mereka telah menerapkan apa yang mereka anggap sebagai "cukup" keamanan untuk model mereka. Mereka tidak't terlalu khawatir tentang foto-foto yang berlangsung lebih dari beberapa detik, karena orang-orang selalu dapat menyalin mereka melalui analog lubang. Enkripsi ini mencegah orang-orang dari hanya menyimpan file-file untuk menunjukkan kepada teman-teman mereka, sehingga mereka harus melakukan sedikit pekerjaan ekstra. Langkah sederhana ini melindungi lebih dari 99% dari foto-foto mereka cukup baik.
Dengan desain. Saya tidak berpikir jumlah baris yang relevan. Saya juga tidak berpikir bahasa yang lebih relevan.
Pertanyaan sederhana adalah "Mengapa siapa pun dapat mendekripsi ini". Jawaban - karena itu adalah tujuan.
Latar belakang adalah bahwa enkripsi mungkin hanya lip-service, dengan cara yang sama yang dienkripsi .pdf's sering dikirim dengan empat huruf kata-kata kamus sebagai password.
Ada keamanan, tetapi circumventable di beberapa token tingkat usaha. Orang awam tidak memiliki petunjuk. Kita tahu lebih baik. (Kami tahu yang di posting Snowden dunia kita tidak bisa yakin kita bisa percaya SSL dilindungi situs.)
Singkatnya, itu adalah gembok plastik untuk memenuhi janji transmisi terenkripsi.
"Jadi, pertanyaan saya adalah, apa sebenarnya yang mereka lakukan salah di sini"
Yang satu adalah mudah, mereka mempromosikan rasa aman palsu pada orang yang tidak cukup akrab dengan teknologi yang mereka bersedia untuk kepercayaan mengirim informasi yang lain akan dianggap pribadi, untuk orang asing...
Yang nyata cacat dalam desain.
Alih-alih membuat cara yang lebih mudah untuk melakukan ini, mereka harus membantu dalam meningkatkan pintar generasi, atau hanya disclaimer menginstal jadi diri yang diderita korban tidak menangis busuk.
Ada yang padat, mencoba dan benar enkripsi dan metode transmisi untuk komunikasi internet, dan tujuan akhirnya adalah bahwa jika anda ingin mendapatkan keamanan keamanan, jika anda ingin kesempatan intersepsi, redistribusi, dan miskin praktek coding, kemudian men-download apa pun yang terpanas di app store minggu ini...
Keamanan adalah tidak nyaman, tidak menyenangkan, dan itu tidak sederhana. semua hal-hal yang membunuh seekor lalat pada malam hari aplikasi.
Secara pribadi saya akan JAUH lebih peduli dengan pengembang memiliki akses dalam jumlah massal atas serangan individu...
Masalah dengan snapchat yang mereka lakukan polos crypto padahal yang mereka butuhkan DRM. Yang terakhir melibatkan topik yang lebih dari hanya mengenkripsi data anda, anda perlu misalnya menyembunyikan kunci dari pengguna. Hal ini terlihat bahwa mereka gagal untuk yang satu ini.
Praktek yang buruk dikombinasikan dengan disusutkan standar keamanan yang telah membuka kerentanan ini. Terutama mengingat Snapchat's 'misi' membuat gambar, teks, dll. non-direproduksi dan hanya dapat dilihat setelah, pendekatan yang lebih baik akan telah untuk secara acak menghasilkan PSK pada setiap boot dan menggunakannya untuk durasi yang aplikasi berjalan, rendering itu's data yang berguna pada setiap peluncuran. Dan ya, seperti yang banyak dikatakan orang lain, hard coding kunci keamanan langsung ke aplikasi's kode ini sangat, sangat buruk praktek dan salah satu yang bisa dengan mudah dihindari.
Meringkas, untuk menyelesaikan masalah ini dengan mudah:
Gunakan secara acak string (dan lebih baik algoritma enkripsi, meskipun ini pilihan yang buruk mungkin agak terkait dengan prosesor yang lebih rendah persyaratan dan sasaran utama [orang-orang muda] yang lebih mungkin untuk memiliki tertanggal smartphone) sebagai SSL pre-shared key yang siklus pada setiap boot, rendering cache yang tidak berguna pada aplikasi peluncuran.
Sangat mudah untuk menyelesaikan, benar-benar. Terdengar seperti mereka bisa lakukan dengan beberapa konsultasi sekitar praktik keamanan terbaik.
Jadi, aku menelepon snapchat untuk menjawab pertanyaan ini saya've bertanya pada dukungan mereka, dan mendapat ini sebagai gantinya. Jadi, setelah sedikit lebih dari beberapa hari, di sini adalah Snapchat's resmi membalas permohonan dukungan dengan saya menghubungkan ke posting ini, dan bertanya apakah mereka bisa menimbang dengan jujur menjawab pertanyaan ini sendiri. Saya pribadi menganggap ini cukup banyak terlemah balas saya bisa mendapatkan apa-apa sama sekali, dan indikasi disfungsional hal praktik keamanan dan tidak untuk menyebutkan hubungan masyarakat:
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
Terima kasih, snapchat!