Sikkerhetsforskere hos i en avdeling hos Microsoft som kalles for Section 52, gikk torsdag ut med informasjon om en kategori kritiske sårbarheter som de har oppdaget i en lang rekke av integrerte enheter. Dette inkluderer potensielt både forbrukerenheter, medisinsk utstyr og annen IoT (Internet of Thing), samt industrielle (kontroll-)systemer (OT – Operational Technology).
Felles for de fleste av enhetene er at de bruker et sanntidsoperativsystem (RTOS) eller visse støttebiblioteker. Listen over de sårbare systemene, som brukes av mange ulike produkter, er gjengitt nederst i saken, samt på denne siden.
Manglende input-validering
Selv om det dreier seg om forskjellige systemer, er sårbarhetene såpass like at Microsoft har valgt å gi dem et felles navn, BadAllock. Det dreier seg om alvorlige feil i allokeringen (tildelingen) av minne, noe som kan utnyttes av angripere til å fjernkjøre ondsinnet kode på enhetene eller til å forårsake systemkrasj.
Sårbarhetene finnes i standardfunksjoner for minneallokering (som malloc, calloc, realloc, memalign, valloc, pvalloc og flere) blant annet i implementasjoner av standardbiblioteket til programmeringsspråket C. Årsaken til sårbarhetene er i stor grad manglende eller svak validering av inndata, noe som kan utnyttes av angripere til å forårsake overflytsfeil i blant annet heap-minnet.
Mange har kommet med sikkerhetsfikser
Microsoft har samarbeidet med de berørte leverandørene, og mange av disse – men ikke alle – har allerede kommet med sikkerhetsoppdatering som fjerner sårbarhetene.
Om BadAllock-sårbarhetene skriver Microsoft:
– Gitt gjennomtrengeligheten til IoT- og OT-enheter, representerer disse sårbarhetene – dersom de utnyttes – en betydelig potensiell risiko for organisasjoner av alle slag. Per i dag har ikke Microsoft sett noen indikasjoner på at disse sårbarhetene blir utnyttet. Likevel oppmuntrer vi sterkt organisasjoner til å patche systemene sine så snart som mulig.
Det som eventuelt ikke kan patches, må overvåkes.
Segmentering og VPN
Microsoft anbefaler for øvrig at kontrollsystemer i minst mulig grad er eksponert mot nettverk, og at de ikke er direkte tilgjengelige via internett. De bør også i størst mulig grad være isolert fra resten av bedriftsnettverket. Dersom det er behov for fjerntilgang, bør dette kun gjøres med sikre metoder, slik som via VPN (Virtual Private Network).
Microsoft understreker at også VPN-løsninger kan være rammet av sårbarheter, så det er viktig å sørge for at det til enhver tid er den nyeste versjonen som benyttes. Dessuten understrekes det at VPN ikke er noe sikrere enn den enheten som oppkoblingen skjer fra.
Berørte systemer
- Amazon FreeRTOS, versjon 10.4.1
- Apache Nuttx OS, versjon 9.1.0
- ARM CMSIS-RTOS2, versjoner eldre enn 2.1.3
- ARM Mbed OS, versjon 6.3.0
- ARM mbed-uallaoc, versjon 1.3.0
- Cesanta Software Mongoose OS, versjon 2.17.0
- eCosCentric eCosPro RTOS, versjonene 2.0.1 til 4.5.3
- Google Cloud IoT Device SDK, versjon 1.0.2
- Linux Zephyr RTOS, versjoner eldre enn 2.4.0
- Media Tek LinkIt SDK, versjoner eldre enn 4.6.1
- Micrium OS, versjon 5.10.1 og eldre
- Micrium uCOS II/uCOS III versjon 1.39.0 og eldre
- NXP MCUXpresso SDK, versjoner eldre enn 2.8.2
- NXP MQX, versjon 5.1 og eldre
- Redhat newlib, versjoner eldre enn 4.0.0
- RIOT OS, versjon 2020.01.1
- Samsung Tizen RT RTOS, versjoner eldre enn 3.0.GBB
- TencentOS-tiny, versjon 3.1.0
- Texas Instruments CC32XX, versjoner eldre enn 4.40.00.07
- Texas Instruments SimpleLink MSP432E4XX
- Texas Instruments SimpleLink-CC13XX, versjoner eldre enn 4.40.00
- Texas Instruments SimpleLink-CC26XX, versjoner eldre enn 4.40.00
- Texas Instruments SimpleLink-CC32XX, versjoner eldre enn 4.10.03
- Uclibc-NG, versjoner eldre enn 1.0.36
- Windriver VxWorks, versjoner eldre enn 7.0
Microsoft legger til at selskapets egen Azure RTOS ThreadX-kjerne ikke er sårbar med standardinnstillingene i behold. Det er mulig å skru av feilsjekkingen for å oppnå bedre ytelse, men det opplyses at dette bare er trygt å gjøre dersom applikasjonen absolutt og til enhver tid kan garantere at alle input-parametere er gyldige. Dette inkluderer også parametere som stammer fra eksterne inndata