Saya memiliki aplikasi perusahaan yang berjalan yang menggunakan datastore MySQL dan MongoDB . Semua tim pengembangan saya memiliki akses SSH ke mesin untuk melakukan rilis aplikasi, pemeliharaan, dll.
Saya baru-baru ini meningkatkan risiko dalam bisnis ketika pengguna mulai menyimpan data yang sangat sensitif pada aplikasi yang para pengembang memiliki akses tidak langsung ke data ini yang menyebabkan sedikit badai, jadi saya sekarang telah diberi mandat untuk mengamankan data sehingga tidak dapat diakses.
Bagi saya ini sepertinya tidak mungkin karena jika aplikasi memiliki akses ke database maka pengembang dengan akses ke mesin dan sumber aplikasi akan selalu dapat mengakses data.
server-security
Clinton Bosch
sumber
sumber
Jawaban:
Keamanan bukanlah tongkat ajaib yang dapat Anda lambaikan di akhir proyek, perlu dipertimbangkan dan dibangun sejak hari pertama. Ini bukan baut, itu adalah aplikasi yang konsisten dari berbagai solusi yang diterapkan secara berulang dan ditinjau secara teratur sebagai bagian dari keseluruhan sistem, yang hanya sekuat tautan terlemah.
Saat berdiri Anda telah menandai masalah keamanan yang merupakan langkah pertama yang baik. Sekarang sebagai minimum Anda harus mendefinisikan: -
Sampai Anda mengetahui semua itu secara terperinci, Anda benar-benar tidak memiliki pekerjaan apa pun. Informasi itu akan menentukan mitigasi apa terhadap ancaman yang dapat (dan tidak bisa) Anda terapkan dan mengapa.
Mungkin hal terbaik untuk dilakukan adalah mengakui bahwa Anda tidak memiliki pengalaman yang diperlukan dan bahwa akan lebih baik untuk membawa seseorang yang baru dengan pengalaman itu. Saya cukup sering mendengar tanggapan bahwa tidak ada anggaran - jika dianggap benar-benar penting maka anggaran akan ditemukan.
sumber
make-application-secure
perintah ajaib yang hanya perlu mereka jalankan.Kamu benar. Jika suatu aplikasi mampu mengakses konten yang disimpan di mesin perusahaan tanpa pengguna memberikan informasi tambahan setiap saat , maka programmer, pengelola, sysadmin, dll dari penyedia layanan dapat mengakses konten itu. Ini pada dasarnya tidak dapat dihindari, dan merupakan sumber utama rasa tidak aman (Edward Snowden adalah sysadmin, dan memiliki hak istimewa di atas "Top Secret" karena tidak ada cara untuk tidak memberikannya.)
Satu-satunya cara untuk menghindari ini adalah dengan mengharuskan pengguna untuk memberikan informasi yang tidak pernah sampai ke mesin perusahaan. Ini membosankan dan rawan kesalahan, karena tidak ada yang bisa mengingat informasi yang cukup untuk membentuk penghalang akses yang aman, dan oleh karena itu orang akan segera mulai menyimpan kredensial mereka secara elektronik di suatu tempat, yang kemudian akan menjadi target serangan baru (dan mungkin suatu target yang lebih lemah dari yang Anda pertahankan). Tetapi jika Anda ingin dengan jujur menyatakan "Karyawan kami secara fisik tidak mampu mengakses konten pengguna kami", itu satu-satunya cara.
(Perhatikan juga bahwa model bisnis seperti itu tampaknya menjadi tidak dapat dipertahankan secara politis. Bisnis telah dipaksa keluar dari operasi oleh layanan keamanan karena berusaha melakukan hal ini dengan tepat. Saya mengerti bahwa memberikan jaminan privasi memiliki nilai bisnis, tetapi tidak mungkin memiliki lebih dari itu. nilai bisnis daripada tujuan mendasar untuk bertahan dalam bisnis.)
sumber
Anda benar; beberapa pengembang akan selalu memerlukan akses ke data Live, jika hanya untuk mendiagnosis masalah produksi. Yang terbaik yang dapat Anda lakukan adalah membatasi potensi kerusakan dengan mengurangi jumlah orang yang terlibat.
Banyak pengembang tidak menginginkan tanggung jawab itu dan yang lainnya, tidak akan "siap" untuk memikulnya, dan seharusnya tidak.
Pertanyaan: Mengapa tim Pengembangan Anda melakukan siaran langsung ?
Saya menyarankan Anda memerlukan "tim" Manajemen Rilis (bahkan itu hanya sebagian dari tim Anda, ditambah perwakilan Bisnis untuk membuat "keputusan" sehari-hari, seperti "Pergi / Tidak-Pergi")? Ini akan menghilangkan banyak "kebutuhan" bagi pengembang untuk menyentuh apa pun yang Live.
Apakah Anda memiliki perjanjian kerahasiaan / kerahasiaan antara pengembang dan perusahaan? Ini tangan yang berat, tetapi mungkin memiliki beberapa kelebihan.
sumber
Masalahnya adalah pengembang Anda memiliki akses ke sistem. Jika mereka membutuhkan data produksi untuk debugging, maka berikan mereka basis data tempat semua informasi sensitif itu dihapus. Kemudian pengembang dapat bekerja dengan dump itu.
Menyebarkan versi baru tidak boleh melibatkan pengembang apa pun - bahwa tugas admin murni, atau bahkan lebih baik - tugas yang sepenuhnya otomatis. Juga sadar akan melepaskan dan menggunakan dua tugas yang sangat berbeda. Jika proses Anda tidak menyadarinya maka ubahlah sesuai.
sumber
Aturan # 1 keamanan: Jika seseorang memiliki akses ke informasi, mereka memiliki akses ke informasi itu
Tautologi itu menjengkelkan, tetapi itu benar. Jika Anda memberikan akses ke seseorang, mereka memiliki akses ke data. Untuk pengguna, ini biasanya berarti kontrol akses, tetapi untuk pengembang ... yah ... merekalah yang harus menulis kontrol akses.
Jika ini merupakan masalah besar bagi Anda (dan sepertinya memang demikian), pertimbangkan untuk membangun keamanan ke dalam perangkat lunak Anda. Pola umum adalah merancang perangkat lunak yang aman berlapis-lapis. Pada lapisan terendah, tim pengembangan tepercaya merancang perangkat lunak yang mengelola kontrol akses paling telanjang. Perangkat lunak itu divalidasi dan diverifikasi oleh sebanyak mungkin orang. Siapa pun yang mendesain kode itu memiliki akses ke semuanya, jadi kepercayaan sangat penting.
Setelah itu, pengembang dapat membangun kontrol akses yang lebih fleksibel di atas lapisan inti itu. Kode ini masih harus V & Vd, tetapi tidak seketat itu karena Anda selalu dapat mengandalkan lapisan inti untuk menutupi hal-hal yang penting.
Polanya memanjang ke luar.
Bagian yang sulit, memang seni merancang sistem ini, adalah bagaimana membangun setiap lapisan sehingga pengembang dapat terus mengembangkan dan men-debug sambil tetap memberi perusahaan Anda keamanan yang Anda harapkan. Secara khusus, Anda harus menerima bahwa debugging menuntut lebih banyak hak istimewa daripada yang Anda pikirkan, dan upaya untuk mengunci itu akan menghasilkan beberapa pengembang yang sangat marah.
Sebagai solusi sampingan, pertimbangkan untuk membuat basis data "aman" untuk tujuan pengujian di mana pengembang dapat mencabut semua mekanisme keamanan dan melakukan debugging yang serius.
Pada akhirnya, Anda dan pengembang Anda perlu memahami prinsip utama keamanan: Semua keamanan adalah keseimbangan antara keamanan dan kegunaan. Anda harus menemukan saldo Anda sendiri sebagai sebuah perusahaan. Sistem tidak akan sepenuhnya aman, dan tidak akan dapat digunakan dengan sempurna. Keseimbangan itu mungkin bahkan akan bergerak ketika perusahaan Anda tumbuh dan / atau menuntut pengembang berubah. Jika Anda terbuka pada kenyataan ini, Anda bisa mengatasinya.
sumber
Menyiapkan dua penyebaran aplikasi yang juga menggunakan penyebaran basis data yang terpisah. Salah satunya adalah penyebaran produksi dan satu adalah penyebaran uji.
Penempatan uji hanya memiliki data uji. Ini bisa berupa data fantasi yang dibuat untuk tujuan itu atau salinan data produksi yang dianonimkan untuk mencegah pengembang menemukan orang-orang dan entitas nyata di balik data.
sumber
Di dua perusahaan keuangan, pengembang tidak memiliki akses ke mesin produksi. Semua permintaan untuk memodifikasi mesin produksi harus melalui proses persetujuan, dengan skrip, dan disetujui oleh manajer. Tim dev-ops menyelesaikan penyebaran yang sebenarnya. Saya menganggap tim ini hanya karyawan, dan lulus pemeriksaan latar belakang. Mereka juga tidak memiliki pengetahuan pengembang sehingga mungkin tidak bisa mengintip jika mereka mau. Selain itu, Anda akan mengenkripsi semua entri basis data menggunakan kunci rahasia yang disimpan dalam variabel lingkungan. Bahkan jika database bocor secara publik, tidak ada yang bisa membacanya. Kunci ini dapat dilindungi lebih lanjut dengan kata sandi (PBKDF) sehingga hanya seorang eksekutif yang dapat membukanya. Sistem Anda dapat meminta kata sandi eksekutif saat boot (atau lebih mungkin didelegasikan ke dev-ops atau manajer dev-ops). Pada dasarnya strateginya adalah untuk membubarkan pengetahuan sehingga massa kritis dari pengetahuan yang diperlukan tidak ada dalam satu orang dan ada checks and balances. Inilah cara Coca-Cola melindungi formulanya. Jujur, beberapa jawaban ini adalah cop-out.
sumber
MongoDB memiliki kontrol keamanan yang terbatas dan bergantung pada lingkungan yang aman. Mengikat ke ip dan port tertentu (dan ssl sejak 2.2), dan otentikasi mentah, itulah yang ditawarkannya. MYSQL menambahkan GRANT o ON db.t TO ... Data saat istirahat tidak dienkripsi, dan ssl tidak digunakan secara default. Buat pagar. Akses hanya baca untuk pengembang ke file log terkait aplikasi harus cukup untuk debug. Mengotomatiskan siklus hidup aplikasi.
Ansible membantu kami mengotomatiskan operasi standar (penyebaran, peningkatan, pengembalian) atas banyak lingkungan penyewa tunggal saat menggunakan kubah terenkripsi yang berbeda untuk menyimpan variabel lingkungan yang sensitif seperti host, port, dan kredensial. Jika setiap vault hanya dapat didekripsi oleh peran yang berbeda, dan hanya pada host benteng, untuk operasi yang dicatat, maka kemampuan audit memberikan keamanan yang dapat diterima. Jika Anda memberikan SSH, maka silakan gunakan selinux untuk menghindari perusakan kunci, gunakan host benteng dengan otentikasi ldap / kerberos untuk administrasi, dan gunakan sudo dengan bijak.
sumber