Metode lain, yang saya temukan beberapa waktu lalu di posting blog ini oleh Brendan Gregg adalah menggunakan kemampuan pelacak - mampu .
Di bawah ini adalah contoh keluaran:
$ sudo /usr/share/bcc/tools/capable
TIME UID PID COMM CAP NAME AUDIT
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 1
11:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 1
11:32:02 0 1421 timesync 25 CAP_SYS_TIME 1
11:32:05 1000 2469 sudo 7 CAP_SETUID 1
11:32:05 0 2469 sudo 6 CAP_SETGID 1
Ini memiliki keuntungan signifikan dari pemeriksaan kemampuan perekaman yang dilakukan oleh kernel untuk proses tertentu. Ini memungkinkan untuk membuat profil aplikasi terhadap kemampuan yang sebenarnya diperlukan, mis. untuk mempersempit hak istimewa dan menjalankannya sebagai pengguna yang tidak memiliki hak istimewa.
Sementara pscap memungkinkan untuk membuat daftar yang efektif kapabilitas semua proses yang berjalan, ia tidak menawarkan metode yang andal untuk memeriksa kapabilitas mana yang sebenarnya dibutuhkan oleh proses, karena:
- Suatu proses mungkin memiliki kapabilitas X dalam set yang diizinkan dan hanya menaikkannya ke set efektif untuk waktu singkat untuk melakukan operasi istimewa.
- Suatu proses dapat dimulai dengan rangkaian kemampuan yang lebih luas, melakukan inisialisasi yang memerlukan hak istimewa yang lebih tinggi, dan menghentikan beberapa (atau semua) kemampuan (mis. ping membuka soket mentah).
- Ini hanya berfungsi untuk proses yang sudah berjalan dengan cara berbasis kemampuan. Bagaimana jika Anda harus menentukan set kemampuan minimal yang diperlukan untuk aplikasi yang baru Anda kembangkan?
- Itu tidak memungkinkan untuk mengkorelasikan pemeriksaan hak istimewa yang dibuat untuk aplikasi dengan operasi yang dilakukannya, dengan kemampuan Anda mendapatkan stempel waktu untuk pemeriksaan tunggal.
Sumber untuk mampu tersedia di github. Petunjuk penginstalan untuk BCC (termasuk mampu ) tersedia di sini. Untuk keterangan lebih lanjut, silakan merujuk ke posting blog yang disebutkan di awal, harap perhatikan juga bahwa yang mampu membutuhkan kernel 4.4+, alternatif untuk kernel lama juga tersedia di posting blog.
Catatan:Saya bukan penulisnya, saya juga tidak berafiliasi dengan pengembang alat dengan cara apa pun. Saya hanya ingin membawanya ke audiens yang lebih luas, karena saya secara pribadi telah menggunakannya untuk mengembangkan profil kemampuan untuk aplikasi pemantauan kompleks yang sebelumnya memerlukan hak akses root penuh untuk dijalankan, dan menemukan bahwa pelacak ini sangat membantu.
Ternyata lebih mudah dari yang diharapkan. Instal libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) dan gunakan pscap
.
Di Ubuntu 16.04, dapat diinstal dengan:
sudo apt-get install libcap-ng-utils
Contoh kutipan keluaran:
ppid pid name command capabilities
1 468 root systemd-journal chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read
1 480 root lvmetad full
1 492 root systemd-udevd full
1 1040 root rpc.idmapd full
1 1062 root rpc.gssd full
1 1184 messagebus dbus-daemon audit_write +
1 1209 root NetworkManager dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write
Berdasarkan pembaruan libcap2 terbaru
1:(Opsi pendek):getpcaps
Deskripsi:
Dari sini:
getpcaps menampilkan kemampuan pada proses yang ditunjukkan oleh nilai pid yang diberikan pada baris perintah.
Contoh:
$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i
2:(Opsi yang sedikit lebih panjang):/proc status dan capsh
Deskripsi:
proc adalah proses informasi pseudo-filesystem atau dengan kata lain - direktori tempat Anda dapat melihat informasi tentang semua proses.
Tentang capsh:
Dukungan dan penggunaan kemampuan Linux dapat dieksplorasi dan dibatasi dengan alat ini. Alat ini menyediakan pembungkus praktis untuk beberapa jenis pengujian kemampuan dan pembuatan lingkungan.
Ini juga menyediakan beberapa fitur debug yang berguna untuk meringkas status kemampuan.
Contoh:
$ cat /proc/<PID>/status | grep Cap
Dan Anda akan mendapatkan (pada sebagian besar sistem):
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
Gunakan capsh
utilitas untuk mendekode dari angka heksadesimal ke dalam nama kemampuan:
capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
(*) Anda dapat mengunduh capsh
dengan:sudo apt-get install git libpcap-dev
.