Tijdens de portering van het cryptsetup-suspend hulpprogramma voor NixOS werd een fout ontdekt in de LUKS (Linux Unified Key Setup) schijfversleutelingssubsystemen, waardoor sinds de Linux-kernel 6.9 (de problematische commit), uitgebracht in mei 2024, de opruiming van versleutelingssleutels uit het RAM tijdens de slaapstand van het systeem niet meer werkte.
Het cryptsetup-suspend hulpprogramma wordt in Debian gebruikt voor het automatisch vergrendelen van LUKS-partities voordat het systeem in de slaapstand gaat. Het idee is dat in het geval van diefstal van een in slaapstand zijnde laptop, een aanvaller geen toegang kan krijgen tot de gegevens, omdat bij het ontwaken uit de slaapstand een wachtwoord moet worden ingevoerd om toegang te krijgen tot de versleutelde gegevens. Vanwege een fout in de Linux-kernel werden na het vergrendelen van de LUKS-partitie met het commando 'cryptsetup luksSuspend' de sleutels niet uit het RAM gewist en bleven zichtbaar via /proc/keys, waardoor een aanvaller ze bijvoorbeeld kon extraheren met behulp van de 'cold boot' methode en deze kon gebruiken om toegang tot de gegevens te krijgen.
Het ontbreken van de wisfunctie voor de sleutels werd ontdekt tijdens het debuggen van een race-conditie, waardoor problemen ontstonden bij het overschakelen naar de slaapstand. De fout deed zich voor na een refactoring in kernel 6.9, waarbij sleutels aan de aanroepende thread werden gehecht en moesten worden verwijderd bij het beƫindigen ervan, maar in werkelijkheid in het geheugen bleven. Er is een enkele regel patch voorgesteld voor de Linux-kernel die deze fout oplost.
Deze patch is niet geaccepteerd in de kernel omdat er een tekortkoming is vastgesteld - de patch werkt alleen voor fysieke opslagmedia, maar niet voor virtuele loop-apparaten. In plaats van het probleem aan de ontwikkelaars van het cryptsetup-hulpprogramma op te lossen, werd een workaround voorgesteld om de sleutels op te schonen. Deze wijziging is inmiddels goedgekeurd en zal worden opgenomen in de cryptsetup 2.8.7 release.
Bovendien is er voor NixOS een eigen implementatie van scripts gemaakt voor het vergrendelen van versleutelde schijven voordat het systeem in slaapstand gaat, waarin een oude patch voor de kernel is gebruikt die in 2015 niet werd aangenomen, welke de sleutels dwingend uit het geheugen wist voordat het systeem in slaapstand gaat.
Bron: opennet.ru
