Mayhem - Π°Ρ‚Π°ΠΊΠ° Π·Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π·Π° заобикалянС Π½Π° sudo ΠΈ OpenSSH удостовСряванС

Π˜Π·ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΎΡ‚ Worcester Polytechnic Institute (БАЩ) Π²ΡŠΠ²Π΅Π΄ΠΎΡ…Π° Π½ΠΎΠ² Ρ‚ΠΈΠΏ Mayhem Π°Ρ‚Π°ΠΊΠ°, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°Ρ‚Π° Π·Π° изкривяванС Π½Π° Π±ΠΈΡ‚ΠΎΠ²Π΅ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π½Π° Rowhammer, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ стойноститС Π½Π° стСковитС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Π·Π° Π΄Π° Ρ€Π΅ΡˆΠΈ Π΄Π°Π»ΠΈ удостовСряванСто ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ Π·Π° сигурност ΠΈΠΌΠ°Ρ‚ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°. ДСмонстрират сС практичСски ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Π°Ρ‚Π°ΠΊΠ° Π·Π° заобикалянС Π½Π° удостовСряванСто Π² SUDO, OpenSSH ΠΈ MySQL, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° промяна Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ‚Π΅ със сигурността ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² OpenSSL Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°.

Атаката ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ към прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° сравняванС Π½Π° стойности, ΠΊΠΎΠΈΡ‚ΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΎΡ‚ Π½ΡƒΠ»Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° уязвим ΠΊΠΎΠ΄: int auth = 0; ... // ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡ‚ΠΎ промСня стойността Π·Π° удостовСряванС Π² случай Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ удостовСряванС if(auth != 0) return AUTH_SUCCESS; ΠΈΠ½Π°Ρ‡Π΅ Π²ΡŠΡ€Π½Π΅ AUTH_FAILURE;

Π’ контСкста Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π° Π°Ρ‚Π°ΠΊΠ° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° сС ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ всСки Π±ΠΈΡ‚ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΡΠ²ΡŠΡ€Π·Π°Π½ с 32-Π±ΠΈΡ‚ΠΎΠ²Π°Ρ‚Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π° удостовСряванС Π² стСка. Ако някой Π±ΠΈΡ‚ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π΅ ΠΏΠΎΠ²Ρ€Π΅Π΄Π΅Π½, стойността Π²Π΅Ρ‡Π΅ няма Π΄Π° бъдС Π½ΡƒΠ»Π° ΠΈ условният ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‰Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° удостовСряванСто. Π’Π°ΠΊΠΈΠ²Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ са доста чСсто срСщани Π² прилоТСнията ΠΈ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² SUDO, OpenSSH, MySQL ΠΈ OpenSSL.

Π₯аос - Π°Ρ‚Π°ΠΊΠ° Π·Π° изкривяванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π·Π° заобикалянС Π½Π° sudo ΠΈ OpenSSH удостовСряванС

Атаката ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ ΠΈ Π·Π° сравнСния Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° β€žif(auth == 1)β€œ, Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ случай Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ изпълнСниС става ΠΏΠΎ-слоТно, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·ΠΊΡ€ΠΈΠ²ΠΈ Π½Π΅ всСки Π±ΠΈΡ‚ ΠΎΡ‚ 32, Π° послСдният Π±ΠΈΡ‚. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π·Π° повлияванС Π½Π° стойноститС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π² рСгистритС Π½Π° процСсора, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° рСгистритС ΠΌΠΎΠΆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° бъдС изчистСно Π² стСка, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС задСйства контСкстСн ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅Π», ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° функция ΠΈΠ»ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ Π½Π° сигнали. ΠŸΡ€Π΅Π· ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ стойноститС Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° са Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π² Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ въвСдСни изкривявания ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π°Ρ‚Π° стойност Ρ‰Π΅ бъдС Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½Π° Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°.

Π₯аос - Π°Ρ‚Π°ΠΊΠ° Π·Π° изкривяванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π·Π° заобикалянС Π½Π° sudo ΠΈ OpenSSH удостовСряванС

Π—Π° изкривяванС Π½Π° Π±ΠΈΡ‚ΠΎΠ²Π΅Ρ‚Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½Π° ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π°Ρ‚Π°ΠΊΠ°Ρ‚Π° Π½Π° клас RowHammer. Въй ΠΊΠ°Ρ‚ΠΎ DRAM ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅ Π΄Π²ΡƒΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ масив ΠΎΡ‚ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, всяка ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Π΄Π΅Π½Π·Π°Ρ‚ΠΎΡ€ ΠΈ транзистор, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° област Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ колСбания Π½Π° Π½Π°ΠΏΡ€Π΅ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ причиняват ΠΌΠ°Π»ΠΊΠ° Π·Π°Π³ΡƒΠ±Π° Π½Π° заряд Π² ΡΡŠΡΠ΅Π΄Π½ΠΈΡ‚Π΅ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ. Ако ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΡ‚Π΅Ρ‚ΡŠΡ‚ Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π΅ висок, Ρ‚ΠΎΠ³Π°Π²Π° ΡΡŠΡΠ΅Π΄Π½Π°Ρ‚Π° ΠΊΠ»Π΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π³ΡƒΠ±ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ голямо количСство заряд ΠΈ слСдващият Ρ†ΠΈΠΊΡŠΠ» Π½Π° рСгСнСрация няма Π΄Π° ΠΈΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ си ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ промяна Π² стойността Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ°Ρ‚Π° . Π—Π° Π΄Π° сС прСдпазят ΠΎΡ‚ RowHammer, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ‡ΠΈΠΏΠΎΠ²Π΅ са Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ TRR (Target Row Refresh) ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°Ρ‚Π° Π½Π° ΠΊΠ»Π΅Ρ‚ΠΊΠ°Ρ‚Π° Π² спСциални случаи, Π½ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠ°Π·Π²Π° ΠΎΡ‚ всички възмоТни Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ Π½Π° Π°Ρ‚Π°ΠΊΠ°.

Π—Π° Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΠ°Π·ΠΈΡ‚Π΅ ΠΎΡ‚ Π°Ρ‚Π°ΠΊΠ° Mayhem, сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π² сравнСнията Π΄Π° Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΎΡ‚ Π½ΡƒΠ»Π° ΠΈΠ»ΠΈ съвпадСниС с Π΅Π΄ΠΈΠ½ΠΈΡ†Π°, Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° съвпадСниС, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π½Π°Ρ‡Π°Π»Π½Π° стойност с Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΈ ΠΎΠΊΡ‚Π΅Ρ‚ΠΈ. Π’ Ρ‚ΠΎΠ·ΠΈ случай, Π·Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΆΠ΅Π»Π°Π½Π°Ρ‚Π° стойност Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π°, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° ΠΈΠ·ΠΊΡ€ΠΈΠ²ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ Π±Ρ€ΠΎΠΉ Π±ΠΈΡ‚ΠΎΠ²Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ нСрСалистично, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ изкривяванСто Π½Π° Π΅Π΄ΠΈΠ½ Π±ΠΈΡ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π½Π΅ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ Π½Π° Π°Ρ‚Π°ΠΊΠ° ΠΊΠΎΠ΄: int auth = 0xbe406d1a; ... // ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°Π΄Π°Π²Π° стойността Π·Π° удостовСряванС Π½Π° 0x23ab8701 Π² случай Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ удостовСряванС if(auth == 0x23ab8701) return AUTH_SUCCESS; ΠΈΠ½Π°Ρ‡Π΅ Π²ΡŠΡ€Π½Π΅ AUTH_FAILURE;

ΠŸΠΎΡΠΎΡ‡Π΅Π½ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° Π²Π΅Ρ‡Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° sudo ΠΈ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ във вСрсия 1.9.15 ΠΊΠ°Ρ‚ΠΎ корСкция Π·Π° уязвимостта CVE-2023-42465. Π’Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π°Ρ‚Π°ΠΊΠ°Ρ‚Π°, слСд ΠΊΠ°Ρ‚ΠΎ Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π½Π° основнитС уязвими ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€