Man tror att det finns tre eller fyra stycken kända varianter av Conficker, även känd som Downadup eller Kido. Conficker A, B, C respektive D.

Den första varianten av Conficker, A, upptäcktes den 21 november 2008. B upptäcktes den 29 december 2008, C den 20 februari 2009 och den senaste versionen, D upptäcktes den 4 mars 2009.

Ursprunget av namnet Conficker är okänt, men man har spekulerat att det är en tysk blandning mellan ”configure” och ”ficken”; det tyska ordet för ”fuck”.

Så infekterar Conficker Windows


Conficker levereras som en dll (dynamic link library) och kan inte köras utan ett externt program för att ladda dll:en. Ett sårbart Windows-system infekteras oftast av Conficker via sårbarheten MS08-067 som publicerades den 23 oktober (se faktaruta).

Genom att använda shellkod injiceras Conficker via Windows Server Service och installerar sig sedan som en autostartad tjänst via svchost.exe för att överleva omstarter. Andra möjliga installationer är genom usb-minnen eller delade mappar på nätverken där dll:en startas via rundll32.exe.

Masken skapar sedan en uppsättning domännamn genom en tidbaserad slumptalsfunktion och försöker sedan ansluta till dessa domäner. I mitten av mars upptäckte säkerhetsexperter att vissa noder laddade ner krypterade binärer från dessa genererade domännamn.

Ett av de första försöken att slå tillbaka mot Conficker var genom denna dns-baserade uppdateringsfunktion som var tänkt att lura masken så att den laddade ner fel binärer. Men Conficker använder rsa-signaturer för att validera nerladdningarna och stöter bort dem om signaturen inte stämmer, och en attack mot rsa var inte möjlig.

Efter en lyckad infektering via Server Service försöker Conficker att täppa till hålet för att motverka attacker från andra malware-program. Genom att ta kontroll över (hooka) den sårbara funktionen NetpwPatchCanonicalize() tar Conficker nu emot remote procedure calls.

Följande figur jämför de första instruktionerna från orginalfunktionen med den ”hookade” funktionen. Det gröna representerar orginalkoden, medan det röda är Confickers hook.

Som vi ser tar JMP-instruktionen fem byte, en byte för instruktionen och fyra byte för minnesadressen, så endast de första fem blir modifierade. Conficker behöver veta vart nästa omodifierade instruktion startar för att kunna spara alla instruktioner på en annan plats, annars skulle exekvering kunna hamna mitt i en instruktion och generera ett fel.

Conficker.C hookar ett antal andra funktioner i olika dll:er på samma sätt. Figur 2 visar en lista av de funktioner som hookas. Anledningen till dessa hooks är för att filtrera de anslutningsförsök som görs till antivirus och säkerhetssidor.

DLL Funktion
dnsapi.dll

netapi32.dll
ntdll.dll
wininet.dll
ws2_32.dll

DnsQuery_A
DnsQuery_UTF8
DnsQuery_W
Query_Main
NetpwPathCanonicalize
NtQueryInformationProcesses
InetnetGetConnectedState
sendto

Än idag vet vi inte vad Conficker är till för. Det har spekulerats att det endast är ett första april-skämt på stor skala, men det kan mycket väl, och mer troligt leda till katastrofala attacker mot vem som helst. När över tio miljoner datorer arbetar tillsammans så kan allt vara möjligt.

I nästa del visar vi hur man tar bort Conficker och hur du skyddar ditt nätverk mot ytterligare attacker.

Fakta

Denna sedan länge åtgärdade sårbarhet lät Conficker sprida sig över nätverk ett bra tag innan den upptäcktes. Det är den största anledningen till maskens framgång. Sårbarheten är ett rpc-anrop till API:t NetpwPathCanonicalize(), som återfinns i netapi32.dll över en smb-anslutning på port 445.

Denna funktion tar ett argument, en sökväg och omvandlar den på följande vis: aaa\bbb\..\ccc blir aaa\ccc.

Sårbarheten låg i rutinen som förkortade sökvägen. Genom att använda en speciellt utformad sträng var det möjligt att flytta sig förbi början av bufferten och kontrollera värdet av funktionens returvärde. Notera att detta inte är samma sak som en klassisk buffer overflow där man skriver över buffertens slut.

Alexander Sotirov har dekompilerat funktionen och publicerat några rader C-kod med kommentarer som förklarar problemet.