Изучение данных о небезопасных вызовах функций при анализе прошивки

Анализ прошивки выявляет потенциально опасные вызовы функций в поддерживаемых исполняемых файлах, извлечённых из образов прошивки. Эти результаты помогут выявить шаблоны внедрения, требующие дополнительной проверки безопасности, и приоритизировать бинарные файлы на основе их потенциальной уязвимости.

В этой статье объясняются сигналы вызова небезопасных функций, которые вы можете увидеть в результатах анализа прошивки. В нём описываются поддерживаемые файлы, ограничения покрытия и способы оценки результатов в контексте исполняемого файла и устройства.

Note

Наличие небезопасного вызова функции не обязательно означает, что исполняемый файл или устройство уязвимы. Реальный риск зависит от того, как используется функция, может ли до неё дойти ненадёжный ввод и как исполняемый файл будет раскрыт и защищён.

Опасные сигналы вызова функций в анализе прошивки

Анализ небезопасных вызовов функций выполняет статический анализ поддерживаемых исполняемых файлов формата Executable and Linkable Format (ELF). Он выявляет ссылки на функции, которые могут вызвать проблемы с безопасностью при их использовании без надлежащей проверки ввода, проверки границ, проверки размера буфера или других защищённых систем кодирования.

Некоторые функции обработки памяти могут способствовать переполнению буфера или другим повреждениям памяти при неправильном использовании. В зависимости от затронутого пути кода и доступных мер, злоумышленник может использовать эти условия для нарушения работы устройства или выполнения несанкционированного кода.

Каждый результат представляет собой сигнал, а не определение уязвимости. Оценивайте сигналы вместе и в контексте роли исполняемого файла в прошивке.

Снимок экрана с результатами предварительного просмотра небезопасных вызовов функций, включая общее количество небезопасных и сетевых вызовов, а также количество вызовов для отдельных функций по исполняемым файлам.

Потенциально опасные функции

Некоторые библиотечные функции могут быть рискованными, поскольку они не гарантируют объём или надёжность обрабатываемых данных. Например, функции, такие как strcpy и strcat , могут вносить вклад в условия переполнения буфера, если программа копирует чрезмерный или ненадёжный вход в буфер назначения.

Сообщая ссылка указывает, что анализ прошивки выявил отслеживаемую функцию в исполняемом файле. Это не доказывает, что функция используется неправильно. Функция может использоваться с защитными средствами, такими как проверка длины входа, предоставление достаточного места для назначения или ограничение входа доверенными данными.

При изменении исходного кода используйте функции обработки строк, которые принимают размер буфера назначения и проверяют длину входов перед копированием или конкатенированием данных. Убедитесь, что результат завершается нулевым символом, и обрабатывайте случаи усечения или ошибки. Ограниченные функции, такие как strncpy и strncat , могут снизить риск по сравнению с неограниченными альтернативами, но их всё равно необходимо использовать с правильными расчётами размера буфера.

Набор отслеживаемых функций может меняться по мере развития этой функции. Рассматривайте название функции и количество лишь как отправную точку для ревью кода, а не как полный перечень всех рисков, связанных с безопасностью памяти или выполнением команд.

Информация о сетевых звонках

Анализ прошивки также показывает, когда в анализируемом исполняемом файле определяются вызовы функций, связанных с сетью. Используйте этот сигнал, чтобы помочь расставить приоритеты исполняемых файлов для дальнейшего рассмотрения. Это не позволяет определить, принимает ли исполняемый файл удалённые подключения, обменивается ли данными за пределами устройства или доступен ли в среде развертывания.

При расстановке приоритетов рассмотрите исполняемые файлы, содержащие как небезопасные вызовы функций, так и сетевые вызовы. Эти исполняемые файлы могут обрабатывать данные, полученные из сети, и требуют более раннего изучения.

Путь к исполняемому файлу и число вызовов

Результаты связаны с путём к исполняемому файлу, извлечённым из образа прошивки. Количество вызовов функций показывает, сколько ссылок на отслеживаемую функцию было идентифицировано для этого исполняемого файла. Большее число может указывать на большее количество мест, требующих проверки, но само по себе не означает более высокую степень серьёзности или возможность практического использования.

Один и тот же исполняемый файл может появляться в нескольких извлечённых точках, а разные исполняемые файлы могут содержать ссылки на одну и ту же функцию. Используйте путь экстрактора и версию прошивки, чтобы определить правильный исходный компонент или артефакт поставщика.

Поддерживаемые файлы и охват

Анализ небезопасных вызовов функций доступен в предварительном просмотре и применяется к поддерживаемым исполняемым файлам пользовательского пространства ELF, извлечённым из образов прошивки на базе Linux.

Файлы модуля ядра Linux (.ko) не включены, поскольку предварительная версия ограничена анализом исполняемых файлов пользовательского пространства.

Предпросмотр поддерживает следующие архитектуры процессоров:

  • AMD64 или x86-64
  • ARM64 или AArch64
  • ARM32

Требования к двоичным файлам

Исполняемый файл должен сохранять информацию, позволяющую анализу прошивки определять используемые им функции. Статически связанный или удалённый двоичный файл может не давать результатов, если имена функций или другая необходимая информация недоступны.

Образ встроенного ПО может успешно завершить другие виды анализа, при этом не выдавая результатов по небезопасным вызовам функций. Каждый анализатор прошивки имеет свои требования к файлу, архитектуре и метаданным.

Совместное использование данных вызова небезопасной функции

Каждый сигнал даёт разный взгляд на потенциальный риск:

Сигнал Что это помогает понять
Путь к исполняемому файлу Какой извлечённый исполняемый файл содержит идентифицированные вызовы.
Количество небезопасных вызовов функций Общее количество небезопасных вызовов функций, идентифицированных в исполняемом файле.
Количество сетевых вызовов Может ли поведение, связанное с сетью, оправдывать приоритет исполняемого файла для дальнейшего рассмотрения. Подсчёт не определяет удалённую доступность.
Количество <function name> звонков Сколько ссылок на названную функцию было идентифицировано в исполняемом файле? Используйте функционально-специфический подсчёт для дальнейшего анализа соответствующих мер безопасности, таких как размер буфера, проверка входов, обработка строк форматирования, разрешения памяти или проверка командного ввода.

Для следующих функций предусмотрены счёты, специфичные для функции:

  • strcpy
  • strcat
  • printf
  • fprintf
  • sprintf
  • system
  • mmap
  • popen

Вместо того чтобы полагаться на одно поле, оцените эти сигналы вместе, чтобы понять, какие исполняемые файлы требуют наиболее немедленного рассмотрения.

Важные замечания

Интерпретация нулевых и пустых результатов

Результаты могут отображать нулевое количество для исполняемого файла или вообще не отображать исполняемый файл. Нулевое количество означает, что исполняемый файл был проанализирован, но отслеживаемые вызовы для этого поля не были выявлены.

Если исполняемый файл не отображается в результатах, не предполагайте, что в нём нет опасных вызовов функций. Анализ прошивки мог не смог его проанализировать, потому что исполняемый файл использует неподдерживаемую архитектуру или не содержит необходимой информации для идентификации ссылок на функции.

Пустой список результатов означает, что для образа прошивки нет результатов вызовов небезопасных функций. Это не значит, что прошивка не содержит опасных вызовов функций.

Результаты не могут появляться, когда:

  • Исполняемые файлы пользовательского пространства ELF не были извлечены.
  • Извлеченные исполняемые файлы используют неподдерживаемые архитектуры.
  • Статический или убранный двоичный файл не содержит достаточного количества идентифицирующей информации.
  • Извлеченный файл — это исключённый модуль ядра Linux.
  • Образ прошивки был проанализирован до того, как анализ Unsafe Function Calls стал доступен.
  • Извлечение или анализ не прошли успешно.

Note

Пустой результат не подтверждает, что в прошивке нет опасных вызовов функций. Чтобы получить текущий анализ изображения, обработанного до появления предпросмотра Unsafe Function Calls, загрузите образ прошивки снова.

Чтобы узнать, как загрузить изображение и просмотреть его результаты, см. раздел «Анализ образа прошивки с помощью сервиса анализа прошивки». Чтобы оценить защиту связанных компиляторов и линкеров, ознакомьтесь со вкладкой Binary Hardening для того же исполняемого файла.