From 5220fca3986eb31da848e5f51ebe30219979769d Mon Sep 17 00:00:00 2001 From: "v.naumkin" Date: Thu, 14 May 2026 13:56:28 +0300 Subject: [PATCH] add drafts for govulncheck and final report --- README.md | 20 ++++++++++++++---- analysis_report.md | 47 ++++++++++++++++++++++++++++++++++++++++++ govulncheck/install.sh | 3 +++ govulncheck/run.sh | 3 +++ 4 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 analysis_report.md create mode 100644 govulncheck/install.sh create mode 100644 govulncheck/run.sh diff --git a/README.md b/README.md index 465955d..59b55a1 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Linux Auth — Приложение аутентификации на Linux +**[Аналитический отчёт](analysis_report.md)** + Linux Auth — консольное приложение для аутентификации пользователей на Linux (Debian 12) с использованием локальной SQLite базы данных. Поддерживает: @@ -145,15 +147,17 @@ bash scripts/run.sh ./build/release/add_user -username test -password 1234 ``` -# SAST анализ +# Анализ безопасности -## Настройка окружения +## SAST (статический анализ) + +### Настройка окружения ```bash bash scripts/config_sast.sh ``` -## Запуск анализа +### Запуск анализа Человекочитаемые результаты (txt формат файлов): @@ -169,7 +173,7 @@ bash scripts run_sast_sarif.sh Результаты анализа в sast_results (3 утилиты для SAST). -## Запуск фаззинга +## Фаззинг Сначала соберите приложение и инициализируйте тестовую базу (init_users). @@ -229,3 +233,11 @@ bash scripts run_sast_sarif.sh 5.2. ./install_golang-fuzz.sh 5.3. ./run_golang-fuzz.sh + +## Анализ зависимостей на известные уязвимости + +1. cd govulncheck + +2. ./install.sh + +3. ./run.sh diff --git a/analysis_report.md b/analysis_report.md new file mode 100644 index 0000000..158c432 --- /dev/null +++ b/analysis_report.md @@ -0,0 +1,47 @@ +# Комплексный отчёт об анализе безопасности приложения + +## Среда разработки + +Go версии 1.23, Debian 12. + +## Среда анализа + +Go версии 1.24, Debian 13. + +# Статический анализ + +* Bearer - хорошо работает для анализа взаимодействия с ОС, подсветил возможную утечку информации в логах работы приложения и отсутствие проверки пути загрузки конфига. + +* Gosec - ориентирован на поиск проблем с безопасностью, нашёл (как и bearer) проблему с путём загрузки конфига и (в отличие от bearer) предложил способ исправления. + +* Golangci-lint - больше линтер, нежели статический анализатор, указал только на возможную замену if с условием "ИЛИ" на switch (я считаю, что это false positive). + +* Svace (svacer) - проприетарный инструмент, который был развёрнут во внутренней сети компании и был также использован, но не был включён в итоги; +было одно срабатывание на код самого приложения и достаточно много - на использованные модули; по моему мнению, все срабатывания - false positive. + +# Фаззинг + +* Нативный фаззинг (доступен с версии Go 1.18 и считается стандартом, как дополнение нативного тестирования позволяет визуализировать покрытие кода) - объектом тестирования стала функция аутентификации, которая в том числе вызывала функции для доступа к БД и хеширования; +цель фаззинга - проверка корректности работы функции аутентификации; входные данные - строки логина и пароля (начальные данные - правильные и неправильные пары логин-пароль для 2 тестовыъ пользователей, а также пустые строки в качестве логина и пароля); +отслеживались ошибки, возвращаемые самой функцией аутентификации, неожиданная (не по 2 парам логин-пароль в тестовой базе) успешная аутентификация и аварийное завершение работы. + +* AFL++ в режиме QEMU (универсальный способ проверки готового бинарника, принимающего данные в stdin или из файла) - объектом тестирования стала скомпилированная программа; цель - проверка устойчивости итогового исполняемого файла к различным входным данным; +начальные входные данные были как и в нативном фаззинге (корректные строки), но во время фаззинга они мутировали в том числе и в бинарные данные; отслеживалось аварийное завершение работы. + +Длительность фаззинга - 6 часов. Ошибок не найдено. + +# Анализ зависимостей + +Go хорош тем, что не даёт скомпилировать программу при наличии избыточных зависимостей (неиспользованные import считаются ошибкой). Скачать библиотеки можно как из официального репозитория пакетов, так и из пользовательских репозиториев (на github). +Также система модулей (см. файлы go.mod и go.sum) позволяет зафиксировать версии заимствованных библиотек с использованием хешей как исходного кода самих импортируемых модулей, так и хешей их зависимостей (их go.mod). +Таким образом, гарантируется автоматическое ведение списка зависимостей, повторяемость сборок и защита от возможных злоумышленных изменений кода сторонних библиотек. В файле go.mod в том числе указывается тип зависимости, а именно приписка indirect у транзитивной зависимости, требующейся для работы прямой зависимости. + +## Список зависимостей + +* github.com/mattn/go-sqlite3 - библиотека для работы с БД SQLite, в которой хранятся данные о пользователях; используется для SQL запросов + +* github.com/pelletier/go-toml/v2 - библиотека для работы с toml файлами, в таком формате хранится конфиг (настройки приложения) + +* golang.org/x/term - библиотека для функций работы с терминалом, используется для скрытия пароля при его вводе + +* golang.org/x/sys - зависимость golang.org/x/term для низкоуровневой работы с ОС diff --git a/govulncheck/install.sh b/govulncheck/install.sh new file mode 100644 index 0000000..b5a87ed --- /dev/null +++ b/govulncheck/install.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +go install golang.org/x/vuln/cmd/govulncheck@latest diff --git a/govulncheck/run.sh b/govulncheck/run.sh new file mode 100644 index 0000000..9cd57f8 --- /dev/null +++ b/govulncheck/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +govulncheck ../...