Bisakah swapping dinonaktifkan pada level aplikasi?

10

Saat ini saya menggunakan thunderbird dengan gnupg untuk membaca email terenkripsi. Jika saya memahami perilaku swapping dengan benar, halaman memori yang berisi email yang didekripsi mungkin ditukar dan meninggalkan jejak pada hard disk yang secara teori nantinya dapat dipulihkan secara forensik.

Meskipun tentu saja mungkin untuk hanya menggunakan swapfile terenkripsi atau menonaktifkan swapping secara global selama menggunakan file sensitif, itu berdampak pada kinerja, mungkin dilupakan dan membutuhkan hak akses root.

Apakah mungkin untuk menandai file atau program tertentu agar tidak ditukar? Bahkan tanpa akses root? Bisakah seseorang menulis aplikasi yang dapat didistribusikan ke pengguna yang secara teknis naif dan yang isi memorinya tidak pernah ditukar ke disk?

pengguna54114
sumber
2
Terkait dasarnya Anda akan membuat cgroup, selaras swappiness sehingga tidak akan pernah swap keluar, dan cgexecthunderbird ke dalamnya. Anda masih memerlukan akses root, tetapi itu adalah resolusi tingkat admin. Jika Anda mengembangkan aplikasi Anda sendiri, Anda akan menggunakan mlock .
Bratchley
1
GPG mungkin sudah menelepon mlock, Anda harus memeriksa.
Steve Wills
Terima kasih! Saya belum tahu tentang cgroup, mereka terdengar menarik.
user54114
1
@SteveWills Tidak. Tidak yakin tentang thunderbird, yang menampilkan hasil dekripsi.
user54114
@Bratchley, dapatkah Anda menjawabnya? Saya tidak tahu Anda bisa mengatur swappiness untuk cgroup, kedengarannya menarik.
frostschutz

Jawaban:

9

Dalam komentar, saya menyarankan Anda membuat cgroup, atur memory.swappinesske nol (untuk meminimalkan swapping) dan jalankan aplikasi Anda di dalamnya. Jika Anda melakukan itu, aplikasi Anda mungkin tidak akan bertukar kecuali Anda kehabisan memori fisik yang sangat rendah sehingga bertukar halaman untuk program-program dalam cgroup adalah satu-satunya cara untuk menyediakan cukup memori fisik.

Untuk melakukan ini di RHEL 6.5:

  • Pastikan libcgrouppaket diinstal. Ini memberi Anda akses ke alat userspace seperti cgcreatedan cgexec.

  • Mulai dan aktifkan cgconfiglayanan sehingga perubahan konfigurasi cgroup tetap ada di antara reboot. Pada RHEL layanan ini juga harus me-mount sistem file yang diperlukan di bawah /cgrouppohon.

  • Buat cgroup dengan cgcreate -g memory:thunderbird

  • Tetapkan swappiness ke nol di grup ini dengan cgset -r memory.swappiness=0 thunderbird

  • Gunakan cgsnapshot -s > /etc/cgconfig.confuntuk menyimpan konfigurasi persisten yang diperbarui untuk cgconfiglayanan (semua perubahan hingga kini telah menjadi perubahan runtime. Anda mungkin ingin menyimpan file konfigurasi default di suatu tempat dan memberikannya sekali lagi sebelum menjadikannya konfigurasi persisten.

  • Sekarang Anda dapat menggunakan cgexecuntuk memulai aplikasi yang diinginkan dalam thunderbirdcgroup:

    [root @ xxx601 ~] # cgexec -g memory: thunderbird ls

    anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build stack test

    [root @ xxx601 ~] #

Saya tidak thunderbirdmenginstal sebenarnya kalau tidak saya akan melakukan itu. Tidak yakin mengapa format di atas kacau.

  • Salah satu alternatif untuk cgexecmemulai thunderbird dan menambahkan PID ke tasksfile untuk aplikasi. Sebagai contoh:

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tugas

    [root @ xxx601 ~] # pidof httpd

    25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109

    [root @ xxx601 ~] # echo 25926> / cgroup / memori / thunderbird / tugas

    [root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tugas

    25926

Sekali lagi, perlu disebutkan bahwa ini secara teknis tidak mencegah swapping tetapi kurang memodifikasi aplikasi itu sendiri, itu mungkin taruhan terbaik Anda. Saya baru saja menemukan memory.memsw.limit_in_bytesyang sepertinya merupakan kontrol yang lebih langsung untuk memaksa tidak ada pertukaran, tetapi saya belum bermain-main dengannya sehingga benar-benar merasa nyaman mengatakan bahwa itu memperbaiki masalah Anda sepenuhnya. Yang mengatakan, itu mungkin sesuatu yang harus diperhatikan setelah ini.


Jawaban sebenarnya adalah memiliki mlockinformasi sensitif aplikasi untuk mengatasi masalah semacam ini. Saya bersedia bertaruh aplikasi seperti Thunderbird, memang, tetapi saya tidak cukup tahu tentang internal untuk mengomentari itu.

Bratchley
sumber
Untuk menangani semua fs lain yang @Gilles menyebutkan kau ingin chrootdalam unshared --mountnamespace, juga, saya pikir. Lakukan itu dan saya berani bertaruh efek kinerja akhir akan lebih baik daripada swap terenkripsi.
mikeserv
Ya tidak diragukan lagi bahwa admin hanya dapat melakukan begitu banyak, pada akhirnya aplikasi perlu mempertimbangkan hal-hal semacam ini karena ada begitu banyak dan kontrol tingkat admin bisa menjadi sangat rumit.
Bratchley
Bisakah coredump masih diperiksa untuk mengungkapkan apa yang terjadi untuk proses sewenang-wenang bahkan jika memory.swappiness=0menurut Anda? Saya tidak tahu - tapi saya ingin tahu.
mikeserv
1
Ya tapi itu berlaku untuk hampir semua hal, termasuk aplikasi dengan mlock tetapi tidak MADV_DONTDUMP. Namun, sebagian besar waktu, orang-orang yang khawatir tentang bertukar informasi sensitif khawatir tentang laptop yang dicuri dan area swap disisir. Pada titik mereka memulai dump inti, sistem telah sepenuhnya dikompromikan.
Bratchley
5

Aplikasi dapat mengunci memori mereka sehingga tidak dapat ditukar.

mlock, munlock, mlockall, munlockall - lock and unlock memory

Saya tidak tahu cara memengaruhi ini dari luar. Aplikasi harus ditulis untuk menggunakan ini dengan sendirinya. Dengan surat mungkin sangat sulit karena biasanya juga melibatkan program eksternal untuk melihat lampiran dan semacamnya.

Juga, bahkan dengan memlock ada kemungkinan itu berakhir pada partisi swap Anda - ketika Anda menggunakan suspend to disk yang menulis semua memori ke disk, terlepas dari preferensi non-swap.

Lebih mudah untuk hanya pergi enkripsi disk penuh di tempat pertama.

frostschutz
sumber
5

Ya, aplikasi dapat mencegah sebagian memorinya tidak ditukar, dengan mlockpanggilan sistem. Namun, ini tidak terlalu berguna dalam kasus Anda.

Data rahasia tidak hanya dalam memori aplikasi. Itu berakhir di file-file sementara di berbagai tempat ( /tmp, /var/spool, dll). Thunderbird sendiri menampilkan email yang didekripsi, jadi Anda harus menguncinya juga ke RAM.

Jika Anda ingin memastikan bahwa disk Anda tidak akan berisi jejak file rahasia, Anda perlu mengenkripsi swap Anda serta semua lokasi potensial dari file sementara (khususnya, /tmpjika itu bukan tmpfs, dan sebagian besar /var, selain itu) ke direktori home Anda tentu saja).

Dampak swap terenkripsi pada kinerja kecil hingga nihil. Enkripsi jauh lebih cepat daripada disk I / O.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Tampaknya chrootdan wadah namespace dengan swapoffakan menjadi alternatif yang lebih baik untuk swap terenkripsi. Jawaban yang sangat bagus - tidak ada jawaban lain yang menyebutkan efek sistem file lainnya. Saya sendiri, saya tidak punya swap- Saya tidak memiliki komputer dengan RAM kurang dari 4GB, dan saya tidak dapat melihat manfaat menggunakannya. Penggunaannya hanya praktis untuk mesin mana pun yang terkait dengan penangguhan - dan itu mudah ditulis.
mikeserv
0

Saya hanya berpikir apakah akan lebih baik untuk memulai dengan mengubah prioritas proses aplikasi pada misalnya dengan skrip start-up memulainya dengan menggunakan prioritas tinggi nicedan renicedan dengan perubahan prioritas I / O yang dengan ionicedan kemudian melihat apa terjadi

Anda dapat 'menyenangkan' aplikasi ke tingkat prioritas tertinggi mis. -20Dengan cara itu Anda masih meninggalkan OS untuk melakukan yang terbaik dengan membuat keputusan tentang kapan harus menukar proses aplikasi.

Tetapi telah disarankan oleh orang lain jika Anda ingin lebih banyak kontrol dan rincian Anda harus mulai melihat cgroupsdan pengaturanmemory.swappiness

tdr
sumber