Bagikan ke: Twitter | Facebook | LinkedIn
Daftar isi
Pendahuluan
OpenBSD merupakan sebuah sistem operasi seperti UNIX yang di buat dan dipimpin oleh Theo de Raadt, Theo de Raadt adalah seorang software enggineer dan selain proyek OpenBSD dia juga membuat beberapa proyek seperti OpenSSH, OpenNTPD, dll.
salah satu tujuan OpenBSD adalah menjadi sistem operasi paling aman nomor 1, dan OpenBSD juga membuat sebuah fungsi mitigasi yaitu pledge dan unveil yang digunakan untuk membatasi beberapa kernel system call pada sebuah program.
dalam postingan kali ini saya akan mencoba menggunakan fungsi unveil dan pledge.
unveil
unveil adalah sebuah fungsi yang digunakan untuk membatasi filesystem/file/folder apa yang dapat dilihat/dimodifikasi oleh program, sebagai contoh firefox adalah sebuah program yang digunakan untuk membuka website di internet, program ini hanya dibolehkan melihat dan memodifikasi folder configurasinya dan folder Download tidak kurang dan tidak lebih.
sinopsis unveil dalam manual ialah mengambil path dan izin, izin dan path disini berupa const char
- izin r membuat izin path menjadi bisa dibaca
- izin w membuat izin path menjadi bisa ditulis
- izin x membuat izin path menjadi bisa mengeksekusi file
- izin c membuat izin path menjadi bisa menghapus dan membuat file/folder
sebagai contoh, kali ini saya akan membuat program sederhana
yang akan mengakses sebuah file dalam sebuah folder yang
sudah ditentukan, file kita bernama unveil.txt
berisi
Hello Unveil
dan ada di dalam folder /home/aerphanas/test/
.
seperti inilah kode yang saya buat :
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <err.h>
#include <fcntl.h>
int
() {
mainif (unveil("/home/aerphanas/test/", "r") == -1)
(EXIT_FAILURE, "unveil");
err
int fd = open("/home/aerphanas/test/unveil.txt", O_RDONLY);
char output[12];
if (fd < 0) err(EXIT_FAILURE, NULL);
(fd, output, sizeof(output));
read("%s\n", output);
printf(EXIT_SUCCESS);
exit}
kita menggunakan unveil izin r
pada program ini, sehingga program ini
hanya bisa mengakses dan membaca (Read Only), ketika kita mengubah
path
atau lokasi
unveil, saat fungsi open
terpanggil program
kita akan gagal di jalankan.
perlu diingat :
setelah melakukan unveil ke suatu path, kita tidak bisa menghapus unveil yang sudah diberikan, jadi berhati-hatilah menentukan path yang diinginkan.
pledge
pledge merupakan sebuah fungsi yang digunakan untuk membatasi
operasi sistem, operasi sistem yang dimaksud adalah stdio
, rpath
inet
dll, semua operasi sistem yang di support pledge bisa kalian
lihat di openbsd manual,
seperti yang sudah di jelaskan diatas pledge digunakan untuk membatasi operasi sistem, dalam kode berikut saya akan menggunakanya untuk membaca file sebelumnya
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <err.h>
#include <fcntl.h>
int
() {
mainif (unveil("/home/aerphanas/test/", "r") == -1)
(EXIT_FAILURE, "unveil");
err
if (pledge("stdio rpath", NULL))
(EXIT_FAILURE, "pledge");
err
int fd = open("/home/aerphanas/test/unveil.txt", O_RDONLY);
char output[12];
if (fd < 0) err(EXIT_FAILURE, NULL);
(fd, output, sizeof(output));
read("%s\n", output);
printf(EXIT_SUCCESS);
exit}
seperti kode sebelumnya saat saya mencoba unveil
saya hanya menambah baris berikut
if (pledge("stdio rpath", NULL))
(EXIT_FAILURE, "pledge"); err
saya memakai stdio
karena saya akan melakukan pencetakan isi
dari file ke console
atau stdout
, lalu saya menggunakan rpath
dikarenakan saya hanya akan membaca isi file.
fitur ini saya rasa sangat bagus, namun saat ini yang saya tau hanya openbsd saja yang menggunakan fitur ini, di kedepanya saya harap beberapa sistem operasi lain memiliki fungsi ini.