onsdag den 4. februar 2009

Begrænsede brugerrettigheder afhjælper sårbarheder

Begrænses brugerens rettigheder, kan hele 92 procent af de kritiske Microsoft sårbarheder afværges. Det er ikke nogen nyhed at sådanne begrænsninger kan være positive - men tallene fra BeyondTrust er alligevel overraskende.

Når en Windows XP installeres, er det de færreste der opretter en decideret administratorkonto med det eneste formål, at kunne servicere Windows systemet når der kræves administrative rettigheder. På størstedelen af de private maskiner er der én aktiv konto - og den er som standard medlem af Administrator gruppen.

Ifølge
BeyondTrust, kunne 92 procent af de kritiske Microsoft sårbarheder (i 2008) være reduceret ved, at brugeren ikke have administrative rettigheder. Faktisk så har Microsoft selv anbefalet eller berørt dette emne i omkring 70 procent af deres security bulletins de har udsendt i 2008.

Alene
fjernelse af de administrative rettigheder ville have højnet sikkerheden og resistensen i 94 procent af de Microsoft Office sårbarheder der blev rapporteret i 2008. Det samme var gældende for 89 procent af Internet Explorer sårbarhederne og for 53 procent af sårbarhederne i Windows operativsystemet.

Nu er tal taknemmelige og det er lidt svært at påvise (med mindre man har oseaner af tid) at tallenes pålydende holder vand. Men det er fakta, at begrænsede konti kan og vil reducere mulighederne for eksempelvis malware. Det skyldes blandt andet, at det er i brugerens sikkerhedskontekst at den indledende inficering starter.

Når der kræves admin rettigheder

En af begrundelserne for ikke at logge ind som en begrænset bruger er, at det gør installering og hverdagsbrug ulideligt eller helt umuligt. Det er ikke korrekt. Hvis det forholdt sig sådan, ville flertallet af de erhversmæssige Windows installeringer ikke kunne fungere.

Så lad os sige det som det er: Årsagen til begrænsede konti sjældent bruges på private Windows computere skyldes enten manglende viden eller direkte dovenskab :o)

I de tilfælde, hvor man ikke kan komme udenom at skulle udføre en handling under en administrativ kontos frie muligheder, mangler Windows de integrerede funktioner som Unix/Linux tilbyder. Her har man muligheden for at afvikle et program med administrative rettigheder ved at bruge su (Super User) eller sudo (Super User Do) kommandoen.

Men der findes dog nogle muligheder i og til Windows, som tillader begrænsede brugere at bryde ud et kort øjeblik. Men kontoens overordnede grænser er stadig bibeholdt.

Spræg rammerne midlertidigt

Den kommando i Windows, som kommer nærmest sudo kommandoen fra Linux, hedder "RunAs". Her kan man afvikle et program under en anden brugers kontekst, oftest administrator, og dermed midlertidigt bryde ud af de sikkerhedsmæssige rammer kontoen ellers er begrænset af.

Jeg sværger til at bruge RunAs fra kommandolinjen, da det give nogle muligheder som den grafiske udgave (i højreklikmenu) ikke har. Den vigtige mulighed er /env parameteren, der sørger for, at det er den begrænsede brugers miljø der benyttes når RunAs afvikler et program under en anden brugers kontekst.

Der er rapporter flere tilfælde på nettet, hvor brugere ikke har kunnet bruge RunAs til afvikling af programmer placeret på netværksdrev eller ved direkte UNC sti. Jeg har udelukkende benyttet RunAs til afvikling af lokale filer. Her følger et par eksempler på brugen ad RunAs:

Kør Windows brugergrænsefladen med administrative rettigheder:
C:\> runas /user:administrator "explorer.exe /separate"

Start Internet Explorer med
administrative rettigheder:
C:\> runas /user:administrator /env "c:\Program Files\Internet Explorer\Iexplore.exe"

Tilføj/fjern bruger fra lokal administrator gruppe

En anden mulighed udnyttes i et smart lille batch-script fundet på nettet. Her tilføjes brugeren til den lokale administrator gruppe og fjernes igen efter endt brug (MakeMeAdmin.cmd):

REM CUSTOMIZATION:
REM The following values may be changed in order to customize this script:
REM
REM * _Prog_ : the program to run
REM
REM * _Admin_ : the name of the administrative account that can make changes
REM to local groups (usu. "Administrator" unless you renamed the
REM local administrator account). The first password prompt
REM will be for this account.
REM
REM * _Group_ : the local group to temporarily add the user to (e.g.,
REM "Administrators").
REM
REM * _User_ : the account under which to run the new program. The second
REM password prompt will be for this account. Leave it as
REM %USERDOMAIN%\%USERNAME% in order to elevate the current user.
REM ********************************************************************

setlocal
set _Admin_=%COMPUTERNAME%\Administrator
set _Group_=Administrators
set _Prog_="cmd.exe /k Title *** %* as Admin *** && cd c:\ && color 4F"
set _User_=%USERDOMAIN%\%USERNAME%

if "%1"=="" (
runas /u:%_Admin_% "%~s0 %_User_%"
if ERRORLEVEL 1 echo. && pause
) else (
echo Adding user %* to group %_Group_%...
net localgroup %_Group_% "%*" /ADD
if ERRORLEVEL 1 echo. && pause
echo.
echo Starting program in new logon session...
runas /u:"%*" %_Prog_%
if ERRORLEVEL 1 echo. && pause
echo.
echo Removing user %* from group %_Group_%...
net localgroup %_Group_% "%*" /DELETE
if ERRORLEVEL 1 echo. && pause
)
endlocal

Batch-scripted er måske ikke raketvidenskab, men kan bruges til inspiration.

Tools til formålet

Andre har taget en helt anden vinkel på problemet. De har udarbejdet applikationer der forsøger at efterligne Linux's sudo kommando. Den jeg har i tankerne kaldes for "Sudo for Windows". Målt op mod RunAs har dette værktøj to primære forskelle.

For det første behøver den begrænsede bruger ikke at kende den administrative brugers navn og password. Når rettighederne midlertidigt skal løftes op - skal brugeren blot bekræfte med sit eget kendte password. Sekundært er det kun brugere tilføjet en specielt oprettet lokalgruppe, der kan afvikle sudo-kommandoen.

Som dette program, virker de fleste af samme type ved, at der installeres en server-service der kommunikerer med et klientprogram. I dette tilfælde hedder klientprogrammet "sudo.exe". Det er server-servicen der håndterer den rettigheds-by-pass der ønskes. Hvorvidt sudo-servicen kan udnyttes - er endnu ikke afprøvet. Det er altid tricky når en en service er involveret.

"Sudo for Windows" er blot et af mange programmer der prøver at udvidde mulighederne i forhold til RunAs. Men pointen er stadig den samme: Brugerkontoen er begrænset for at mindske mulighederne for misbrug - men det er muligt at få forholdsvis let adgang til de kræfter og muligheder der ligger gemt i en administrativ konto.