The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Google опубликовал GWPSan, инструмент для выявления ошибок на стадии выполнения приложений

05.06.2024 14:52

Компания Google опубликовала исходные тексты инструментария GWPSan, предназначенного для выявления ошибок на этапе выполнения приложений, собранных для архитектур x86-64 и ARM64. GWPSan собирается в виде разделяемой библиотеки, которая связывается при запуске приложения при помощи LD_PRELOAD и использует для анализа работы программы доступные в ядре Linux механизмы остановки (PERF_TYPE_BREAKPOINT) и сэмплинга процессов. Код написан на языке С++ и распространяется под лицензией Apache 2.0.

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

В настоящее время доступно три детектора:

  • UAR (Use-after-return) - выявляет ошибки, вызванные использованием объекта в стеке после выхода из функции, в которой этот объект был определён. Защита организована через перехват точек входа и выхода для функции - при входе осуществляется подмена стека на копию для использования во время выполнения функции, а при выходе возвращается старое состояние стека.
  • TSan (Thread Sanitizer) - определяет состояния гонки между потоками (Data-race), возникающее когда разные одновременно выполняемые потоки могут читать или изменять общие области памяти, не используя при этом примитивы для синхронизации работы. Защита построена на использовании аппаратных точек останова, привязываемых к совместным областям памяти. Срабатывающий обработчик на небольшой промежуток времени приостанавливает выполнение потока при обращении к памяти и во время этой приостановки проверяет не было ли срабатывания точки останова для другого потока.
  • LMSan (Lightweight Memory Sanitizer) - определяет использование неинициализированных данных в памяти. Детектор отмечен как экспериментальный и не рекомендованный для использования.

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

  1. Главная ссылка к новости (https://github.com/google/gwps...)
  2. OpenNews: Проект Openwall подготовил модуль для защиты от эксплуатации уязвимостей в ядре Linux
  3. OpenNews: Выпуск cppcheck 2.12, статического анализатора кода для языков C++ и С
  4. OpenNews: Открыт код статического анализатора Code Climate
  5. OpenNews: Facebook открыл RacerD, статический анализатор для многопоточного кода на Java
  6. OpenNews: Релиз свободного статического анализатора кода frama-clang 0.0.5
Лицензия: CC BY 3.0
Наводку на новость прислал Artem S. Tashkinov
Короткая ссылка: https://opennet.ru/61317-gwpsan
Ключевые слова: gwpsan, debug, trace
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (19) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.6, Аноним (6), 18:10, 05/06/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    а зачем если есть valgrind
     
     
  • 2.16, Вирт (?), 21:39, 05/06/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > а зачем если есть valgrind

    valgrind слишком медленный для нормального размера программ.
    На моей не такой уж большой программе, которая стартует секунд 10,
    под valgrind придется ждать минут 5.


    "sanitizer" здесь намного лучше, но для работы с ними нужно пересобрать программу
    и хорошо бы все ее зависимости.

     
  • 2.20, Аноним (-), 01:08, 06/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > а зачем если есть valgrind

    Он тормозной аки трактор и оперативы может жрать немеряно.

    Впрочем
    > TSan (Thread Sanitizer) - определяет состояния гонки между потоками

    WTF - уже было в gcc/clang же.

     
     
  • 3.29, raban (?), 10:05, 11/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Валгринд уже давно оттестирован и все минусы известны + подробная документация.
    а еще You don't need to recompile, relink, or otherwise modify the program to be checked.
    Так что низачот.
     

  • 1.7, Аноним (7), 18:26, 05/06/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Я так понимаю, эта штука нужна там, где у компиляторов нет своих санитайзеров? У gcc, clang, vc++ есть уже такое
     
     
  • 2.23, Аноним (23), 04:56, 06/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    У врачей есть такая услуга "второе мнение". Тут тоже самое.
     
  • 2.24, Аноним (24), 05:00, 06/06/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    LD_PRELOAD же написано.

    Видимо, для тех случаев, когда код собран без санитайзера.

     

  • 1.8, Витюшка (?), 18:27, 05/06/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +4 +/
     

     ....ответы скрыты (4)

  • 1.9, Васян из васяна (?), 18:34, 05/06/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    интересно, а какой оверхед будет?
     
     
  • 2.17, Аноним (17), 22:00, 05/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Какая разница? Это для отладки
     
     
  • 3.21, Аноним (-), 01:20, 06/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Какая разница? Это для отладки

    Как какая. В зависимости от проги например asan может немеряно памяти сожрать. Скажем если прога жрала штатно гиг-два, то с ASAN для полной валидации ее работы памяти она и десяток сожрать может если паттерны работы с памятью неудачные.

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

     
  • 3.28, Аноним (28), 14:10, 06/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Большая, особенно когда речь об отладке синхронизаций (~tsan)
     

  • 1.12, Аноним (12), 19:10, 05/06/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сабж написан большим любителем аббревиатур. UAR (Use-after-return), LMSan (Lightweight Memory Sanitizer), ФГУОПП ЕГРЮЛ...
     
     
  • 2.26, Аноним (26), 10:06, 06/06/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.27, Аноним (28), 14:08, 06/06/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты в айти мимопроходящий? Уже давно есть asan, tsan, ubsan, само ub, gcc и мн-во других аббревиатур и акронимов. Разница только в том, что варианты на аборигенском звучат как вопли колхозника из свинарника
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру