Bagikan melalui


Daftar Access Control

Daftar kontrol akses (ACL) adalah daftar ACL yang dibuat oleh sistem operasi untuk mengontrol perilaku keamanan yang terkait dengan objek tertentu (dilindungi) dari beberapa jenis. Di Windows ada dua jenis ACL:

  • ACL Diskresi--ini adalah daftar ace nol atau lebih yang menjelaskan hak akses untuk objek yang dilindungi. Ini diskresi karena akses yang diberikan adalah atas kebijakan pemilik atau pengguna mana pun dengan hak yang sesuai.

  • ACL Sistem--ini adalah daftar ace nol atau lebih yang menjelaskan kebijakan audit dan alarm untuk objek yang dilindungi.

Istilah "diskresi" mengacu pada diferensiasi antara kontrol wajib dan diskresi. Dalam lingkungan yang menggunakan kontrol wajib, pemilik objek mungkin tidak dapat memberikan akses ke objek. Dalam lingkungan diskresi, seperti Windows, pemilik objek diizinkan untuk memberikan akses tersebut. Kontrol wajib biasanya dikaitkan dengan lingkungan keamanan yang sangat ketat, seperti yang menggunakan keamanan kompartemen, di mana sistem harus mencegah pengungkapan informasi sensitif antara pengguna pada sistem yang sama.

Driver yang membuat ACL akan mengikuti beberapa langkah utama:

  1. Alokasikan penyimpanan untuk ACL.

  2. Menginisialisasi ACL.

  3. Tambahkan aCE nol (atau lebih) ke ACL.

Contoh kode berikut menunjukkan cara membuat ACL:

    dacl = ExAllocatePool(PagedPool, PAGE_SIZE);
    if (!dacl) {
        return;
    }
    status = RtlCreateAcl(dacl, PAGE_SIZE, ACL_REVISION);
    if (!NT_SUCCESS(status)) {
        ExFreePool(dacl);
        return;
    }

Fragmen kode sebelumnya membuat ACL kosong. Sampel kode mengalokasikan sejumlah besar memori, karena kita tidak tahu ukuran yang diperlukan untuk ACL.

Pada titik ini, ACL kosong karena tidak memiliki entri ACE. ACL kosong menolak akses ke siapa pun yang mencoba mengakses objek karena tidak ada entri yang memberikan akses tersebut. Fragmen kode berikut menambahkan ACE ke ACL ini:

    status = RtlAddAccessAllowedAce(dacl, ACL_REVISION,  FILE_ALL_ACCESS, SeExports->SeWorldSid);
    if (!NT_SUCCESS(status)) {
        ExFreePool(dacl);
        return;
    }

Entri ini sekarang akan memberikan akses ke entitas apa pun yang mengakses objek. Ini adalah tujuan akses dunia SID (SeWorldSid), yang biasanya direpresentasikan sebagai akses "Semua Orang" di utilitas sistem Windows lainnya.

Perhatikan bahwa saat membuat ACL, penting untuk memesan entri ACE yang ditolak akses di awal ACL, lalu mengakses entri ACE yang diizinkan di akhir ACL. Ini karena ketika monitor referensi keamanan melakukan evaluasi ACL, ia akan memberikan akses jika menemukan ACE yang memberikan akses, sebelum menemukan ACE yang ditolak. Perilaku ini di dokumentasikan dengan baik di Microsoft Windows SDK, tetapi berkaitan dengan mekanisme tertentu yang digunakan pemantau referensi keamanan untuk menentukan apakah akses harus diberikan atau ditolak.