“En angripare har placerat skadlig kod på att flertal mål. Kan du analysera nätverksinspelningen och bilda dig en uppfattning om vad som händer?
(177129 bytes, sha256: 0dc55932c2f4037f6c02d784c8e7f6f4fc4977167b17995b4df9833d9734f0e7)”
Frågor och svar#
- Vilka kommunicerar? Rita en bild.
Nedan följer en översiktsbild av nätverkskommunikationen över tid (genererad med detta script), samt en tabell med IP-adresser för mål respektive angripare (Command & Control-/C2-servrar).

| Mål | C2-servrar | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
- Vilken händelse är viktigast ur angriparens perspektiv?
Den dittills viktigaste händelsen var förmodligen när angriparna lyckades
infektera det första målet i 192.88.99.0/24 med den skadliga koden. Då tycks
nämligen angriparna byta fokus helt. Den absolut viktigast händelsen kan man
däremot våga påstå var när de insåg att de blivit upptäckta. Efter detta
avbryter de all kommunikation med målen, och de ligger lågt i ett par månader.
- Vad är syftet med operationen?
Syftet var mest troligen att exfiltrera dokument kopplade till den forskning som
bedrivs på subnätet 192.88.99.0/24.
Sammanfattning av incidenten#
Den skadliga koden tillåter angriparna att kommunicera med den infekterade datorn och exfiltrera filer och dokument. Först letade de efter mål som används i samband med geometriforskning. Sedan, när de infekterat en sådan dator och nu visste vad de är ute efter, lyckades de infekterade ytterligare fem stycken. Från dessa kunde de exfiltrera en rad känsliga dokument knutna till forskningen. Vid ett tillfälle blir angriparna påkomna; någon har tagit bort koden från två av datorerna och undersöker den i en Sandbox. Angriparna avbryter då all kontakt med datorerna och håller sig undan. Efter några månader återupptar de arbetet, infekterar nya datorer och lyckas exfiltrera ytterligare två dokument.
Tekniskt detaljerad beskrivning#
Nedan följer först en sammanfattning av kommunikationsprotokollet som använts. Sedan följer en något mer detaljerad genomgång av angreppet, där viktiga/intressanta detaljer lyfts. Där visas sammanfattningar av nätverkskommunikationen för representativa mål, men sammanfattningar för samtliga mål genereras enkelt med ett Python-script (det kan ta en stund att köra):
python print_tcp_streams.py capture.pcap
Angreppet delas upp i fyra delar:
Angriparna letar efter mål kopplade till forskningen.
Angriparna har funnit rätt subnät, riktar sitt angrepp och exfiltrerar data.
Angriparna blir påkomna och städar upp.
Angriparna återupptar arbetet.
Kommunikationsprotokollet#
En mål som infekterats med den skadliga koden upprättar en TCP-anslutning till en C2-server varje gång dessa ska kommunicera. Varje informationsutbyte utgörs av två meddelanden: först ger målet ifrån sig en statusuppdatering, varpå C2-servern svarar med den IP-adress som nästa statusuppdatering ska ges till samt nästa kommando att utföra.
Mål C2
{status}--------------------->
<---------{nästa IP, kommando}
Nästa statusuppdatering görs sedan till den angivna IP-adressen och “svarar” på kommandot. Tre olika kommandon och svar har observerats:
| C2-kommando | Svar från mål | Tolkning |
|---|---|---|
ok | ok | Ny IP-adress ges utan kommando. Används för att upprätthålla kontakten. |
survey,<IP> | survey complete | Gör en granskning av målet och/eller dess omgivning (eller liknande) och överför resultatet till den angivna IP-adressen. |
delete | Inget svar | Målet ombeds ta bort den skadliga koden och avsluta kontakten. |
Ett svar på survey-kommandot skickas så snart granskningen är klar. Ett svar
på ok-kommandot skickas under nästkommande förutbestämda tidsintervall: en
gång varje morgon, eftermiddag och kväll, tisdag-lördag.
Utöver det beskrivet ovan observeras mål ibland även skicka statusuppdateringen
file uploaded, tillsammans med en filsökväg och en IP-adress till vilken filen
i fråga laddats upp. Målet tycks här meddela till C2-servern att ett dokument
exfiltrerats till den angivna IP-adressen. Denna uppdatering görs inte som svar
på något kommando, utan valet av fil att exfiltrera samt tidpunkt för detta görs
på annat sätt.
1. Angriparna letar efter mål kopplade till forskningen#
I ca en månads tid placeras den skadliga koden något sporadiskt på olika datorer
i subnäten 10.99.12.0/24 och 198.18.0.0/24. I samtliga av dessa fall hålls
endast förhållandevis kort kommunikation innan dess att angriparna överger
datorn.
- För samtliga datorer i
10.99.12.0/24skickasdelete-kommandot direkt:
##########################
###### 10.99.12.136 ######
##########################
Src: 10.99.12.136, Dst: 10.34.2.124:
---------> {"status": "ok", "ip": "10.99.12.136", "username": "Administrator"}
<--------- {"next_checkin": "10.34.2.124", "command": "ok"}
---------> {"status": "ok", "ip": "10.99.12.136", "username": "Administrator"}
<--------- {"next_checkin": "10.34.2.124", "command": "delete"}
- För samtliga datorer i
198.18.0.0/24skickas förstsurvey-kommandot, följt avdelete:
#########################
###### 198.18.0.96 ######
#########################
Src: 198.18.0.96, Dst: 10.34.2.124:
---------> {"status": "ok", "ip": "198.18.0.96", "username": "EFV64788"}
<--------- {"next_checkin": "10.34.2.124", "command": "ok"}
---------> {"status": "ok", "ip": "198.18.0.96", "username": "EFV64788"}
<--------- {"next_checkin": "10.34.2.124", "command": "survey,198.51.101.91"}
---------> {"status": "survey complete", "additional": "uploaded to 198.51.101.91", "ip": "198.18.0.96", "username": "EFV64788"}
<--------- {"next_checkin": "10.34.2.124", "command": "ok"}
---------> {"status": "ok", "ip": "198.18.0.96", "username": "EFV64788"}
<--------- {"next_checkin": "10.34.2.124", "command": "delete"}
- Ett dokument exfiltrerades från
198.18.0.241, men den tycks inte ha varit av intresse då angriparna inte upprätthåller kontakten för att exfiltrera annat:
##########################
###### 198.18.0.241 ######
##########################
Src: 198.18.0.241, Dst: 10.34.2.124:
---------> {"status": "ok", "ip": "198.18.0.241", "username": "EFV41415"}
<--------- {"next_checkin": "10.34.2.124", "command": "ok"}
---------> {"status": "ok", "ip": "198.18.0.241", "username": "EFV41415"}
<--------- {"next_checkin": "10.34.2.124", "command": "survey,198.51.101.91"}
---------> {"status": "survey complete", "additional": "uploaded to 198.51.101.91", "ip": "198.18.0.241", "username": "EFV41415"}
<--------- {"next_checkin": "10.34.2.124", "command": "ok"}
---------> {"status": "file uploaded", "additional": "uploaded to 198.51.101.91", "filename": "C:\\Users\\EFV41415\\Mina Dokument\\Ekonomi 2020.xls", "ip": "198.18.0.241", "username": "EFV41415"}
<--------- {"next_checkin": "10.34.2.124", "command": "ok"}
---------> {"status": "ok", "ip": "198.18.0.241", "username": "EFV41415"}
<--------- {"next_checkin": "10.34.2.124", "command": "delete"}
Endast enstaka mål tycks här ha varit värda att upprätthålla kontakten med,
närmre bestämt 10.1.0.22, 172.16.0.153 och 192.0.0.74. IP-adresserna i sig
sticker ut från mängden och det är möjligt att de ansågs vara mer “strategiska”
mål i angriparnas ögon, trots att inget exfiltreras från dem.
2. Angriparna har funnit rätt subnät, riktar sitt angrepp och exfiltrerar data#
Så snart en dator i subnätet 192.88.99.0/24 infekterats (där forskningen
bedrivs) upphör angriparna helt att leta någon annanstans. Ingen ny dator
utanför detta subnät infekteras, åtminstone inte förrän långt senare, och varje
ny dator som infekteras inom subnätet håller kontinuerlig kontakt med
angriparna.
Under 6-7 veckor infekteras sammantaget sex datorer i det intressanta subnätet.
Totalt exfiltreras sex dokument från två av målen (användare geo001 respektive
geo004) under tidsperioden till 198.51.101.91. Samtliga dokumenten är
kopplade till forskningen:
| Datum | Ursprung | Filnamn |
|---|---|---|
| 2020-02-07 | 192.88.99.189 | /mnt/documents/research/triangle counting.docx |
| 2020-02-08 | 192.88.99.189 | /mnt/documents/research/circle - overview.docx |
| 2020-02-08 | 192.88.99.189 | /mnt/documents/research/circle - method for finding corners.docx |
| 2020-02-18 | 192.88.99.189 | /mnt/documents/research/triangles and circles.docx |
| 2020-02-27 | 192.88.99.91 | /mnt/documents/advanced methods for straight lines.doc |
| 2020-03-12 | 192.88.99.189 | /home/geo004/pointy sharp shape.txt |
Se exempelvis nätverkskommunikationen för 192.88.99.91 (geo001):
##########################
###### 192.88.99.91 ######
##########################
Src: 192.88.99.91, Dst: 10.34.2.173:
---------> {"status": "ok", "ip": "192.88.99.91", "username": "geo001"}
<--------- {"next_checkin": "10.34.2.173", "command": "ok"}
---------> {"status": "ok", "ip": "192.88.99.91", "username": "geo001"}
<--------- {"next_checkin": "10.34.2.173", "command": "survey,198.51.101.91"}
---------> {"status": "survey complete", "additional": "uploaded to 198.51.101.91", "ip": "192.88.99.91", "username": "geo001"}
|<------ {"next_checkin": "10.34.2.173", "command": "ok"}
x18|------> {"status": "ok", "ip": "192.88.99.91", "username": "geo001"}
<--------- {"next_checkin": "10.34.2.173", "command": "ok"}
---------> {"status": "file uploaded", "additional": "uploaded to 198.51.101.91", "filename": "/mnt/documents/advanced methods for straight lines.doc", "ip": "192.88.99.91", "username": "geo001"}
|<------ {"next_checkin": "10.34.2.173", "command": "ok"}
x9|------> {"status": "ok", "ip": "192.88.99.91", "username": "geo001"}
<--------- {"next_checkin": "10.34.2.230", "command": "ok"}
Src: 192.88.99.91, Dst: 10.34.2.230:
---------> {"status": "ok", "ip": "192.88.99.91", "username": "geo001"}
|<------ {"next_checkin": "10.34.2.230", "command": "ok"}
x27|------> {"status": "ok", "ip": "192.88.99.91", "username": "geo001"}
<--------- {"next_checkin": "10.34.2.230", "command": "ok"}
3. Angriparna blir påkomna och städar upp#
På morgonen 2020-03-14 upphörde geo004 plötsligt att kommunicera med
angriparna, detta utan att ha tagit emot delete-kommandot, och ersattes
istället av användaren sandbox på 172.16.2.65. Väldigt snart därefter upphör
också geo001 att kommunicera, även här utan delete-kommandot. Av allt att
döma blev den skadliga koden upptäckt och börjades undersökas i en Sandbox.
Figuren nedan understryker detta tillfälle.

Den skadliga koden tycks inte ha spårats till de andra datorerna, eftersom deras kontakt med angriparna fortsätter. Kanske var det endast just att dokument exfiltrerades som drog till sig uppmärksamhet.
Troligen insåg angriparna att de förlorat kontakten med två av sina mål och att
den nya användaren sandbox på en IP-adress utanför det intressanta subnätet
tagit deras plats, ett mål de själva inte angripit. 2020-03-20 skickas
delete-kommandot till samtliga mål och all kontakt med angriparna upphör helt.
Notera att de enda andra målen vars kontakt inte slutar med delete är de som
fortfarande är aktiva vid pcap-filens slut:
$ grep -v -f <(tshark -r capture.pcap -Y 'frame contains "delete"' -T fields -e ip.dst | sort -u) <(tshark -r capture.pcap -Y 'tcp.flags==0x0002' -T fields -e ip.src | sort -u)
172.16.2.200
172.16.2.35
192.88.99.155
192.88.99.189
192.88.99.91
4. Angriparna återupptar arbetet#
Efter att angriparna har legat lågt i flera månader infekteras tre helt nya datorer med den skadliga koden. En av dessa ligger i det tidigare intressanta subnätet, från vilken ytterligare två dokument exfiltreras.
| Datum | Ursprung | Filnamn |
|---|---|---|
| 2020-06-10 | 192.88.99.155 | /mnt/documents/advanced methods for straight lines.doc |
| 2020-06-10 | 192.88.99.155 | /mnt/documents/Strategic geometry plan.xls |
