Deserialisering er prosessen med å konvertere data som har blitt serialisert (dvs. konvertert til et spesifikt format for lagring eller overføring) tilbake til sin opprinnelige form. Med andre ord er det motsatt av serialisering. Denne prosessen er essensiell for at applikasjoner skal kunne hente data som har blitt lagret eller sendt i et serialisert format. Deserialisering gjør det mulig å rekonstruere data til sin opprinnelige struktur og format, slik at det blir brukbart og lesbart for applikasjonen.
Når en applikasjon mottar serialisert data, bruker den en deserialiseringsprosess for å rekonstruere data til sin opprinnelige form. Prosessen innebærer å analysere den serialiserte dataen og mappe den tilbake til sine tilsvarende objekter og datastrukturer. Dette gjør det mulig for applikasjonen å få tilgang til og manipulere dataen som tiltenkt.
Imidlertid kan deserialisering være sårbar for angrep hvis ikke riktige sikkerhetstiltak er implementert. Angripere kan utnytte sårbarheter i deserialiseringsprosessen for å kjøre ondsinnet kode på et system. Dette skjer når den serialiserte dataen inneholder manipulert eller ondsinnet kode. Når applikasjonen deserialiserer denne dataen, kjører den uvitende den ondsinnede koden, noe som kan føre til alvorlige sikkerhetsbrudd.
For å redusere deserialiserings-sårbarheter og forhindre sikkerhetstrusler, er det avgjørende å implementere følgende forebyggingstiltak:
Bruk en sikker deserialiseringstilnærming: En effektiv tilnærming er whitelisting, som innebærer å bare tillate tillatte og forhåndsdefinerte klasser å bli deserialisert. Ved å begrense deserialiseringen til et spesifikt sett med klasser, kan vilkårlig kodekjøring forhindres.
Implementer inputvalidering: Før deserialiseringsprosessen er det essensielt å validere integriteten og autentisiteten til den serialiserte dataen. Inputvalidering hjelper med å sikre at dataen ikke har blitt manipulert. Dette kan gjøres ved å sjekke dataen mot forventede formater, datatyper, og lengdegrenser.
Hold rammeverk og biblioteker oppdatert: Utviklere gir ofte ut rettelser og oppdateringer for å adressere oppdagede deserialiserings-sårbarheter. Det er avgjørende å regelmessig oppdatere rammeverkene og bibliotekene brukt i en applikasjon for å dra nytte av disse sikkerhetsfikser. Ved å holde programvaren oppdatert kan potensielle svakheter reduseres.
Deserialiserings-sårbarheter har blitt identifisert i forskjellige programmeringsspråk og rammeverk. Disse sårbarhetene kan ha alvorlige konsekvenser, som lar angripere kjøre vilkårlig kode og utføre uautoriserte aktiviteter. Her er noen få eksempler på reelle deserialiserings-sårbarheter:
Apache Struts: I 2017 ble Apache Struts, et populært Java-rammeverk, funnet å ha en deserialiserings-sårbarhet (CVE-2017-5638) som tillot fjernkjøring av kode. Angripere utnyttet denne sårbarheten ved å sende ondsinnet utformet serialisert data, noe som førte til betydelige brudd, inkludert det beryktede Equifax-databruddet.
PHP unserialize(): PHP, et mye brukt webprogrammeringsspråk, har en funksjon kalt unserialize() som brukes for deserialisering. Imidlertid kan feil bruk av unserialize() føre til deserialiserings-sårbarheter. Angripere kan manipulere serialiserte data for å kjøre vilkårlig kode, noe som potensielt kompromitterer sikkerheten til PHP-applikasjoner.
.NET BinaryFormatter: .NET-rammeverket inkluderer BinaryFormatter-klassen, som brukes for serialisering og deserialisering. I visse scenarier, hvis deserialiseringsprosessen ikke er sikkert implementert, kan den tillate angripere å kjøre vilkårlig kode. Denne sårbarheten har blitt utnyttet tidligere, og viser viktigheten av sikker deserialiseringspraksis i .NET-applikasjoner.
Deserialisering er en kritisk prosess som gjør det mulig for applikasjoner å hente og bruke data som har blitt serialisert. Det er imidlertid viktig å være klar over de potensielle sårbarhetene forbundet med deserialisering. Ved å implementere sikre deserialiseringspraksiser og holde seg informert om de nyeste sikkerhetsoppdateringene, kan utviklere bidra til å redusere risikoene og beskytte sine applikasjoner mot potensielle brudd.