Z rozhraní AF_ALG v Linuxe odstraňujú zero-copy z bezpečnostných dôvodov

V subsystéme kryptografie Linux sa pripravuje odstránenie podpory zero-copy z rozhrania AF_ALG pre typy algoritmov SKCIPHER a AEAD. Zmena je už vo vetve cryptodev a očakáva sa, že bude zaslaná do okna zlúčenia Linux 7.2, ktoré sa má otvoriť v júni. Dôvodom sú rastúce obavy okolo bezpečnosti zero-copy mechanizmov v jadre, najmä po nedávnych zraniteľnostiach v kryptografickom kóde Linuxu.

AF_ALG — sú používateľské rozhranie kryptografickému API jadra Linuxu. Prostredníctvom neho môžu programy pristupovať k realizáciám šifrier, hashov a AEAD algoritmov v jadre ako k socketom. Dokumentácia Linuxu osobitne popisuje pre AF_ALG zero-copy režim cez splice() a vmsplice(), pri ktorom sa jadro snaží predchádzať zbytočnému kopírovaniu dát do pamäte jadra.

Problém je v tom, že v prípade AF_ALG sa takýto výkonový zisk ukázal ako nie taký dôležitý, a riziká sú príliš veľké. Autor zmeny, vývojár kryptografickej subsystémy Linuxu Eric Biggers zo služby Google, uviedol, že zero-copy umožňuje užívateľskému priestoru vykonávať kryptografické operácie priamo nad stránkami page cache súborov, napríklad binárneho súboru su, a taktiež vytvára podmienky pre zraniteľnosti TOCTOU, keď sa pamäť môže meniť súčasne s operáciou nad ňou.

Inými slovami, mechanizmus, ktorý je užitočný pri sieťovom alebo súborovom I/O, sa v AF_ALG javí ako príliš nebezpečná optimalizácia. Sám AF_ALG, podľa slov vývojára, sa v súčasnosti z veľkej časti zachováva pre spätnú kompatibilitu s malým súborom programov, ako je iwd, ktoré ešte neboli preložené na kryptografiu v užívateľskom priestore. Pôvodne bol AF_ALG navrhnutý aj na prístup k hardvérovým kryptorýchlovačom, ale v praxi sa ukázal ako nie príliš efektívne rozhranie na tento účel.

Je dôležité, že nejde o úplné odstránenie splice() alebo sendfile() pre AF_ALG. Zmena je popisovaná ako „jemné rozbitie“ kompatibility: prenos dát do AF_ALG požiadaviek cez splice() a sendfile() bude naďalej fungovať, ale jadro teraz urobí internú stabilnú kópiu dát pred kryptografickou operáciou. Výkon sa v niektorých prípadoch môže znížiť, no užívateľské API sa formálne nezlomí.

Osobitne sa zdôrazňuje, že zatiaľ sa zero-copy odstraňuje z skcipher a aead. Podpora pre typ hash sa bude posudzovať osobitne.

Kontext zmeny je nepríjemný. Na konci apríla bola odhalená zraniteľnosť Chyba kopírovania (CVE-2026-31431) v algif_aead, teda práve v používateľskom kryptointerface AF_ALG. Výskumníci ukázali, že spojenie AF_ALG, splice() a špeciálnych vlastností AEAD-spracovania umožnilo nepriviligovanému používateľovi poškodzovať cache stránok, vrátane stránok súvisiacich s setuid-binárkami, a získať zvýšenie privilégií na úroveň root.


Objavenie Chyba kopírovania bolo spojené s optimalizáciou z roku 2017, ktorá previedla operácie AEAD na spracovanie "na mieste"; pri prenose súboru prostredníctvom splice() v AF_ALG jadro nepracovalo s kópiou, ale so skúškami na stránkach cache. V dôsledku toho sa časť údajov, ktoré sa považovali za vstupné, mohla ocitnúť v zapisovanom scatterliste.

Odstránenie zero-copy z AF_ALG nie je bodovou opravou len jednej zraniteľnosti. Skôr je to pokus odstrániť celé triedy rizikových scenárov z málo používaného UAPI, kde výhody z optimalizácie neospravedlňujú zložitosti a potenciálne následky. Pre bežných používateľov zmena pravdepodobne zostane nepozorovaná; pre zriedkavé programy, ktoré aktívne využívajú AF_ALG prostredníctvom splice() alebo sendfile(), je možné pokles výkonnosti v dôsledku dodatočného kopírovania.

Zdroj: linux.org.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster