Compartilhar via


Service hardening

I Windows Vista er det gjort mye for å øke sikkerhet og en av tingene er å gjøre systemet med servicer mer robust og sikkert.

 

Bakgrunn

På ulik statistikk rundt angrep og svakheter ser man at det ofte er System Servicer som angripes, antagelig av en rekke ulike grunner, listet et kort utvalg under:

  • Servicen eksisterer på et stor antall maskiner
  • Servicen kjører og er alltid tilgjenglig
  • Servicen kjører med høye privilegier (ofte mer enn nødvendig)

 

På Windows XP var det et par begrensninger som gjorde det vanskelig å øke sikkerheten rundt servicene. For det første kjørte nesten alle servicene under samme service host, for det andre hadde de ikke egen sid (security id) og for det tredje kjørte de i samme miljø som brukeren.

Det var også enkelte vanlige måter å gjøre ting på som gjorde servicene mer utsatt. For eksempel så vi at enkelte utviklet servicer som viser brukergrensesnitt til brukeren. At det altså ikke var et eget program som stod for det grafiske grensesnittet, men servicen selv som viste dette. Dermed kunne Window messages sendes til dette grensesnittet fra brukeren og om servicen ikke håndterte disse korrekt kunne man i enkelte tilfeller utnytte servicen til å kjøre kode man selv valgte. Ettersom de aller fleste servicene kjørte/kjører med høye rettigheter var dette et stort sikkerhetsproblem. Spesielt på Terminal Servere er dette et sikkerhetsproblem da en service betjener flere brukere og man strengt tatt ikke har noen garanti for at man viser grensesnittet til riktig bruker..

Det var også vanskelig å differansiere rettighetene mellom ulike servicer fordi de kjørte under samme konto og service host, uten å ha egen sid. Mange kjører også som Local System, som gir enda litt mer privilegier enn Administrator. Et stort problem var blant annet at servicer hadde Debug privilegiet, som gjorde at de kunne påvirke andre prosesser igjen og.

Det var kort om bakgrunnen...

 

Forbedringer i Windows Vista

Forbedringen totalt kalles service hardening og til sammen gjør alle elementene akkurat det navnet tilsier, gjør servicene og systemet rundt mer robust og hardført. Under har jeg laget en liten liste med endel av forbedringene:

  • Hver Service har sin egen SID. Dette gjør at man kan gi service tilpasset tilgang og rettigheter
  • Det er flere service grupper, med hver sin service host, som gjør at man kan plassere ulike typer servicer atskilt og dermed begrense risikoen for at servicer kan utnytte hverandre så og si. For eksempel vil servicer uten netttilgang skilles ut fra de som krever det.
  • Hver Service kan angi sine egne sikkerhetsinnstillinger under installasjon for å sikre seg mot å bli misbrukt i et angrep. En service kan derimot ikke gi seg selv mer rettigheter enn kontoen den blir installert til å kjøre under, men den kan gi mindre. For eksempel trenger de færrestene servicene ,som kjører under Local System, å ha Debug privilegiet. Som med managed code kan man gjennom et manifest angi at servicen f.eks ikke skal ha tilgang til registry e.l.
  • Hver service som kjøres settes opp med en ACL (Access Control List) som gjør at prosesser på eget nivå ikke har tilgang til hverandre, en service må derfor ha spesifikke satte eller være et "nivå" høyere for å kunne skrive til en annen service.
  • "Session 0 isolering". Tidligere var første sesjon på systemet den første brukeren som logger på OG alle servicene. Nå er servicene skilt ut i første sesjon, "Session 0", og første bruker får sesjon 1. Det vil si at i praksis er servicene mer atskilt fra brukerene. En service kan heller ikke vise brukergrensesnitt til brukeren på hans desktop. Det motvirker enda et av problemene beskrevet over.
  • Hver service kan også ha spesifikk tilgang til nettverket, som Firewallen sørger for at overholdes.

 

Leser litt mer her på Technet om Service hardening.

Senere kommer en posting som dreier seg litt om dette og, nemlig kort om de ulike lagene i Windows Vista, fra kernel og ut. Her