Terus terang kami mencoba untuk tidak melalui basis kode Anda, kami mencoba menulis alat untuk melakukannya untuk kami.
Pertama, teorinya. Keamanan adalah persyaratan sistem perangkat lunak, jadi seperti persyaratan lainnya (fungsionalitas, kegunaan, aksesibilitas, kinerja, dll.) Harus dipertimbangkan pada setiap tahap alur kerja rekayasa perangkat lunak mulai dari pengumpulan persyaratan hingga penyebaran dan pemeliharaan. Memang, ini mungkin, dan ada panduan untuk membantu tim proyek perangkat lunak melakukan itu. Meskipun saya terutama bekerja dengan pengembang iOS, deskripsi favorit saya tentang "siklus hidup pengembangan aman" adalah dari Microsoft Press .
Dalam model ini, keamanan aplikasi dimulai ketika kami mencoba memperoleh persyaratan dari pengguna kami. Kita perlu menemukan masalah keamanan dan privasi mereka, yang tidak mudah karena kita adalah ahli, bukan pengguna, dan di mana mereka memahami persyaratan keamanan mereka, mereka mungkin merasa sulit untuk mengungkapkannya. Kita juga perlu menemukan risiko apa yang akan diekspos oleh perangkat lunak dalam penyebaran, dan tingkat risiko apa yang dapat diterima.
Kami merancang aplikasi kami dengan memenuhi persyaratan tersebut dalam pikiran. Kami menulis kode dengan tujuan untuk memenuhi persyaratan tersebut, dan menghindari risiko tambahan yang terkait dengan kesalahan keamanan tingkat kode. Kami menguji perangkat lunak untuk memastikan bahwa model keamanan kami konsisten dengan apa yang benar-benar kami bangun, kemudian kami menggunakan perangkat lunak dengan cara yang sesuai dengan asumsi yang kami buat tentang lingkungan ketika kami merancang benda itu. Akhirnya, kami memberikan dukungan dan pemeliharaan yang membantu pengguna mengoperasikan perangkat lunak dengan cara yang konsisten dengan persyaratan keamanan mereka, dan yang memungkinkan mereka (dan kami) bereaksi terhadap perubahan baru dalam risiko yang disajikan.
Ok, banyak sekali untuk teori. Dalam praktiknya , untuk alasan yang dijelaskan dengan sangat baik (walaupun dengan cara nonteknis) dalam Geekonomi dan yang terutama disebabkan oleh cara perusahaan termotivasi, sebagian besar hal di atas tidak terjadi. Sebaliknya, kita dapat ini. Pengembang akan:
- menyewa seorang petugas keamanan untuk hadir ketika mereka mengajukan penawaran untuk kontrak, untuk menunjukkan bahwa mereka "mendapatkan" keamanan.
- menulis perangkat lunak.
- menyewa orang keamanan atau cewek untuk memvalidasi perangkat lunak sebelum rilis, memperbaiki banyak masalah yang muncul pada langkah 2.
- tambalan segala sesuatu yang lain setelah penyebaran.
Jadi apa yang kebanyakan orang keamanan aplikasi yang benar-benar lakukan adalah, seperti yang Anda katakan, menemukan bug. Ini benar-benar tinjauan kode yang dimuliakan, tetapi ini adalah tinjauan kode yang sangat terfokus yang dilakukan oleh orang-orang yang ahli dalam jenis bug yang dicari oleh ulasan ini, jadi masih ada nilai dalam mendapatkan bantuan eksternal dalam melakukan itu. Itu aturan umum teting, tentu saja: selalu suruh orang lain menguji siapa yang tidak terlibat dalam pembuatannya.
Jika kita menerima hal di atas sebagai benar maka orang yang membuat keputusan pembelian cenderung menyamakan "petugas keamanan yang cakap" dengan "menemukan banyak bug". Mereka yang membuat komputer melakukan pekerjaannya untuk mereka akan menemukan lebih banyak bug daripada yang tidak, jadi tentu saja mereka sangat bergantung pada alat analisis statis dan akan bertujuan untuk menghabiskan lebih banyak waktu memperluas alat daripada mengkodekan untuk masalah khusus untuk klien tertentu. Lalu kami menyimpulkan bahwa orang keamanan aplikasi lebih cenderung menulis alat untuk membaca kode daripada membaca kode.
** Peringatan: yang tersisa adalah opini dan spekulasi pribadi **
Realitas rusak. Anda akan melihat bahwa teori keamanan perangkat lunak adalah tentang mengidentifikasi dan merespons risiko mengandalkan sistem perangkat lunak, sementara praktiknya adalah menemukan bug sebanyak mungkin. Tentu, itu masih akan mengurangi risiko, tetapi hanya sebagai efek samping. Inti permainan menjadi kurang penting daripada "memenangkan" permainan, sehingga aturan diubah untuk membuatnya lebih mudah untuk menang.
Apa yang dapat Anda lakukan sebagai pengembang perangkat lunak tentang hal itu? Mainkan game dengan aturan aslinya. Temukan seseorang di tim Anda (lebih disukai benar-benar di tim Anda, bukan kontraktor, sehingga mereka termotivasi untuk memberikan hasil jangka panjang daripada kemenangan cepat) yang memahami pentingnya keamanan dan melatih bejeezus keluar dari mereka. Berikan orang itu tanggung jawab untuk mengarahkan tim dalam memberikan keamanan ujung ke ujung yang dijelaskan di awal jawaban saya.
Juga, beri orang itu wewenang untuk menindaklanjutinya . Jika suatu desain tidak mengungkapkan persyaratan keamanan, itu harus direvisi. Jika implementasi tidak memenuhi persyaratan keamanan, itu tidak boleh dirilis . Orang keamanan Anda dapat membuat keputusan pengadilan, tetapi harus diizinkan untuk bertindak atas penilaian tersebut. Saya menyadari ini mungkin terdengar seperti petugas keamanan yang mengatakan "keamanan OMFG adalah hal yang paling penting", tetapi bukan itu yang saya maksud. Jika produk Anda tidak memenuhi fungsionalitas, kegunaan atau persyaratan kinerja, Anda juga tidak boleh melepaskan hal itu.
Mengapa Anda ingin melakukan itu? Seharusnya lebih murah: kita semua telah melihat (dan mungkin dikutip untuk +10 rep murah) tabel Kode Lengkap di mana cacat menjadi lebih mahal setelah Anda memperbaikinya, kan? Cacat keamanan juga cacat. Saya aturan dunia nyata dari permainan, kebanyakan dari mereka adalah masalah dalam persyaratan yang diperbaiki dalam pemeliharaan. Apakah itu murah?
Ok, sekarang apa yang bisa saya lakukan sebagai senjata keamanan untuk menyewa itu? Yah ternyata saya bisa menolak untuk bermain dengan aturan yang diubah juga. Saya dapat memberi tahu pengembang bahwa ini semua tentang mengurangi risiko, bahwa ini dapat dilakukan pada setiap tahap, dan kemudian saya dapat membantu mereka melakukannya.