Saya menjalankan daemon perangkat lunak yang memerlukan tindakan tertentu untuk memasukkan frasa sandi untuk membuka kunci beberapa fitur yang terlihat seperti itu:
$ darkcoind masternode start <mypassphrase>
Sekarang saya punya beberapa masalah keamanan pada server debian tanpa kepala saya.
Setiap kali saya mencari riwayat bash saya misalnya dengan Ctrl+R
saya dapat melihat kata sandi yang sangat kuat ini. Sekarang saya membayangkan server saya terganggu dan beberapa penyusup memiliki akses shell dan dapat dengan mudah Ctrl+R
menemukan frasa sandi saya dalam sejarah.
Apakah ada cara untuk memasukkan frasa sandi tanpa harus ditampilkan dalam bash history ps
,, /proc
atau di mana saja?
Pembaruan 1 : Melewati kata sandi tanpa ke daemon melempar kesalahan. Ini bukan pilihan.
Pembaruan 2 : Jangan bilang saya untuk menghapus perangkat lunak atau petunjuk bermanfaat lainnya seperti menggantung pengembang. Saya tahu ini bukan contoh praktik terbaik tetapi perangkat lunak ini didasarkan pada bitcoin dan semua klien berbasis bitcoin adalah semacam server json rpc yang mendengarkan perintah ini dan masalah keamanannya yang diketahui masih dibahas ( a , b , c ) .
Pembaruan 3 : Daemon sudah mulai dan berjalan dengan perintah
$ darkcoind -daemon
Melakukan ps
hanya menunjukkan perintah startup.
$ ps aux | grep darkcoin
user 12337 0.0 0.0 10916 1084 pts/4 S+ 09:19 0:00 grep darkcoin
user 21626 0.6 0.3 1849716 130292 ? SLl May02 6:48 darkcoind -daemon
Jadi melewati perintah dengan frasa sandi tidak muncul ps
atau tidak ada /proc
sama sekali.
$ darkcoind masternode start <mypassphrase>
$ ps aux | grep darkcoin
user 12929 0.0 0.0 10916 1088 pts/4 S+ 09:23 0:00 grep darkcoin
user 21626 0.6 0.3 1849716 130292 ? SLl May02 6:49 darkcoind -daemon
Ini meninggalkan pertanyaan di mana sejarah muncul? Hanya di .bash_history
?
sumber
Jawaban:
Sungguh, ini harus diperbaiki dalam aplikasi itu sendiri. Dan aplikasi semacam itu harus open source, sehingga memperbaiki masalah di aplikasi itu sendiri harus menjadi pilihan. Aplikasi terkait keamanan yang membuat kesalahan semacam ini mungkin membuat kesalahan lain juga, jadi saya tidak akan mempercayainya.
Interposer sederhana
Tapi Anda meminta cara yang berbeda, jadi ini dia:
Kompilasi ini dengan
kemudian jalankan proses Anda dengan
Pustaka interposer akan menjalankan kode ini sebelum
main
fungsi dari aplikasi Anda dieksekusi. Ini akan menggantikan argumen baris perintah terakhir dengan kata sandi yang sebenarnya dalam panggilan ke utama. Baris perintah seperti yang dicetak/proc/*/cmdline
(dan karena itu terlihat oleh alat sepertips
) masih akan berisi argumen palsu. Tentunya Anda harus membuat kode sumber dan pustaka yang Anda kompilasi darinya hanya dapat dibaca oleh Anda sendiri, jadi sebaiknya operasikan dichmod 0700
direktori. Dan karena kata sandi tersebut bukan bagian dari permintaan perintah, bash history Anda juga aman.Interposer yang lebih maju
Jika Anda ingin melakukan sesuatu yang lebih rumit, Anda harus ingat bahwa
__libc_start_main
dieksekusi sebelum pustaka runtime telah diinisialisasi dengan benar. Jadi saya sarankan menghindari panggilan fungsi kecuali mereka benar-benar penting. Jika Anda ingin dapat memanggil fungsi ke isi hati Anda, pastikan Anda melakukannya tepat sebelummain
itu sendiri dipanggil, setelah semua inisialisasi dilakukan. Untuk contoh berikut ini saya harus berterima kasih kepada Grubermensch yang menunjukkan cara menyembunyikan kata sandi yang dilewatkan sebagai argumen baris perintah yanggetpass
menarik perhatian saya.Ini meminta kata sandi, sehingga Anda tidak lagi harus menjaga perpustakaan interposer rahasia. Argumen placeholder digunakan kembali sebagai kata sandi, jadi aktifkan seperti ini
Alternatif lain akan membaca kata sandi dari deskriptor file (seperti mis.
gpg --passphrase-fd
Lakukan), atau darix11-ssh-askpass
, atau apa pun.sumber
strings
kerentanan. Lihat SO: Sembunyikan input kata sandi pada terminal .__libc_start_main
.Bukan hanya sejarah. Ini akan muncul dalam output ps juga.
Siapa pun yang menulis perangkat lunak itu harus digantung, ditarik, dan dipotong-potong. Ini mutlak TIDAK untuk memasok kata sandi pada command-line terlepas dari perangkat lunak apa pun itu.
Untuk proses daemon bahkan lebih LEBIH tak termaafkan ...
Selain rm -f pada perangkat lunak itu sendiri saya tidak tahu solusi apa pun untuk ini. Jujur: Temukan perangkat lunak lain untuk menyelesaikan pekerjaan. Jangan gunakan sampah seperti itu.
sumber
rm -f
sekarang.ps
. Jadi sampai dev dapat memperbaikinya, dia menyarankan menggunakan sesuatu yang lain.ps
, jadi itu tidak lebih baik daripadarm
solusinya.Ini akan menghapus
ps
output.MENJADI SANGAT Sadar : Ini bisa merusak aplikasi. Anda sepatutnya diperingatkan bahwa di sini ada naga.
Sekarang Anda telah diberi tahu tentang peringatan yang mengerikan ini. Ini akan menghapus output yang ditampilkan di
ps
. Itu tidak akan menghapus riwayat Anda, juga tidak akan menghapus riwayat pekerjaan bash (seperti menjalankan proses sepertimyprocess myargs &
). Tetapips
tidak akan lagi menunjukkan argumen.Meminta program dengan menyimpannya,
chmod +x
itu. Kemudian melakukan./whatever <pidoftarget>
Jika ini berhasil, itu tidak akan menghasilkan output. Jika gagal, itu akan mengeluh tentang sesuatu dan berhenti.sumber
gdb
dapat memodifikasi memori dari proses yang sedang berjalan (dengan presisi bedah jauh lebih banyak daripada yang mungkin saya tambahkan).Bisakah Anda meneruskan argumen dari file, hanya dapat diakses oleh root atau pengguna yang diperlukan?
Ini adalah TIDAK-tidak-besar untuk mengetikkan kata sandi di konsol, tapi jalan terakhir ... mulai baris Anda dengan spasi sehingga tidak muncul dalam sejarah.
sumber
export HISTCONTROL=ignoreboth
mengabaikan duplikat dan baris dengan ruang terkemuka untuk masuk ke dalam sejarah. Tambahkan ke .bashrc atau .bash_profile Anda.Mungkin ini berhasil (?):
sumber
darkcoind masternode start `head -1`
, jika Anda ingin memasukkan kata sandi secara manual.ps
dan utilitas serupa..bash_history
ke kata sandi plaintext memberipassword.txt
Anda apa, tepatnya?Sayangnya, jika
darkcoind
perintah Anda mengharapkan kata sandi sebagai argumen baris perintah, maka itu akan diekspos melalui utilitas sepertips
. Satu-satunya solusi nyata adalah mendidik pengembang .Meskipun
ps
paparan mungkin tidak dapat dihindari, Anda setidaknya bisa menjaga agar kata sandi tidak ditulis dalam file histori shell.File riwayat hanya boleh merekam
xargs darkcoind masternode start
, bukan kata sandi.sumber
ignorespace
dalam$HISTCONTROL
, dan kemudian Anda dapat mencegah setiap perintah dari pergi ke dalam sejarah shell dengan awalan perintah dengan spasi.Seperti yang telah dinyatakan orang lain, lihat ke kontrol riwayat shell Anda untuk menyembunyikan informasi dari history.
Tapi satu hal yang sepertinya belum disarankan adalah untuk me
/proc
- mount denganhidepid
parameter. Coba ubah/proc
baris Anda/etc/fstab
untuk disertakanhidepid
, seperti ini:sumber
Anda dapat menyimpan kata sandi dari riwayat shell Anda dengan mengeksekusi perintah dari proses shell baru, yang kemudian segera Anda akhiri. Sebagai contoh:
Pastikan
sh
dikonfigurasi untuk tidak menyimpan riwayatnya dalam file.Tentu saja ini tidak mengatasi masalah lain, seperti kata sandi yang terlihat
ps
. Saya percaya, ada cara-cara bagidarkcoind
program itu sendiri untuk menyembunyikan informasips
, tetapi itu hanya memperpendek jendela kerentanan.sumber
ps
dan utilitas serupa.Untuk Bitcoin, jawaban pengembang resmi adalah dengan menggunakan pembungkus python yang disediakan di
contrib/bitrpc/bitrpc.py
( github ):dan:
Sumber: # 2318
Buka dompet:
Ubah frasa sandi:
https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc
Untuk darkcoin berfungsi sebagai anlog:
https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc
sumber