Saya memiliki sekelompok server, masing-masing dengan file konfigurasi yang saat ini berisi kata sandi teks-polos untuk sistem sensitif, misi-kritis (antrian pesan, penyimpanan data, dan layanan lainnya).
Beberapa orang memindahkan kata sandi penting dari file konfigurasi ke dalam variabel lingkungan dari akun pengguna di mana proses server dijalankan. Dengan cara ini, file konfigurasi dapat dikomit ke kontrol versi, dan administrator sistem hanya perlu membuat variabel lingkungan yang sesuai ketika sistem server diatur. Secara alami, akses ke akun yang menjalankan layanan ini sangat terbatas.
Apakah ini benar-benar cara terbaik untuk menghindari kata sandi dalam file konfigurasi teks biasa, atau adakah cara yang lebih baik?
passwords
environment-variables
Steve HHH
sumber
sumber
Jawaban:
Jika Anda menggunakan sistem Linux, lihat / proc / * /viron dan putuskan apakah variabel lingkungan adalah tempat yang baik untuk menyimpan informasi sensitif atau tidak. / proc / self adalah proses saat ini:
Tidak masalah bahwa pengaturan variabel lingkungan mungkin membaca file di suatu tempat.
Yang perlu diingat adalah bahwa menggunakan kata sandi berarti kata sandi tersedia untuk program. Jika kata sandi ini tidak disediakan oleh pengguna yang mengetiknya setiap kali suatu program membutuhkannya, kata sandi itu harus dapat diakses hanya berdasarkan akses program. Anda dapat mengenkripsi kata sandi secara lokal dan membuat program mendekripsi menggunakan kunci, tetapi semua yang dilakukan adalah mengaburkan kata sandi terhadap pengungkapan yang tidak disengaja; seseorang yang memiliki akses yang sama dengan program dapat melakukan hal yang sama dengan yang dapat dilakukan oleh program, termasuk membaca kunci enkripsi.
Cara yang tepat untuk melakukan ini adalah menjalankan aplikasi sebagai akun terbatas, dan menyimpan kata sandi dalam file yang dilindungi dengan izin tingkat sistem file. Semoga Anda dapat "memasukkan" file atau sejenisnya untuk menjaga kata sandi dari sistem kontrol versi (dengan asumsi VCS tidak memiliki kontrol keamanan). Untuk melindungi dari pengungkapan yang tidak disengaja, mengaburkan kata sandi yang Anda inginkan - base64 menyandikannya, gunakan pgp untuk mengenkripsi, apa pun yang masuk akal dalam set pilihan program server Anda. Jika Anda menulis program untuk melakukan ini, hal terbaik yang dapat Anda lakukan adalah meminta pengguna untuk kata sandi hanya saat diperlukan, dan kemudian menghapus kata sandi itu dari memori segera setelah digunakan.
sumber
cat /proc/self/environ | tr '\0' '\n'
Pada akhirnya, jika Anda memiliki data yang perlu dibaca serta ditulis , Anda akan akhirnya melindungi sesuatu dengan kata sandi (atau jika Anda benar - benar paranoid, dengan kartu pintar perangkat keras fisik fisik dan PIN), tidak peduli berapa banyak lapisan enkripsi yang Anda miliki.
Ini bermuara pada pertanyaan dasar keamanan sistem vs kenyamanan. Anda dapat menambahkan "pertahanan mendalam" dengan memiliki banyak dan banyak lapisan kontrol keamanan yang harus dilanggar oleh aktor jahat untuk sampai ke "barang", tetapi kemudian ketika aktor yang sah ingin membaca atau mengubah beberapa data, mereka harus melalui banyak simpai. Alternatifnya adalah kata sandi plaintext dalam file teks.
Apa yang akan saya lakukan jika saya benar-benar ingin melindungi beberapa informasi dalam sistem misi-kritis:
Gunakan Enkripsi Disk Penuh, sehingga konten seluruh penyimpanan persisten dienkripsi.
Batasi akses fisik ke mesin. Kunci sasis mesin dengan mekanisme penguncian yang aman dan kontrol akses fisik ke tombol. Sewa otot (penjaga bersenjata) untuk menjadi penjaga gerbang untuk akses.
Menerapkan Kontrol Akses Wajib (MAC) berbutir halus dalam sistem operasi perangkat. Anda dapat mulai dengan sesuatu seperti SELinux di GNU / Linux dan mengaturnya untuk Penegakan, dan kemudian menyesuaikan kebijakan dengan kebutuhan yang tepat dari perangkat lunak produksi, memungkinkan akun-akun itu secara tepat (dan hanya) izin yang mereka butuhkan untuk file yang mereka butuhkan.
Jika Anda akan memiliki kata sandi khusus sistem, dan kontrol versi untuk file konfigurasi, Anda benar-benar ingin menghindari kemungkinan kesalahan memiliki kata sandi plaintext yang secara keliru dikomit ke kontrol versi, karena mungkin sulit untuk mengeluarkan kata sandi yang bocor dari Cache VCS. Variabel lingkungan adalah salah satu dari beberapa opsi yang layak untuk itu. Yang lain adalah prompt kata sandi ketika program dijalankan, tetapi kemudian me-reboot mesin dan mengembalikan status operasional adalah upaya manual dan tidak dapat dilakukan secara mandiri, jadi ada kemudahan vs keamanan lagi.
Pastikan Anda memiliki spesialis jaringan untuk menangani izin firewall, untuk meminimalkan paparan Anda terhadap serangan melalui jaringan. Audit (uji penetrasi serta papan tulis menguji kode) perangkat lunak apa pun yang berinteraksi dengan sistem eksternal, terutama Internet publik. "Antarmuka" tidak hanya mencakup koneksi jaringan langsung, tetapi juga membaca atau menulis data "tidak tepercaya" (data yang byte-bytenya berasal dari luar RAM / disk / CPU dari server aman).
Ini bukan daftar lengkap, tetapi terutama poin 4 mungkin relevan bagi Anda, meskipun jika Anda tidak melakukan setidaknya langkah 1 hingga 3, pertimbangan poin 4 dan poin 5 tidak akan banyak membantu Anda, karena Anda sistem tidak aman pada tingkat yang cukup mendasar.
sumber
Melewati kata sandi dalam variabel lingkungan sama amannya dengan membuat program membacanya dari file. Hanya proses yang berjalan karena pengguna yang sama dapat membaca lingkungan proses , dan proses ini diperbolehkan untuk membaca file yang sama.
Perhatikan bahwa ini berbeda dari melewatkan kata sandi pada baris perintah. Argumen baris perintah dapat dibaca oleh semua proses yang berjalan pada mesin yang sama (pembatasan langkah-langkah pengerasan), bukan hanya proses yang berjalan sebagai pengguna yang sama.
Jika Anda melewatkan variabel ke lingkungan, waspadalah jika program meluncurkan program lain. Program-program lain akan mewarisi lingkungan orang tua mereka. Jadi jangan lakukan ini jika Anda takut bahwa program lain mungkin secara tidak sengaja membocorkan isi lingkungan mereka.
Kelemahan dalam skenario Anda adalah "membuat variabel lingkungan yang sesuai ketika sistem server diatur". Variabel lingkungan adalah properti dinamis dari suatu proses. Anda tidak dapat membuatnya ketika mengatur sistem, tidak jika dengan mengatur Anda berarti sesuatu yang selamat dari reboot. Apa yang Anda maksud adalah mungkin bahwa administrator mengatur agar variabel ini hadir di lingkungan ketika pengguna tertentu masuk. Ini dilakukan melalui file konfigurasi (biasanya
~/.pam_environment
atau~/.profile
atau file dibaca dari~/.profile
). Jadi solusi ini tidak memindahkan kata sandi dari file konfigurasi.Mengatur berbagai hal sehingga kata sandi ada dalam lingkungan waktu masuk pengguna bukanlah ide yang baik. Ini berarti bahwa setiap proses yang berjalan sebagai pengguna akan memiliki rahasia, sehingga rentan terhadap kebocoran di mana saja.
Kata sandi harus dimasukkan ke dalam file yang terpisah dari file konfigurasi yang berada di bawah kontrol versi dan dari mekanisme penyebaran normal. Tidak apa-apa untuk meletakkan kata sandi di lingkungan di beberapa titik jika itu nyaman, tetapi harus dilakukan untuk sekecil mungkin set program.
sumber