Sedikit latar belakang: Kami baru saja meretas sistem PBX kami. Server itu sendiri tampaknya aman (tidak ada akses konsol tidak sah login - SSH dll), tetapi entah bagaimana para peretas telah berhasil menyuntikkan pengguna admin baru ke dalam perangkat lunak PBX (FreePBX, didukung oleh MySQL). Log Apache menyiratkan bahwa peretas berhasil menambah pengguna tanpa menggunakan antarmuka web (atau eksploitasi apa pun di antarmuka web).
Sekarang, saya telah menemukan bahwa MySQL berjalan tanpa kata sandi root (!!) dan secara terbuka terikat ke alamat IP eksternal (Jelas, saya telah mengunci ini sekarang). Namun, satu-satunya pengguna tingkat root di MySQL adalah 'root'@'localhost'
dan 'root'@'127.0.0.1'
, keduanya seharusnya hanya dapat diakses secara lokal.
Jadi, pertanyaan saya adalah ini:
Apakah ada cara spoofing koneksi ke MySQL sehingga akan memungkinkan koneksi ke pengguna 'root' @ 'localhost' dari alamat IP jarak jauh, TANPA menjalankan eksploit lain secara lokal?
Sebagai referensi, kotak tersebut adalah Centos 5 (Linux 2.6.10) yang menjalankan Mysql 5.0.95.
Jawaban:
Tidak.
MySQL tidak akan pernah login Anda ke pengguna dengan spesifikasi
localhost
atau127.0.0.1
host jika Anda tidak datang dari sistem lokal. Perhatikan bahwa ini juga mencakup kerentanan auth bypass, CVE 2012-2122; perbandingan kata sandi mungkin diakali, tetapi perbandingan host tidak.Anda perlu sesuatu pada sistem untuk mem-proksi untuk "mengelabui" pengecekan host sumber. Sesuatu seperti phpmyadmin, atau penyeimbang beban seperti HAProxy yang berjalan di depan port MySQL TCP terlintas dalam pikiran.
sumber
Nama
root
ini dibuat secara default dan sangat terkenal. Root nilai literal tidak memiliki arti penting dalam sistem hak istimewa MySQL. Karenanya tidak ada persyaratan untuk melanjutkan dengan nama penggunaroot
.Anda harus mengubah
root
nama pengguna menjadi sesuatu yang lain sehingga dunia luar tidak akan dapat mengidentifikasi (menebak) dengan mudah, ini akan mengurangi upaya peretasan.Sebagai contoh: Jika Anda memiliki pengguna sebagai
root
@localhost
yang cukup dikenal semua orang maka peretas akan mencoba menghubungkannya, Anda harus mengubahnya ke sesuatu yang spesifik sepertiadmin_db_name
@localhost
untuk keamanan yang lebih baik.Pantau variabel status yang dipanggil
Aborted_connects
secara berkala untuk mengetahuiRefused
koneksi ke server MySQL Anda, itu harus 0 setelahFlush status;
perintah dan tidak boleh meningkat lebih lanjut.sumber
Apakah "tidak ada akses tidak sah yang dicatat" termasuk upaya gagal login? Jika tidak, bisa jadi CVE 2012-2122 .
sumber