Implikasi keamanan memulihkan cadangan dari sumber yang tidak dikenal?

31

Skenario : Anda menyerahkan cadangan basis data dan diberitahu untuk mengembalikannya ke server (yang telah menjadi hosting basis data lain), tetapi tidak diberi informasi berguna tentang apa yang berisi cadangan tersebut atau apakah sumber tersebut dapat dipercaya.

Pertanyaan 1 : Apa implikasi potensial dari memulihkan cadangan yang bisa berbahaya?

Pertanyaan 2 : Apa yang dapat Anda lakukan untuk melindungi server / data Anda di database lain dari dampak memulihkan cadangan yang berpotensi berbahaya? RESTORE VERIFYONLYtampaknya merupakan langkah pertama yang baik. Jawaban pamungkas mungkin adalah 'pulihkan database di VM sandbox tanpa akses ke dunia luar', tetapi mari kita asumsikan bahwa opsi tersebut tidak masuk akal. Apa lagi yang harus dilakukan dalam situasi ini?

Simon Righarts
sumber
1
Bahkan dengan asumsi bahwa pemulihan itu hanya data (tidak ada prosedur yang tersimpan, atau semacamnya), ada banyak kebencian yang dapat terjadi. Misalkan cadangan untuk aplikasi web yang berisi tabel pengguna, dengan tingkat izinnya masing-masing, cadangan jahat dapat memberikan akses ke pengguna yang seharusnya tidak memilikinya, dan siapa yang tahu apa yang bisa mereka lakukan dari itu.
Lie Ryan
Sangat aneh tidak ada yang menyebutkan potensi risiko prosedur atau fungsi CLR. (tidak lagi dinonaktifkan secara default)
ALZDBA

Jawaban:

21

Basis data mungkin berisi kode berbahaya, mungkin prosedur yang akan mengubah kata sandi untuk masuk "sa" atau jatuhkan setiap basis data. Namun satu-satunya cara saya bisa melihat bahwa menyebabkan masalah adalah bagi seseorang untuk memulihkan database, dan kemudian secara manual menjalankan kode apa pun dalam database itu. Itu tidak akan dijalankan dengan cara otomatis.

Tidak ada pengaturan yang dapat diterapkan dalam database untuk memiliki SQL Server secara otomatis menjalankan beberapa kode dalam database setelah mengembalikannya ke server. Jika ya, saya harapkan Microsoft akan kehilangan sertifikasi Common Criteria untuk produk tersebut. Itu adalah kesalahan besar yang diizinkan dalam DBMS kepada saya.

Shawn Melton
sumber
Jika Pialang Layanan diaktifkan kembali sebagai bagian dari pemulihan (menggunakan WITH ENABLE_BROKERet al), maka kode dapat dijalankan "secara otomatis." Jelas pemulih tidak akan mau menggunakan opsi-opsi itu jika keamanan menjadi perhatian, tetapi berpotensi terkubur di dalam aplikasi vendor pihak ketiga di mana pengguna mungkin tidak melihatnya.
Jon Seigel
Kode apa yang bisa dieksekusi melalui Service Broker? Saya tidak pernah menggunakannya atau mengaturnya.
Shawn Melton
Aktivasi prosedur tersimpan. technet.microsoft.com/en-us/library/…
Jon Seigel
2
Mungkin juga lakukan RESTORE HEADERONLY untuk melihat apakah database telah diaktifkan. Jika demikian, dan penahanan diaktifkan di server, pengguna akan dapat mengaksesnya tanpa Anda memberi mereka akses server. Ini untuk SQL 2012 atau yang lebih baru, tentu saja. jika penahanan tidak diaktifkan di server, dan database di cadangan telah diaktifkan, pemulihan akan gagal, jadi terutama hanya masalah jika diaktifkan di server.
Robert L Davis
1
@ JonSeigel, saya tidak berpikir mereka akan menembak secara otomatis. SESUATU harus memasukkan pesan ke dalam antrian dengan mengirimkannya ke layanan, sehingga harus ada beberapa interaksi di dalam basis data itu untuk menyisipkan catatan atau menjalankan prosedur atau sesuatu. Antrian pialang tidak hanya terus menjalankan prosedur aktivasi mereka tanpa interaksi apa pun, mereka mengawasi pesan untuk ditampilkan dalam antrian.
JNK
11

Ada beberapa langkah pencegahan yang bisa Anda lakukan.

  1. Pastikan tidak ada seorang pun kecuali satu sysadmin yang memiliki akses ke database yang dipulihkan.
  2. Masukkan db dalam mode pengguna tunggal setelah pemulihan selesai.
  3. Periksa kode di dalam semua prosedur dan fungsi tersimpan dan pemicu di dalam database ini.
  4. Lakukan checkbb dbcc untuk memastikan tidak ada masalah integritas.
  5. Periksa pengguna yang dulunya memiliki akses ke database dan hapus semuanya.
  6. Mulai mengizinkan akses, sangat terbatas pada objek tertentu yang diperiksa oleh Anda.

Seperti kata Shawn, kode tidak akan dijalankan dengan sendirinya kecuali beberapa prosedur tersimpan yang tampaknya vbalid memiliki exec dari kode berbahaya lainnya. Ini adalah alasan memeriksa kode di dalam masing-masing dari mereka sebelum meletakkannya dalam mode multi-pengguna.

yrushka
sumber
10

Saya sampai di sini, tapi saya bisa memikirkan setidaknya satu skenario berbahaya: jika Anda mengembalikan database yang memiliki filetable , file-file itu sekarang ada di jaringan Anda secara default (dan khususnya, pada SQL Server Anda). Anda dapat memulihkan virus.

Itu dengan sendirinya tidak akan melakukan apa-apa, tentu saja - virus tidak tiba-tiba menjadi mahluk hidup - tetapi jika pengguna Anda kemudian mencoba mengakses file, mereka bisa terinfeksi. (Hei, saya katakan saya sudah mencapai.) Saya membayangkan sebuah skenario di mana seorang hacker luar ingin mendapatkan malware di pintu, dan dia kemudian mengirim email ke Bob dalam akuntansi mengatakan, "Ini file: \ sqlserver \ filetableshare \ myvirus.exe "- pada saat itu sudah melewati firewall Anda tanpa deteksi, dan kami sekarang ke antivirus internal dan alat anti-malware Anda.

Brent Ozar
sumber
2
Anda juga dapat mengungkapkan ini sebagai 'database berisi instruksi bagaimana untuk pribadi kami yang harus dibaca dan diterapkan'. Jika mereka mengikuti cara jahat mereka akan meluncurkan roket di Moskow. Ini akan menjadi tabel varchar biasa ... Ditto jika Anda mengembalikan binari dan mengundang karyawan untuk menjalankannya tanpa memvalidasi asal, Anda telah datang.
Remus Rusanu
@RemusRusanu meluncurkan roket di Moskow, hahaha, bagus!
Brent Ozar
Cinta perspektif rekayasa sosial. Email yang ditargetkan dengan file .bak mungkin sangat menarik tergantung pada target.
Max Vernon
7

KEMBALIKAN VERIFYONLY tampaknya merupakan langkah pertama yang baik. Jawaban pamungkas mungkin adalah 'pulihkan database di VM sandbox tanpa akses ke dunia luar', tetapi mari kita asumsikan bahwa opsi tersebut tidak masuk akal. Apa lagi yang harus dilakukan dalam situasi ini?

Pulihkan hanya verifikasi integritas database yang TIDAK AKAN memberitahu Anda apakah cadangan menyertakan kode berbahaya atau tidak KEMBALIKAN VERIFYONLY tidak berusaha memverifikasi struktur data yang terkandung dalam volume cadangan. Sangat tidak disukai bahwa jika cadangan berasal dari dalam perusahaan tempat Anda bekerja bisa berbahaya tetapi jika itu berasal dari pihak ketiga, Anda perlu berhati-hati seperti yang ditunjukkan Shawn.

Dokumentasi Microsoft Online mengatakan itu

• Untuk tujuan keamanan, kami sarankan Anda tidak melampirkan atau mengembalikan basis data dari sumber yang tidak dikenal atau tidak dipercaya. Database tersebut dapat berisi kode berbahaya yang dapat mengeksekusi kode Transact-SQL yang tidak diinginkan atau menyebabkan kesalahan dengan memodifikasi skema atau struktur database fisik. Sebelum Anda menggunakan database dari sumber yang tidak dikenal atau tidak terpercaya, jalankan DBCC CHECKDB pada database di server nonproduksi dan juga periksa kode, seperti prosedur tersimpan atau kode lain yang ditetapkan pengguna, dalam database.

Shanky
sumber
7

Pertanyaannya sebagian besar berfokus pada cadangan yang mengandung malware, tetapi juga dimungkinkan untuk mendapatkan perilaku yang tidak diinginkan dan berpotensi berbahaya dari operasi pemulihan itu sendiri.

Saya tidak sengaja menemukan di masa lalu bahwa mungkin untuk crash SQL Server dengan mencoba mengembalikan file cadangan yang rusak yang menyebabkan SQL Server mencoba membaca melewati akhir file cadangan dan crash. Saya tidak yakin versi mana yang rentan atau tepatnya apa yang diperlukan untuk mereproduksi masalah. Saya mendokumentasikan beberapa rincian terbatas di sini ketika saya mengalami masalah ini beberapa tahun yang lalu.

James L
sumber
Poin bagus. Saya tidak bermaksud memfokuskan pada "cadangan valid yang berisi malware", menabrak server SQL dengan cadangan tidak valid juga merupakan jawaban yang sangat relevan untuk "apa yang bisa salah?"
Simon Righarts
5

Apa resikonya memulihkan database yang tidak diketahui dari sumber yang tidak dikenal? Tidak ada

Risiko apa yang ada dalam membiarkan aplikasi yang tidak dikenal terhubung menggunakan akun sysadmin untuk terhubung ke database itu dan mulai menjalankan kode? BANYAK! Jika akun aplikasi hanya memiliki hak di dalam basis data dan tidak ada akses tingkat server maka tidak ada yang dapat dilakukan di luar basis data. Ini pada dasarnya bermula untuk memiliki pengaturan kerangka kerja keamanan yang tepat di server untuk memulai.

mrdenny
sumber
2

Anda diberikan cadangan basis data dan diminta untuk mengembalikannya ke server (yang telah menjadi hosting basis data lain), tetapi tidak diberi informasi berguna tentang apa yang berisi cadangan tersebut atau apakah sumber tersebut dapat dipercaya.

Bagus. Anda menuntut pernyataan tertulis yang ditandatangani dari siapa pun yang memberi tahu Anda untuk melakukan ini sehingga mereka menerima tanggung jawab penuh atas konsekuensinya. Jika mereka tidak mau melakukan itu, Anda harus menguji instal di kotak pasir setelah memeriksa file cadangan (jika mungkin), dan teliti semua tabel, prosedur, dll. sistem produksi. Meski begitu, Anda harus menjelaskan (kepada bos Anda dan atasannya) bahwa Anda tidak pernah memercayai cadangan dan melakukan ini hanya berdasarkan perintah langsung.

Jika mereka tidak mau menandatangani pernyataan seperti itu, beri tahu atasan mereka sebelum melakukan sesuatu. Sebagai seorang profesional, adalah tugas Anda untuk melindungi sistem Anda sebanyak mungkin, tidak peduli apa pun yang diperintahkan oleh beberapa atasan yang redup. Anda mungkin dipecat, tetapi Anda dapat mengangkat kepala tinggi-tinggi dan tahu Anda melakukan hal yang benar.

Phil Perry
sumber
2

Tidak ada banyak bahaya per kata, selain beberapa yang jauh disarankan di sini. Seperti yang disebutkan, sulit untuk memiliki barang-barang yang dapat dieksekusi secara otomatis dalam cadangan basis data itu sendiri. Perlu semacam mekanisme pemicu eksterior.

Dapatkan laptop / desktop lama dan versi evaluasi dari perangkat lunak Database Anda (SQLExpress) jika lisensi menjadi masalah. Salin file cadangan di mesin, cabut jaringan / nirkabel, dan lakukan pemulihan. Kemudian mulailah menggali. Luangkan semua waktu yang Anda butuhkan, karena ada banyak tempat yang bisa disembunyikan, kebanyakan dari mereka sudah dibahas oleh posting lain di utas ini.

Integritas DBA Anda dan pemeliharaan lingkungan Produksi Anda lebih penting daripada pesanan apa pun yang diberikan oleh atasan.

Philippe
sumber