Apa itu Ikrar?
pledge adalah panggilan sistem.
Memanggil pledgesuatu program berarti berjanji bahwa program hanya akan menggunakan sumber daya tertentu.
Cara lain untuk mengatakan adalah membatasi operasi suatu program sesuai kebutuhannya, misalnya,
"Saya berjanji untuk tidak menggunakan port lain kecuali port 63"
"Saya berjanji untuk tidak menggunakan panggilan sistem lain kecuali lseek()dan fork()"
Bagaimana cara membuat program lebih aman?
Ini membatasi pengoperasian suatu program. Contoh:
- Anda menulis sebuah program bernama
xyzyang hanya membutuhkan readsystem-call.
- Kemudian Anda menambahkan
pledgehanya menggunakan readtetapi tidak ada yang lain.
- Kemudian pengguna jahat menemukan bahwa dalam program Anda ada kerentanan di mana seseorang dapat meminta
rootshell.
- Mengeksploitasi program Anda untuk membuka
rootshell akan menghasilkan bahwa kernel akan membunuh proses dengan SIGABRT(yang tidak dapat ditangkap / diabaikan) dan menghasilkan log (yang dapat Anda temukan dengan dmesg).
Itu terjadi karena sebelum mengeksekusi kode lain dari program Anda, pertama-tama pledgejangan menggunakan apa pun selain readpanggilan sistem. Tetapi rootshell pembukaan akan memanggil beberapa system-calls lainnya yang dilarang karena sudah berjanji untuk tidak menggunakan yang lain kecuali read.
Dimana Ikrar?
Biasanya dalam suatu program. Penggunaan dari halaman manual OpenBSD 6.5 :
#include <unistd.h>
int pledge(const char *promises, const char *execpromises);
Kode Contoh: Contoh kode catperintah dari cat.c
........
#include <unistd.h>
........
int ch;
if (pledge("stdio rpath", NULL) == -1)
err(1, "pledge");
while ((ch = getopt(argc, argv, "benstuv")) != -1)
..........