I'm Arsitek Keamanan, dan I'm digunakan untuk mendefinisikan keamanan proyek sebagai keterangan yang akan dilakukan oleh orang lain. Saya telah baru-baru ini bertugas mengajar baru coders bagaimana desain dan program dengan menggunakan prinsip-prinsip "Aman dengan Desain yang" (dan di masa depan "Privacy by Design"). Saya telah 30-45 menit (ya, aku tahu), dan berbicara kebutuhan akan bahasa-agnostik. Ini berarti saya harus hadir ditindaklanjuti aturan daripada yang dapat diterapkan oleh web developer, aplikasi devs, dan infrastruktur devs.
Saya datang dengan 5 Aturan Dasar dan Suplemen:
Tambahan: Jika anda melanggar Aturan, membuktikan mitigasi dapat bertahan hidup di masa depan programmer menambahkan fungsionalitas.
Masing-masing dari aturan-aturan itu dapat ditambah dengan contoh-contoh dari setiap bahasa atau aplikasi, untuk bimbingan khusus. Saya percaya ini menangani sebagian besar dari prinsip-prinsip umum "Aman dengan Design" dari perspektif tingkat tinggi. Apa aku melewatkan sesuatu?
Kanonik sumber daya untuk konsep aman-dengan-desain "Perlindungan Informasi di Sistem Komputer" oleh Saltzer dan Schroeder. Intinya adalah suling ke 8 prinsip desain aman:
Prinsip-prinsip ini, diletakkan pada tahun 1974, yang masih sepenuhnya berlaku hari ini.
Ini akan sulit untuk mengajarkan prinsip-prinsip desain dalam 30 menit. Saya setuju dengan orang yang mengatakan bahwa anda harus mendapatkan mereka bersemangat dalam beberapa mode. Saya mengembangkan "Hak" permainan kartu untuk membuat orang bersemangat tentang ancaman pemodelan, itu mungkin bisa membantu. (https://blogs.microsoft.com/cybertrust/2010/03/02/announcing-elevation-of-privilege-the-threat-modeling-game/)
Mengajar orang bagaimana untuk berpikir seperti seorang penyerang yang sangat menantang,'s mudah untuk mengajarkan mereka tentang beberapa serangan seperti SQL injection atau cross-site scripting.
Terakhir, jika anda ingin mencoba untuk mengajarkan prinsip-prinsip, saya melakukan serangkaian posting blog yang menggambarkan Saltzer dan Schroeder dengan adegan-adegan dari Star Wars: http://emergentchaos.com/the-security-principles-of-saltzer-and-schroeder
Daripada fokus pada aturan-aturan dan "ikuti 5 aturan, dan anda're aman" aku'd fokus pada pengajaran pengembang tentang penyerang, dan bagaimana mereka berpikir. Anda dapat't benar-benar penutup 5 hal yang berbeda, masing-masing memerlukan beberapa pengetahuan yang mendalam untuk benar-benar melaksanakan dengan baik, jadi mengapa mencoba?
Pengembang I've berbicara tampaknya berpikir hacking "benar-benar keras", dan't benar-benar memahami bagaimana mudah itu benar-benar dapat. Jadi menjelaskan apa yang orang benar-benar lakukan untuk menggagalkan keamanan dapat membuka mata.
Contoh:
Beberapa tahun yang lalu saya meninjau pihak ke-3 berbasis web reporting produk dan pengembang dari vendor untuk membuat beberapa laporan menggunakan produk. Saya bertanya tentang keamanan dan bagaimana hal itu bekerja dalam produk mereka. Dia melanjutkan untuk melakukan "lihat sumber" pada laporan halaman web, dan menunjukkan padaku bagaimana semuanya HTML dinamis, dan karena itu tak bisa diretas. Aku duduk tercengang sebentar, tapi mengatakan kepadanya bahwa ini bukan't benar-benar bisa diterapkan keamanan, yang dapat anda't percaya klien akhir, bla bla bla.
Dia didn't percaya saya, dan bertanya bagaimana mungkin seseorang dapat hack produk ini. Aku berpikir sejenak, berkata bahwa saya'd hook up browser ke proxy server, dan memeriksa apa permintaan/respon. (Hari ini saya'd hanya menggunakan tamper data plugin). Dia kemudian mengatakan ini akan menjadi "hack abad!" Pada titik ini saya hanya mengangkat tangan saya dalam kekalahan, karena ia'a sudah memutuskan produk nya adalah "aman". Satu-satunya cara untuk meyakinkan dia akan benar-benar hack nya produk, yang bukan't benar-benar layak waktu saya sejak saya wasn't akan membeli produk pula.
Intinya adalah, anda perlu untuk memulai dengan kebutuhan untuk keamanan dan apa yang kita're semua melawan. Jika mereka don't memahami bahwa, it's permainan berakhir. Setidaknya anda'll menanamkan sedikit rasa takut dalam diri mereka, yang juga merupakan motivator yang baik. Dari apa yang saya've melihat banyak pengembang don't benar-benar "mendapatkannya", dan mereka perlu memahami apa yang mereka're melawan pertama. Terutama untuk dapat memahami MENGAPA mereka butuhkan untuk mengembangkan aplikasi yang aman.
Mendapatkan orang-orang yang benar-benar tertarik dalam keamanan, dan anda mungkin mendapatkan sesuatu dari itu. Jika tidak, aku takut apapun yang kau hadir dalam 35 menit hanya akan jatuh di telinga tuli.
Anda mungkin ingin menarik perhatian mereka pertama. Demo dari serangan injeksi SQL yang sederhana, mudah dipahami, dan mungkin menggarisbawahi topik's pentingnya. Anda dapat merujuk kembali ke semua berbicara seperti anda membuat poin.
Saya suka bahwa anda mendapatkan kepercayaan batas. Dengan validasi input, I'd hit yang lebih detail. Panjang validasi terlebih dahulu, kemudian menyebutkan daftar putih dan hitam. Apakah anda menyarankan mereka mencoba untuk secara otomatis memperbaiki data yang buruk, atau harus masukan buruk akan ditolak? Sentuhan pada strategi yang anda'd sarankan.
Mengenai least privilege, ini mungkin menjadi kesempatan untuk memperkenalkan ide-ide dari role-based access control, dan keuntungan lebih user-based system.
Saya pikir ada's kesempatan untuk menyebutkan prinsip pertahanan di kedalaman. Masukan sanitasi adalah penting, tapi setelah itu sampai di kode oleh yang membutuhkan parameter SQL akan membantu bahkan jika seseorang merindukan perahu di input.
Mengenai penebangan, pastikan mereka memahami delta antara pesan kesalahan yang ditampilkan ke pengguna, dan isi dari file-file log. Dan pastikan mereka tidak't penebangan sesuatu yang sensitif.
Juga mempertimbangkan membahas proses pengembangan yang membantu memastikan mereka tetap aman track. Pastikan peer kode ulasan, penggunaan analisis kode statis dan analisis dinamis adalah bagian dari proses pengembangan. Yang mungkin di luar dari ruang lingkup pelatihan, tapi anda bisa mengajarkan mereka bagaimana ulasan dan alat-alat yang membantu meningkatkan kode mereka.
30-45 menit ... aduh. Anda bisa kembali ke penyelenggara dan meminta dua atau tiga hari, melihat apa reaksi yang akan. Atau mungkin 10 semester program... Anyway, good luck!
Anda've punya tugas berat, jelas, dan semua pertimbangan untuk berbicara tentang anda've disebutkan akan memberikan anda waktu yang sangat penuh piring. Tapi saya pikir beberapa menyebutkan atau dasi-kembali untuk semua orang's paling-disukai-kata kunci, kurang-sering dilaksanakan menyeluruh strategi pertahanan yang lebih mendalam akan sangat berharga untuk bekerja, jika anda bisa. Atau, mungkin frase itu dengan cara lain, "perlu nilai dan membuat redundansi dari langkah-langkah keamanan terhadap setiap ancaman besar vektor di setiap keamanan yang layak desain.quot;
Anda're membangun sebuah aplikasi web, dan anda're cantik percaya diri anda've punya mekanisme yang kuat untuk membersihkan setiap & semua kode injeksi upaya keluar dari masukan anda? Yang's bagus. Sekarang asumsikan kreatif penyerang menemukan sebuah implementasi cacat yang anda bahkan tidak pernah berpikir, cacat yang memungkinkan beberapa benar-benar jahat, kuat code untuk mendapatkan di depan anda aplikasi yang sebenarnya. Apakah anda merancang & pengerasan aplikasi logika dengan ide bahwa mungkin perlu untuk menghadapi skenario itu, atau kau hanya akan berasumsi bahwa karena anda memiliki apa yang anda lihat sebagai yang kuat, dapat diandalkan tunggal mekanisme defensif terhadap mendapatkan kode di depan aplikasi anda, anda dapat mengalihkan fokus anda ke hal-hal lain? Karena perbedaan antara dua pilihan mereka sering akan menjadi perbedaan antara tiba pada sesuatu yang mungkin menjadi kuat desain keamanan vs. datang dengan apa yang akan hampir pasti menjadi inheren rapuh desain keamanan.
(Catatan: seperti yang saya'm menulis ini saya'm merealisasikan contoh mengandalkan input sanitasi sebagai pertahanan yang sempurna isn't salah satu yang terbaik, karena di Dunia Nyata kita hidup di hari ini mudah-mudahan beberapa pengembang yang kompeten akan jatuh ke dalam godaan untuk mengambil sesuatu seperti yang dikenal-untuk-menjadi-sangat tidak sempurna sebagai masukan sanitasi sebagai batuan padat, tak bisa ditembus lini pertahanan. Mudah-mudahan. Tapi anda membawa saya lebih luas titik titik... )