Slik hacker du med «fuzzing»

Her bryter vi oss inn på en FTP-server.

En lengre tekststreng benyttes både for å kartlegge bufferen vi utnytter, og for å levere angrepskoden vår.
En lengre tekststreng benyttes både for å kartlegge bufferen vi utnytter, og for å levere angrepskoden vår. Bilde: Marius Jørgenrud
12. apr. 2011 - 12:02

(digi.no): Redpill Linpro holdt nylig et hackerkurs for å lære bort innbrudd i IT-systemer. I første del av denne reportasjen (angrep er beste forsvar) brøt vi oss inn i en Apache-server. Men det var flere metoder som ble demonstrert, og flere angrepsmål.

Sikkerhetseksperter mener det er viktig å vite hvordan «fienden» opptrer. Slik kunnskap er et viktig ledd i å lære hvordan angrep kan avverges.

Vi beveger oss derfor tilbake i klasserommet. Målet denne gangen er å angripe en åpen FTP-server som kjører under Windows XP.

Programvaren som benyttes er på ingen måte ny. Det er heller ikke sårbarhetene som gjør det mulig å ta kontroll over offerets maskin. Poenget er å vise prosessen, lære hvordan en ondsinnet hacker tenker, noen av verktøyene som benyttes, og ikke minst hvilke tiltak som kan hindre innbrudd.

Ved hjelp av kartlegging (skanning) har den angripende part denne gangen funnet en PC, som villig forteller at den kjører en instans av EasyFTP inkludert versjonsnummeret. Serveren er satt opp til å godta også anonyme brukere.

- Hvis jeg skanner et nettverk og får opp ID-en til FTP-serveren kan jeg google meg frem til mulige sårbarheter, og informasjon om hvor enkelt det er å hacke akkurat denne serveren, forklarer sikkerhetseksperten Piotr Linke fra Sourcefire, som leder kurset.

Et stalltips kan være at serveren ikke settes opp slik at den åpent kunngjør hvilken tjeneste og versjon den benytter.

Fuzzing

Nok en gang skal vi utnytte en overflytsfeil i programvarens mellomlager (buffer), men nå skal vi utvide arsenalet med en litt mer avansert angrepsteknikk:

Sikkerhetsekspert Piotr Linke fra Sourcefire. <i>Bilde: Marius Jørgenrud</i>
Sikkerhetsekspert Piotr Linke fra Sourcefire. Bilde: Marius Jørgenrud

Fuzz-testing eller «fuzzing» er en kjent metode for testing av programvare. Filformater og nettverksprotokoller er de mest vanlige målene, men alle slags programmer som tar imot data kan «fuzzes», ifølge Wikipedia.

Dette er også favorittmetoden til den kjente Mac- og iPhone-hackeren Charlie Millier. Han benytter en egenutviklet fuzzer for å finne sårbarheter han kan angripe. Hensikten er å avdekke abnormal oppførsel i et program ved å sende data til ulike minneadresser. At programmet krasjer i denne prosessen er en indikasjon på et mulig hull.

FTP-servere godtar normalt en mengde ulike kommandoer. I dette tilfellet finner vi en sårbarhet i hvordan serveren håndterer kommandoen APPE (append), som er ment for å laste opp ekstra data til en allerede eksisterende fil. Vi begynner med å manuelt legge inn en vilkårlig streng ”AAAAAAAAAAAAAAAAAAA” på en fil.

– Nå driver vi med fuzzing. Mange utviklere tar ikke høyde for å begrense datainput, sier Piotr.

Han gir oss et script for å automatisere prosessen med å logge seg inn anonymt på FTP-serveren, legge inn nevnte kommando og stadig øke strenglengden.

Serveren krasjer når vi kommer til rundt 300 tegn.

- Hmm. La oss analysere hva som skjedde.

Fordi vi angriper vår egen server kan vi overvåke minnelekkasjer i sanntid. En angriper kan opprette et testmiljø med samme programvare for å oppnå den samme fordelen. I forkant av fuzzingen satte vi opp Immunity Debugger til dette formålet.

Dette programmets oversikt over CPU-registrene i minnet avslører at EDI-registeret ble overbelastet med tekststrengen vi la inn.

– Dette forteller oss at vi kan legge noe inn i dette registeret, sier Piotr.

Det påpekes at hver sårbarhet opptrer ulikt. Noen operativsystemer har også egne mekanismer som tilfeldiggjør hvilke minneadresser som benyttes, som sikkerhetstiltak nettopp mot metoder som de vi benytter nå. Også slike mekanismer kan omgås, men det er mer komplisert og ikke del av pensum i dette kurset.

- Vi må vite hvor i minnet vi befinner oss og hvor stor denne bufferen er. Det gjør vi ved å legge inn innhold vi kan spore senere.

Dette kan gjøres ved å skape en tekststreng med et gitt mønster, som er unik i hele strengens lengde. Å legge dette inn i bufferen gjør det mulig å avdekke strukturen i vår buffer overflytsfeil, inkludert størrelsen på bufferen og nøyaktig hvor i minnet den befinner seg.

Lengden på bufferen er vesentlig. Her skal vi nemlig legge inn angrepskoden vår. Hullet vi har funnet må romme hele koden. Vi har akkurat 280 bytes å bolte oss på, viser det seg.

Piotr henviser til Metasploit-prosjektet, et rammeverk og en samling kraftige verktøy utviklet i sikkerhetsøyemed blant annet til penetrasjonstesting.

Metasploit gir oss eksempler på kode som kan sprøytes inn i nevnte buffer, for eksempel DLL inject eller kommandoer som "Windows Execute net user /add". Vi velger oss sistnevnte som kan benyttes for å opprette en bruker med administrative rettigheter under Windows. Koden måler bare 215 bytes.

Vi generer koden i Metasploit og ender opp med et resultat på 240 bytes. Dette legger vi så inn i angrepsscriptet vårt, sammen med en returadresse.

Returadressen peker tilbake til starten av bufferen vår. Resultatet er at FTP-serveren ender opp med å kjøre hele koden vi legger inn.

Piotr anbefaler bruk av en IPS-løsning («intrusion prevention system») for å fange opp angrep av typen vi har vært gjennom her. I tillegg anbefaler han regelsett i slike løsninger som kan begrense hvor mye data som kan legges inn, samt hvilke kommandoer som er tillatt brukt i nettverket. Det kan gi potensielle angripere langt mindre handlingsrom.

Se også del 1 i denne reportasjeserien: Angrep er beste forsvar.

    Les også:

Les mer om:
Del
Kommentarer:
Du kan kommentere under fullt navn eller med kallenavn. Bruk BankID for automatisk oppretting av brukerkonto.
Tekjobb
Se flere jobber
En tjeneste fra