Obyektif :
Setelah menyelesaikan bahasan ini, diharapkan melakukan hal berikut:
1. Memahami security principals dan securables di SQL Server
2. Memahami mode otentikasi di SQL Server
3. Memahami users dan logins istimewa di SQL Server
4. Dapat menerapkan password policy yang aman di SQL Server
5. Memahami dan mencegah SQL Injection di SQL Server
o Endpoint
o Login
o Server role
o Database
Database
o Application role
o Assembly
o Asymmetric key
o Certificate
o Contract
o Fulltext catalog
o Fulltext stoplist
Page 2
o Message type
o (Database) Role
o Route
o Schema
o Service
o Symmetric key
o User
Schema
o Type
Aggregate
Function
Procedure
Queue
Synonym
Table
View
External Table
Page 3
5.2 Mode Otentikasi di SQL Server
Terdapat dua macam mode otentikasi pada SQL Server yaitu:
Mode otentikasi Windows: Penggunaan mode ini paling cocok ketika database
hanya diakses dalam satu lingkup organisasi.
Mode otentikasi SQL Server dan Windows (mixed mode): Penggunaan mode ini
paling cocok ketika database juga diakses oleh pengguna yang berada di luar
lingkup suatu organisasi (diluar domain Windows) atau pun pengguna yang tidak
menggunakan perangkat Windows.
Page 4
Internet untuk menggunakan akun tertentu secara otomatis atau untuk meminta
pengguna memasukkan ID masuk dan kata sandi SQL Server.
Page 5
2. Koneksikan SQL Server dengan Database Engine
3. Klik kanan pada SQL Server instance yang akan dikonfigurasi dan pilih
Properties.
4. Pilih Security page Select the Security page to view the authentication
mode settings.
5. Pastikan bahwa mode otentikasi yang terpilih SQL Server dan Windows
Authentication Mode.
6. Klik OK untuk menyimpan perubahan.
Page 6
Tugas
Manakah mode otentikasi yang lebih baik antara mode Windows dan
mode campuran? Sertakan alasannya!
Page 7
5.3.3 Sa Login
Sa login adalah aku sistem administrator si SQL Server. Dengan model
keamanan baru yang telah terintegrasi dan diperluas, sa tidak lagi dibutuhkan. Sa
disediakan untuk kompabilitas terhadap SQL Server versi sebelumnya. Seperti login
administrator lainnya, sa diberikan server sysadmin role secara default. Saat Anda
menginstal SQL Server, login sa tidak diberi kata sandi. Untuk mencegah akses
yang tidak sah ke server, kata sandi harus benar-benar kuat, dan harus diganti secara
berkala.
Page 8
Berikut ini beberapa hal yang perlu diketahui mengenai guest user:
Guest user adalah anggota dari public serevr role dan mewarisi
permission dari role tersebut.
Page 9
Guest user harus ada di database sebelum seseorang dapat mengakses
database tersebut sebagai guest.
Page 10
Menggunaan domain policy untuk memastikan bahwa password login telah
memenuhi kebijakan yang ada memiliki beberapa keuntungan, terutama dalam proses
audit. Tanpa menggunakan domain policy, Administrator perlu memeriksa secara manual
apakah password login telah memunihi standar yang telah ditetapkan atau belum.
Query sys.sql_logins akan menunjukkan login yang telah dan belum sesuai dengan
password domain policy:
SELECT name, is_policy_checked
FROM sys.sql_logins
Page 11
Server adalah kebijakan "Store passwords using reversible encryption". Dengan
kebijakan ini, password akan disimpan dengan menggunakan proses enkripsi
sebanyak dua kali. Mengaktifkan kebijakan ini, memungkinkan untuk penyerang
mengunduh daftar semua pengguna dan kata kuncinya, kemudian memecahkan
enkripsi pada kata kunci tersebut dan akhirnya memiliki akses penuh ke setiap nama
pengguna dan kata sandi pengguna. Karena masalah keamanan tersebut, kebijakan
tersebut dinonaktifkan secara default.
Kelima password policies yang digunakan SQL Server yaitu sebagai berikut:
1. Enforce password history;
2. Maximum password age;
3. Minimum password age;
4. Minimum password length;
5. Password must meet complexity requirements.
Kebijakan "Enforce password history" pada domain (atau komputer lokal)
bukanlah Boolean, Ini adalah jumlah password lama untuk akun yang harus dilacak
SQL Server sehingga password yang sama tidak dapat digunakan kembali.
Pengaturan ini memiliki rentang 0 hingga 24 password. Semakin banyak password
yang tersimpan, semakin besar kemungkinan pengguna melupakan kata sandinya,
namun semakin kecil kemungkinan seseorang masuk ke sistem melalui password
lama. Maksimal password yang dapat disimpan yaitu 24 password.
Kebijakan "Maximum password age" digunakan untuk menentukan maksimal
jumlah hari sebelum sistem meminta pengguna untuk mengganti kata kuncinya. Jika
kata kunci tidak berubah, pengguna tidak akan bisa login ke instance database.
Pengaturan ini menerima nilai dari 0 (tidak pernah habis masa berlakunya) hingga
999 hari, dengan nilai default 42 hari.
Kebijakan "Minimum password age" digunakan untuk mengatur berapa hari
sejak password telah diubah hingga dapat diubah lagi. Pengaturan ini mencegah
pengguna terlalu cepat mengubah password mereka dan akan ‘memakan’ jumlah
password yang ditentukan oleh pengaturan "Enforce password history". Tanpa
pengaturan ini, atau jika pengaturan ini diset di angka 0, ketika password pengguna
kadaluarsa, pengguna cukup mengganti kata sandi 24 kali dan kemudian
Page 12
mengubahnya menjadi kata kunci yang sama. Pengaturan ini menerima nilai dari 0
sampai 998 hari, dengan nilai default 1. Pengaturan ini memiliki batas atas satu hari
lebih rendah daripada pengaturan untuk "Maximum password age." Jika diberikan
nilai yang sama atau lebih tinggi dari setelan "Maximum password age", maka
pengguna tidak akan bisa login sampai password mereka kadaluarsa.
Kebijakan "Minimum password length" digunakan untuk mengatur banyak
karakter terdapat pada password agar password dapat diterima. Nilainya dari 0
(password kosong) sampai 14 karakter, dengan nilai default 7 karakter. Biasanya
dianjurkan untuk meningkatkan nilai ini dari default tujuh ke angka yang lebih tinggi
seperti sembilan karakter. Meskipun ini akan membuat kata kunci lebih sulit diingat
pengguna, ini juga akan membuatnya semakin sulit ditebak oleh penyerang.
Kebijakan "Password must meet complexity requirements" memberitahu SQL Server
bahwa semua password harus dianggap "kuat". Ada beberapa persyaratan untuk
memiliki password yang kuat. Secara default, aturan yang terdapat pada policy ini
yaitu:
1. Password tidak boleh berisi nama pengguna di dalamnya.
2. Password harus mengandung karakter dari setidaknya tiga dari empat kategori ini:
a. Huruf kecil (a sampai z);
b. Huruf kapital(A sampai Z);
c. Angka (0 sampai 9);
d. Simbol (misal $, #, @,%, ^).
Page 13
2. Pada Security Setting, pilih Account Policy ➢ Password Policy.
3. Klik kanan pada kebijakan yang akan dikonfigurasi, pilih Properties.
4. Masukkan nilai sesuai dengan aturan/kebijakan yang telah ditetapkan.
Tugas
Buatlah password policy untuk perusahaan x pada Local/Domain Security
Policy, berikan alasan yang konkrit untuk masing-masing kebijakan/policy yang
telah Anda tentukan.
Dengan mengubah nama akun SA menjadi nama lain yang tidak standar,
akan mengurangi tingkat serangan SQL Server Instance. Serangan akan berkurang
karena kita sekarang telah menyingkirkan pengetahuan penyerang tentang nama
akun yang akan masuk. Penyerang sekarang perlu menemukan bukan hanya
password, tapi juga nama akun tersebut dan juga membuat serangan sangat, sangat
sulit untuk diselesaikan.
Penyerang biasa akan memulai dengan username SA dan akan mencoba
dengan password yang banyak sebelum mulai mencoba berbagai nama pengguna.
Semakin panjang username adalah semakin lama waktu dibutuhkan penyerang
untuk mendapatkan akses ke instance database. Alasan terbesar bahwa serangan ini
akan memakan waktu lama adalah bahwa SQL Server mengembalikan pesan
Page 14
kesalahan yang sama jika nama pengguna dan kata kunci salah digunakan atau jika
hanya nama pengguna yang salah digunakan. Dalam kedua kasus error 18456 akan
dikembalikan, dengan pesan kesalahan "Login failed for user '{username}'" di mana
{username} adalah nama pengguna yang mencoba untuk login ke database instance.
Page 15
Gambar 5.5 Menonaktifkan akun sa
Page 16
5.6 SQL Injection
SQL injection merupakan salah satu teknik hacking yang paling sering digunakan
untuk menyerang sebuah aplikasi. SQL injection memanfaatkan celah keamanan yang
terdapat dalam lapisan database sebuah aplikasi. Celah ini tercipta ketika input dari
pengguna tidak disaring dengan benar, sehingga memungkinkan pengguna untuk
memasukkan query sql yang dapat membahayakan database.
Sebagai contoh, seorang Back-End aplikasi web membuat membuat sebuah dynamic
SQL yang mengeksekusi query:
SELECT * FROM Orders WHERE OrderId=25
Script SQL ini akan dieksekusi saat pelanggan membuka detail pemesanan yang
telah ia lakukan. Nilai dari OrderId pada query di atas diambil dari string query di
URL, http://www.yourcompany.com/orders/orderhistory.aspx?Id=25. Permasalahan
akan timbul jika penyerang mengubah string kueri menjadi sesuatu seperti
"/orderhistory.aspx?id=25; delete from Orders;" maka query yang akan dijalakan di SQL
Server yaitu:
SELECT * FROM Orders WHERE OrderId=25; delete from Orders;
Pada query di atas terlihat bahwa tanda titik koma ”;” mengakhir statement pertama,
kemudian terdapat query selanjutnya yang akan di jalankan oleh SQL Server.
Query pertama akan berjalan normal tanpa ada kesalahan yang dihasilkan, namun
saat akan meiihat isi tabel Orders, tidak ada data yang akan ditampilkan karena telah
terhapus oleh query yang telah dimasukkan oleh pengguna.
Page 17
Gambar 5.6 Contoh stored procedure yang bisa di injeksi
Gambar 5.7 Output ketika stored procedure dieksekusi dengan sql injection
di dalamnya
Page 18
Gambar 5.8 Query dinamis pada store procedure yang dijalankan di SQL
Server
Pada gambar di atas terlihat bahwa tanda petik satu yang double (‘’) pada
variable skalar @var akan menjadi petik satu pada saat proses eksekusi query.
Tanda petik satu pada akhir “ -- data on table sample has been deleted!!! ”
merupakan petik yang digunakan sebagai penutup dari first_name pada query select
di store procedure. Perlu ditambahkan “--” (komentar pada SQL Server) agar tidak
terjadi error pada saat ekseksi.
Page 19
dari sql injection, dilakukan testing dengan menggunakan query seperti pada
contoh sebelumnya.
Pada gambar di atas terlihat bahwa query pertama yaitu query select
berdasarkan nama gagal tidak mengembalikan result karena namanya tidak
terdapat dalam database. Query selanjutnya, yaitu menghapus tabel sample tidak
dilakukan karena eksekusi pada store procedure telah menggunakan
sp_executesql.
Page 20
Tugas
Buatlah store procedure yang dapat diinjeksi dan aman dari sql
injection. Store procedure harus mengembalikan tabel yang berisi nama pekerja
dan nama departemen berdasarkan manager pekerja tersebut. Injeksi yang
dilakukan yaitu injeksi yang mengembalikan daftar semua akun login yang ada
dalam SQL Server instance yang sedang diserang.
Page 21