Säkerhetsproblemet med XP_cmdshell förklarat

Oopps! Upgrade your browser pretty please.Oopps! Upgrade your browser pretty please.

Vi får ibalnd frågor om vilka säkerhetsprobelm som finns med att tillåta att man använder XP_cmdshell i SQL Server. Nedan har jag gjort en sammanställning av detta, inriktat på SQL Server 2005, men det gäller även SQL 2000 och SQL 2008.

XP_Cmdshell

SQL Server 2005 har en inbyggd extended stored procedure som heter xp_cmdshell. Den har som funktion att man kan ropa på den inifrån SQL Server via T-SQL och ange en parameter. Innehållet i parametern kommer att exekveras i serverns operativsystem som ett shell kommando. Man kan alltså skicka samma kommandon som man kan använda i ett kommandofönster i Windows (cmd.exe) Av säkerhetsskäl är xp_cmdshell inaktiverad från start. Om den aktiveras kommer alla kommandon som körs via den att per default köras under samma context och få samma rättigheter som SQL Server service account (Det konto som kör SQL Server). Det kontot har mer rättigheter än ett vanligt user konto, och det utgör ett säkerhetsproblem.

Risker inom SQL Server

För att få exekvera xp_cmdshell måste man vara medlem av den högsta serverrollen i SQL Server , sysadmin. Detta är ett säkerhetsproblem i sig om fel konton hamnar i denna roll, då man kan kontrollera SQL Server till 100% med dessa rättigheter, som av det skälet inte bör delas ut till användare eller applikationer, särskilt inte i en delad miljö. Om man inte är medlem i sysadmin behöver man ha rättigheten ”Control Server” och då exekveras xp_cmdshell med ett proxy account om detta är konfigurerat.

”Control Server” ger i sin tur bland annat följande rättigheter som är olämpliga för applikationer och vanliga användare: ADMINISTER BULK OPERATIONS ALTER ANY CONNECTION ALTER ANY CREDENTIAL ALTER ANY DATABASE ALTER ANY ENDPOINT ALTER ANY EVENT NOTIFICATION ALTER ANY LINKED SERVER ALTER ANY LOGIN ALTER RESOURCES ALTER SERVER STATE ALTER SETTINGS ALTER TRACE AUTHENTICATE SERVER

Risker utanför SQL Server

Det finns en risk att problem uppstår utanför SQL Server. Antigen på den lokala server eller i nätverket/domänen. Hur stor risken är  är beror på vilka rättigheter xp_cmdshell exekveringskontot har. Om kontot har rättigheter i domänen, är det säkerhetsproblem för hela miljön.

Säkerhetsproblemet ligger i att det finns en risk att :

1. Någon skaffar sig access till SQL Server med ett konto som har access till xp_cmdshell. Detta kan beroende på rättigheterna på kontot, ge personen kontroll över servern eller i värsta fall domänen.

2. En bugg i systemet som rätteligen utnyttjar xp_cmdshell skapar säkerhets och stabilitetsproblem. (Startar / Stoppar fel service / exe fil till exempel. Eller andra saker som kan göras via cmd.exe) Det går som vi nämnde tidigare att ändra till att man kör via ett annat konto, ett så kallat proxy konto. Detta konto kan ha lägre rättigheter, specifikt anpassade för att göra en viss uppgift. Detta kan till viss del begränsa risken, beroende på vilka rättigheter kontot måste ha för att kunna genomföra de uppgifter som avsees. Sammanfattningsvis rekommenderar vi inte att man aktiverar xp_cmdshell på SQL Server.

Läs mer om SQL Service’s tjänster för SQL Server på www.sqlservice.se eller kontakta oss här.