Lavet af undertegnede

Klokken var lidt i 5, da malware-artisten Freddie “Kvik” Sølv sad ved sin computer og lagde sidste hånd på sit mesterværk: en malware der skulle inficere samtlige af verdenens IoT-toastbrødristere og derved gøre morgenen virkelig nederen for alle. Pludselig blev døren sparket op, og politiets særlige brunchenhed myldrede ind og anholdte Freddie. På Freddies computer fandt politiet en særlig fil, der fik stor betydning for efterforskningen, der i sidste ende fik Freddie dømt til fængsel og grød uden sukker til at drysse på. Hvad viste denne fil, som var så vigtig for efterforskningen?

Anvendt software: wireshark, netcat, objdump

Indledende starter man med en pcap-fil der er en packet capture fil indeholdende data fra et USB-device.

Ved at åbne filen i Wireshark kan man ved gennemgang af dataen se, at det stammer fra et USB-keyboard. Vi skal derfor prøve at genskabe hvad der er blevet indtastet. Der findes programmer og scripts der kan gøre dette, men lad gøre det manuelt.

En dataframe fra et USB-keyboard er indrettet således, at de sidste 8 bytes indeholder den indtastede data. Nærmere bestemt vil den første byte angive en modifier tast, f.eks. ALT, CTRL, SHIFT, osv. Den tredje byte vil angive hvilken tast der er trykket. Hvis man f.eks. ser i denne c-kildekode vil man kunne se hvilke byteværdier der betyder hvilke taster. Så en dataframe bestående af: 00:00:09:00:00:00:00:00 vil betyde at “f”-tasten er anvendt. Derimod vil en dataframe bestående af: 02:00:09:00:00:00:00:00 betyde at “f”-tasten samt venstre shift er anvendt, så det giver “F”.

For at få et bedre overblik kan man anvende t-shark til kun at vise de relevante dataframes(usb.capdata) fra filen. Herefter kan man enten gennemgå hver dataframe manuelt, eller man kan skrive et hurtigt og simpelt script, ala if “00:00:09” then f. Man skal huske at tage højde for BACKSPACE.

Man vil således ende med tekststrengen: Jeg har lige testet min toastermalware og ingen antivirus detecterede den! Fedt man. Den har sha 256 42c3d3ba5c099106fc21ab53908495d5ef2ff9fcaa890b1c7ef4386bc0893f2f

Da vi ved at vores anholdte har lavet en malware og at en sha256 værdi bliver nævnt, kunne vi jo tjekke om den anholdte har testet sin malware imod virustotal.com. Og det havde han! Under kommentarsiden kan man se, at brugeren “OpSecKing” nævner at malwaren sender teksten “HELLO” til en IP-adresse via port 9999.

Så lad os sende teksten HELLO til IP-adressen. Dette kan man bl.a. gøre med netcat. Serveren svare tilbage med et link. Og ved besøg til siden får vi et link til et lille linuxprogram.

Når programmet “g” bliver kørt spytter det en tekst ud samt et link. Dette link ændre sig dog hvert sekund og er ikke fortløbende. Med programmet objdump kan vi se hvilke library-calls programmet foretager sig. Af interessande calls er srand, time og rand. Disse funktioner gør følgende:

srand: The C library function void srand(unsigned int seed) seeds the random number generator used by the function rand.

rand: The C library function int rand(void) returns a pseudo-random number in the range of 0 to RAND_MAX.

time: The C library function time_t time(time_t *seconds) returns the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds. If seconds is not NULL, the return value is also stored in variable seconds.

Så måske srand seeder rand’s random generator via time der henter den aktuelle unixtime ud? I programmet nævnes et tidspunkt som omsat til unixtime bliver 654052332. Hvad hvis vi kunne tvinge programmets time-call til at bruge dette tidspunkt? Heldigvis er det nemt.

Med LD_PRELOAD tvinger vi vores program til at bruge andre libraries end de normale. Så hvis vi skaber en time funktion med ovenstående kode i C og kompilere den med følgende kommando: gcc -fpic -shared -o time.so time.c får vi et nyt library. Dette tvinger vi så programmet til at bruge med LD_PRELOAD hvorefter vi får et nyt link. Og besøge vi dette link får vi det korrekte flag.