Коллизии Π² сокращённых ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ядрС Linux

КСйс ΠšΡƒΠΊ (Kees Cook), Π±Ρ‹Π²ΡˆΠΈΠΉ Π³Π»Π°Π²Π½Ρ‹ΠΉ систСмный администратор kernel.org ΠΈ Π»ΠΈΠ΄Π΅Ρ€ Ubuntu Security Team, продСмонстрировал Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, сокращённый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ совпадаСт с ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, Ρ€Π°Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π² ядро Linux. ЭкспСримСнт ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½ Π² качСствС подтвСрТдСния цСлСсообразности ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° 16-ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ сокращённыС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ядрС Linux, Ρ€Π°Π½Π΅Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠ΅Π³ΠΎΡΡ Π² спискС рассылки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ядра, Π½ΠΎ Π½Π΅ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ Линусом Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄ΡΠΎΠΌ.

Π‘ΠΎΠΊΡ€Π°Ρ‰Ρ‘Π½Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· оставлСниС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 12 символов ΠΎΡ‚ Ρ…ΡΡˆΠ° SHA-1 (48 Π±ΠΈΡ‚ ΠΈΠ· 160 Π±ΠΈΡ‚). Π’Π°ΠΊ ΠΊΠ°ΠΊ число ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ядрС, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Ρ…ΡΡˆ SHA-1, прСвысило 13 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ², Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΏΡ€ΠΈ использовании 12-символьного прСфикса стало Π΄Π΅Π»ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² ядро ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎ своим 11-ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, упомянуто, Ρ‡Ρ‚ΠΎ пСрСсСчСниС 12-ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΡƒΠΆΠ΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π² октябрС, Π½ΠΎ Π΄ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠ°Ρ‚Ρ‡Π° Π±Ρ‹Π»ΠΎ выявлСно ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ checkpatch.

Π‘ΠΎΠΊΡ€Π°Ρ‰Ρ‘Π½Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ссылок Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ‚Π΅Π³Π΅ «Fixes», Π² качСствС ссылки Π½Π° ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ устранСна Π² ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠ°Ρ‚Ρ‡Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «Fixes: e21d2170f366»). Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ связаны с ΠΎΠ΄Π½ΠΈΠΌ сокращённым ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ инструмСнтов для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… содСрТимоС Ρ‚Π΅Π³ΠΎΠ² «Fixes». НапримСр, Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ check_fixes, примСняСмом Π² Π²Π΅Ρ‚ΠΊΠ΅ linux-next, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² скриптах Π°Π½Π°Π»ΠΈΠ·Π° исправлСния уязвимостСй ΠΈ отслСТивания ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ.

Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ скСптичСски отнёсся ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ сокращённых ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ фактичСски число ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ мСньшС, Ρ‡Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 1/8). Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Ссли случайныС пСрСсСчСния ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π»ΠΎΠ±ΠΎΠΌ ΠΈΠ»ΠΈ Π²Π΅Ρ‚ΠΊΠΎΠΉ). По Π΅Π³ΠΎ мнСнию сокращённыС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π½Π° Ρ‚ΠΎ ΠΈ сокращённыС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ наглядными, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ, ΠΈ для увСличСния ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… прСдпосылок.

Один ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ сокращСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ числа Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… Π±ΠΈΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Base36 (символы 0-9a-z) вмСсто ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΡ„Ρ€. По мнСнию Линуса ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ создаст большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚. НапримСр, потрСбуСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ ввСсти ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ старый ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

Для дСмонстрации, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с сокращёнными ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π½Π΅ являСтся ΡƒΠΌΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈ Π΅Ρ‘ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ стоит ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ, КСйс ΠšΡƒΠΊ сформировал ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ядра, сокращённый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ (1da177e4c3f4) совпал с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΏΠΎ созданию Π²Π΅Ρ‚ΠΊΠΈ ядра 2.6.12-rc2. Коллизию ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π·Π° 6 часов вычислСний Π½Π° систСмС с GPU NVIDIA GeForce RTX 3080.

ΠŸΠΎΠ΄Π±ΠΎΡ€ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ с использованиСм инструмСнтария lucky-commit — Π² тСкст Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ‚Ρ‡Π° добавлялись случайныС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° 12-ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ прСфикс SHA-1 Π½Π΅ совпал с ΡƒΠΆΠ΅ имСвшимися Π² ядрС прСфиксами ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². По мнСнию КСйса ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ случайныС пСрСсСчСния, сколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ манипуляции с сокращёнными ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π² врСдоносных цСлях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

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