Apakah Anda secara aktif memikirkan keamanan saat pengkodean?

9

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?

Gablin
sumber
Saat coding apa? Saya melakukan banyak hal berbeda.
David Thornley
9
Ya, sering. Biasanya dalam frasa yang mirip dengan "sial, saya tidak punya waktu, saya harap tidak ada yang akan tahu".
liori

Jawaban:

10

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
4

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.

Robert Harvey
sumber
Saya setuju dengan penggunaan fitur keamanan inbuilt, tetapi tentunya Anda harus memikirkan kapan dan bagaimana cara menggunakannya. Saya harus mengatakan bahwa saya khawatir dengan mengandalkan orang lain untuk memikirkan keamanan untuk produk Anda. Mereka belum melakukan itu.
Michael Shaw
@Ptolemy: Kapan tidak tepat untuk parameterisasi pernyataan SQL? Kapan tidak tepat menggunakan token anti-pemalsuan? Jika datanya sensitif, kapan tidak tepat menggunakan enkripsi?
Robert Harvey
Mari kita pertimbangkan enkripsi sejenak. Pertanyaan pertama, enkripsi apa yang Anda gunakan? menggunakan enkripsi yang buruk memberikan rasa aman yang salah. Pada titik tertentu Anda harus mendekripsi data. Pada titik apa Anda melakukan ini, apa risiko untuk ini dibandingkan dengan kompleksitas kode. Perlindungan apa yang sebenarnya diberikan oleh enkripsi kepada Anda? Apakah kode byte dll Anda dienkripsi atau dapatkah kunci enkripsi dibaca dari DLL Anda? itu sebabnya, hanya menggunakan fitur dengan sedikit atau tanpa pemahaman itu berbahaya.
Michael Shaw
@ Poltemy: Jika itu yang Anda maksud dengan memikirkan keamanan, maka saya setuju, Anda harus benar-benar mengetahui hal-hal ini untuk menggunakan alat ini dengan benar.
Robert Harvey
3

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:

teks alternatif

Dulu bulat.

Benteng
sumber
7
Ini perlu penjelasan lebih lanjut :)
Toby Allen
Dun dun dun dun ...
Mateen Ulhaq
2

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.

zvrba
sumber
1

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.

Tim Claason
sumber
1

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 $_GETatau $_POSTarray secara langsung. Sebaliknya, saya query mereka melalui fungsi Request::get('parameter', 'filter')dengan filter seperti int, text, dan beberapa orang lainnya. (Dan Request::post()untuk input POST, tentu saja.)

Trigonometri
sumber
1

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.

sinar
sumber
0

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).

mipadi
sumber
0

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?

Michael Shaw
sumber
0

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.

realworldcoder
sumber
0

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)

Rory Alsop
sumber