Mengapa aplikasi tidak menggunakan akun sa

21

Pertanyaan pertama saya, harap lembut. Saya mengerti bahwa akun sa memungkinkan kontrol penuh atas SQL Server dan semua database, pengguna, izin dll.

Saya memiliki keyakinan mutlak bahwa aplikasi tidak boleh menggunakan kata sandi sa tanpa alasan bisnis yang sempurna dan terfokus. Jawaban untuk Pertanyaan ini mencakup banyak alasan saya untuk diskusi yang berfokus pada TI

Saya dipaksa menerima sistem manajemen layanan baru yang TIDAK AKAN berfungsi kecuali menggunakan kata sandi sa. Saya tidak pernah punya waktu untuk mencari tahu mengapa ketika membuat evaluasi tetapi tim server mencoba menginstalnya untuk menggunakan peran tetap yang telah saya atur dengan menggabungkan db_creater dan izin lain yang saya pikir akan diperlukan. yang gagal. Saya kemudian membiarkan tim server menginstal dengan akun sa tetapi berjalan di bawah akun dalam peran dbo untuk databasenya tetapi itu juga gagal. Secara kasar saya mencoba menjalankannya dengan akun dalam peran sysadmin tetapi bahkan itu gagal dan tidak dengan pesan kesalahan yang berguna yang memungkinkan saya untuk mengetahui apa yang sedang terjadi tanpa menghabiskan lebih banyak waktu daripada yang saya miliki. Ini hanya akan bekerja dengan akun sa dan kata sandi yang disimpan dalam teks yang jelas di file konfigurasi.

Ketika saya bertanya ini dan tim server berbicara dengan vendor mereka mendapat jawaban yang mengkhawatirkan dari 'Apa masalahnya dengan itu?' dan kemudian 'well kita bisa melihat pengacakan password' ffs pengacakan

Saya tahu bahwa ada cara dan cara untuk membatasi akses ke file tetapi itu hanyalah kelemahan lain dalam keamanan menurut saya

Ngomong-ngomong, pertanyaan saya adalah, bisakah seseorang mengarahkan saya ke beberapa dokumentasi yang dapat saya gunakan untuk menjelaskan kepada bisnis alasan mengapa ini adalah hal yang buruk dan harus menjadi besar, tidak, tidak. Saya bekerja di bidang yang berarti bahwa saya perlu menjaga keamanan dengan serius dan telah berjuang untuk membuat bisnis mengerti dan akhirnya mungkin berada di luar peringkat tetapi saya harus mencoba.

SQLDBAWaberhubungan
sumber
1
saatau anggota sysadmin, termasuk login windows?
Remus Rusanu
sa dan sa saja :-(
SQLDBAWithABeard
1
Anda perlu mendapatkan informasi lebih lanjut dari vendor. Khususnya hal-hal apa yang mereka lakukan yang memerlukan sasecara eksplisit.
Aaron Bertrand
11
Seringkali ketika vendor mengatakan mereka harus login sebagai sa secara eksplisit itu berarti mereka belum menguji aplikasi mereka dengan cara lain (atau melakukannya sekali dan jatuh dengan kesalahan yang tidak mereka lihat sebelum memutuskan "kami hanya akan tetap menggunakan dengan sa "), yang bukan sesuatu yang akan mengisi saya dengan keyakinan. Jangan mengambil taktik ini secara langsung dengan vendor, menanyakan lebih diplomatis akan mendapatkan hasil yang lebih baik!
David Spillett
David sudah benar, saya percaya dari transaksi singkat saya dengan vendor
SQLDBAWithABeard

Jawaban:

21

Itu tergantung pada bisnis Anda, tetapi hal utama dalam kebanyakan kasus adalah memastikan itu tidak dilihat sebagai masalah TI. Ini adalah masalah keamanan dan sementara dua orang bisnis besar yang tumpang tindih lebih mungkin untuk mendengarkan jika Anda mengatakan "keamanan" daripada jika Anda hanya "mengeluh tentang hal-hal IT umum".

Apakah Anda bekerja dengan klien yang memiliki persyaratan keamanan? Itu adalah tempat yang bagus untuk memulai. Jika kami menjalankan aplikasi dengan akses level sa, atau hanya aplikasi yang tidak mengamankan kredensial dengan benar bahkan jika tidak menggunakan akses priveleged (kami lebih suka Windows Integrated daripada pengguna yang tersimpan / pass jika memungkinkan), dan kami tunduk pada keamanan mengaudit, audit itu akan gagal dan kami akan berisiko kehilangan pelanggan dan / atau harus memberikan uang kembali kepada klien kelompok kami (organisasi perbankan dalam hal produk yang saya kerjakan sebagian besar, bagian lain dari kelompok itu berurusan dengan polisi dan kesehatan) otoritas dan sebagainya) keamanan adalah bagian dari penawaran kami yang sesuai dengan tujuan. Para pebisnis akan memahami tingkat keparahan dari ancaman potensial itu bahkan jika mereka biasanya membayar tidak lebih dari sekadar saran untuk rekomendasi TI.

Bahkan mengabaikan persyaratan yang dipaksakan oleh klien, jika Anda berusaha untuk memenuhi berbagai standar keamanan standar industri, sekali lagi otentikasi jenis aplikasi ini akan mengecewakan Anda dalam menghadapi audit karena jauh dari praktik terbaik sehingga menjadi sesuatu yang secara umum dianggap sebagai sesuatu yang secara umum dianggap sebagai pada daftar "tidak seharusnya dilakukan". Jelaskan kepada pembuat keputusan bisnis Anda bahwa keamanan adalah bagian penting dari aplikasi, dan fakta bahwa vendor ini tampaknya tidak mengetahui (atau setidaknya khawatir tentang) membuat Anda memiliki keraguan tentang apa lagi yang mungkin tidak mampu mereka lakukan. berurusan dengan: mengetahui tentang praktik terbaik keamanan DB adalah (well, harus) bagian dari pekerjaan mereka dan menerapkan itu tidak sulit.

Juga tunjukkan bahwa Anda (pembeli) harus mendikte persyaratan keamanan yang wajar kepada vendor, bukan sebaliknya. Ini adalah data Anda, sehingga mereka tidak memenuhi syarat untuk menyatakan apa yang dianggap cukup aman.

David Spillett
sumber
Ha. Tidak menyadari masuk menambahkan komentar Aman untuk mengatakan bahwa di mana saya bekerja, keamanan dari semua jenis adalah masalah yang signifikan, menganggapnya sama dengan polisi jika Anda suka. Namun, para pembuat keputusan tidak melihat sa sebagai keprihatinan. Audit adalah tempat yang baik untuk memulai dan saya akan menyelidiki lebih lanjut.
SQLDBAWsabeard
+1 Saya sangat menyukai komentar bahwa ini adalah masalah keamanan bukan masalah itu .
Kenneth Fisher
2
Saya akan ragu untuk membeli apa pun dari sekelompok orang yang berpikir tidak apa-apa untuk meninggalkan kunci kerajaan duduk dalam file konfigurasi dalam teks biasa. Saya tahu itu bukan panggilan Anda, tetapi jika Anda bisa membuat The Deciders untuk melihat apa ide yang buruk itu, dan apa yang dikatakan tentang vendor, itu mungkin membantu kasus Anda.
mdoyle
Mdoyle - Masalahnya adalah ketika saya belajar lebih banyak tentang hal itu adalah Penentu melihat hal-hal dalam tanda £ dan karena ini adalah upgrade dari versi kuno itu datang murah. Saya pikir saya memenangkan pertempuran sedikit terima kasih kepada orang-orang baik di sini. Saya telah menunda pengujian porsi server web ini setidaknya untuk sekarang
SQLDBAWithABeard
20

Tidak ada aplikasi yang perlu memiliki akses SA - selamanya. (Kecuali tujuan utamanya adalah administrasi basis data.)

Ini adalah aturan umum untuk tidak pernah memberikan lebih banyak hak untuk login apa pun (aplikasi- atau pribadi-) daripada bisnis mengharuskan login itu.

Tidak ada aplikasi yang sepenuhnya aman. Sebagian besar memiliki semacam kerentanan SQL Injection atau XSS. Jika penyusup dapat mengeksekusi pernyataan pilihannya dan memiliki akses 'SA', ada banyak hal yang dapat terjadi pada data Anda yang dapat mematikan bisnis secara instan. (Terutama jika data perlu dipercaya karena digunakan oleh penegak hukum.) Tanyakan kepada pemegang saham apa yang harus mereka lakukan, jika seseorang dapat dengan sengaja mengubah bahkan satu catatan dan informasi itu bocor.

Sekarang, dengan akses 'SA', tidak hanya database aplikasi yang dapat diubah, tetapi juga setiap database lainnya pada sistem. Jadi, tanyakan kepada pemangku kepentingan Anda apa yang akan mereka lakukan jika Anda akan membuat salinan SEMUA database Anda dan mengirimkannya ke koran. Karena itu mungkin terjadi jika karyawan yang tidak puas menemukan celah keamanan ini untuk tetap ada.

Penjual mengatakan mereka bisa mengacak kata sandi. Itu BS. Aplikasi perlu mengakses kata sandi dalam bentuk teks untuk menggunakannya, sehingga kunci untuk menguraikan kata sandi akan disimpan tanpa kata sandi tepat di sebelahnya. Juga, seperti yang disebutkan sebelumnya, masalah sebenarnya bukanlah seseorang yang menemukan kata sandi ini; itu adalah orang-orang (salah) yang menggunakan sistem ini melalui kerentanan akan mendapatkan akses penuh ke semua database Anda tanpa pernah melihat kata sandi.

Penyebab yang paling mungkin untuk SA diperlukan adalah bahwa aplikasi perlu berinteraksi dengan SQL Agent. Setidaknya itu adalah salah satu fungsi yang lebih sulit untuk diterapkan dengan benar dan kebanyakan orang hanya mengambil rute "gunakan SA" untuk mengatasinya. Membutuhkan 'SA' itu sendiri mungkin disebabkan oleh vendor yang tidak tahu cara memeriksa izin sysadmin.

Ada dua solusi yang bisa Anda coba:

  1. Ganti nama SA (praktik terbaik keamanan) dan buat akun baru bernama 'SA' dengan hak terbatas. (Tidak pernah mencoba ini, tetapi seharusnya berhasil)

  2. Jangan menginstal perangkat lunak. Anda sebagai seorang profesional tidak dapat memikul tanggung jawab atas tindakan itu, jadi Anda tidak boleh menginstalnya. Untuk memberi Anda perbandingan, minta tukang ledeng untuk menjalankan saluran gas langsung melalui perapian alih-alih memutarnya untuk menghemat pipa / uang. Anda mungkin menertawakan gambar ini, tetapi saya percaya ini adalah perbandingan yang tepat - Perangkat lunak ini akan meledak cepat atau lambat, mungkin lebih cepat. Dan ketika itu terjadi, itu mungkin akan menurunkan bisnis juga.

Jika ini semua tidak menghentikan "mereka" dari memerlukan perangkat lunak ini, rekomendasi terakhir yang bisa saya berikan adalah menjalankannya. Jika sesuatu terjadi pada data Anda akan menjadi orang pertama yang bertanggung jawab. Jadi, dengan aplikasi ini di tempat Anda mungkin tidak memiliki keamanan kerja, jadi cari majikan yang memberi Anda setidaknya beberapa.

Sebastian Meine
sumber
4
+1 hanya untuk simile "saluran gas langsung melalui perapian" .
ypercubeᵀᴹ
Dalam SQL Server, akun sa tidak dapat diubah namanya. Namun, itu bisa dinonaktifkan.
Greenstone Walker
1
@GreenstoneWalker: yakin itu dapat: alter login sa with name = [as];.
Remus Rusanu
Remus, itu akan berguna bagiku untuk mengandalkan SSMS dan juga karena mengandalkan pengetahuan lama. Sebelum SQL Server 2005 tidak dapat diganti namanya. SSMS tampaknya tidak dapat mengganti nama login sa tetapi T-SQL yang Anda posting persis benar.
Greenstone Walker
12

Saya melihat dua garis menyerang ini.

  • Kepatuhan . Apakah ada kriteria kepatuhan yang dimandatkan berlaku di toko Anda? Cari dengan seksama kata-katanya dan lihat apakah Anda menemukan sesuatu yang tidak sesuai dengan 'persyaratan' aplikasi. Jika Anda menemukan sesuatu yang mencegah sapenggunaan oleh suatu aplikasi, Anda memiliki kotak anti air anti peluru, karena aplikasi tersebut akan membuat bisnis Anda bertanggung jawab dll.

  • Akses Admin Pengguna . Pastikan Anda menyajikan dengan jelas kasus bahwa aplikasi yang memerlukan saakses berlaku itu memberikan saakses ke semua pengguna perusahaan yang memiliki hak admin di workstation di mana aplikasi diinstal. Tidak ada cara untuk menyembunyikan sakata sandi dari admin lokal tempat aplikasi berjalan, itu adalah fakta dan tidak ada jumlah 'pengacakan' yang dapat mencegah hal ini. Tidak ada akar kepercayaan lokal yang tidak bisa dicapai oleh admin lokal, jika dia mau. Jelaskan bahwa memiliki aplikasi yang mengharuskan sasama dengan memberi sahak istimewa kepada semua pengguna yang menjalankan aplikasi. Jelaskan apa artinya itu, apa yang dapat dilakukan pengguna secara efektif:

    • kemampuan untuk membaca data apa pun di server, tidak hanya dari aplikasi ini tetapi dari database lain yang dihosting di server itu
    • kemampuan untuk mengubah setiap data pada server, lagi dari database lain pada server yang sama
    • kemampuan untuk menghapus jejak tindakannya setelah modifikasi dilakukan
    • kemampuan untuk mengubah audit dan riwayat apa pun agar tampak bahwa tindakan tertentu dilakukan oleh pengguna yang berbeda
    • kemampuan untuk menggunakan kredensial SQL Server untuk meningkatkan serangan terhadap sumber daya lain yang mempercayai server ini. Ini dapat menyiratkan SQL Server lain selain sumber daya lain, termasuk tetapi tidak terbatas pada file saham, Pertukaran server dll, karena SQL Server dapat digunakan hanya sebagai batu loncatan.

Jelaskan kepada pembuat keputusan bahwa menerima aplikasi ini berarti mempercayakan setiap karyawan yang memiliki akses administrator ke workstation yang menjalankan aplikasi dengan semua hak istimewa yang disebutkan di atas. Vendor akan mencoba mempertahankan posisinya dengan memohon semacam 'enkripsi' sakata sandi untuk aplikasi tersebut. Ini tidak menahan air. Tidak ada skema enkripsi yang dapat menahan serangan dari administrator. Dan jelaskan bahwa jumlah keterampilan teknis yang diperlukan untuk menemukan kata sandi 'tersembunyi' secara lokal sama sekali tidak relevan. Karyawan tidak akan melakukannya sendiri, salah satu dari mereka akan google untuk itu dan menemukan skrip yang mudah digunakan yang melakukannya.

Remus Rusanu
sumber
Remus terima kasih. Itulah jawaban yang saya butuhkan. Saya perlahan-lahan memenangkan pertempuran dan ini semua membantu
SQLDBAWithABeard
7

Pertama, kata sandi sa disimpan plaintext? Anda harus memilih dengan dompet Anda. Siapa pun yang berpikir itu dapat diterima harus dikeluarkan dari bisnis.

Berikut ini adalah anologi yang dapat membantu Anda menjelaskan masalah ini: Karyawan Alice membutuhkan akses ke lantai pertama. Apakah Anda memberinya kunci master untuk seluruh bangunan atau hanya kunci untuk lantai pertama? Jawab: Anda hanya memberinya kunci lantai pertama. Mengapa? Karena itu mengurangi kemungkinan kerusakan yang tidak disengaja atau disengaja. Jika Alice tidak bisa sampai ke ruang server lantai dua di tempat pertama maka dia tidak akan pernah melakukan hal buruk di sana.

Ini adalah Prinsip Least Priviledge.

Mengapa aplikasi perlu menggunakan akun sa, itu adalah pertanyaan yang harus dijawab oleh PerfMon atau Extended Events. Buat jejak PerfMon menggunakan templat T-SQL, mungkin difilter menurut nama aplikasi.

Dari atas kepala saya, berikut adalah argumen lain yang menentang penggunaan sa: Menggunakan akun sa membutuhkan layanan SQL Server untuk berada dalam mode otentikasi campuran. WIndows hanya autentikasi yang lebih baik karena kami dapat memanfaatkan semua fitur aman Kerberos.

Greenstone Walker
sumber
4

Dari perspektif teknis, tidak ada alasan bahwa suatu aplikasi akan membutuhkan izin SA. Apa yang mungkin terjadi adalah bahwa pengembang aplikasi mungkin memeriksa untuk melihat apakah login mereka memiliki izin sysadmin dan jika tidak, itu hanya melempar pesan kesalahan. Dengan cara ini mereka dapat mengklaim bahwa aplikasi tersebut membutuhkan hak SA.

Jika Anda harus memiliki aplikasi ini maka saya akan menjalankannya pada contoh terpisah yang tidak memiliki hal lain di dalamnya.

mrdenny
sumber
Saya pikir itu mungkin memeriksa apakah itu berjalan sebagai sa dan kemudian gagal karena tidak akan berjalan di bawah akun dengan sysadmin
SQLDBAWithABeard
1
Maka itu banyak memeriksa userid spesifik. Kemungkinan mereka adalah pengembang melakukan ini karena ia bekerja dengan sa dan mereka tidak ingin repot untuk melihat izin apa yang sebenarnya mereka butuhkan, jadi ini adalah cara termudah untuk mencegah kesalahan lain. Ini pendekatan yang benar-benar omong kosong dan vendor harus dipukul karena melakukannya.
mrdenny
4

Mungkin vendor Anda meminta / membutuhkan "sa" karena di suatu tempat dalam aplikasi mereka mereka menggunakan XP_CMDSHELL. (Jangan biarkan saya memulai kerusakan yang mungkin terjadi dengan akses tidak terbatas ke XP_CMDSHELL. Cukup dengan mengatakan bahwa ini berpotensi membuka bukan hanya data Anda tetapi mesin host dan, mungkin, hal lain di jaringan Anda ke akses mirip admin)

Jika ada kebutuhan yang sah, Anda dapat memberikan akses terbatas melalui akun proxy. Lihat, misalnya, BOL: http://msdn.microsoft.com/en-us/library/ms175046.aspx

TheDataBeagle
sumber
4

Tidak ada aplikasi yang memerlukan akun SA dan kata sandi untuk beroperasi.

Namun, saya telah menginstal produk Manajemen Layanan TI, dan selama proses instalasi Anda memiliki opsi untuk memasok kredensial akun SA untuk memungkinkan pemasang untuk membuat DB dan melampirkan akun ke DB untuk digunakan perangkat lunak. Kredensial akun SA tidak disimpan dalam log aplikasi atau penginstal di mana pun. Perangkat lunak ini juga menyediakan opsi untuk menggunakan database yang dibuat sebelumnya selama instalasi.

Jadi saya hanya akan mengkonfirmasi jika akun SA diperlukan untuk instalasi, atau pengoperasian perangkat lunak Manajemen Layanan TI ini.

Jika Instalasi: buat akun 'sa' sementara - lakukan instalasi - dan hapus akun.

Jika Pengoperasian: Hindari perangkat lunak seperti wabah. (atau menyiapkan server SQL mandiri yang hanya akan menampung satu database itu.)

Brent
sumber
+1 untuk instance SQL server khusus. Itu akan menjadi alternatif terakhir yang bagus untuk memberikan sa di server nyata.
Dan
0

Parameter keamanan sistem SQL Server default apa pun yang disediakan harus diubah. Dianjurkan untuk tidak menggunakan mode campuran (mengaktifkan otentikasi Windows dan SQL Server) untuk otentikasi. Alih-alih, beralihlah ke otentikasi Windows saja - yang akan menegakkan kebijakan kata sandi Windows - memeriksa panjang kata sandi, durasi hidup, dan riwayat. Fitur kebijakan kata sandi Windows yang membuatnya berbeda dari otentikasi SQL Server adalah penguncian login - setelah sejumlah upaya login yang gagal berturut-turut, login menjadi terkunci dan tidak dapat digunakan lagi untuk penggunaan lebih lanjut

Di sisi lain, otentikasi SQL Server tidak menyediakan metode untuk mendeteksi upaya serangan brute-force, dan yang lebih buruk, SQL Server bahkan dioptimalkan untuk menangani sejumlah besar upaya login cepat. Jadi, jika otentikasi SQL Server adalah suatu keharusan dalam sistem SQL Server tertentu, sangat disarankan untuk menonaktifkan login SA

Ivan Stankovic
sumber
1
Apakah itu kecelakaan atau disengaja - untuk menjawab 2 pertanyaan dengan jawaban yang persis sama?
ypercubeᵀᴹ
Terima kasih atas komentarnya. Hanya berpikir bahwa penjelasannya dapat membantu dalam kedua kasus.
Ivan Stankovic
Menarik, tetapi tidak terlalu membantu OP.
Dan