Ketika Anda membuat kode, apakah Anda secara aktif berpikir tentang kode Anda yang dapat dieksploitasi dengan cara yang semula tidak dimaksudkan untuk dilakukan dan dengan demikian mendapatkan akses ke informasi yang dilindungi, menjalankan perintah atau hal lain yang Anda tidak ingin dilakukan oleh pengguna Anda?
9
Jawaban:
Kindof. Penafian: Saya petugas keamanan;)
Jadi cara saya bekerja adalah bahwa saya memiliki model ancaman saya, yang menggambarkan serangan seperti apa yang dilakukan oleh penyerang seperti apa. Itu membantu untuk menyelesaikan persyaratan keamanan. Ketika saya benar-benar coding, saya melakukan praktik "pengkodean aman" yang biasa seperti berhati-hati bahwa variabel kursor selalu dalam batas, input yang tercemar dibersihkan, kondisi kesalahan ditangani. Kemudian saya kembali ke model ancaman saya untuk melihat modul mana yang paling mungkin ditargetkan oleh penyerang; mereka mendapatkan ulasan tambahan.
sumber
Saya menggunakan praktik standar industri, seperti menggunakan parameter SQL. Saya menggunakan platform "aman", seperti .NET Framework, dan memanfaatkan fitur keamanan seperti token anti-pemalsuan di ASP.NET MVC. Saya tidak menulis algoritme enkripsi saya sendiri, tetapi saya mengerti apa yang disediakan oleh enkripsi itu untuk manfaat keamanan, dan ketika saya perlu menggunakannya untuk mendapatkan manfaat keamanan itu.
Singkatnya, saya menggunakan praktik terbaik, tetapi saya tidak mengembangkan alat keamanan saya sendiri. Saya bukan ahli keamanan dalam hal itu; Saya mengandalkan ahli keamanan lainnya, yang mungkin sudah berpikir mendalam tentang masalah ini, dan memiliki pemahaman yang jelas tentang risiko dan manfaatnya.
Pendekatan mendasar saya terhadap keamanan, di luar hanya menggunakan alat keamanan, adalah untuk menghilangkan semua input yang mungkin untuk sistem kecuali yang saya harapkan. Jika saya memiliki bidang nomor jaminan sosial, satu-satunya karakter yang seharusnya benar-benar muncul adalah angka numerik dan tanda hubung, dalam pola tertentu.
Saya memvalidasi input pengguna pada klien dan server.
sumber
Benar.
Keamanan adalah segalanya. Dan dengan perangkat lunak numerik, itu berlaku dua kali.
Beberapa hari yang lalu, seorang pengguna berhasil menemukan dan mengeksploitasi bug di salah satu program lama saya. Kerusakan tidak bisa diperbaiki. Lihat di bawah:
Dulu bulat.
sumber
Tidak, karena saya tidak bekerja di domain masalah di mana keamanan relevan (visualisasi data besar-besaran SW). Saya memang memiliki banyak kode dalam kode saya (memeriksa indeks, memeriksa konsistensi, dll), bukan karena masalah keamanan, tetapi karena saya suka kode yang salah crash lebih awal dan crash terlihat jelas.
sumber
Benar. Saya berpikir tentang kerentanan injeksi, dan juga bagaimana logika bisnis saya akan bekerja di lingkungan desktop versus lingkungan web, dan bagaimana keamanan diterapkan di kedua jenis lingkungan.
sumber
Saya bukan ahli keamanan, tetapi ketika saya membuat kode aplikasi web saya selalu berasumsi bahwa input pengguna mungkin mengandung segala macam keanehan dan harus selalu sepenuhnya diloloskan dan sejenisnya. Juga, saya berhati-hati dalam membuat panggilan Ajax kembali ke server untuk memeriksa apakah pengguna masuk (jika mereka harus untuk acara tertentu) dan bahwa mereka memiliki izin untuk melakukan apa pun yang mereka coba lakukan.
Basis kode memiliki seperangkat filter untuk input. Saya tidak pernah memeriksa PHP
$_GET
atau$_POST
array secara langsung. Sebaliknya, saya query mereka melalui fungsiRequest::get('parameter', 'filter')
dengan filter sepertiint
,text
, dan beberapa orang lainnya. (DanRequest::post()
untuk input POST, tentu saja.)sumber
Iya. Ketika saya bekerja pada game multipemain, semuanya paranoid dari eksploitasi dan cara curang. Menyontek dapat menghancurkan game sepenuhnya, belum lagi model bisnis yang terhubung dengan menjual barang dalam game. Jadi masalah keamanan dan tindakan anti-perusakan sangat tinggi dalam agenda. Saya sangat menyukainya. Saya telah mengerjakan proyek lain sebelumnya di mana Anda harus merasa bersalah karena bekerja lebih lama pada kode hanya untuk memastikan itu aman.
sumber
Iya. Keamanan itu penting, dan tidak boleh ketinggalan jaman; menambahkan keamanan setelah faktanya biasanya lebih sulit daripada mendesainnya ke dalam aplikasi, dan jika Anda menambahkannya nanti, Anda mungkin akan kehilangan beberapa hal (atau tidak perlu repot-repot menambahkannya sama sekali).
sumber
Pahami prinsip-prinsip umum keamanan, (integritas, otentikasi, otoritas) dan kemudian bacalah beberapa buku tentang bagaimana orang telah merongrong pilar-pilar keamanan ini selama ribuan tahun dan Anda akan berada di setengah jalan di sana.
Kemudian bacalah beberapa buku bagus tentang desain dan strategi pengujian dan Anda akan belajar bagaimana merancang testability ke dalam arsitektur Anda.
Sekarang kita sampai pada titik ketika saya memikirkan keamanan. Saya berpikir tentang bagaimana saya bisa memvalidasi sumber data, apakah penting jika data dirusak, siapa sumber datanya, seberapa yakinnya saya? bagaimana itu bisa diubah dll ...
Ini mempengaruhi desain. File konfigurasi mungkin memiliki bagian kunci yang dienkripsi, atau bidang tertentu bisa dalam teks yang jelas dengan bidang tanda tangan yang terkait. Hal-hal menjadi lebih kompleks dengan layanan yang dihadapi internet karena Anda harus mengharapkan tingkat permusuhan yang lebih besar di sana.
Kemudian pada pengujian, bagaimana Anda menguji semua ini. Apa entri data maksimum Anda, apa yang terjadi jika Anda mendorong perangkat lunak melampaui batas itu, bagaimana cara mengatasinya? Apa yang dipercaya? bagaimana Anda bisa memalsukan kepercayaan itu?
sumber
Iya.
Saya telah berurusan dengan cukup banyak peretas di masa lalu untuk mengetahui bahwa mereka terus-menerus mencoba untuk berkompromi dengan situs besar mana pun, dan ada cukup banyak bot di luar sana sehingga bahkan situs kecil pun tidak aman.
Saya mencoba untuk berpikir seperti seorang hacker sepanjang waktu sekarang, sampai pada titik di mana saya kadang-kadang mengkhawatirkan rekan kerja saya dengan komentar kasual tentang bagaimana sistem yang kita anggap remeh setiap hari dapat diatasi.
sumber
Itu harus menjadi sesuatu yang dikembangkan oleh pengembang mana pun untuk proses dari bawah ke tingkat yang lebih besar atau lebih kecil, tergantung pada aplikasi dll. Sayangnya, karena pengembang cenderung tidak mengutip untuk keamanan, pembeli tidak cenderung memikirkannya ( Saya tahu, ini sedikit catch-22, karena jika pembeli menginginkan penawaran termurah, mungkin tidak termasuk keamanan)
Sebagai pengembang, Anda dapat memperoleh keuntungan yang pasti jika Anda terampil dalam bidang ini - saya secara khusus memikirkan bank dan layanan keuangan, tetapi industri lain juga berlaku. Saat ini mereka dapat menganggarkan 70 - 100rb dalam pelatihan untuk lulusan baru yang akan ditingkatkan untuk mempercepat proses, keamanan dan spesifik lainnya untuk organisasi itu. Jika Anda dapat menyimpannya 30k dari itu, itu plus CV yang bagus!
Di Inggris, Institut Profesional Keamanan Informasi , dan di Skotlandia, Centre of Excellence in Security and Cybercrime bekerja erat dengan Universitas untuk membantu meninjau materi pelajaran, memberikan kuliah tamu tentang implikasi dunia nyata dari pengkodean yang buruk dan memfasilitasi penempatan musim panas (misalnya pengembang perangkat lunak ditempatkan dalam divisi penipuan dalam penegakan hukum.) Sebagian besar organisasi pendukung melakukan ini secara gratis, karena memiliki potensi untuk menyelamatkan mereka sejumlah besar uang - sepertinya nilai bagi saya.
(Penafian - Saya telah menjadi petugas keamanan untuk berbagai organisasi global)
sumber