Berlindung di belakang SYSDBA :grin:

Posted by Kamarudin • 2 minute read • Comments

Beberapa waktu yang lalu sy pernah menulis bagaimana cara Menembus pertahanan database Firebird yang diproteksi menggunakan SYSDBA sebagai tamengnya :grin:, nah biar imbang sekarang kita akan bahas bagaimana langkah-langkah pembuatannya.

Tool yang digunakan juga masih sama yaitu IBExpert personal edition (free), oke langsung saja kita mulai :).

1. Persiapkan database yang akan diproteksi

Untuk contoh disini sy menggunakan database dg nama db_sample.fdb yang di tempatkan di drive C:\

Berikut langkah-langkah untuk mendaftarkan database firebird ke IBExpert.

a. Klik menu Database -> Register Database

Kemudian login menggunakan user default Firebird yaitu SYSDBA dengan password** masterkey**.

Untuk versi server tinggal disesuaikan dengan versi Firebird yang terinstall.

b. Aktifkan database sample dengan cara klik ganda node DB SAMPLE

2. Buat user baru yang akan kita jadikan sebagai pengganti SYSDBA, misal K4M4R82.

User baru ini akan kita berikan hak akses untuk menghakses semua tabel dan obej-objek lain yang diperlukan.

Berikut langkah-langkahnya :

a. Klik menu Tools -> User Management, kemudian login menggunakan user SYSDBA dan password masterkey.

b. Tambahkan user baru dengan mengklik tombol Add

Kita akan menambahkan user baru dengan nama K4M4R82 dan password rahasia.

Jika berhasil akan terlihat seperti berikut :

3. Mengatur hak akses user

IBExpert mempunyai fitur untuk mengatur hak akses user, sayangnya fitur ini tidak aktif untuk versi personal edition (free), jadi kita akan mencoba solusi lain yaitu dengan membuat stored procedure dengan nama GRANT_USER.

Berikut scriptnya :

SET TERM ^ ;

CREATE OR ALTER PROCEDURE GRANT_USER (
    user_name varchar(10))
as
declare variable table_name varchar(50);
BEGIN
  -- reset hak akses
  DELETE FROM rdb$user_privileges
  WHERE rdb$user = :user_name AND rdb$privilege IN ('I', 'U', 'D', 'S') AND rdb$user_type = 8 AND rdb$object_type = 0;

  FOR -- ambil informasi nama-nama tabel
        SELECT RDB$RELATION_NAME
        FROM RDB$RELATIONS
        WHERE RDB$SYSTEM_FLAG=0 INTO :table_name
    DO
    BEGIN

        -- INSERT
        INSERT INTO rdb$user_privileges (rdb$user, rdb$grantor, rdb$privilege, rdb$grant_option, rdb$relation_name, rdb$user_type, rdb$object_type)
        VALUES (:user_name, 'SYSDBA', 'I', 1, :table_name, 8, 0);

        -- UPDATE
        INSERT INTO rdb$user_privileges (rdb$user, rdb$grantor, rdb$privilege, rdb$grant_option, rdb$relation_name, rdb$user_type, rdb$object_type)
        VALUES (:user_name, 'SYSDBA', 'U', 1, :table_name, 8, 0);

        -- DELETE
        INSERT INTO rdb$user_privileges (rdb$user, rdb$grantor, rdb$privilege, rdb$grant_option, rdb$relation_name, rdb$user_type, rdb$object_type)
        VALUES (:user_name, 'SYSDBA', 'D', 1, :table_name, 8, 0);

        -- SELECT
        INSERT INTO rdb$user_privileges (rdb$user, rdb$grantor, rdb$privilege, rdb$grant_option, rdb$relation_name, rdb$user_type, rdb$object_type)
        VALUES (:user_name, 'SYSDBA', 'S', 1, :table_name, 8, 0);
    END

    INSERT INTO rdb$user_privileges (rdb$user, rdb$grantor, rdb$privilege, rdb$grant_option, rdb$relation_name, rdb$user_type, rdb$object_type)
    VALUES (:user_name, 'SYSDBA', 'S', 1, 'RDB$RELATIONS', 8, 0);
END
^

SET TERM ; ^

Untuk menjalankan script diatas kita akan menggunakan editor Script Executive (CTRL+F12)

4. Eksekusi stored procedure grant_user

Setelah langkah sebelumnya selesai kita tinggal panggil stored procedure grant_user seperti berikut :

EXECUTE PROCEDURE grant_user('K4M4R82')

5. Menambahkan role ‘SYSDBA’

Informasi role tersimpan di dalam tabel sistem yang bernama rdb$roles, sehingga untuk menambahkannya kita bisa menggunakan perintah INSERT yang sudah biasa kita gunakan.

INSERT INTO rdb$roles (rdb$role_name, rdb$owner_name, rdb$system_flag)
VALUES ('SYSDBA', 'K4M4R82', 0)

6. Disconnect dari database sample

7. Aktifkan kembali database sample dengan cara klik ganda node DB SAMPLE

Jika muncul peringatan berikut

berarti database kita sudah terlindungi oleh SYSDBA :)

8. Terakhir kita coba login ulang dengan menggunakan user K4M4R82

Selamat mencoba :blush:

Comments