MySQL adalah salah satu sistem manajemen basis data relasional paling populer yang merupakan jackpot bagi penyerang yang mencoba menyelinap ke dalam basis data. Server database MySQL yang baru diinstal dapat memiliki banyak kerentanan dan celah. Karena keamanan data sangat penting, maka wajib untuk memahami setiap aspek keamanan MySQL.
Artikel ini berfokus pada audit dan keamanan database MySQL Anda dan memberikan sembilan tips untuk memperkuat keamanannya.
1. Hindari Hibah Hak Istimewa yang Tidak Perlu
MySQL mengizinkan beberapa pernyataan hak istimewa yang bila diberikan secara tidak perlu ke pengguna yang kurang beruntung dapat menyebabkan membaca/menulis file dan merusak hak pengguna lainnya. Beberapa pernyataan hak istimewa yang paling berpotensi berisiko adalah FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, dan seterusnya. Anda dapat membaca lebih lanjut tentang ini dari dokumentasi resmi MySQL. Oleh karena itu, jangan berikan hak pengguna super seperti FILE, GRANT, SUPER, dan PROCESS ke akun non-administratif. Anda dapat mencabut izin global, database, dan tingkat tabel yang tidak perlu ini sebagai berikut:
cabut SEMUA DI *.* DARI 'user_name'@'host_name'; #hak istimewa global
REVOKE CREATE, DROP PADA database_name.* DARI 'user_name'@'host_name'; #Hak istimewa basis data
cabut INSERT, UPDATE, DELETE PADA database_name.table_name DARI 'user_name'@'host_name'; Hak istimewa #Tabel
hak istimewa flush;
2. Batasi Login Jarak Jauh
Akses jarak jauh memudahkan pekerjaan administrator basis data, tetapi ini mempertaruhkan server terhadap potensi kerentanan dan eksploitasi. Anda dapat menonaktifkan akses jarak jauh untuk semua jenis akun pengguna MySQl dengan menambahkan variabel skip-networking ke file konfigurasi utama dan memulai ulang layanan.
[mysqld]
lewati jaringan
layanan sudo mysql restart
Demikian pula, Anda harus menonaktifkan akses akun root, jika tidak semua untuk membatasi login jarak jauh akun root. Tindakan pencegahan ini mencegah bruteforcing akun root MySQL.
mysql> delete from mysql.user dimana user='root' dan host tidak ada ('localhost', '127.0.0.1', '::1'); mysql> hak siram;
3. Nonaktifkan Fungsi (load_file, outfile, dumpfile)
Tindakan pencegahan lain untuk mengamankan MySQL terhadap injeksi file lokal adalah dengan menonaktifkan fungsi yang hanya dapat diakses melalui hak istimewa pemberian FILE. FILE adalah opsi yang memungkinkan pengguna dengan hak istimewa rendah dengan opsi perintah global untuk membaca atau menulis file di server.
- load_file
Fungsi load_file memuat konten file dari server sebagai string. Misalnya, perintah berikut akan memuat semua konten dari /etc/passwd berkas sebagai berikut:
pilih load_file('/etc/passwd')
- file keluar
Demikian pula, fungsi outfile menulis konten ke file server lokal. Penyerang dapat menggunakan fungsi ini untuk menulis muatan ke file di server, sebagai berikut:
pilih 'Local File SQL Injection' ke outfile '/tmp/file.txt';
cat /tmp/file.txt
Keluaran:
Injeksi SQL File Lokal
- tempat sampah
Fungsi ini menggunakan penyebab pilih untuk menulis ke file tanpa mengembalikan output ke layar.
cat /tmp/file.txt
pilih 'Halo dunia!' ke dumpfile '/tmp/world';
Keluaran:
Kueri OK, 1 baris terpengaruh (0,001 detik)
Anda dapat menonaktifkan fungsi-fungsi ini dengan mencabut hak istimewa FILE sebagai berikut:
mencabut FILE pada *.* dari 'user_name'@'localhost';
Terkait: Panduan Pemula untuk Metasploit di Kali Linux (Dengan Contoh Praktis)
4. Nonaktifkan Port Default
Kita tahu bahwa layanan MySQL berjalan di port 3306, dan penyerang memindai port untuk memeriksa layanan yang berjalan di jaringan. Untuk menambahkan keamanan dengan ketidakjelasan dan mengubah port default MySQL dengan mengedit variabel sistem port di file konfigurasi utamanya, Anda harus memasukkan yang berikut ini:
vim /etc/mysql/my.cnf
pelabuhan = XXXX
layanan sudo mysql restart
5. Hindari Wildcard di Nama Akun
Nama akun di MySQL terdiri dari dua bagian yaitu pengguna dan nama host "nama_pengguna"@"nama_host". Ini memungkinkan administrator untuk membuat akun untuk pengguna dengan nama yang sama yang terhubung dari host yang berbeda. Namun, bagian host dari nama akun mengizinkan konvensi wildcard yang dapat menjadi titik akses ke database dari mana saja.
Penggunaan opsional nama host atau nilai alamat IP setara dengan 'nama_pengguna'@'%' di mana % cocok dengan operasi LIKE pencocokan pola MySQL, dan % berarti nama host apa pun. Sementara itu, akses dari '192.168.132.%' berarti setiap upaya dari jaringan kelas C. Selain itu, siapa pun dapat mengakses database dengan memberi nama bagian host sebagai '192.18.132.mysql.com'.
Untuk menghindari upaya tersebut, MySQL mengizinkan mendefinisikan netmask dengan nilai host untuk mengidentifikasi bit jaringan dari alamat IP:
client-ip_add & netmask = host_name
Sintaks untuk membuat nama host adalah host_ip/netmask:
BUAT PENGGUNA 'jhon'@'192.168.132.0/255.255.255.0';
Nilai host di atas memungkinkan pengguna john untuk mengakses database dari IP mana pun dalam kisaran 192.168.132.0-192.168.132.255. Demikian pula, nilai host 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 akan memungkinkan host dari jaringan kelas A dan B. Sedangkan 192.168.132.5 hanya akan mengizinkan akses dari IP tertentu.
6. Nonaktifkan Akses Eksplisit
Nama pengguna di MySQL adalah nama yang digunakan database untuk menerima koneksi masuk atau nama pengguna kosong "@"host_name" yang membuat pengguna anonim. Namun, kehadiran pengguna anonim dapat memanfaatkan penyerang untuk mengakses server database. Selain itu, versi MySQL sebelum MySQL 5.7, membuat kumpulan pengguna anonim, dan instalasi setelah peningkatan versi masih menambahkan pengguna ini.
pilih pengguna, host, kata sandi dari mysql.user di mana pengguna menyukai '';
Anda dapat mencatat bahwa kolom pengguna dan kata sandi kosong, dan aksesnya terbatas pada localhost. Namun, Anda tidak ingin siapa pun mengakses database. Gunakan perintah berikut untuk menghapus pengguna anonim:
jatuhkan pengguna " "@"localhost"
hak istimewa flush;
7. Tetapkan Akun Non-Root sebagai Pemilik atau Grup
Menyetel akun pengguna non-root tidak terkait dengan pengguna root MySQL. Instalasi MySQL di sistem Linux/Unix dari paket tar dan tar.gz memungkinkan server dijalankan oleh pengguna yang kurang mampu. Ini adalah kelemahan keamanan karena setiap pengguna dengan opsi hibah FILE dapat mengedit atau membuat file di server. Namun, itu mengembalikan kesalahan ketika pengguna mencoba mengaksesnya tanpa -pengguna=root kesalahan.
Anda dapat menghindari ini dengan mempraktikkan aturan praktis mengakses server database sebagai pengguna Linux yang terpisah. Untuk menjalankan mysqld sebagai pengguna Linux biasa, hentikan server dan ubah izin baca/tulis dari server MySQl ke mysql, sebagai berikut:
chown -R mysql /path/ke/mysql/datadir
Buka file konfigurasi utama MySQL, tambahkan pengguna mysql baru, dan mulai ulang layanan untuk menghindari akses server yang tidak diperlukan:
vim /etc/mysql/my.cnf
pengguna=mysql
layanan sudo mysql restart
8. Setel Kata Sandi untuk Akun Root
Instalasi MySQL melalui shell interaktif dalam distribusi Linux berbasis Debian membuat akun pengguna root dan meminta Anda untuk mengatur kata sandi. Namun, ini tidak terjadi dalam instalasi shell non-interaktif dan distribusi berbasis Red-Hat. Seperti yang dinyatakan di atas, pengguna non-root dari mesin Linux dapat mengakses akun pengguna root mysql dengan menggunakan: -pengguna=root pilihan. Anda dapat menghindarinya dengan mengatur kata sandi sebagai berikut:
sudo kata sandi mysqladmin
vim /etc/mysql/my.cnf
kata sandi =
layanan sudo mysql restart
9. Pastikan Enkripsi Data Saat Transit dan Saat Istirahat
Komunikasi tidak terenkripsi default antara klien dan server menimbulkan risiko intersepsi data oleh man-in-the-middle. Demikian pula, data pengguna yang tidak terenkripsi dalam database mempertaruhkan kerahasiaan dan integritas pengguna. MySQL mendukung enkripsi data antara klien dan server melalui protokol TLS/SSL, sedangkan komunikasi yang tidak terenkripsi hanya dapat diterima jika kedua pihak yang berkomunikasi berada dalam jaringan yang sama.
MySQL sekarang mendukung enkripsi saat istirahat untuk melindungi data yang disimpan di server bahkan ketika sistem dilanggar.
Keamanan Lanjutan MySQL: Lindungi Diri Anda
Memastikan bahwa Anda memiliki tingkat keamanan online tertinggi sangat penting, dan artikel ini akan memberi Anda beberapa petunjuk berguna ke arah yang benar. Langkah-langkah di atas berguna untuk mengamankan server database Anda, tetapi mempelajari cara menetapkan izin minimum untuk pengguna non-administratif juga penting.
Buat database mySQL Anda sendiri hanya dengan editor teks dan kerangka struktur dasar ini, atau "skema."
Baca Selanjutnya
- Pemrograman
- Keamanan
- Pemrograman
- Tips Keamanan
- Keamanan
Rumaisa adalah penulis lepas di MUO. Dia telah memakai banyak topi, dari Matematikawan hingga penggemar Keamanan Informasi, dan sekarang bekerja sebagai Analis SOC. Minatnya termasuk membaca dan menulis tentang teknologi baru, distribusi Linux, dan apa pun seputar Keamanan Informasi.
Berlangganan newsletter kami
Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!
Klik di sini untuk berlangganan