Skip to content
Artwork for Daily WTF!
Daily WTF! · September 14 · 26 min

Het kat-en-muisspel van softwarebeveiliging: Patch Diffing en Anti-Diffing

Deze analyse belicht de strijd tussen beveiligingsonderzoekers (of hackers) en softwareontwikkelaars rondom het herleiden van kwetsbaarheden uit software-updates, en de technieken om dit proces te saboteren. 1. Patch Diffing en de 'Patch Gap' Wanneer een leverancier een beveiligingsupdate uitbrengt, ontstaat er een race tegen de klok. Aanvallers proberen zo snel mogelijk een exploit te schrijven door de oude, kwetsbare versie te vergelijken met de nieuwe, gepatchte versie (patch diffing). Omdat veel organisaties weken of maanden nodig hebben om updates door te voeren (de patch gap), hebben aanvallers een groot tijdsvenster om ongepatchte systemen aan te vallen. Ze vergelijken hierbij de gecompileerde binaries op zoek naar gewijzigde functies. 2. Statische Diffing en de Ruis van Compilers Traditionele diffing-tools proberen de structuur van twee programma's statisch te vergelijken via Control Flow Graphs (CFG) en basic blocks (reksen instructies zonder vertakkingen). Tools zoals BinDiff en Diophora zoeken naar structurele gelijkwaardigheid (grafe-isomorfisme). Statische diffing is echter erg gevoelig voor ruis: een kleine aanpassing door een compiler kan duizenden valse positieven veroorzaken. 3. Anti-Diffing: De Verdediging van Ontwikkelaars Om reverse engineers het werk zuur te maken, passen ontwikkelaars anti-diffing toe. Het doel is gerichte verwarring (lightweight obfuscation) aan te brengen zonder het programma traag te maken: CFG Altering: Het bewust verminken van de plattegrond van de code. via Proxy Calls worden directe functie-aanroepen omgeleid via nutteloze tussenfuncties. Gedeelde Basic Blocks: Totaal verschillende functies worden zo geweven dat ze aan het einde hetzelfde fysieke stukje geheugencode delen, wat de control-flow-analyse van diffing-tools verwart. Instruction & Symbol Mangling: Het herordenen van instructies om basic block fingerprints onbruikbaar te maken. 4. Dynamische Analyse (MOAS) Om de ruis van statische diffing en anti-diffing te omzeilen, verleggen onderzoekers de grens naar dynamische executie-analyse (zoals bij de tool PatchScope): Memory Object Access Sequences (MOAS): In plaats van te kijken naar bytes op de schijf, analyseert men hoe het programma zich tijdens het draaien in het geheugen gedraagt. Gedragsanalyse: Men traceert welke geheugenobjecten worden aangemaakt, gelezen of geschreven. Een MOAS-analyse filtert alle compiler-ruis en anti-diffing-obstakels weg, waardoor alleen de daadwerkelijke, inhoudelijke gedragsverandering overblijft. Conclusie Patch diffing is geëvolueerd van een simpele codevergelijking tot een geavanceerd kat-en-muisspel. Waar ontwikkelaars anti-diffing inzetten om het herleiden van lekken duur en tijdrovend te maken, stappen onderzoekers over op dynamische en geheugengerichte analysetechnieken om de echte kwetsbaarheden te blijven blootleggen.

0:00-26:48

transcript

No transcript — this publisher did not publish one.

show notes

Deze analyse belicht de strijd tussen beveiligingsonderzoekers (of hackers) en softwareontwikkelaars rondom het herleiden van kwetsbaarheden uit software-updates, en de technieken om dit proces te saboteren.

1. Patch Diffing en de 'Patch Gap' Wanneer een leverancier een beveiligingsupdate uitbrengt, ontstaat er een race tegen de klok. Aanvallers proberen zo snel mogelijk een exploit te schrijven door de oude, kwetsbare versie te vergelijken met de nieuwe, gepatchte versie (patch diffing). Omdat veel organisaties weken of maanden nodig hebben om updates door te voeren (de patch gap), hebben aanvallers een groot tijdsvenster om ongepatchte systemen aan te vallen. Ze vergelijken hierbij de gecompileerde binaries op zoek naar gewijzigde functies.

2. Statische Diffing en de Ruis van Compilers Traditionele diffing-tools proberen de structuur van twee programma's statisch te vergelijken via Control Flow Graphs (CFG) en basic blocks (reksen instructies zonder vertakkingen). Tools zoals BinDiff en Diophora zoeken naar structurele gelijkwaardigheid (grafe-isomorfisme). Statische diffing is echter erg gevoelig voor ruis: een kleine aanpassing door een compiler kan duizenden valse positieven veroorzaken.

3. Anti-Diffing: De Verdediging van Ontwikkelaars Om reverse engineers het werk zuur te maken, passen ontwikkelaars anti-diffing toe. Het doel is gerichte verwarring (lightweight obfuscation) aan te brengen zonder het programma traag te maken:

  • CFG Altering: Het bewust verminken van de plattegrond van de code. via Proxy Calls worden directe functie-aanroepen omgeleid via nutteloze tussenfuncties.
  • Gedeelde Basic Blocks: Totaal verschillende functies worden zo geweven dat ze aan het einde hetzelfde fysieke stukje geheugencode delen, wat de control-flow-analyse van diffing-tools verwart.
  • Instruction & Symbol Mangling: Het herordenen van instructies om basic block fingerprints onbruikbaar te maken.

4. Dynamische Analyse (MOAS) Om de ruis van statische diffing en anti-diffing te omzeilen, verleggen onderzoekers de grens naar dynamische executie-analyse (zoals bij de tool PatchScope):

  • Memory Object Access Sequences (MOAS): In plaats van te kijken naar bytes op de schijf, analyseert men hoe het programma zich tijdens het draaien in het geheugen gedraagt.
  • Gedragsanalyse: Men traceert welke geheugenobjecten worden aangemaakt, gelezen of geschreven. Een MOAS-analyse filtert alle compiler-ruis en anti-diffing-obstakels weg, waardoor alleen de daadwerkelijke, inhoudelijke gedragsverandering overblijft.

Conclusie Patch diffing is geëvolueerd van een simpele codevergelijking tot een geavanceerd kat-en-muisspel. Waar ontwikkelaars anti-diffing inzetten om het herleiden van lekken duur en tijdrovend te maken, stappen onderzoekers over op dynamische en geheugengerichte analysetechnieken om de echte kwetsbaarheden te blijven blootleggen.