Fedora 45 pēc noklusējuma uzstāda kodola iestatījumu kernel.yama.ptrace_scope = 1. Process ar ptrace sistēmas izsaukumu tagad drīkst pārbaudīt tikai savus bērnprocesus. Atkļūdotājs vairs nevar pievienoties jau palaistam procesam, pat ja tas pieder tam pašam lietotājam.
Izmaiņa jau ir Fedora 45 beta versijā, kas iznāca 15. septembrī. Galīgo laidienu projekts plāno 20. oktobrī. Līdz šim Fedora apzināti neitralizēja kodola Yama moduli, tāpēc ptrace darbības sistēmā bija praktiski neierobežotas. Tagad noklusējums sakrīt ar paša Linux kodola noklusējumu. Izmaiņas aprakstu Fedora publicējusi izmaiņu priekšlikuma lapā.
Kas konkrēti mainās pakotnēs
Yama moduļa uzvedību nosaka viena sysctl vērtība. Vērtība 0 atļauj ptrace bez ierobežojuma. Vērtība 1 atļauj pievienoties tikai saviem bērnprocesiem. Līdz Fedora 44 pakotne elfutils-libs ar Requires ievilka apakšpakotni elfutils-default-yama-scope, kas uzstādīja vērtību 0. Šī apakšpakotne nokļuva katrā sistēmā, tāpēc ierobežojums nekad nestājās spēkā.
Fedora 45 noņem to Requires rindu no elfutils-libs. Apakšpakotne pārdēvēta par yama-ptrace-enable. Vecajai sistēmai pievienota Obsoletes rinda, lai jauninot pareizais fails pazustu. Tagad vērtību 0 atpakaļ uzstāda tikai tad, kad instalēta kāda atkļūdošanas pakotne.
Ko tas nozīmē izstrādātājam
ptrace ir izsaukums, uz kura balstās atkļūdotāji, profilētāji un sistēmas izsaukumu izsekotāji. Ar to gdb aptur procesu, strace nolasa izsaukumus, bet ltrace seko bibliotēku funkcijām. Visiem šiem rīkiem vajadzīga piekļuve cita procesa atmiņai un reģistriem.
Tīrā Fedora 45 instalācijā bez atkļūdošanas rīkiem komanda strace -p 1234 vai gdb -p 1234 uz sveša procesa atdos atļaujas kļūdu. Darbojas tikai process, ko atkļūdotājs pats palaidis kā bērnprocesu. Core dump failus izmaiņa neskar. Root lietotāju tā neierobežo.
Pašreizējo vērtību var apskatīt ar cat /proc/sys/kernel/yama/ptrace_scope. Uz vienu seansu to pazemina ar sudo sysctl kernel.yama.ptrace_scope=0, bet pēc pārstartēšanas noklusējums atgriežas. Konteineros un CI vidēs, kur atkļūdotājs pievienojas blakus procesam bez tā palaišanas, šo vērtību tagad būs jāuzstāda apzināti vai jāinstalē kāda no rīku pakotnēm.
Darba stacijā, kur jau instalēts gdb vai strace, nekas nemainīsies. Priekšlikums pievieno Recommends: yama-ptrace-enable atkļūdošanas rīkiem, tāpēc, instalējot kādu no tiem, sysctl vērtība atgriežas uz 0. Sarakstā ir gdb, lldb, strace, ltrace, systemtap, delve un pati elfutils. Izņēmums ir gdb-headless un gdb-minimal, kas enabler pakotni neievelk.
Priekšlikums atspējo daļu atkļūdošanas atļauju nepriviliģētiem lietotājiem ar sistēmas mēroga kodola iestatījumu, lai ļaunprogramma nevarētu izpētīt citus jau esošus lietotāja procesus. Kad instalēti atkļūdošanas rīki, pilna funkcionalitāte atjaunojas ar sysctl failu.
Kāpēc Fedora pie tā atgriežas
Konkrēts scenārijs izskatās šādi. Lietotājs palaiž kādu apšaubāmu skriptu vai pakotni. Bez ierobežojuma tas pats skripts var pievienoties lietotāja palaistajam pārlūkam vai paroļu pārvaldniekam un nolasīt to atmiņu caur /proc/PID/mem. Ar vērtību 1 šāda pievienošanās neizdodas, jo svešais process nav skripta bērnprocess.
Yama ierobežojums samazina risku, ka process, kas izmanto kādu ievainojamību, nolasa cita procesa atmiņu vai pārtver paroli no palaista seansa. Linux kodolā Yama ir pieejams kopš 2012. gada. Kodola noklusējuma vērtība ir 1, bet Fedora to līdz šim pārrakstīja ar savu override failu.
Līdzīgu priekšlikumu Fedora 44 laidienam FESCo noraidīja. Pašreizējo variantu autori Frenks Aiglers, Marks Vīlards un Kristofers Klozs iesniedza kā kompromisu. Variants ieguvis statusu ChangeAcceptedF45. Lēmumu reģistrē FESCo izsekotāja ieraksts numur 3569. Apspriede notika Fedora diskusiju forumā.
Uz Ubuntu un Debian šāds ierobežojums darbojas jau gadiem. Ubuntu Yama ptrace_scope iestata uz 1 kopš 2010. gada, kad izejas versija bija 10.10. Fedora līdz šim bija izņēmums starp lielajiem darbvirsmas distributīviem. Tieši tāpēc atsevišķi atkļūdotāji uz Ubuntu jau pazīst ziņojumu Could not attach to process, kamēr uz Fedora tā pašas komandas strādāja bez iebildumiem.
Pārējais Fedora 45 beta
Drošības izmaiņa nav vienīgā. Fedora 45 aizstāj kodolā iebūvēto konsoli ar lietotājtelpas kmscon termināli. Pakotņu parakstu pārbaude kļūst obligāta instalējot un jauninot. Projekts arī nosaka mērķi 99 % pakotņu būvēt reproducējami. Darbvirsmā ir GNOME 51, bāzē Linux 7.2 kodols. Rīku ķēdē iekļauts Python 3.15, GCC 16.2, GDB 17.2, LLVM 23 un Go 1.27. Šo sarakstu apstiprina Linux Journal laidiena apskats.
Kas plāno jaunināt no iepriekšējās versijas bez instalētiem atkļūdošanas rīkiem, tam vecais override fails tiks noņemts. Sistēma pēc jaunināšanas pāries uz ierobežoto režīmu. Kam gdb vai strace jau ir, tas izmaiņu nepamanīs.
Avoti
- Fedora Project Wiki: Changes/Restrict ptrace by default
- Linux Journal: Fedora Linux 45 Beta Released with Python 3.15, GCC 16.2, and Major Security Changes
- Phoronix: Fedora 45 Beta Released With KMSCON Console, GNOME 51 & Other Updates
- Fedora Discussion: F45 Change Proposal: Restrict ptrace by default
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.