ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠ°Ρ‚Ρ‡ΠΈ для Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ адрСсов стСка ядра Linux ΠΏΡ€ΠΈ систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ…

Кис ΠšΡƒΠΊ (Kees Cook), Π±Ρ‹Π²ΡˆΠΈΠΉ Π³Π»Π°Π²Π½Ρ‹ΠΉ сисадмин kernel.org ΠΈ Π»ΠΈΠ΄Π΅Ρ€ Ubuntu Security Team, Π½Ρ‹Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Google Π½Π°Π΄ обСспСчСниСм Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Android ΠΈ ChromeOS, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ смСщСний Π² стэкС ядра ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ΠŸΠ°Ρ‚Ρ‡ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ядра ΠΏΡƒΡ‚Ρ‘ΠΌ измСнСния размСщСния стСка, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π°Ρ‚Π°ΠΊΠΈ Π½Π° стСк Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТным ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ занятиСм. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ рСализация ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ процСссоры ARM64 ΠΈ x86/x86_64.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ идСя ΠΏΠ°Ρ‚Ρ‡Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ PaX RANDKSTACK. Π’ 2019 Π³ΠΎΠ΄Ρƒ Π•Π»Π΅Π½Π° Π Π΅ΡˆΠ΅Ρ‚ΠΎΠ²Π°, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ ΠΈΠ· Ρ„ΠΈΡ€ΠΌΡ‹ Intel, ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»Π° ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΡƒΡŽ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² основной состав ядра Linux. ПозТС ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚ΠΈΠ» Кис ΠšΡƒΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ прСдставил Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΡƒΡŽ для основного Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ядра. ΠŸΠ°Ρ‚Ρ‡ΠΈ планируСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² состав выпуска 5.13. Π Π΅ΠΆΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ядра «randomize_kstack_offset=on/off» ΠΈ настройка CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. НакладныС расходы ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² 1% ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘ΡƒΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π² Π²Ρ‹Π±ΠΎΡ€Π΅ случайного смСщСния стСка ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ систСмном Π²Ρ‹Π·ΠΎΠ²Π΅, Ρ‡Ρ‚ΠΎ услоТняСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ раскладки стСка Π² памяти, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± адрСсах, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ систСмном Π²Ρ‹Π·ΠΎΠ²Π΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс стСка измСнится. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ PaX RANDKSTACK Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ядро ΠΏΠ°Ρ‚Ρ‡Π°Ρ… рандомизация выполняСтся Π½Π΅ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ стадии (cpu_current_top_of_stack), Π° послС выставлСния структуры pt_regs, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° основС ptrace для опрСдСлСния Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ смСщСния Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ выполняСмого систСмного Π²Ρ‹Π·ΠΎΠ²Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru