Jumat, 21 Januari 2011

Registry Mania : Permission: Lebih jauh !

Kita telah ngobrol sedikit tentang masalah permission ini. Untuk melengkapinya berikut ini adalah daftar permission spesifik khusus untuk registry.  Ingat ! kita  sedang bermain-main dengan registry.  Jadi fokusnya tentu saja ke registry.

Tabel permission spesifik untuk registry
==========================================
Permission                                                  kode
==========================================
KEY_QUERY_VALUE                        (0x00000001)
KEY_SET_VALUE                              (0x00000002)
KEY_CREATE_SUB_KEY                 (0x00000004)
KEY_ENUMERATE_SUB_KEYS      (0x00000008)
KEY_NOTIFY                                     (0x00000010)
KEY_CREATE_LINK                          (0x00000020)
==========================================
Sebagai contoh, jika kita ingin memberi seorang pemakai permission untuk membuat suatu key/subkey registry  baru, maka yang dilakukan adalah mengedit DACL dan membuat suatu ACE yang memberi permission  KEY_CREATE_SUB_KEY.  Bingung ‘kan dengan keterangan ini ?  tidak apa-apa memang seharusnya begitu.  … :)

Melengkapi pemahaman permission, berikut ini adalah permissions standar  :

Tabel permission standar
==========================================
Permission                                 kode
==========================================
DELETE                              (0x00010000L)
READ_CONTROL             (0x00020000L)
WRITE_DAC                      (0x00040000L)
WRITE_OWNER                (0x00080000L)
SYNCHRONIZE                (0x00100000L)
GENERIC_READ               (0x80000000L)
GENERIC_WRITE             (0x40000000L)
GENERIC_EXECUTE        (0x20000000L)
GENERIC_ALL                  (0x10000000L)
==========================================

Arti dari permission standar di atas adalah sebagai berikut :

•    READ_CONTROL ("Read Permissions") mengendalikan apakah kita  dapat membaca, owner dan DACL di deskriptor keamanan (security descriptor) dari suatu obyek.   Jika kita tidak mempunyai permission ini, kita bahkan tidak akan pernah dapat melihat permission apa saja yang kita punyai !

•    WRITE_DAC ("Write Permissions") dan WRITE_OWNER ("Take Ownership") untuk mengetahui apakah kita diijinkan untuk mengubah DACL suatu obyek atau melakukan take ownership dari obyek dengan mengubah owner SID menjadi SID kita

•    SYNCHRONIZE  lebih kurang berarti : apakah kita dapat menunggu suatu object.  Ini yang sering dipakai dengan  synchronization objects seperti mutex atau  semaphore.  Dengan membatasi SYNCHRONIZE access, maka kita dapat mencegah untrusted user dari mengambil mutex yang dipakai oleh program dan mengacaukannya ! (dan jangan tanya saya bagaimana caranya ! saya tidak paham benar.  Ini pembicaraan yang paling saya hindari…? karena tentu rumit dan  membuat pening kepala, ya?) 

Oh iya…!  Coba bandingkan jajaran numerik dari permission standar dengan permission spesifik untuk key registry.  Ternyata permission standar selalu di upper word dari 32 bit mask, sedangkan permission spesifik  didefinisikan dalam lower word.   Jangan tanya saya apa itu upper word atau lower word !  jika Anda tidak mengerti ini, berarti harus belajar dulu masalah heksadesimal !
Setiap class object diijinkan mendefinisikan sampai 16 spesifik permission, dan harus dalam lower word. Mengapa? Ini dilakukan agar permission yang dibuat tidak akan mengalami konflik dengan permissions standar yang telah didefinisikan Microsoft  untuk semua obyek.
Sebagai contoh, jika ingin memberi permission pada pemakai yang bernama Kiki, untuk membaca key registry.  Maka yang dilakukan adalah melakukan kombinasi sebagai berikut :
•    KEY_QUERY_VALUE
•    KEY_ENUMERATE_SUB_KEYS
•    KEY_NOTIFY
•    READ_CONTROL

Dari kombinasi tersebut jika dijumlahkan semua values, maka akan dihasilkan angka : 0x00020019.  Kok tahu ?  iya dong…. perinciannya sebagai berikut :

KEY_QUERY_VALUE                     (0x00000001)
KEY_ENUMERATE_SUB_KEYS     (0x00000008)
KEY_NOTIFY                                  (0x00000010)
                                                        ----------------- +
                                                       (0x00000019)   lower word
READ_CONTROL                            (0x00020000L) upper word
                                                          ------------------
                                                        (0x00020019)

Angka 0x00020019  inilah yang dipakai sebagai access mask yang kita pasangkan di ACE, untuk mengijinkan Kiki membaca key registry. 

Contoh lain :
Misalkan terdapat permission dengan bunyi : 0x00130000.    Jika dilihat dari posisi angkanya dapat ditarik kesimpulan bahwa ia hanya berisi permission standar. Jika dijabarkan adalah sebagai berikut :

DELETE                         (0x00010000L)
READ_CONTROL           (0x00020000L)
SYNCHRONIZE              (0x00100000L)
                                     ------------------- +
                                      (0x00130000L)

Berarti permission adalah permission untuk DELETE, READ_CONTROL, dan SYNCHRONIZE.
Jika Anda tidak paham dengan pembahasan ini, tidak apa-apa.  Jangan takut.  Tidak akan berpengaruh banyak pada bahasan registry yang sedang kita tekuni.  Hanya saja Anda kehilangan kesempatan untuk menikmati indahnya permainan angka heksadesimal ! 


Note : [Remake BDRW:MKWXP-15]
Tri Amperiyanto

3 komentar:

  1. Pokok'e Pak Tri ini is the best!!!

    BalasHapus
  2. waduh... ini siapa ya ? bikin kepala saya jadi membesar... hehehe :) thanks anyway...

    BalasHapus
  3. wah...
    bukan maen !
    thanks bAANGET nii infonya..
    hehe..

    BalasHapus