Apa yang dilakukan programmer di perusahaan keamanan?

10

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.

Morgan Herlocker
sumber
1
Merasa bebas untuk menjelajahi security.stackexchange.com untuk audiensi lebih banyak petugas keamanan!
Rory Alsop
1
^ apa yang dia katakan, kami berdua adalah moderator pro di sana.

Jawaban:

12

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.


sumber
Untuk orang di posisi Anda, saya terkejut bahwa Anda tidak dapat menawarkan lebih banyak ke diskusi. Saya akan sangat tertarik mendengar apa yang Anda katakan.
Steven Evers
Anda benar, saya lelah (jet lag) ketika saya menulis jawabannya. Saya akan mencoba mengisinya sedikit.
@ snorfus Saya harus minta maaf karena tidak memberikan jawaban yang baik. Saya benar-benar minta maaf.
@ Graham Lee: Saya curiga Anda memiliki jawaban yang bagus tersembunyi dari kami :) Hasil edit Anda telah membuktikan hal itu; Terima kasih!
Steven Evers
@ snorfus Saya benar-benar harus berpikir sebelum memposting. Dan jika saya tidak dalam kondisi berpikir, saya seharusnya tidak memposting ...
5

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:

  • Appetite Risiko - dampak terhadap bisnis, pemodelan ancaman
  • Pemerintahan - kepatuhan peraturan, pelaporan dll
  • Kebijakan - definisi untuk memastikan kerangka kerja tata kelola efektif
  • Proses - teknis dan manusia
  • Standar - definisi untuk setiap kontrol keamanan
  • Implementasi - Cara

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.

Rory Alsop
sumber
2
Saya memberi +1, tetapi berhati-hatilah "atau untuk menjelaskan kepada saya mengapa masalah ini tidak menimbulkan risiko". Pengembang akan sering menemukan alasan untuk menghindari mengubah hal yang mereka buat (berbicara sebagai pengembang), dan selain itu mungkin tidak memahami risiko pelanggan. Bagaimanapun, itu adalah pengembang yang menulis Windows 98 ;-)
@ Bahama - Anda mengatakan yang tidak disebutkan namanya :-) Dan saya suka jawaban versi baru Anda yang lebih panjang! +1
Rory Alsop
oh benar Saya sengaja mengatakan itu karena saya tidak ingin memberi nama windows 98 tetapi tiga tahun sebelumnya.
1

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.

Tagihan
sumber
kedengarannya seperti perusahaan tempat Anda bekerja secara konsisten murah dan mengambil hacks, yang berbicara permainan yang baik tetapi tidak benar-benar mengerti maksudnya. Selain saya sendiri, dan para penjawab lainnya di sini, saya telah bekerja dengan, dan melatih, banyak yang melakukannya dengan benar. Memang, saya mungkin sudah bertemu lebih banyak dari jenis yang Anda miliki juga ...
AviD
@vid saya tidak bermaksud negatif. Saya yakin jika Anda membayar mahal, Anda bisa menemukan cukup banyak perusahaan yang bersaing, tetapi bahkan ketika Anda melakukannya, Anda cenderung mendapatkan lebih banyak saran untuk membeli sesuatu daripada Anda melakukan saran untuk meningkatkan / mengimplementasikan sesuatu. BAHWA BUKANLAH HAL YANG BURUK menggunakan produk yang dikenal dengan catatan keamanan yang baik lebih baik jika cocok untuk ruang masalah. OP menyebutkan AUDIT secara khusus, dan pada kisaran yang Anda bayarkan untuk audit pihak ke-3 tahunan Anda, Anda melewati poin Rory ke-2, ke-3 dan 1/2.
Bill