Разработчики из компании Cisco представили проект PyREBox, в рамках которого подготовлено окружение для обратного инжиниринга и наблюдения за поведением вредоносного ПО. PyREBox представляет собой надстройку над QEMU, снабжённую дополнительными средствами для инспектирования содержимого памяти, отладки и динамического анализа работы системы и приложений. Код распространяется под лицензией GPLv2. В отличие от традиционных отладчиков, работающих в одном системном окружении с проверяемым приложением, PyREBox полностью отделён от изучаемого окружения и позволяет наблюдать с ним со стороны, при необходимости вмешиваясь в его работу. PyREBox создаёт эмулируемое окружение для всей системы, предлагая простой интерфейс для наблюдения за этим окружением, не требуя установки особых драйверов или агентов, а работая непосредственно на уровне эмулятора и предоставляемого им API VMI (Virtual Machine Introspection). В настоящее время возможно создание окружений i386 и x86_64, но в планах намечена поддержка ARM, MIPS,
В списке рассылки разработчиков ядра Linux представлен первый публичный выпуск приложения hotspot, в рамках которого разработан GUI для наглядного изучения отчётов, подготовленных с использованием подсистемы ядра perf, предоставляющей средства для анализа производительности. Hotspot может выступать в качестве прозрачной замены команде "perf report" при разборе файлов perf.data, дополнительно предоставляя такие возможности как визаулизация через FlameGraph, сводный обзор состояния в стиле утилиты top, агрегация статистики по вызовам, различные виды сортировки, отображение всплывающих подсказок, встроенные механизмы поиска и возможность отображения бок о бок метрик для нескольких событий.
Джон Регир (John Regehr), профессор университета штата Юта, участвующий в разработке Clang и занимающийся исследованиями в области неопределённого поведения программ, подготовил полезный для разработчиков обзор ситуаций, при которых поведение программы становится неопределенным и приводит к получению проблем с использованием памяти и указателями при сборке разными компиляторами. В статье не только описаны возникающие проблемы, но и предложены способы для их выявления, а также оценена эффективность применения для обнаружения неопределённого поведения типовых отладочных инструментов, таких как Address Sanitizer (ASAN), UndefinedBehaviorSanitizer (UBSan), MemorySanitizer (MSan), ThreadSanitizer (aka TSan) и Valgrind.

Выпуск strace 4.18

05.07.2017 18:54
Состоялся выпуск strace 4.18, утилиты для диагностики и отладки программ для ОС, использующих ядро Linux. Strace позволяет отслеживать и (начиная с версии 4.15) вмешиваться в процесс взаимодействия программы и ядра, включая происходящие системные вызовы, возникающие сигналы и изменения состояния процесса. Для своей работы strace использует механизм ptrace. Начиная с версии 4.13 формирование выпусков strace синхронизировано с выходом новых версий Linux. Основные изменения в strace 4.18: Реализован ряд улучшений в поддержке декодирования протокола netlink (см. также). Работы по улучшению поддержки декодирования протокола netlink проводятся в рамках проекта Google Summer of Code 2017 "Netlink socket parsers", являющегося продолжением одноимённого проекта 2016 года. Добавлена поддержка декодирования сообщений SCM_TIMESTAMP*. Обновлены списки значений констант ARPHRD_*, KEYCTL_*, NDIAG_SHOW_*, RTM_*, SCM_*, SCTP_*, SO_*, V4L2_* и используемых в системном вызове prctl() ARCH_*. Исправлен сброс маски
Доступен релиз Valgrind 3.13.0, инструментария для отладки работы с памятью, обнаружения утечек памяти и профилирования. Работа Valgrind поддерживается для платформ Linux (X86, AMD64 ARM32, ARM64, PPC32, PPC64BE, PPC64LE, S390X, MIPS32, MIPS64), Android (ARM, ARM64, MIPS32, X86),Solaris (X86, AMD64) и macOS 10.12 (AMD64). В новой версии: Проведена работа по обеспечению отладки крупных приложений, потребляющих очень много памяти. Расширен размер кэша. Максимальное число секторов увеличено с 24 до 48, а значение по умолчанию с 16 до 32. Общий размер памяти, который может использовать Valgrind увеличен с 64 до 128 Гб, т.е. теперь возможна отладка приложений, которым выделено до 60 Гб памяти. Адрес загрузки изменён с 0x3800'0000 на 0x5800'0000, что позволяет загружать крупные исполняемые файлы, размером до 1.2 Гб; Добавлена поддержка нового представления трассировок стека - "XTree", при котором раскладка памяти оформляется в виде дерева из трассировок стека и привязанных к ним данных. XTree
Доступен релиз отладчика GDB 8.0, поддерживающего отладку на уровне исходных текстов для широкого спектра языков программирования (Ada, C, C++, Objective-C, Pascal, Go и т.д.) на различных аппаратных (i386, amd64, ARM, Power, Sparc и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS). Значительная смена номера версии связана с прекращением опциональной поддержки сборки GDB и GDBserver с использованием Си-компилятора (режим "--disable-build-with-cxx"). Для сборки GDB 8.0 теперь обязательно нужен компилятор С++, совместимый со стантартом C++11, т.е. требуется GCC 4.8 или более новый выпуск. Кроме того, для сборки теперь требуется GNU Make 3.81 или более новый выпуск, поддержка сборки при помощи BSD make и других сторонних реализаций утилиты make прекращена. Напомним, что GCC 4.8 был выпущен в 2013 году, а GNU Make 3.81 в 2006 году. Ключевые улучшения: При отладке приложений на языке С++11 теперь поддерживаются ссылки rvalue; Возможность доступа к регистру PKU на платформе
Доступен выпуск strace 4.17, утилиты для диагностики и отладки программ для ОС, использующих ядро Linux. Она позволяет отслеживать и (начиная с версии 4.15) вмешиваться в процесс взаимодействия программы и ядра, включая происходящие системные вызовы, возникающие сигналы и изменения состояния процесса. Для своей работы strace использует механизм ptrace. Начиная с версии 4.13 формирование выпусков strace синхронизировано с выходом новых версий ядра Linux. Основные изменения в strace 4.17: Оптимизирована фильтрация системных вызовов за счёт уменьшения количества вызовов ptrace() для системных вызовов, отображение которых отключено. Добавлена поддержка декодирования системного вызова statx(2), появившегося в Linux 4.11. Добавлена поддержка декодирования команд ioctl(2), связанных с операциями над пространствами имён. Для ioctl подсистемы Video4Linux добавлена поддержка декодирования не декодировавшихся ранее типов V4L2_BUF_TYPE_*, а также команд VIDIOC_S_TUNER и VIDIOC_G_TUNER. Реализована поддержка
Компания Google подвела первые итоги работы проекта OSS-Fuzz, созданного для организации непрерывного fuzzing-тестирования открытого ПО с целью выявления возможных проблем с безопасностью. За пять месяцев существования проекта было организовано тестирование 47 открытых проектов, в результате которого было выявлено более тысячи ошибок, из которых 264 являются потенциальными уязвимостями. Из подтверждённых уязвимостей отмечается 10 проблем во FreeType2, 17 в FFmpeg, 33 в LibreOffice, 8 в SQLite, 10 в GnuTLS, 25 в PCRE2, 9 в gRPC и 7 в Wireshark. Благодаря организации непрерывного тестирования некоторые из ошибок удалось обнаружить спустя лишь несколько часов после внесения регрессивных изменений в кодовую базу. Кроме ошибок, которые непосредственно могут привести к уязвимостям, в ходе применения OSS-Fuzz также выявлено более 300 проблем, приводящих к прекращению обработки из-за истечения таймаута или исчерпания доступной памяти, которые не всегда рассматриваются как ошибки, но могут служить как отправная
После почти года разработки увидел свет релиз системы динамической трассировки SystemTap 3.1, предоставляющий для платформы Linux средства похожие на технологию DTrace. SystemTap позволяет организовать доскональное наблюдение за работающей Linux системой, производить сбор статистики о работе приложений, профилирование и контроль системных вызовов. Управление производится через интерфейс командной строки и специальный Си-подобный язык сценариев. Система протестирована с ядрами Linux начиная с версии 2.6.18 и заканчивая 4.10-rc8. В развитии проекта участвуют такие компании как Red Hat, IBM, Intel, Hitachi и Oracle. В каталоге примеров представлено 163 скрипта на все случаи жизни, подходящие для слежения за распределением памяти, вводом/выводом, дисковыми операциями, сетевым трафиком (например, анализ работы NFS), работой планировщика задач, обработкой прерываний, использованием системных буферов, установкой блокировок, выполнением системных вызовов, обработкой сигналов и т.п. Новая версия примечательна
Доступна новая версия утилиты strace 4.15, предназначенной для диагностики и отладки программ в ОС на базе ядра Linux. Утилита позволяет отслеживать и (начиная с данной версии) вмешиваться в процесс взаимодействия программы и ядра, включая происходящие системные вызовы, возникающие сигналы и изменения состояния процесса. Для своей работы strace использует механизм ptrace. Код проекта распространяется под лицензией BSD. Начиная с версии 4.13, формирование выпусков strace синхронизировано с выходом очередных версий Linux. В версии 4.15 можно отметить следующие изменения: Реализована возможность подмены номера системного вызова и результата вызова («fault injection»). Данная функциональность даёт возможность изучать поведение приложений в случае возникновения ошибок при выполнении различных системных вызовов. Например, данная возможность позволила выявить недостаточную проверку кода возврата вызовов mprotect() в коде glibc dynamic linker: $ strace -e mprotect -e