it-swarm-id.com

Apakah umumnya ide buruk mengenkripsi bidang basis data?

Saya bekerja di sebuah perusahaan kecil, ini benar-benar saya (programmer) dan pemiliknya. Pemilik telah meminta saya untuk mengenkripsi beberapa bidang dalam database untuk melindungi data pelanggan. Ini adalah aplikasi web yang membantu firma hukum mengelola data mereka, jadi pada dasarnya ia menyimpan informasi orang dan tuntutan hukum (siapa yang dituntut, mengapa, berapa banyak). Ia menganggap informasi sensitif ini yang seharusnya tidak mudah dilihat. Ketakutannya adalah "Saya tidak ingin orang yang tidak berwenang melihat informasi ini". Hanya firma hukum lain yang tertarik dengan data ini, jadi ini seharusnya tidak sepenting kartu kredit, misalnya.

Saya telah membaca banyak tentang ini di web dan saya berpikir untuk hanya menggunakan enkripsi simetris pada bidang ini, sehingga kinerjanya tidak terlalu buruk. Kuncinya akan disimpan di server. Namun, ini utas di stackoverflow mengatakan ini adalah ide yang buruk.

Saya tidak mengerti bagaimana mengenkripsi bidang dan menyimpan kunci di server bisa jadi tidak berguna. Saya tidak takut discnya dicuri karena ada di Amazon EC2. Saya bukan ahli keamanan, tetapi menurut saya, jika ada yang tidak beres, saya akan mengatakan database bocor. Bahkan kemudian, informasi penting akan dienkripsi. Sekarang jika orang itu berhasil meretas ke server EC2 saya, ya, saya kira maka akan ada sedikit atau tidak ada perlindungan yang bisa saya lakukan untuk membantu ini. Karena kami adalah perusahaan kecil, kami hanya memiliki satu server melakukan segalanya, dari melayani halaman hingga menyimpan data.

Pertanyaan saya adalah, mengingat kita hanya mampu membeli satu server, apakah mengenkripsi bidang tersebut dengan kunci simetris, yang disimpan di server ini, ok?

65
Bhaskara

Komentar umum. Sepertinya akan sangat membantu bagi Anda dan bos Anda untuk mempelajari beberapa konsep keamanan dasar, sebelum melanjutkan. Keamanan adalah bidang khusus. Anda tidak akan meminta orang secara acak di jalan untuk melakukan operasi jantung terbuka pada Anda; dan Anda seharusnya tidak mengharapkan pengembang perangkat lunak biasa mengetahui cara mengamankan sistem Anda.

Saya merasakan beberapa kesalahpahaman di sini. Misalnya, sepertinya bos Anda menyamakan keamanan dengan kriptografi. Tapi ini sebuah kesalahan. Seperti yang ditekankan Bruce Schneier, Kriptografi bukanlah debu peri ajaib yang dapat Anda taburkan pada sistem untuk membuatnya aman . Dan seperti yang pernah dikatakan Roger Needham dengan terkenal, Jika Anda berpikir kriptografi akan menyelesaikan masalah Anda, Anda tidak mengerti kriptografi, atau Anda tidak memahami masalah Anda .

Saat mengamankan sistem komputer, satu konsep penting adalah model ancaman . Ini berarti Anda harus berpikir hati-hati tentang jenis serangan dan musuh yang ingin Anda hentikan, dan apa yang tidak. Kegagalan untuk memikirkan melalui model ancaman jelas dapat menyebabkan teater keamanan : mekanisme keamanan yang terlihat baik pada pandangan pertama, tetapi sebenarnya sangat tidak memadai dalam praktiknya. Manajemen keamanan yang baik sering kali turun ke manajemen risiko : analisis yang cermat tentang risiko apa yang paling serius, dan kemudian menyusun strategi untuk mengurangi atau mengelola risiko-risiko khusus tersebut.

Penting juga untuk memahami bahwa keamanan adalah properti tautan terlemah: keamanan sistem Anda hanya sekuat tautan terlemah . Kerentanan dalam salah satu bagian sistem dapat membahayakan keamanan seluruh sistem. Ini berarti bahwa tidak ada satu jawaban pun yang cukup untuk melindungi sistem Anda; alih-alih, untuk mempertahankan sistem Anda, Anda harus mendapatkan keamanan di sejumlah tempat.

Menyelidiki lebih lanjut. Sepertinya tujuan Anda adalah untuk mencegah pengungkapan data sensitif secara tidak sah. Jika demikian, Anda harus fokus pada sejumlah item. Tidak ada satu peluru perak sihir sederhana yang akan menyelesaikan ini untuk Anda; Anda akan perlu bekerja pada keamanan aplikasi secara umum.

Izinkan saya menyarankan beberapa hal yang harus menjadi prioritas bagi Anda, jika saya telah memahami tujuan Anda dengan benar:

  • Keamanan aplikasi. Anda harus mulai belajar tentang keamanan aplikasi web. Tidak masalah berapa banyak crypto yang Anda lemparkan pada masalahnya; jika seorang penyerang dapat menemukan lubang keamanan dalam kode aplikasi Anda, Anda disembunyikan. Untuk latar belakang keamanan aplikasi web, OWASP memiliki banyak sumber yang bagus. Pastikan Anda mempelajari tentang Sepuluh OWASP, tentang XSS, injeksi SQL, sanitasi input/validasi, keluaran keluar, masuk daftar putih, dan konsep lainnya.

  • Kontrol akses. Aplikasi web Anda harus memiliki kontrol akses yang solid, untuk memastikan bahwa satu pengguna sistem Anda tidak dapat mengakses informasi pengguna lain (tanpa otorisasi). Detail ini akan tergantung pada spesifikasi sistem khusus Anda, jadi jika Anda ingin bantuan tambahan, Anda mungkin perlu memposting pertanyaan terpisah dengan rincian lebih lanjut tentang aplikasi Anda dan strategi Anda saat ini untuk kontrol akses.

  • Otentikasi. Aplikasi web Anda akan memerlukan cara untuk mengautentikasi penggunanya. Skema standar-upaya minimal adalah dengan hanya menggunakan nama pengguna dan kata sandi. Namun, ini memiliki keterbatasan serius dalam praktik yang dipahami dengan baik. Jika pengguna memilih kata sandi mereka sendiri, mereka sering memilih kata sandi yang buruk, dan ini dapat menumbangkan keamanan sistem Anda.

  • Daur hidup pengembangan perangkat lunak yang aman. Anda perlu mengintegrasikan keamanan ke dalam proses pengembangan perangkat lunak. Ketika Anda mengerjakan arsitektur perangkat lunak, Anda harus memikirkan persyaratan keamanan dan melakukan pemodelan ancaman dan analisis risiko arsitektur. Saat menulis kode, Anda perlu tahu tentang kesalahan implementasi umum yang dapat melanggar keamanan dan pastikan untuk menghindarinya. Setelah perangkat lunak dibangun, Anda perlu menguji keamanannya dan terus-menerus mengevaluasi kinerja keamanan Anda. Ketika Anda menggunakan perangkat lunak, orang-orang operasi Anda perlu tahu cara mengelolanya dengan aman. Microsoft memiliki beberapa sumber yang bagus di siklus pengembangan perangkat lunak yang aman (SDL). Lihat juga BSIMM untuk lebih lanjut.

  • Penilaian keamanan. Jika Anda khawatir tentang keamanan, saya sarankan agar keamanan aplikasi Anda dinilai. Titik awal yang sederhana mungkin membuat seseorang melakukan pentest aplikasi web Anda, untuk memeriksa beberapa jenis kesalahan umum. Ini sama sekali bukan jaminan keamanan, tetapi kadang-kadang dapat membantu berfungsi sebagai panggilan bangun jika ada banyak masalah utama hadir. Anda mungkin melihat layanan WhiteHat Security; ada juga banyak orang lain yang akan melakukan pentesting web.

Jika Anda merasa bahwa ini bukan pekerjaan sepele, saya minta maaf, tetapi memang itulah masalahnya. Di sisi lain, kabar baiknya adalah bahwa ada banyak sumber daya di luar sana, dan terlebih lagi, Anda tidak perlu menjadi guru keamanan tingkat ahli: Anda hanya perlu mengenal beberapa konsep dasar dan beberapa keamanan umum kesalahan dalam pemrograman web, dan itu akan menangani sebagian besar kebutuhan Anda.

101
D.W.

Mengenkripsi data dalam database akan melindungi informasi jika database tersebut entah bagaimana dicuri. Tapi, itu tidak akan melakukan apa pun untuk melindungi terhadap situs web yang diserang. Misalnya dengan menebak nama pengguna/kata sandi. Mungkin memperlambat seseorang jika mereka telah kompromi server karena mereka harus menemukan kunci tetapi tidak akan menghentikan mereka. Itu juga datang pada harga yang berpotensi tinggi. Misalnya, bidang terenkripsi tidak lagi dapat dicari dengan cara apa pun yang efisien. Anda juga perlu mengetahui implikasi cadangan dan memastikan kunci dicadangkan, sebaiknya secara terpisah ke cadangan basis data untuk mencegah basis data diuraikan jika pita cadangan dicuri. DAN Anda perlu memastikan Anda memiliki beberapa salinan kunci dan UJI secara teratur.

15
pipTheGeek

Konsep yang baik dari SoA adalah memiliki layanan crypto, berjalan terisolasi dari proses lain di server Anda (aplikasi web Anda juga harus dijalankan terisolasi!). Kemudian ketika Anda perlu mengenkripsi/mendekripsi objek/bidang, Anda mengirim plaintext/crypttext ke layanan crypto dan Anda dikembalikan dengan crypttext/plaintext. Dengan cara ini, bahkan jika aplikasi web Anda dikompromikan, penyerang tidak dapat membaca kunci enkripsi, karena hanya layanan crypto yang mengetahui kunci tersebut. Juga, karena aplikasi web Anda terisolasi, apa yang dapat ia lakukan pada sistem Anda sangat terbatas. Layanan isolasi biasanya dilakukan dengan sistem MAC seperti SElinux, TOMOYO (jauh lebih mudah digunakan daripada SElinux imo), AppArmor. Saya juga merekomendasikan menjalankan kernel linux terbaru yang ditambal dengan grsecurity.

6
Matrix

Jawaban singkat: Ya, gunakan enkripsi simetris. Ini akan mencegah beberapa serangan seperti membaca data sql melalui injeksi sql. Namun, jika aplikasi web Anda diserang, itu mungkin tidak masalah. Jika seseorang mendapat cukup akses ke server Anda, Anda tidak bisa melakukan apa-apa. Bahkan dengan enkripsi asimetris.

3
user5575