Berdasarkan komentar yang saya buat pada pertanyaan:
Satu poin penting telah sangat disorot oleh hampir semua orang ... Reaksi awal saya sangat mirip dengan @Michael Brooks, sampai saya menyadari, seperti @stefanw, bahwa masalah di sini adalah persyaratan rusak , tetapi inilah mereka.
Tetapi kemudian, terlintas dalam benak saya bahwa itu mungkin bukan masalahnya! Titik hilang di sini, adalah tak terucapkan nilai aset aplikasi. Sederhananya, untuk sistem bernilai rendah, mekanisme otentikasi yang sepenuhnya aman, dengan semua proses yang terlibat, akan berlebihan, dan pilihan keamanan yang salah .
Jelas, bagi bank, "praktik terbaik" adalah suatu keharusan, dan tidak ada cara untuk melanggar etika CWE-257. Tetapi mudah untuk memikirkan sistem bernilai rendah yang tidak sepadan (tetapi kata sandi sederhana masih diperlukan).
Penting untuk diingat, keahlian keamanan sejati adalah dalam menemukan pengorbanan yang tepat, BUKAN dalam dogmatis menyemburkan "Praktik Terbaik" yang dapat dibaca siapa saja secara online.
Karena itu, saya menyarankan solusi lain:
Tergantung pada nilai sistem, dan HANYA JIKA sistem bernilai rendah dengan tepat tanpa aset "mahal" (identitas itu sendiri, termasuk), DAN ada persyaratan bisnis yang valid yang membuat proses yang tepat mustahil (atau cukup sulit / mahal), DAN klien dibuat sadar akan semua peringatan ...
Maka mungkin lebih tepat untuk hanya mengizinkan enkripsi yang dapat dibalik, tanpa rintangan khusus untuk dilewati.
Saya hanya berhenti mengatakan tidak perlu repot-repot dengan enkripsi sama sekali, karena sangat sederhana / murah untuk diterapkan (bahkan mempertimbangkan manajemen kunci yang mungkin), dan TIDAK memberikan beberapa perlindungan (lebih dari biaya pelaksanaannya). Juga, ada baiknya melihat bagaimana memberikan pengguna dengan kata sandi asli, baik melalui email, ditampilkan di layar, dll.
Karena asumsi di sini adalah bahwa nilai kata sandi yang dicuri (bahkan secara agregat) cukup rendah, solusi ini bisa valid.
Karena ada diskusi yang berlangsung, sebenarnya diskusi BEBERAPA hidup, di posting yang berbeda dan utas komentar yang terpisah, saya akan menambahkan beberapa klarifikasi, dan menanggapi beberapa poin yang sangat baik yang telah diajukan di tempat lain di sini.
Untuk memulai, saya pikir itu jelas bagi semua orang di sini bahwa memungkinkan kata sandi asli pengguna untuk diambil, adalah Praktek Buruk, dan umumnya Bukan Ide Yang Baik. Itu sama sekali tidak dalam perselisihan ...
Selanjutnya, saya akan menekankan bahwa dalam banyak situasi, bahkan PALING, - itu benar-benar salah, bahkan busuk, jahat, DAN jelek .
Namun, inti dari pertanyaan adalah sekitar prinsip , ADA situasi di mana mungkin tidak perlu untuk melarang ini, dan jika demikian, bagaimana melakukannya dengan cara yang paling benar sesuai dengan situasi .
Sekarang, seperti @Thomas, @sfussenegger dan beberapa orang lain yang disebutkan, satu-satunya cara yang tepat untuk menjawab pertanyaan itu, adalah dengan melakukan analisis risiko menyeluruh dari setiap situasi (atau hipotetis) yang diberikan, untuk memahami apa yang dipertaruhkan, berapa nilai yang perlu dilindungi. , dan mitigasi lain apa yang berperan untuk memberikan perlindungan itu.
Tidak, ini BUKAN kata kunci, ini adalah salah satu alat dasar yang paling penting bagi seorang profesional keamanan nyata. Praktik terbaik adalah baik sampai titik tertentu (biasanya sebagai pedoman untuk yang tidak berpengalaman dan peretasan), setelah itu analisis risiko yang bijaksana mengambil alih.
Kau tahu, itu lucu - aku selalu menganggap diriku salah satu fanatik keamanan, dan entah bagaimana aku berada di sisi berlawanan dari yang disebut "Pakar Keamanan" ... Yah, kebenaran adalah - karena aku seorang fanatik, dan seorang ahli keamanan kehidupan nyata yang sebenarnya - Saya tidak percaya pada semburan dogma "Praktek Terbaik" (atau CWE) TANPA analisis risiko yang sangat penting .
"Waspadalah pada fanatik keamanan yang cepat menerapkan segala sesuatu di sabuk alat mereka tanpa mengetahui apa masalah sebenarnya yang mereka lawan. Keamanan lebih tidak selalu berarti keamanan yang baik."
Analisis risiko, dan fanatik keamanan sejati, akan menunjuk pada tradeoff yang lebih cerdas, berdasarkan nilai / risiko, berdasarkan risiko, potensi kerugian, kemungkinan ancaman, mitigasi pelengkap, dll. Setiap "Pakar Keamanan" yang tidak dapat menunjukkan analisis risiko yang sehat sebagai dasar untuk rekomendasi mereka, atau mendukung pengorbanan logis, tetapi lebih memilih untuk menyemburkan dogma dan CWE tanpa memahami bagaimana melakukan analisis risiko, tidak lain hanyalah Security Hacks, dan Keahlian mereka tidak sebanding dengan kertas toilet tempat mereka mencetaknya.
Memang, itulah cara kami mendapatkan kekonyolan yaitu Keamanan Bandara.
Tetapi sebelum kita berbicara tentang pengorbanan yang tepat untuk dibuat dalam SITUASI INI, mari kita lihat risiko yang tampak (jelas, karena kita tidak memiliki semua informasi latar belakang tentang situasi ini, kita semua berhipotesis - karena pertanyaannya adalah hipotesis apa situasi mungkin ada ...)
Mari kita asumsikan sistem RENDAH-NILAI, namun tidak sepele itu adalah akses publik - pemilik sistem ingin mencegah peniruan biasa, namun keamanan "tinggi" tidak sepenting kemudahan penggunaan. (Ya, itu adalah tradeoff yang sah untuk MENERIMA risiko bahwa setiap script-kiddie yang mahir dapat meretas situs ... Tunggu, bukankah APT dalam mode sekarang ...?)
Sebagai contoh, katakanlah saya sedang mengatur situs sederhana untuk pertemuan keluarga besar, memungkinkan semua orang untuk bertukar pikiran tentang ke mana kami ingin pergi dalam perjalanan berkemah tahun ini. Saya kurang khawatir tentang beberapa hacker anonim, atau bahkan Sepupu Fred memeras saran berulang untuk kembali ke Danau Wantanamanabikiliki, karena saya tentang Bibi Erma tidak bisa masuk ketika dia perlu. Sekarang, Bibi Erma, menjadi fisikawan nuklir, tidak pandai mengingat kata sandi, atau bahkan dengan menggunakan komputer sama sekali ... Jadi saya ingin menghapus semua gesekan yang mungkin terjadi padanya. Sekali lagi, saya TIDAK khawatir tentang peretasan, saya hanya tidak ingin kesalahan masuk yang salah - saya ingin tahu siapa yang akan datang, dan apa yang mereka inginkan.
Bagaimanapun.
Jadi apa risiko utama kita di sini, jika kita mengenkripsi kata sandi secara simetris, daripada menggunakan hash satu arah?
- Meniru pengguna? Tidak, saya sudah menerima risiko itu, tidak menarik.
- Administrator jahat? Yah, mungkin ... Tapi sekali lagi, saya tidak peduli apakah seseorang dapat menyamar sebagai pengguna lain, INTERNAL atau tidak ... dan lagi pula admin jahat akan mendapatkan kata sandi Anda apa pun yang terjadi - jika admin Anda memburuk, permainannya sudah berakhir.
- Masalah lain yang telah diangkat, adalah identitas yang sebenarnya dibagi antara beberapa sistem. Ah! Ini adalah risiko yang sangat menarik, yang membutuhkan pandangan lebih dekat.
Mari saya mulai dengan menyatakan bahwa itu bukan identitas aktual yang dibagikan, melainkan bukti , atau kredensial otentikasi. Oke, karena kata sandi bersama secara efektif akan memungkinkan saya masuk ke sistem lain (katakanlah, rekening bank saya, atau gmail), ini secara efektif identitas yang sama, jadi itu hanya semantik ... Kecuali itu tidak . Identitas dikelola secara terpisah oleh masing-masing sistem, dalam skenario ini (meskipun mungkin ada sistem id pihak ketiga, seperti OAuth - masih, yang terpisah dari identitas dalam sistem ini - lebih lanjut tentang ini nanti).
Karena itu, titik risiko utama di sini, adalah bahwa pengguna akan dengan senang hati memasukkan kata sandi (yang sama) ke beberapa sistem yang berbeda - dan sekarang, saya (admin) atau peretas lain di situs saya akan memiliki akses ke kata sandi Bibi Erma untuk situs rudal nuklir.
Hmmm.
Apakah ada sesuatu di sini yang tampaknya tidak menyenangkan bagi Anda?
Itu harus.
Mari kita mulai dengan fakta bahwa melindungi sistem rudal nuklir bukan tanggung jawab saya , saya hanya membangun situs tamasya keluarga frakkin (untuk keluarga SAYA). Jadi, siapa yang bertanggung jawab? Umm ... Bagaimana dengan sistem rudal nuklir? Duh.
Kedua, Jika saya ingin mencuri kata sandi seseorang (seseorang yang diketahui berulang kali menggunakan kata sandi yang sama antara situs yang aman, dan yang tidak terlalu aman) - mengapa saya repot-repot meretas situs Anda? Atau berjuang dengan enkripsi simetris Anda? Goshdarnitall, saya bisa memasang situs web sederhana saya sendiri , meminta pengguna mendaftar untuk menerima BERITA SANGAT PENTING tentang apa pun yang mereka inginkan ... Puffo Presto, saya "mencuri" kata sandi mereka.
Ya, pendidikan pengguna selalu kembali menggigit kami di hienie, bukan?
Dan tidak ada yang dapat Anda lakukan tentang hal itu ... Bahkan jika Anda ingin memilah-milah kata sandi mereka di situs Anda, dan melakukan segala hal lain yang dapat dipikirkan TSA, Anda menambahkan perlindungan ke kata sandi mereka TIDAK SATU PUTIH , jika mereka akan menyimpannya Tanpa sengaja menempelkan kata sandi mereka ke setiap situs yang ditabraknya. Jangan BAHKAN repot-repot mencoba.
Dengan kata lain, Anda tidak memiliki kata sandi mereka , jadi berhentilah mencoba bertindak seperti Anda.
Jadi, Pakar Keamanan saya yang terhormat, seperti seorang wanita tua yang biasa meminta Wendy, "MANA risikonya?"
Beberapa poin lain, sebagai jawaban atas beberapa masalah yang diangkat di atas:
- CWE bukan hukum, atau peraturan, atau bahkan standar. Ini adalah kumpulan kelemahan umum , yaitu kebalikan dari "Praktik Terbaik".
- Masalah identitas bersama adalah masalah aktual, tetapi disalahpahami (atau disalahpahami) oleh orang-orang yang tidak bertanggung jawab di sini. Ini adalah masalah berbagi identitas di dalam dan dari dirinya sendiri (!), BUKAN tentang memecahkan kata sandi pada sistem bernilai rendah. Jika Anda membagikan kata sandi antara sistem bernilai rendah dan bernilai tinggi, masalahnya sudah ada!
- Pada akhirnya, poin sebelumnya akan benar-benar menunjuk TERHADAP menggunakan OAuth dan sejenisnya untuk kedua sistem bernilai rendah ini, dan sistem perbankan bernilai tinggi.
- Saya tahu itu hanya contoh, tetapi (sayangnya) sistem FBI sebenarnya bukan yang paling aman. Tidak seperti server blog kucing Anda, tetapi mereka juga tidak melampaui beberapa bank yang lebih aman.
- Berpisah pengetahuan, atau kontrol ganda, kunci enkripsi TIDAK terjadi hanya di militer, pada kenyataannya PCI-DSS sekarang memerlukan ini pada dasarnya semua pedagang, jadi itu tidak benar-benar begitu jauh di luar sana lagi (JIKA nilainya membenarkan itu).
- Kepada semua yang mengeluh bahwa pertanyaan seperti inilah yang membuat profesi pengembang terlihat sangat buruk: itu adalah jawaban seperti itu, yang membuat profesi keamanan terlihat lebih buruk. Sekali lagi, analisis risiko yang berfokus pada bisnis adalah apa yang diperlukan, jika tidak Anda menjadikan diri Anda tidak berguna. Selain salah.
- Saya kira inilah sebabnya bukan ide yang baik untuk hanya mengambil pengembang reguler dan melepaskan lebih banyak tanggung jawab keamanan padanya, tanpa pelatihan untuk berpikir secara berbeda, dan untuk mencari pengorbanan yang benar. Jangan tersinggung, bagi Anda di sini, saya semua untuk itu - tetapi pelatihan lebih banyak dalam rangka.
Wah. Sungguh posting yang panjang ...
Tetapi untuk menjawab pertanyaan awal Anda, @Shane:
- Jelaskan kepada pelanggan cara yang tepat untuk melakukan sesuatu.
- Jika dia masih bersikeras, jelaskan lebih banyak lagi, bersikeras, berdebat. Buat ulah, jika perlu.
- Jelaskan RISIKO BISNIS kepadanya. Detailnya bagus, angkanya lebih baik, demo langsung biasanya yang terbaik.
- JIKA DIA MASIH bersikeras, DAN menyajikan alasan bisnis yang valid - inilah saatnya bagi Anda untuk melakukan penilaian panggilan:
Apakah situs ini bernilai rendah hingga tidak bernilai? Apakah ini benar-benar kasus bisnis yang valid? Apakah itu cukup baik untukmu? Apakah tidak ada risiko lain yang dapat Anda pertimbangkan, yang akan melebihi alasan bisnis yang valid? (Dan tentu saja, klien BUKAN situs berbahaya, tapi itu duh).
Jika demikian, langsung saja. Tidak sepadan dengan usaha, gesekan, dan penggunaan yang hilang (dalam situasi hipotetis ini) untuk menerapkan proses yang diperlukan. Keputusan lain (sekali lagi, dalam situasi ini) merupakan tradeoff yang buruk.
Jadi, intinya, dan jawaban yang sebenarnya - mengenkripsi dengan algoritma simetris sederhana, melindungi kunci enkripsi dengan ACL yang kuat dan lebih disukai DPAPI atau sejenisnya, mendokumentasikannya dan meminta klien (seseorang yang cukup senior untuk membuat keputusan) keluar Itu.