Mengamankan data sensitif dari pengembang

61

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.

Clinton Bosch
sumber
30
Pengguna harus menyimpan data sensitif hanya dalam bentuk terenkripsi. Seharusnya tidak ada masalah besar jika pengembang dapat mengakses formulir terenkripsi, selama kunci yang cocok terlindung dari mereka.
MSalters
3
@Clinton Apakah Anda memiliki admin dan tim pengembang yang terpisah? Admin server selalu dapat membaca data dan enkripsi tidak membantu karena mereka dapat dengan mudah mendapatkan kuncinya.
CodesInChaos
14
Untuk benar-benar jujur, ini adalah masalah yang rumit dan melakukannya dengan benar membutuhkan banyak keahlian dalam keamanan data. Bahkan jika Anda tahu persis apa yang harus dilakukan, Anda akan menghadapi pertentangan bisnis, hambatan politik dan teknis. Saya sangat menyarankan Anda membawa konsultan keamanan data. Mereka tidak hanya tahu apa yang harus dilakukan di sini, manajemen tingkat atas biasanya memberikan kepercayaan lebih ketika pihak ketiga mengatakan kepada mereka untuk berubah. Manajemen tingkat atas pada umumnya tidak menaruh banyak stok dalam apa yang dikatakan oleh pakar internal mereka kepada mereka.
maple_shaft
3
Mungkin patut ditanyakan di Information Security Stack Exchange. Ada beberapa info terkait pada pertanyaan ini
paj28
23
Mengapa manusia menyentuh server dan menyebarkan kode?
Wyatt Barnett

Jawaban:

89

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: -

  • Data apa yang Anda coba lindungi?
  • Dari siapa Anda mencoba melindungi data itu?
  • Siapa yang sebenarnya membutuhkan akses ke apa (dan kapan)?
  • Apa dampak hukum / keuangan / bisnis dari data yang dikompromikan?
  • Apa kebutuhan hukum / keuangan / bisnis untuk seseorang / kelompok yang memiliki akses ke data?
  • Berapa anggaran yang ingin ditetapkan oleh bisnis untuk strategi "dapatkan aman, tetap aman" padahal sebelumnya bukan persyaratan bisnis?
  • Akses apa yang dibutuhkan sistem ke data?
  • Apa yang diandalkan proses dan sistem yang digunakan aplikasi ini?
  • Apa yang dilakukan untuk mengamankan lingkungan itu?
  • Siapa yang akan bertanggung jawab untuk mengimplementasikannya dan meninjau seluruh proses?

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.

James Snell
sumber
33
Wah ... itu membuat keamanan terdengar ... tidak sepele. (Maaf untuk sarkasme; Saya telah melihat banyak orang terkejut dengan ini.)
Paul Draper
4
Saya percaya bahwa sejumlah orang berpikir ada make-application-secureperintah ajaib yang hanya perlu mereka jalankan.
TMH
27

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

Kilian Foth
sumber
6
Dimungkinkan untuk merancang perangkat keras sedemikian rupa sehingga secara fisik tidak mungkin untuk mengakses data tertentu tanpa membuat catatan permanen dari akses tersebut yang tidak dapat dihancurkan tanpa kolaborasi beberapa orang independen, dan yang bahkan dengan kolaborasi semacam itu tidak dapat dihancurkan. tanpa meninggalkan bukti nyata kehancuran yang disengaja. Memperbarui sistem seperti itu untuk menangani perubahan kebutuhan, bagaimanapun, sangat mahal dibandingkan dengan memperbarui sistem keamanan berbasis perangkat lunak.
supercat
5
Anda benar, saya benar-benar lupa menyebutkan kemampuan audit sebagai alternatif yang memungkinkan untuk hosting tanpa pengetahuan. Agak lebih mudah untuk dicapai dan cukup sering untuk kasus bisnis.
Kilian Foth
Paragraf terakhir Anda. Apakah Anda merujuk pada cerita bertipe LavaBit? Saya bingung.
jpmc26
1
@supercat Anda juga harus percaya bahwa pencipta perangkat keras membuatnya melakukan apa yang mereka katakan.
user253751
2
@immibis: Benar, tapi saya ingin desain dan pembuatan perangkat keras yang aman bisa diaudit oleh banyak orang independen. Lebih jauh, dalam sistem konvensional akan mungkin sepotong kode "licik" melakukan sesuatu dan kemudian menghapus dirinya sendiri tanpa jejak, tetapi jika perangkat keras yang aman tidak seharusnya memiliki toko kendali yang dapat ditulisi, hal semacam itu tidak mungkin. Entah kode licik harus secara permanen di toko kontrol, atau toko kontrol harus memiliki sarana modifikasi yang terhubung secara permanen, yang salah satunya akan dapat dideteksi setelah fakta.
supercat
15

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.

With great power comes great ... opportunity to really, *really* foul things up. 

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.

Phill W.
sumber
Yang masih tidak akan berhenti ditentukan pelanggar dari bersembunyi di pintu belakang dalam aplikasi, tetapi itu mengurangi peluang yang membuat pencuri.
Jan Hudec
Ya, itu bukan seluruh tim pengembangan tetapi lebih merupakan tim manajemen subset / rilis. Kami tentu saja memiliki klausul dalam kontrak kerja tentang pengintaian di sekitar data yang seharusnya tidak Anda lakukan, ini merupakan pelanggaran yang dapat diabaikan.
Clinton Bosch
@JanHudec Terutama karena menambahkan kode aplikasi meninggalkan jejak dalam kontrol versi.
CodesInChaos
@CodesInChaos: Pemrogram yang baik dapat membuat backdoor terlihat seperti kesalahan jujur. Anda akan mencurigai mereka, tetapi Anda tidak akan pernah mengajukan tuntutan terhadap mereka. Tapi ya, itu garis pertahanan lain.
Jan Hudec
@ Jan: Itulah sebabnya semua perubahan kode harus ditinjau dan ditandatangani sebelum diizinkan ke cabang rilis.
SilverlightFox
9

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.

SpaceTrucker
sumber
1
Kami tidak memerlukan data produksi dari debugging, kami memiliki dump data yang disanitasi untuk itu, tetapi kadang-kadang penyebaran membutuhkan berbagai migrasi data dll. Yang dijalankan oleh beberapa pengembang dalam tim manajemen rilis (tetapi mereka masih pengembang)
Clinton Bosch
2
@ClintonBosch Maka Anda belum memisahkan peran admin dan pengembang dengan jelas. Kemudian juga satu pertanyaan lagi yang harus Anda tanyakan pada diri sendiri adalah: bagaimana kita memastikan bahwa perangkat lunak yang dirilis juga benar-benar digunakan? Anda perlu masuk saat rilis dan hanya mengizinkan penyebaran paket yang ditandatangani pada produksi. Juga lagi otomasi adalah teman Anda. Migrasi seharusnya tidak memerlukan langkah manual.
SpaceTrucker
4
@ClintonBosch Mengidentifikasi bidang data apa yang sangat rahasia dan mengenkripsi data tersebut. Pastikan Anda menempatkan keamanan OS produksi sehingga Anda dapat mengakses id pengguna mana yang membaca file kunci untuk memastikan tidak ada orang selain pengguna aplikasi yang melakukan ini. Jangan berikan kata sandi pengguna aplikasi kepada pengembang. Buat mereka sudo untuk mendapatkan hak atas produksi dan mencatat apa yang mereka lakukan. Ini mungkin cara paling aman untuk memastikan bahwa Anda mengasuh beberapa orang yang akan memiliki akses dan agar mereka tidak dapat dengan santai atau tidak sengaja melihat data yang tidak seharusnya.
maple_shaft
6

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.

Cort Ammon
sumber
3

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.

Philipp
sumber
Ya, ini persis skenario yang kita miliki. Tetapi pada titik tertentu seseorang perlu bekerja di lingkungan produksi untuk memfasilitasi penyebaran / migrasi data
Clinton Bosch
3

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.

Chloe
sumber
-1

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.

bbaassssiiee
sumber