Zabezpečení MS SQL serveru – uživatelské účty a hesla
Přes veškerá nastavení MS SQL serveru popisovaná v minulém díle, zůstává stále mnoho možných bezpečnostních rizik. Zneužití těchto skulin zvenku není tak snadné, ale průzkumy dokazují, že největší nebezpečí pro data většinou číhá uvnitř vlastní firmy.
BUILTINAdministrators
Administrátor vaší sítě nemusí být vždy administrátorem databázového serveru. Čím větší firma, čím důležitější databáze, tím větší pravděpodobnost dělby zodpovědnosti mezi více osob v IT oddělení. Bohužel SQL server při své instalaci vytvoří automaticky uživatelskou skupinu BUILTINAdministrators, která má roli „sysadmin“ u všech databází vašeho SQL serveru.
Přihlásí-li se tedy některý z administrátorů pomocí Windows autentizace k SQL serveru, automaticky získává nejvyšší úroveň oprávnění ke všem databázovým objektům, jak vidíme na dalším obrázku. V horní části jsou všechny používané databáze, v dolní najdete jednotlivé role uživatele pro danou databázi.
V případě, že tento stav z organizačních nebo bezpečnostních důvodů nevyhovuje, je možno provést následující:
- Odstraňte login BUILTINAdministrator
- Tento krok je poměrně snadný.
- Ve Windows vytvořte novou uživatelskou skupinu „SQL Server Admins“. Přidejte do této skupiny účet, pomocí kterého startujete SQL server (viz předchozí článek). Dále můžete do této skupiny selektivně přidat všechny uživatele, kteří potřebují k SQL serveru přístup jako „sysadmin“.
- Čím méně bude mít tato skupina uživatelů, tím lépe. Snáze se vám budou monitorovat veškeré změny. Plný administrativní přístup může být navíc pro neznalého administrátora i velmi nebezpečný.
- Pro větší zmatení případného útočníka můžete skupinu pojmenovat krypticky, aby při napadení systému útočník nezjistil na první pohled, do které skupiny se má přidat.
- Předposledním krokem je opětovné vytvoření loginu, spojeného s touto uživatelskou skupinou. Skupinu pojmenujte odlišně (tedy v žádném případě ne BUILTINAdministrator)!
- Proč? Tento login má defaultně přístup jako vlastník databáze („DBO“) do všech databází vašeho SQL serveru, i když byl odstraněn a znovu vytvořen. Jediným rozdílem je, že při opětovném vytvoření nebude mít tento login roli „sysadmin“. I tak ale zůstává vlastníkem všech objektů.
- Závěrem je třeba přenastavit účet pro běh SQL Server Agenta.
- Úpravami vestavěného loginu můžete totiž zablokovat běh veškerých naplánovaných úkolů. Agent totiž standardně běží pod účtem „LocalSystem“ a využívá Windows autentizace. Zajímavostí celé věci je, že server ani agent do logu žádný problém nezapíší a vše se zdá být v pořádku. Úkoly ale neběží a datum dalšího spuštění (“next run date”) není známé („unknown“). Uživatelský účet pro spouštění SQL Agenta musí mít oprávnění „sysadmin“.
Účet SA
Účet SA je velkým lákadlem pro každého útočníka. Tento účet má oprávnění vlastníka databáze pro všechny databáze vašeho serveru, nezávisle na použitém autorizačním režimu. Získá-li někdo přístup k SA účtu, může v databázi úmyslně nebo neúmyslně způsobit velkou škodu. Ochrana tohoto účtu je proto jedním z hlavních kritérií zabezpečení serveru.
Jedno pravidlo týkající se SA účtu jsme si už říkali – nikdy nesmí být bez hesla. Když se ale rozhlédnu po internetu, mám pocit, že opakování tohoto pravidla je házením hrachu na zeď. Objevuji pořád mnoho serverů, které tuto základní klauzuli neustále porušují.
Heslo by samozřejmě nemělo být veřejné (nalepené post-it bločkem na monitor), ale současně by mělo být k dispozici pro případ nenadálých situací. Osobně jsem v praxi narazil na mnoho způsobů jak toto zabezpečit. Jako nejjednodušší se mi jeví po změně hesla napsat jej na papírek a zalepit do obálky. Ta může být uložena v trezoru, hned vedle zálohovacích médií.
Další dobrou obranou před útoky na váš server je změna „sa“ účtu. Většina útoků je podnikána proti účtu „sa“, když jej tedy přejmenujete, zbavíte se dalšího rizika. Změna sice není tak jednoduchá (spousta aplikací přestane fungovat), ale dá se provést například podobným skriptem:
|
Mým dalším doporučením je nepoužívat SA účet pro spouštění DTS balíčků. Při manipulaci s DTS balíčky velmi často dochází k prozrazení hesla, protože spouštění balíčků je úkon, který velmi často neprovádí přímo správce, ale jiná osoba. Pro nepoužívání tohoto účtu pro DTS mluví ještě jeden argument, a to bezpečnostní univerzálnost SA účtu. DTS balíčky velmi často manipulují data, ale i mění struktury tabulek, odstraňují a vytvářejí databázové objekty a podobně. Když tyto činnosti budou vykonávány s SA oprávněním, můžete napáchat v databázi nedozírné škody.
Aplikace ani uživatelé by neměli tento účet používat, je proto možné vytvořit alert pro administrátora databáze, který mu nahlásí každé použití tohoto účtu:
|
Uživatelská hesla
Hesla jsem zatím zmínil pouze v souvislosti s účtem SA. Na heslo k tomuto účtu by se ale měla vztahovat stejná pravidla jako na ostatní hesla ve vaší síti. Měla by být pravidelně měněna, aby se předešlo „brute force“ útokům, měla by mít stanovenou minimální povinnou délku a podobně. Ve větších firmách tato celá agenda spadá do kompetence manažera bezpečnosti, proto než nasadíte svůj server do produkčního prostředí, přesvědčete se, že tím nevytváříte v síti ostrov s nižším zabezpečením.
Veškerá uživatelská jména a hesla jsou uložena v tabulce sysxlogins. Při práci s touto tabulkou můžete použít i pohled syslogins. Hesla jsou defaultně v tabulce šifrována, aby nemohlo dojít k jejich kompromitaci. Pro práci s hesly ale můžete využít nedokumentované funkce PWDCOMPARE(řetězec1,heslo v db), jak si ukážeme na příkladech.
Velice častým nešvarem jsou účty bez hesla. Kromě osvětové činnosti doporučuji jednoduchým způsobem kontrolovat, zda-li uživatelé heslo skutečně používají:
|
Tímto dotazem snadno odhalíte uživatele bez hesla (password is null), připojená podmínka (isntname = 0) z výsledku dotazu odstraní uživatele používající Windows autentizaci, jejich hesla se totiž do tabulky sysxlogins neukládají.
Bohužel, uživatelé si často při zadávání hesla ulehčují práci, a nastavují si heslo stejné jako login. Hříšníky objevíme snadno:
|
Stejně tak jednoduchou modifikací výše uvedeného skriptu můžeme objevit uživatele, kteří používají jednoznaková hesla:
|
Poté, co jsme získali seznam uživatelů se slabými hesly, nezbývá než zjistit, proč taková používají. Během této investigativní činnosti přijdete na mnohé účty, které by v databázi dávno být neměly. U všech ostatních nastavte kvalitní heslo. Připravte se ale na situaci, kdy vás bude nenávidět celá firma, protože přestanou fungovat různé aplikace, DTS balíčky, replikace SQL serverů, DSN spojení a podobně. Když se kácí les, lítají třísky.
Při správě hesel si dejte pozor na uloženou proceduru sp_addlogin. Tuto uloženou proceduru lze spouštět s parametrem @encryptopt = ‚skip_encryption‘ a hesla pak nejsou v tabulce sysxlogins šifrována:
|
Stejně tak je třeba dát si pozor na „trojského koně“ v podobě procedury, která by teoreticky mohla heslo před zašifrováním odeslat nebo uložit do tabulky. Stejný problém se týká i procedury sp_password, pomocí které dochází ke změně hesel.
Doufám, že i tento článek přispěl k lepšímu zabezpečení vašeho serveru, ale bohužel pořád nemáme vyhráno. Vedeme ale 2:0 a příště se naučíme, jak vstřelit další branku.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Jak zabezpečit váš chytrý telefon před kybernetickými hrozbami
30. listopadu 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024