Membahas AppArmor
Apa itu apparmor?
AppArmor adalah sistem Mandatory Access Control (MAC) yang membatasi program ke sumber daya yang terbatas. Batasan AppArmor disediakan melalui profil yang dimuat ke dalam kernel. AppArmor dapat diatur untuk menegakkan profil atau mengeluh ketika aturan profil dilanggar.
Untuk tutorial ini, saya akan membuat profil AppArmor untuk nano. jadi saya ingin membatasi apa yang dapat dilakukan pada sistem saya.
Apparmor profiles
Profil AppArmor adalah file teks sederhana. Jalur absolut serta file globbing dapat digunakan saat menentukan akses file. Sebagian besar aturan akses file menentukan jenis akses yang diizinkan: 'r' (baca), 'w' (tulis), 'm' (peta memori sebagai executable), 'k' (penguncian file), 'l' (pembuatan tautan keras), dan 'ix' untuk menjalankan program lain dengan kebijakan pewarisan program baru. Aturan akses file lain juga ada seperti 'Px' (jalankan di bawah profil lain, setelah membersihkan lingkungan), 'Cx' (jalankan di bawah profil anak, setelah membersihkan lingkungan), dan 'Ux' (jalankan tanpa batas, setelah membersihkan lingkungan).
Apparmor mendukung kontrol akses untuk :
- Files
- Kemampuan linux
- Network
- Mount, Umount, dan Remount
- Pivot_root
- Ptrace
- Signal
- DBus
- Unix domain socket
Sebagai tambahan :
- Variabel (misalnya @{HOME} dapat didefinisikan dan dimanipulasi di luar profil (#include <tunables/global> untuk @{PROC} dan @{HOME})
- aturan penolakan eksplisit didukung untuk mengesampingkan aturan izinkan (misalnya akses ke @{HOME}/bin/bad.sh ditolak dengan audit karena penolakan audit @{HOME}/bin/** mrwkl, meskipun akses umum ke @{HOME } diizinkan dengan @{HOME}/** rw,)
- include file didukung untuk memudahkan pengembangan dan menyederhanakan profil (yaitu #include <abstractions/base>, #include <abstractions/nameservice>, #include <abstractions/user-tmp>)
Untuk memulai, mari instal beberapa utilitas AppArmor yang berguna dan aplikasi yang ingin kita batasi:
root@ubuntu-lab:~# apt -y install apparmor-easyprof apparmor-notify apparmor-utils
Basic membuat profile apparmor
Cara termudah untuk memulai adalah dengan membuat profil kerangka, mengatur AppArmor ke mode keluhan untuk target Anda dan kemudian menggunakan alat aa-logprof untuk mengevaluasi penolakan.
Saya akan menggunakan aa-easyprof untuk menghasilkan kebijakan kerangka; mari kita lihat apa yang dihasilkannya (pastikan untuk menentukan jalur absolut ke aplikasi):
root@ubuntu-lab:~# aa-easyprof /usr/bin/certspotter
# vim:syntax=apparmor
# AppArmor policy for certspotter
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/usr/bin/certspotter" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
Terlihat cukup mendasar, jadi mari kita tuliskan output itu ke file profil (nama file bisa apa saja; itu adalah isi file yang penting):
root@ubuntu-lab:~# aa-easyprof /usr/bin/nano > usr.bin.nano
root@ubuntu-lab:~# mv usr.bin.nano /etc/apparmor.d
dan kemudian memuat profil ke dalam kernel:
root@ubuntu-lab:~# apparmor_parser -r /etc/apparmor.d/usr.bin.nano
Mencoba menjalankan nano, menghasilkan crash (aman) langsung.
root@ubuntu-lab:/# nano
Error reading /etc/nanorc: Permission denied
AppArmor Denials and Complain Mode
Penolakan AppArmor dicatat ke /var/log/syslog (atau /var/log/audit/audit.log untuk pelanggaran kebijakan non-DBus jika auditd diinstal). Kernel akan menilai batas penolakan AppArmor yang dapat menyebabkan masalah saat membuat profil. Anda dapat menghindari ini dengan menginstal auditd atau dengan menyesuaikan pembatasan kecepatan di kernel:
root@ubuntu-lab:/# sysctl -w kernel.printk_ratelimit=0
kernel.printk_ratelimit = 0
Cara lain untuk melihat penolakan AppArmor adalah dengan menggunakan alat aa-notify. aa-notify adalah program yang sangat sederhana yang akan melaporkan penolakan AppArmor baru dengan melihat /var/log/syslog (atau /var/log/audit/audit.log jika auditd diinstal). Sebagai contoh,
root@ubuntu-lab:/# /usr/bin/aa-notify -s 1 -v
akan menampilkan penolakan AppArmor dalam hari terakhir.
Saya akan mengambil rute mudah untuk mengembangkan profil ini dan menggunakan alat aa-logprof untuk mengevaluasi entri log yang dibuat AppArmor dalam mode keluhan, jadi mari atur profil AppArmor untuk nano ke mode keluhan untuk kebijakan ini sehingga kami dapat melihat apa yang terjadi.
root@ubuntu-lab:/# sudo aa-complain nano
Setting /usr/bin/nano to complain mode.
Sekarang mari kita coba menjalankan nano lagi:
nano
Itu segera mulai menghasilkan entri AppArmor di log yang terlihat seperti ini:
Sep 29 07:49:43 ubuntu-lab kernel: [169125.342145] audit: type=1400 audit(1664437783.515:168): apparmor="ALLOWED" operation="mknod" profile="/usr/bin/nano" name="/1" pid=87794 comm="nano" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
Sep 29 07:49:43 ubuntu-lab kernel: [169125.342406] audit: type=1400 audit(1664437783.515:169): apparmor="ALLOWED" operation="open" profile="/usr/bin/nano" name="/1" pid=87794 comm="nano" requested_mask="wc" denied_mask="wc" fsuid=0 ouid=0
Menggunakan aa-logprof untuk Memperbaiki Profil
Alat aa-logprof akan mengurai pesan AppArmor dan menyarankan aturan kebijakan yang akan mengizinkan nano untuk berjalan di bawah kurungan.
root@ubuntu-lab:/# aa-logprof
Reading log entries from /var/log/syslog.
Updating AppArmor profiles in /etc/apparmor.d.
Complain-mode changes:
Profile: /usr/bin/nano
Path: /etc/nanorc
New Mode: owner r
Severity: unknown
[1 - owner /etc/nanorc r,]
(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish
Adding owner /etc/nanorc r, to profile.
Profile: /usr/bin/nano
Path: /usr/share/nano/
New Mode: owner r
Severity: unknown
[1 - owner /usr/share/nano/ r,]
(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish
= Changed Local Profiles =
The following local profiles were changed. Would you like to save them?
[1 - /usr/bin/nano]
(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t
Writing updated profile for /usr/bin/nano.
Komentar
Posting Komentar