Virusmakernes pinligste flauser

... har'u hørt om virusprogrammereren som ikke kunne skrive C?

Publisert Sist oppdatert

LARVIK/OSLO: Det evige våpenkappløpet mellom virusmakere og antivirus-utviklere ruller videre, i høyere tempo enn noensinne. Med kreativitet og programmeringsferdigheter som våpen utkjemper duellantene på hver side av loven en knallhard holmgang. Men i blant detter en av duellantene på magen, så vann og viruskode spruter.

Tyske Felix Leder jobber i Norman, der han forsøker å beskytte kundene mot ondsinnet programvare. På datasikkerhetskonferansen ISF i Larvik i forrige uke fortalte han om de gangene det har gått galt. For noen:

Fail

- Skurkene er alltid på jakt etter gode sikkerhetshull å utnytte. Men av og til glemmer de å sjekke sin egen kode for tilsvarende hull. Slik som med såkalte Sykipot. Det var en smart trojaner, som utnyttet totalt ukjente sårbarheter i Adobe Flash og Microsoft Internet Explorer. En riktig sofistikert sak, som kunne utføre kommandoer på infiserte systemer.

Men; i analyse av programkjøringen fant sikkerhetsfolka en kjørekommando de likte. Med den var det rett og slett mulig å avinstallere trojaneren. Og vips, hadde de alt de trengte for å fjerne trojaneren, fortalte Leder.

Slik viste det seg mer eller mindre å også være med Conficker, som kom i fire versjoner og som hadde for vane å sjekke at det alltid var siste versjon som lå inne. For å installere ny versjon, hadde den en kommando for å fjerne den gamle. Vips, det var alt som trengtes for å fjerne trojaneren.

Failfail

Litt mer uheldig med kodingen var dog skaperne av den falske antiviruspakken Best Antivirus 2011. Ved oppstart sjekket den med prosessoren om den kjørte på en virtuell maskin eller reell vare, meningen var å kun la seg installere på en reell maskin.

- En analyse viste en megatabbe i C-koden. Det er forskjell på = og ==. Ettersom antiviruspakken kun brukte = i koden for å sammenligne hva den var programmert til med hva prosessoren sa, medførte det rett og slett at programmet alltid trodde det var i et virtuelt miljø – og dermed heller aldri ble installert.

Zeus hadde også en kjempetabbe som fremstår som utforståelig for sikkerhetsbransjen. Botnettet samlet data og dumpet det et uvisst sted. Heltene fant kjapt ut hvor den såkalte dropzonen var, og til deres store forbauselse endte de ved å følge ip-adressen – hold deg fast – i et helt vanlig PHPmyadmin-brukesnitt, uten passordsikring.

For de uinnvidde er PHPmyadmin et system for å håndtere MySQL-databaser, men det pleier å være et stalltips å passordbeskytte ettersom systemet i administratormodus lar deg gjøre hva du vil med databasene.

I databasen fant i alle fall heltene et MD5-hashet Zeus-masterpassord som de knakk – og dermed kunne ta over hele botnettet.

Avansert puslespill, men ikke uløselig

Waledac var ganske så smart, men ikke smart nok. Den bestod i et distribuert nettverk der kommandoer ble sendt fra en ukjent plass i kjeden. Det sikkerhetsforkjemperne visste var at det fantes et sett maskiner som kontrollserveren stolte ekstra på, og sikkerhetsforskerne var gira på å komme inn i disse lukkede kretser for å få kommando rett fra kommandoserver.

De fant etter hvert ut hva som var teknikken for dette, ved å la en maskin spamme i 45 minutter ble den oppgradert i tillit. Senere fant de også en -r-kommando (relay) som lå som en liten tabbe fra programmerernes side og som sparte heltene for 45 minutter. Sistnevnte var en liten tabbe, men ikke tabben som veltet elefanten.

De fant ut at informasjon kom i XML. XML er veldig skriftlig og uheldig, derfor hadde programmererne kjørt Base64 på det for å få det uleselig. Dernest en heftig AES-kryptering, etterfulgt av Bzip. Som overføringsprotokoll gikk det i http for å kunne snike seg unna brannmurenes blokkader.

Krypteringen ville vært beinhard å knekke. Men sikkerhetsforskerne gjorde en annen overraskende oppdagelse et annet sted, de fant to hardkodede nøkler i programkoden. Dermed kunne de sniklytte på trafikken som kom fra kommandoserveren. Når de skjønte seg på denne, var de klare til å ta grep, som de gjorde ved et mellommann-angrep, der de snappet opp det som ble sendt fra kommandoserver og sendte noe annet videre.

- Waledac var avansert, men de glemte å randomisere koden. Det ble det svakeste leddet i kjeden, sier Leder.

Etter hvert fikk de analysert XML-filen, og der var det mye spennende. Blant annet en link til et jpg-bilde av Arnold Schwarzenegger. Mange ville kanskje latt det bli med det, og tatt det som et slags sarkastisk politisk budskap, men de skarpeste forskerne stusset litt over denne fila.

Det viste seg å være det eldste trikset i boka, steganografi. Inne i binærkoden til bildefilen lå en kjørbar Waledac-fil, selveste rosinen i pølsa. Ved å bytte bildet og sende ut det nye, uten kjipe programmer innbakt, var i praksis botnettet lammet.

P2P-trøbbel

Storm-botnettet var basert på P2P, altså nok et distribuert nettverk, og dermed var det igjen vanskelig å ta ned kommandoserveren, fordi det er vanskelig å si hvem som er kommandoserveren i slike nettverk.

Men bakmennene burde kanskje valgt seg en annen protokoll.

- Storm brukte Kadc-biblioteket, som er en skikkelig dårlig åpen kildekode-programvare. Jeg finner det lettere å reverse-engineere koden enn å lese selve kildekoden i C, sier Leder.

Skurkene hadde lagt inn en kryptering i biblioteket. De hadde tydeligvis også slitt med den rotete koden, for å være sikker på at deres inngripen ikke fikk følgefeil hadde de lagt inn kryptering rett før data sendes og dekryptering rett etterpå.

Data ble sendt over http-protokoll, og der er det enkelt å manipulere id-signaturen. Skurkene hadde gjort det, men det gikk kanskje litt fort i svingene. I stedet for å skrive Windows hadde de skrevet Windoss. De hadde senere én korrigering av selve versjonsnummeret på Windows, men selv ikke da fikk de med seg at det stod "Windoss".

Vi er alle ukrainere

Heller ikke Conficker var uten feil. Den kunne angrepet fire ganger så mange maskiner, om det ikke var for mangelfull lesing av manual.

For å infisere seg videre til tilfeldige ip-adresser brukte den en nummergenerator, og hvorfor gjenoppfinne hjulet? Nærmere bestemt brukte den Windows sin egen innebygde.

Generatoren skulle generere fra 0 til RAND_MAX, men de hadde glemt å sjekke hva RAND_MAX var. Resultatet ble at Conficker faktisk bare infiserte en fjerdedel av mulige adresser i IPv4-protokollen.

Artig hadde Felix Leders kolleger det også med Conficker.A. Den sjekker offerets lokalisering via vanlige, offentlige geoIP-databaser som blir lastet ned når viruset starter opp, og angriper ikke om maskinen er i Ukraina. Antivirusfolka tok kontakt med en geoIP-database og hørte om de kunne være greie og legge inn en veldig enkelt konfigurasjonsfil - der alle ip-er ble satt som ukrainske.

Og vips, gikk infeksjonsraten plutselig dramatisk ned.

Seier.