Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
П22. ELF dynamic dependencies
Цель
Снять с готового ELF-бинаря список динамически слинкованных библиотек (записи DT_NEEDED) и смаппить каждую .so на установленный DEB-пакет с версией. Проверяемый результат: таблица «.so → DEB-пакет → версия → PURL pkg:deb/...», где для каждой динамической библиотеки заполнены все четыре колонки или явно отмечено unresolved.
Команда или действие
# 1. динамические зависимости из секции .dynamic (надёжнее ldd: не запускает бинарь)
readelf -d ./app | grep NEEDED
# 2. фактические пути, по которым резолвятся .so на этой системе
ldd ./app
# 3. маппинг конкретной .so на DEB-пакет
dpkg -S $(ldconfig -p | awk '/libssl.so.3/{print $NF; exit}')
# 4. версия пакета для PURL
dpkg-query -W -f='${Package} ${Version}\n' libssl3
readelf -dпротивlddlddпоказывает, что фактически подгрузится (с учётомRPATH/LD_LIBRARY_PATH), но для этого по сути запускает динамический загрузчик — на чужом бинаре это нежелательно.readelf -d ./app | grep NEEDEDчитает секцию.dynamicстатически, ничего не исполняя. Для инвентаризации опирайтесь наreadelf,lddиспользуйте для уточнения путей.
Что вы должны увидеть
readelf -d — записи NEEDED (фрагмент):
0x0000000000000001 (NEEDED) Shared library: [libssl.so.3]
0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.3]
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
dpkg -S — путь → пакет:
libssl3:amd64: /usr/lib/x86_64-linux-gnu/libssl.so.3
Итоговая таблица (ориентир: число строк равно числу NEEDED за вычетом libc/libstdc++, которые учитываются как системный runtime):
| .so | DEB-пакет | Версия | PURL |
|---|---|---|---|
| libssl.so.3 | libssl3 | 3.0.11-1~deb12u2 | pkg:deb/debian/libssl3@3.0.11-1~deb12u2?arch=amd64 |
| libz.so.1 | zlib1g | 1:1.2.13.dfsg-1 | pkg:deb/debian/zlib1g@1.2.13.dfsg-1?arch=amd64 |
Чего здесь принципиально не видно В
DT_NEEDEDпопадают только динамические библиотеки. Если OpenSSL вшит статически (.a), его в этом списке нет вообще — и это не ошибка снятия, а слепая зона: переходите к П23. Статическая линковка как слепая зона.
Если не получилось
dpkg -S→no path found matching pattern. Файл.soне принадлежит ни одному установленному DEB-пакету: библиотека собрана вручную, vendored или из стороннего репозитория. Это unresolved — заносите в реестр, не выбрасывайте.ldd→not a dynamic executable. Бинарь полностью статический (-static) — динамических зависимостей нет по построению. Весь состав вшит статически, единственный путь — П23. Статическая линковка как слепая зона и build-scan.readelfпуст, а файл — не ELF. Проверьте формат:file ./app. Если это неELF ... executable, вы смотрите не на тот артефакт (скрипт-обёртка, архив, не та архитектура).- Версия в PURL не совпадает с апстрим-версией. DEB-версия (
3.0.11-1~deb12u2) — это версия пакета дистрибутива, а не чистая upstream-версия (3.0.11). Для матчинга на CVE учитывайте обе; нормализация — задача модуля М04.
Критерий зачёта
Показать преподавателю: вывод readelf -d ./app | grep NEEDED и заполненную таблицу «.so → DEB-пакет → версия → PURL» по всем динамическим библиотекам бинаря. Каждая .so, не смапленная на DEB-пакет, должна быть явно помечена unresolved с обоснованием.
Нормативная связка
Маппинг ELF → DEB даёт компонентам координаты (имя, версия, поставщик) — это базовые элементы SBOM по CISA Minimum Elements for SBOM и критерий полноты по BSI TR-03183-2 v2.1.0. Управляемость инвентаризации — ГОСТ Р 56939-2024; связка «SBOM → сторонние компоненты → уязвимости» — PW.4/RV.1 NIST SP 800-218 SSDF. Смежные практики модуля М09: П19. C C++ make build inventory, П23. Статическая линковка как слепая зона, П25. CPE alias worklist. Шаблон: Реестр unresolved libraries.