Добро пожаловать обратно, начинающие кибервоины!
SQLite — одна из самых распространённых СУБД, встраиваемая в бесчисленное множество приложений, мобильных устройств и веб-сервисов. Благодаря компактному дизайну она популярна среди разработчиков, но также является привлекательной целью для хакеров. Независимо от того, являетесь ли вы тестировщиком на проникновение, кибервоином или исследователем безопасности, освоение SQLite может открыть новые возможности для злоумышленников. В этом руководстве мы подробно рассмотрим базовую структуру SQLite и рассмотрим, как хакеры используют её во время атак.
Давайте рассмотрим несколько реальных примеров того, как изощренные хакерские группы использовали базы данных SQLite в своих операциях:
Понимание того, каким образом базы данных SQLite подвергаются реальным атакам, важно для принятия упреждающих, а не реактивных мер, реализации контрмер и укрепления безопасности.
Перед использованием SQLite вам может потребоваться установить его. Проверить, установлен ли он, можно, введя:
kali> sqlite3 –версия
Чтобы создать новую базу данных SQLite (или открыть существующую), используйте следующую команду:
kali> sqlite3 <имя_базы_данных>
В командной строке SQLite вы можете создать таблицу с помощью команд SQL. Например, чтобы создать таблицу пользователей:
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER);
Этот оператор SQL создает таблицу «пользователи» с тремя столбцами:
Давайте добавим некоторые данные:
sqlite> INSERT INTO пользователи (имя, возраст) ЗНАЧЕНИЯ ('Администратор', 30);
Теперь попробуем извлечь данные из таблицы:
sqlite> SELECT * FROM пользователи;
Просмотреть схему таблицы:
sqlite> PRAGMA table_info(пользователи);
Эта команда отображает структуру таблицы с именем users, включая имена столбцов, типы данных и ограничения.
Чтобы вывести список всех таблиц, используйте:
sqlite> .tables
Эта команда показывает все таблицы, имеющиеся в базе данных, что полезно для первоначальной разведки.
Обновить данные в таблице:
sqlite> ОБНОВЛЕНИЕ пользователей SET role='admin' WHERE username='guest';
Эта команда повышает права гостевого пользователя до роли администратора, что позволяет выполнять несанкционированные действия в приложении.
Если в базе данных SQLite есть таблица настроек или конфигураций, изменение записей, таких как authentication_required, может отключить функции безопасности:
sqlite> ОБНОВЛЕНИЕ конфигурации SET значение='false' ГДЕ ключ='authentication_required';
Чтобы сделать снимок базы данных, используйте:
sqlite> .dump
Эта команда выводит всю структуру SQL и данные, которые можно сохранить для дальнейшего автономного анализа.
Базы данных SQLite, несмотря на свою простоту и широкое распространение, стали объектом многочисленных изощрённых атак. Ниже представлен обзор наиболее заметных векторов атак, взятых из реальных случаев взлома:
Печально известная серия уязвимостей Magellan (например, CVE-2019-5018, CVE-2019-13734) эксплуатировала уязвимости в реализации SQLite, позволяя удалённое выполнение кода. Этот тип атак часто использует особенности обработки SQL-запросов в SQLite, вызывая повреждение памяти.
В этих инцидентах злоумышленники создавали специально сформированные SQL-запросы, которые при обработке вызывали переполнение буфера кучи или чтение за пределами выделенного буфера. Например, функция fts3_tokenizer в модуле полнотекстового поиска (FTS) SQLite была основной причиной атаки Magellan. Злоумышленники внедряли вредоносные данные в веб-страницы, эксплуатирующие эти уязвимости в веб-браузерах, использующих SQLite, например, Chromium. При посещении этих страниц жертвами выполнялся удалённый код на их компьютерах.
Отдельный класс атак включает прямое изменение файлов базы данных SQLite, обходя ограничения приложения на входные данные. Злоумышленник может вручную добавить триггеры SQL — специальные команды, которые автоматически выполняются в ответ на определённые события, такие как добавление или обновление строк.
В задокументированном случае исследователи продемонстрировали, как можно было взломать файл SQLite .db, включив в него триггеры, предназначенные для выполнения произвольного кода при открытии файла уязвимым приложением. Эта тактика эффективна против мобильных приложений, которые часто хранят данные в виде файлов .db в файловой системе устройства. Злоумышленники, получив доступ к этим файлам, могут внедрить триггеры для извлечения данных или изменения поведения приложения.
В некоторых атаках уязвимости в методе анализа вложенных запросов SQLite использовались для выполнения произвольного кода. Ярким примером является уязвимость CVE-2020-15358, в которой сложные запросы с условием WITH могли манипулировать памятью таким образом, что внутренние процедуры управления памятью SQLite оказывались поврежденными.
Этот тип атак особенно опасен, когда злоумышленник имеет определённый контроль над выполнением SQL-операторов, например, в веб-приложениях, позволяющих пользователям генерировать или настраивать запросы. В таких случаях злоумышленники создают глубоко вложенные запросы, обходящие стандартную очистку, что приводит к нарушениям безопасности памяти.
Многие мобильные приложения используют базы данных SQLite для хранения пользовательских данных, включая конфиденциальную информацию, такую как учётные данные или токены API. Злоумышленники часто атакуют эти базы данных, используя слабое шифрование или не используя его вовсе. Известный случай связан с базой данных чатов WhatsApp, которая хранилась в незашифрованном формате SQLite.
Сеанс чата, извлеченный из WhatsApp:
SQLite допускает динамическую загрузку внешних модулей через функцию load_extension, которая при включении создаёт серьёзную уязвимость в системе безопасности. Злоумышленники могут использовать эту функцию для загрузки произвольных общих библиотек (файлов .dll, .so), что позволяет им выполнять код с тем же уровнем привилегий, что и процесс SQLite.
В реальном случае эта уязвимость была использована на IoT-устройстве с SQLite. Прошивка устройства включала load_extension для отладки. Злоумышленники, которым удавалось подключиться к устройству, могли использовать эту функцию для внедрения своих собственных модулей, фактически получая полный контроль над системой.
Эта статья представляет собой руководство для хакеров по SQLite, охватывающее как основы, так и стратегии атак. В ней рассматриваются команды и структура SQLite, а также то, как различные злоумышленники используют уязвимости SQLite. Содержание статьи крайне важно для специалистов по кибербезопасности и разработчиков, поскольку оно предоставляет необходимые знания о широко используемой системе баз данных, а также освещает потенциальные риски безопасности.
SQLite — одна из самых распространённых СУБД, встраиваемая в бесчисленное множество приложений, мобильных устройств и веб-сервисов. Благодаря компактному дизайну она популярна среди разработчиков, но также является привлекательной целью для хакеров. Независимо от того, являетесь ли вы тестировщиком на проникновение, кибервоином или исследователем безопасности, освоение SQLite может открыть новые возможности для злоумышленников. В этом руководстве мы подробно рассмотрим базовую структуру SQLite и рассмотрим, как хакеры используют её во время атак.
Как известные хакерские группы используют базы данных SQLite
Давайте рассмотрим несколько реальных примеров того, как изощренные хакерские группы использовали базы данных SQLite в своих операциях:
- APT-группы и злоупотребление SQLite: Группировки, создающие угрозы повышенной устойчивости (APT), часто используют базы данных SQLite, встроенные в программное обеспечение или прошивки. Они получают доступ к этим базам данных во время атак на веб-серверы, скомпрометированные приложения или мобильные устройства. Например, спонсируемые государством группировки, такие как APT28 (Fancy Bear) и Lazarus Group, использовали SQLite в качестве инструмента разведки:
- Они извлекают имена пользователей, секреты приложений и конфигурации для сбора разведывательной информации.
- Базы данных SQLite на взломанных серверах часто хранят журналы, что позволяет злоумышленникам анализировать и глубже проникать в целевую среду.
- Операторы программ-вымогателей: Группы программ-вымогателей, такие как REvil или Conti , часто используют файлы SQLite для извлечения учётных данных или эскалации своих атак. Известно, что двоичные файлы программ-вымогателей сканируют системы на наличие файлов .db или .sqlite, похищают незашифрованные учётные данные и даже изменяют базы данных, чтобы повредить работу приложений в рамках стратегии получения выкупа.
- Похитители учетных данных и утечка данных: такие группы, как Emotet и TrickBot, известные развертыванием вредоносного ПО, специально нацеленного на базы данных SQLite браузера, часто извлекают сохраненные имена пользователей и пароли из файлов SQLite браузера (данные входа, файлы cookie и т. д.).
Понимание того, каким образом базы данных SQLite подвергаются реальным атакам, важно для принятия упреждающих, а не реактивных мер, реализации контрмер и укрепления безопасности.
Использование SQLite в Linux
Перед использованием SQLite вам может потребоваться установить его. Проверить, установлен ли он, можно, введя:
kali> sqlite3 –версия
Чтобы создать новую базу данных SQLite (или открыть существующую), используйте следующую команду:
kali> sqlite3 <имя_базы_данных>
В командной строке SQLite вы можете создать таблицу с помощью команд SQL. Например, чтобы создать таблицу пользователей:
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER);
Этот оператор SQL создает таблицу «пользователи» с тремя столбцами:
- id : целое число, которое служит первичным ключом, т. е. идентификатором этой записи в базе данных.
- имя : Текстовое поле, которое должно иметь значение (не нулевое).
- age : необязательное целочисленное поле, которое может быть пустым.
Давайте добавим некоторые данные:
sqlite> INSERT INTO пользователи (имя, возраст) ЗНАЧЕНИЯ ('Администратор', 30);
Теперь попробуем извлечь данные из таблицы:
sqlite> SELECT * FROM пользователи;
Просмотреть схему таблицы:
sqlite> PRAGMA table_info(пользователи);
Эта команда отображает структуру таблицы с именем users, включая имена столбцов, типы данных и ограничения.
Чтобы вывести список всех таблиц, используйте:
sqlite> .tables
Эта команда показывает все таблицы, имеющиеся в базе данных, что полезно для первоначальной разведки.
Обновить данные в таблице:
sqlite> ОБНОВЛЕНИЕ пользователей SET role='admin' WHERE username='guest';
Эта команда повышает права гостевого пользователя до роли администратора, что позволяет выполнять несанкционированные действия в приложении.
Если в базе данных SQLite есть таблица настроек или конфигураций, изменение записей, таких как authentication_required, может отключить функции безопасности:
sqlite> ОБНОВЛЕНИЕ конфигурации SET значение='false' ГДЕ ключ='authentication_required';
Чтобы сделать снимок базы данных, используйте:
sqlite> .dump
Эта команда выводит всю структуру SQL и данные, которые можно сохранить для дальнейшего автономного анализа.
Стратегии атаки
Базы данных SQLite, несмотря на свою простоту и широкое распространение, стали объектом многочисленных изощрённых атак. Ниже представлен обзор наиболее заметных векторов атак, взятых из реальных случаев взлома:
Повреждение памяти и удаленное выполнение кода (RCE)
Печально известная серия уязвимостей Magellan (например, CVE-2019-5018, CVE-2019-13734) эксплуатировала уязвимости в реализации SQLite, позволяя удалённое выполнение кода. Этот тип атак часто использует особенности обработки SQL-запросов в SQLite, вызывая повреждение памяти.
В этих инцидентах злоумышленники создавали специально сформированные SQL-запросы, которые при обработке вызывали переполнение буфера кучи или чтение за пределами выделенного буфера. Например, функция fts3_tokenizer в модуле полнотекстового поиска (FTS) SQLite была основной причиной атаки Magellan. Злоумышленники внедряли вредоносные данные в веб-страницы, эксплуатирующие эти уязвимости в веб-браузерах, использующих SQLite, например, Chromium. При посещении этих страниц жертвами выполнялся удалённый код на их компьютерах.
Манипулирование файлами базы данных и внедрение вредоносных триггеров
Отдельный класс атак включает прямое изменение файлов базы данных SQLite, обходя ограничения приложения на входные данные. Злоумышленник может вручную добавить триггеры SQL — специальные команды, которые автоматически выполняются в ответ на определённые события, такие как добавление или обновление строк.
В задокументированном случае исследователи продемонстрировали, как можно было взломать файл SQLite .db, включив в него триггеры, предназначенные для выполнения произвольного кода при открытии файла уязвимым приложением. Эта тактика эффективна против мобильных приложений, которые часто хранят данные в виде файлов .db в файловой системе устройства. Злоумышленники, получив доступ к этим файлам, могут внедрить триггеры для извлечения данных или изменения поведения приложения.
Выполнение произвольного кода с помощью ошибок анализа запросов
В некоторых атаках уязвимости в методе анализа вложенных запросов SQLite использовались для выполнения произвольного кода. Ярким примером является уязвимость CVE-2020-15358, в которой сложные запросы с условием WITH могли манипулировать памятью таким образом, что внутренние процедуры управления памятью SQLite оказывались поврежденными.
Этот тип атак особенно опасен, когда злоумышленник имеет определённый контроль над выполнением SQL-операторов, например, в веб-приложениях, позволяющих пользователям генерировать или настраивать запросы. В таких случаях злоумышленники создают глубоко вложенные запросы, обходящие стандартную очистку, что приводит к нарушениям безопасности памяти.
Использование привилегий и слабого шифрования в мобильных приложениях
Многие мобильные приложения используют базы данных SQLite для хранения пользовательских данных, включая конфиденциальную информацию, такую как учётные данные или токены API. Злоумышленники часто атакуют эти базы данных, используя слабое шифрование или не используя его вовсе. Известный случай связан с базой данных чатов WhatsApp, которая хранилась в незашифрованном формате SQLite.
Сеанс чата, извлеченный из WhatsApp:
Повышение привилегий через злоупотребление load_extension
SQLite допускает динамическую загрузку внешних модулей через функцию load_extension, которая при включении создаёт серьёзную уязвимость в системе безопасности. Злоумышленники могут использовать эту функцию для загрузки произвольных общих библиотек (файлов .dll, .so), что позволяет им выполнять код с тем же уровнем привилегий, что и процесс SQLite.
В реальном случае эта уязвимость была использована на IoT-устройстве с SQLite. Прошивка устройства включала load_extension для отладки. Злоумышленники, которым удавалось подключиться к устройству, могли использовать эту функцию для внедрения своих собственных модулей, фактически получая полный контроль над системой.
Краткое содержание
Эта статья представляет собой руководство для хакеров по SQLite, охватывающее как основы, так и стратегии атак. В ней рассматриваются команды и структура SQLite, а также то, как различные злоумышленники используют уязвимости SQLite. Содержание статьи крайне важно для специалистов по кибербезопасности и разработчиков, поскольку оно предоставляет необходимые знания о широко используемой системе баз данных, а также освещает потенциальные риски безопасности.