Undersøgelsesrapport fra Debian efter serverindbrud

2. december 2003

Debians hold af administratorer og sikkerhedseksperter har endelig kunnet konstatere hvordan indbruddene i fire projektmaskiner er foregået. Den skyldige er dog endnu ikke blevet afsløret.

Pakkearkivet blev ikke ændret af den ubudne gæst

Debians hold af administratorer og sikkerhedsteamet har meget tidligt i forløbet og genetableringsprocessen kontrolleret arkiverne (security, us, non-us). Derfor var det muligt at genåbne sikkerhedsarkivet igen og bekræfte at opdateringen til den stabile udgave (3.0r2) ikke var påvirket.

Hvis projektet havde forventet at blive ramt af indbrud samtidig med at en stabil opdatering blev overført, ville de involverede personer have udsat det. Men da de opdaterede pakker allerede var overført til den stabile udgaves arkiv og spejlserverne, da indbruddene blev opdaget, var det ikke længere muligt at tilbageholde opdateringerne.

Flere metoder baseret på forskellige kontroldata var i anvendelse for at kontrollere pakkerne og sikre at angriberen ikke havde ændret på arkivet:

Tidsforløb

Nedenfor er tidsforløbet fra opdagelsen til genetableringen af maskinerne der var brudt ind i. Alle tidsangivelser er i UTC. Nogle tidsangivelser er kun estimerede, da vores kommunikation ikke indeholdt præcise tidspunkter.

Opdagelse

Torsdag den 20. november Om aftenen (GMT) bemærkede holdet af administratorer flere kerne-oops'er på master. Da systemet havde kørt uden problemer i lang tid, var man parate til at gennemgå systemet var eventuelle hardwareproblemer. Men på samme tid optrådte nøjagtigt de samme problemer på en anden maskine, murphy, hvilket gjorde administratorerne mistænksomme.

Desuden er der på klecker, murphy og gluck installeret "Advanced Intrusion Detection Environment" (pakken aide) for at overvåge ændringer af filsystemet og på omkring denne tid begyndte programmet at advare om at /sbin/init var blevet udskiftet og at værdierne for mtime og ctime til /usr/lib/locale/en_US var ændret.

Yderligere undersøgelser afslørende at årsagen til begge problemer var SucKIT root-kit (1.3b). Programmet indeholder adgangskodeopsnusning og mulighed for at undgå opdagelse (eksempelvis værktøjer til at skjule processer og filer) som installeres direkte i kernen, hvilket medførte at oops'erne blev opdaget.

Udførlig analyse af angrebet

Onsdag den 19. november omkring kl. 17 GMT, blev en opsnuset adgangskode anvendt til at logge ind i en upriviligeret udviklerkonto på værtsmaskinen klecker (.debian.org). Angriberen hentede dernæst kildekoden via HTTP til en (på det tidspunkt) ukendt lokal kerneudnyttelse og opnåede root-rettigheder via denne udnyttelse. Derefter blev SucKIT root-kit installeret.

De samme konto- og adgangskodeoplysninger blev dernæst anvendt til at logge på maskinen master, for at opnå root-rettigheder med den samme udnyttelse og også installere SucKIT root-kit.

Angriberen prøvede dernæst at få adgang til værtsmaskinen murphy med den samme konto. Dette mislykkedes fordi der er begrænset adgang til murphy og dens eneste opgave består i at fungere som postlisteserver, hvorfor kun et fåtal af udviklerne har mulighed for at logge på maskinen. Da det første logon-forsøg ikke lykkedes, anvendte vedkommende sin root-adgang på master til at få adgang til en administrativ konto som anvendes til backup-formål, og fik adgang alligevel adgang til murphy. SucKIT root-kit blev også installeret på denne værtsmaskine.

Næste dag anvendte angriberen på master et program til opsnusning af adgangskoder, til at logge på gluck, få root-adgang og også installere SucKIT root-kit.

En teknisk undersøgelse afslørede præcise datoer og tidspunkter for hvornår programmet /sbin/init blev overskrevet og rootkittet installeret. Analytikerne opdagede også den udførbare fil der blev anvendt til at få root-adgang på maskinerne, som var beskyttet og forvansket med Burneye. Ved udpakning og disassemblering af udnyttelsen, opdagede sikkerhedseksperterne hvilket kernefejl, der havde været anvendt.

Et heltalsoverløb i brk-systemkaldet blev udnyttet til at overskrive kernehukommelse (ændre sidebeskyttelsesbit'er). Ved at gøre dette fik angriberen fuld kontrol over kernehukommelsen og kunne ændre alle værdier i hukommelsen.

Selvom denne kernekode blev forbedret i september af Andrew Morton og kopieret ind i en nylig før-udgivelseskerne i oktober, blev sikkerhedskonsekvenserne af forbedringen ikke taget i betragtning. Derfor blev der ikke udsendt nye sikkerhedsbulletiner af nogen producent. Men efter det blev opdaget at den blev anvendt som en lokal root-udnyttelse, har projektet Common Vulnerabilities and Exposures tildelt CAN-2003-0961 til problemet. Det er rettet i Linux 2.4.23 som blev udgivet sidste weekend og i Debians sikkerhedsbulletin DSA 403.

Linux 2.2.x er ikke sårbar overfor denne udnyttelse fordi der først foretages grænsecheck. Sparc og PA-RISC menes heller ikke at være sårbare, da bruger- og kerneadresser opbevares i et andet adresserum på disse arkitekturer.

Hav venligst forståelse for at vi ikke kan give alle og enhver vi ikke kender, adgang til den anvendte udnyttelse. Bed os ikke om det.

Genetablering

Efter maskinerne blev lukket ned, tog vi aftryk af harddiskene og gemte dem på separate maskiner. De blev distribueret til dem, der foretog den tekniske analyse. De tre maskiner i USA (master, murphy, gluck) blev bagefter geninstalleret og deres tjenester genstartet en efter en, efter den relevante administrator havde undersøgt dem.

På klecker blev dette dog udskudt til en planlagt vedligeholdelse, så sikkerhedsarkivet hurtigt igen kunne gøres tilgængeligt online. På samme tid havde vi desuden ikke konsoladgang til klecker, så genetableringen måtte klares via fjernadgang. Efter et diskaftryk var blevet fremstillet via logon til en seriel konsol til en lokal maskine på en firewall-beskyttet netværksforbindelse, blev root-kit'et fjernet, kernen udskiftet og styrket (hardened), de binære filer dobbeltchecket og sikkerhedsarkivet kontrolleret mod flere forskellige eksterne kilder. Denne maskine vil blive geninstalleret indenfor få uger.

Som en sikkerhedsforanstaltning blev alle udviklerkonti slået fra i LDAP og SSH-nøgler blev fjernet fra de vigtigste maskiner, så der ikke kunne brydes ind i flere maskiner Dette gjort alt offentligt Debian-arbejde umuligt, som krævede upload af filer og adgang til CVS-arkiverne.

Alle adgangskoder som anvendes på quantz (dvs. alle Alioth-, arch- og subversion-adgangskoder) er også blevet gjort invalide. Alle SSH-autoriserede nøgler er også blevet fjernet. Anvend "mistet adgangskode"-system til at modtage en ny adgangskode.

Når alle tjeneser kører igen og maskinerne er blevet sikret tilstrækkeligt, vil LDAP blive nulstillet så udviklerne kan oprette nye adgangskoder. Pt. ved vi dog ikke hvornår det vil ske.

Ved genetablering blev SSH geninstalleret på de maskiner, der var brudt ind i. Derfor er der nye RSA-værtsnøgler og nøgleaftryk til disse værtsmaskiner. Nøglerne vil blive overført til LDAP så snart de er blevet oprettet og kan hentes herfra.

Konsekvenser

Udskift dine adgangskoder!

Da der blev opsnuset adgangkoder på de maskiner, der blev brudt ind i, bør alle udgående forbindelser som involverede en adgangskode også betragtes som værende komprimitterede, dvs. at adgangskoden må anses for at være kendt af angriberen. Den skal derfor omgående ændres.

Vi nogen desuden havde adgang til en Debian-maskine og anvendte den samme adgangskode eller huskesætning (passphrase) på andre maskiner eller nøgler, opfordrer vi kraftigt til at ændre adgangskoden henholdsvis huskesætningen så hurtigt som muligt.

Hvis en SSH-nøgle blev genereret eller opbevaret på en af disse maskiner og blev anvendt til at logge på andre maskiner (fx ved at installere den i .ssh/authorized_keys), bør den også fjernes.

De hemmelige GnuPG-/PGP-nøgler som er fundet på debian.org-maskiner blev også fjernet fra Debian-nøgleringene og derfor deaktiveret.

Udviklere som er bekymrede for deres egne maskiner, bør som minimum køre chkrootkit og kigge på dets uddata. Matt Taggart vedligeholder en tilbageførelse af den aktuelle version til woody på følgende adresse:

Desuden har Wichert Akkerman og Matt Taggart en udførlig liste over sikkerhedsforanstaltninger.

SucKIT Root-Kit

SucKIT er et rootkit som blev præsenteret i Phrack nummer 58, artikel 0x07 ("Linux on-the-fly kernel patching without LKM", af sd & devik). Det er et fuldt funktionsdygtigt rootkit som startes via /dev/kmem, dvs. det ikke skal bruge en kerne med understøttelse af loadbare kernemoduler. Det har en adgangskodebeskyttet fjernadgangs-connect-back-shell som initieres af en forfalsket pakke (der omgår de fleste firewallopsætninger), og kan skjule processer, filer og forbindelser.

Normalt startes SucKIT som /sbin/init når systemet starter, laver en forgrening for at installere sig selv i kernen, åbner en bagdør og starter en kopi af den originale binære "init" fra forældren (med pid 1). Alle efterfølgende udførelser af /sbin/init dirigeres videre til den originale init.

TESOs Burneye-beskyttelse

Burneye er et værktøj til at forvanske binære ELF-filer på UNIX-platformen, som blev præsenteret i Phrack nummer 58, artikel 0x05 ("Armouring the ELF: Binary encryption on the UNIX platform", af grugq & scut). Med anvendelse af værktøjer som TESOs Burneye, kan en angriber ændre et udførbart program og dermed kryptere dets egentlige formål, skjule det for firewall-filtre, system til afsløring af indtrængere, antivirusprogrammer og efterforskere.

Tak til

Pressedækning

Kontaktoplysninger

For yderligere oplysninger, besøg Debians websider eller send en e-mail til press@debian.org.