Saya telah mendengar tentang perusahaan keamanan yang berkonsultasi tentang keamanan sistem klien. Semua orang yang saya kenal di bidang ini adalah insinyur jaringan, tetapi saya tahu programmer juga terlibat dalam keamanan. Apa yang sebenarnya dilakukan oleh programmer keamanan yang melakukan audit / konsultasi? Apakah mereka benar-benar melalui basis kode mencari setiap kerentanan dalam sistem warisan orang? Saya selalu berasumsi bahwa itulah yang mereka lakukan, tetapi sepertinya ini akan sangat tidak dapat diandalkan dan tidak melakukan lebih dari memberikan rasa aman yang salah. Catatan: Saya tidak berbicara tentang programmer yang menulis algoritma enkripsi atau semacamnya, hanya mereka yang peduli dengan audit / konsultasi keamanan perangkat lunak.
sumber
Jawaban:
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:
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.
sumber
Dari 15 tahun menjalankan program jaminan keamanan terhadap aplikasi kecil, sangat besar, lingkungan, sistem dll. Saya akan mengatakan ada sedikit dari segalanya. Di tim saya, saya selalu memiliki beberapa yang merupakan coders hardcore.
Pada tingkat terperinci, beberapa turun ke review kode yang sangat mendalam - sebagai contoh saya saat ini bekerja pada basis kode baris multi-juta, menggunakan alat untuk mempersempit masalah yang mungkin, dan kemudian melihat masing-masing dan setiap orang untuk mengkategorikan.
(Harus diakui saya kemudian menyerahkan kepada pengembang untuk memulihkan atau menjelaskan kepada saya mengapa masalah ini tidak menimbulkan risiko)
Tapi ini adalah keterlibatan khusus yang membuat profil risiko masuk akal untuk melakukan pekerjaan intensif sumber daya semacam ini.
Jauh lebih standar, dan jauh lebih efektif daripada biaya mencoba memahami profil risiko organisasi dan fokus pada risiko top-down, misalnya:
Sisi pemrograman benar-benar hanya masuk ke dua terakhir, dengan ulasan kode dan pengujian penetrasi kustom. Untuk beberapa organisasi itu sangat penting, misalnya jika Anda memiliki kontrol keamanan berlapis yang telah ditinjau secara luas oleh rekan-rekan (misalnya, berbagai jenis enkripsi) maka saat Anda dapat memeriksa implementasi Anda, Anda biasanya tidak akan memeriksa ulang semua kode seperti yang telah dilakukan sebelumnya.
sumber
Saya belum pernah menemukan hal yang lebih jauh dari membahas arsitektur / praktik terbaik secara samar selama desain dan / atau menjalankan serangan / fritzing / suite pengujian pengecualian terhadap proyek jadi.
Dalam hampir semua kasus saya bahkan dapat memberi tahu alat apa yang mereka gunakan oleh vektor serangan yang mereka coba dan cara serangan dilakukan setelah salah satu audit melewati sistem yang ada.
Saya membayangkan bahwa ada beberapa yang benar-benar meluangkan waktu untuk memeriksa kode dan melakukan pengujian / pengujian whitebox, tapi saya belum menemukan mereka dalam kehidupan nyata.
sumber