add drafts for govulncheck and final report
This commit is contained in:
parent
c08bdc9480
commit
5220fca398
4 changed files with 69 additions and 4 deletions
20
README.md
20
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
|
||||
|
|
|
|||
47
analysis_report.md
Normal file
47
analysis_report.md
Normal file
|
|
@ -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 для низкоуровневой работы с ОС
|
||||
3
govulncheck/install.sh
Normal file
3
govulncheck/install.sh
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||
3
govulncheck/run.sh
Normal file
3
govulncheck/run.sh
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
govulncheck ../...
|
||||
Loading…
Add table
Add a link
Reference in a new issue