Počas portovania sady nástrojov cryptsetup-suspend do systému NixOS bola objavená chyba v subsystéme šifrovania disku LUKS (Linux Nastavenie jednotného kľúča), vďaka čomu, počnúc jadrom Linux Verzia 6.9 (problematický commit), vydaná v máji 2024, zastavila mazanie šifrovacích kľúčov z pamäte RAM, keď systém prešiel do pohotovostného režimu.
Nástroj cryptsetup-suspend sa používa v Debian automaticky uzamknúť oddiely LUKS pred prechodom do režimu spánku. Predpokladá sa, že ak dôjde k krádeži notebooku v režime spánku, útočník nebude mať prístup k údajom, pretože prebudenie z režimu spánku bude vyžadovať zadanie hesla na obnovenie prístupu k šifrovaným údajom. Kvôli chybe v jadre Linux Po uzamknutí oddielu LUKS príkazom „cryptsetup luksSuspend“ sa kľúče nevymazali z pamäte RAM a zostali viditeľné prostredníctvom súboru /proc/keys, čo útočníkovi umožnilo extrahovať ich napríklad metódou „studeného bootovania“ a použiť ich na prístup k údajom.
Chýbajúce vyčistenie kľúčov bolo objavené pri ladení súbehu, ktorý spôsoboval problémy so spánkom. Chyba vznikla po refaktoringu v jadre verzie 6.9, ktorý spôsobil, že kľúče boli viazané na volajúce vlákno a mali byť po jeho ukončení vymazané, ale namiesto toho zostali v pamäti. Na zahrnutie do jadra, Linux Na opravu chyby bola navrhnutá jednoriadková oprava.
Táto záplata nebola prijatá do jadra, pretože obsahuje chybu: funguje iba pre fyzické disky, nie pre zariadenia virtuálnej slučky. Namiesto vyriešenia problému s jadrom vývojári nástroja cryptsetup navrhli riešenie na vymazanie kľúčov. Táto zmena už bola prijatá a bude zahrnutá vo verzii cryptsetup 2.8.7.
NixOS má navyše vlastnú implementáciu skriptov na uzamknutie šifrovaných diskov pred prepnutím do režimu spánku, ktorá používa starú opravu jadra, ktorá nebola prijatá v roku 2015 a ktorá násilne vymaže kľúče z pamäte pred prepnutím do režimu spánku.
Zdroj: opennet.ru
