ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° новая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° эксплуатации уязвимостСй Π² SQLite

Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Check Point раскрыли Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ DEF CON Π΄Π΅Ρ‚Π°Π»ΠΈ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π°Ρ‚Π°ΠΊ Π½Π° прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ уязвимыС вСрсии SQLite. ΠœΠ΅Ρ‚ΠΎΠ΄ Check Point рассматриваСт Ρ„Π°ΠΉΠ»Ρ‹ с Π‘Π” ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ сцСнариСв эксплуатации уязвимостСй Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… подсистСмах SQLite, нСдоступных для эксплуатации Π² Π»ΠΎΠ±. Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° эксплуатации уязвимостСй с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ эксплоита Π² Ρ„ΠΎΡ€ΠΌΠ΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ SELECT-запросов Π² Π‘Π” SQLite, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ASLR.

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ возмоТности ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π‘Π” Π°Ρ‚Π°ΠΊΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Ρ‚Π°ΠΊΠΎΠΉ Π½Π° прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π‘Π” SQLite Π² качСствС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚Π½Ρ‹Ρ… ΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ локального доступа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ скрытых бэкдоров Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ прилоТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ для ΠΎΠ±Ρ…ΠΎΠ΄Π° исслСдоватСлями бСзопасности ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ врСдоносного ПО. Эксплуатация послС ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ Ρ„Π°ΠΉΠ»Π° осущСствляСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ SELECT-запроса ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π‘Π”.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° продСмонстрирована Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска ΠΊΠΎΠ΄Π° Π² iOS ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ адрСсной ΠΊΠ½ΠΈΠ³ΠΈ, Ρ„Π°ΠΉΠ» с Π‘Π” «AddressBook.sqlitedb» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ с использованиСм ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Для Π°Ρ‚Π°ΠΊΠΈ использовалась ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fts3_tokenizer (CVE-2019-8602, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ разымСнования указатСля), исправлСнная Π² Π°ΠΏΡ€Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ SQLite 2.28, наряду с Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, продСмонстрировано ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Π° управлСния Π·Π° написанным Π½Π° PHP бэкСнд-сСрвСром Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ², ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΌ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ врСдоносного ΠΊΠΎΠ΄Π° (ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈΡΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π‘Π” SQLite).

ΠœΠ΅Ρ‚ΠΎΠ΄ Π°Ρ‚Π°ΠΊΠΈ основан Π½Π° использовании Π΄Π²ΡƒΡ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ «Query Hijacking» ΠΈ «Query Oriented Programming», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, приводящиС ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ памяти Π² Π΄Π²ΠΈΠΆΠΊΠ΅ SQLite. Π‘ΡƒΡ‚ΡŒ «Query Hijacking» Π² ΠΏΠΎΠ΄ΠΌΠ΅Π½Π΅ содСрТимого поля «sql» Π² слуТСбной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ sqlite_master, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ структуру Π‘Π”. Π£ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ содСрТит Π±Π»ΠΎΠΊ DDL (Data Definition Language), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для описания структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π‘Π”. ОписаниС задаётся с использованиСм ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ³ΠΎ синтаксиса SQL, Ρ‚.Π΅. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция «CREATE TABLE»,
которая выполняСтся Π² процСссС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π‘Π” (Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sqlite3LocateTable) для создания связанных с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… структур Π² памяти.

ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½Ρ‹ «CREATE TABLE» Π½Π° «CREATE VIEW» появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ своСго прСдставлСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любоС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π‘Π”. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ «CREATE VIEW» ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ привязываСтся опСрация «SELECT», которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° вмСсто «CREATE TABLE» ΠΈ позволяСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ частям ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° SQLite. Π”Π°Π»Π΅Π΅ самым простым способом Π°Ρ‚Π°ΠΊΠΈ Π±Ρ‹Π» Π±Ρ‹ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «load_extension», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ данная функция ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°Ρ‚Π°ΠΊΠΈ Π² условиях возмоТности выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «SELECT» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° «Query Oriented Programming», Π΄Π°ΡŽΡ‰Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² SQLite, приводящиС ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ памяти. Π’Π΅Ρ…Π½ΠΈΠΊΠ° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ROP, Return-Oriented Programming), Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для построСния Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² («Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ²») Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Ρ€Ρ‹Π²ΠΊΠΈ машинного ΠΊΠΎΠ΄Π°, Π° вставки Π² Π½Π°Π±ΠΎΡ€Π΅ подзапросов Π²Π½ΡƒΡ‚Ρ€ΠΈ SELECT.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° новая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° эксплуатации уязвимостСй Π² SQLite

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π° новая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° эксплуатации уязвимостСй Π² SQLite

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