# Linux Auth — Приложение аутентификации на Linux **[Аналитический отчёт](analysis_report.md)** Linux Auth — консольное приложение для аутентификации пользователей на Linux (Debian 12) с использованием локальной SQLite базы данных. Поддерживает: - Ввод логина и пароля с маской - Ограничение числа попыток входа - Сброс формы - Настраиваемые параметры через TOML - CLI утилиты для инициализации и добавления пользователей ## Настройка окружения 1. Установить Go, gcc и SQLite dev на Debian 12: ```bash bash scripts/config.sh ``` - Обновляет репозитории - Устанавливает Go, GCC, SQLite - Подготавливает зависимости Go проекта ## Сборка проекта Скрипт ```build.sh``` собирает все бинарники: - Основное приложение: authapp - Инициализация пользователей: init_users - CLI утилита для добавления пользователей: add_user ``` bash scripts/build.sh ``` - CGO включён для работы с go-sqlite3 - Создаёт release и debug версии (build/release/, build/debug/) ## Инициализация пользователей Перед первым запуском необходимо создать начальных пользователей: ``` ./build/release/init_users ``` - Создаёт пользователей из скрипта (admin, user1) - Пароли автоматически хешируются через SHA-256 ## Добавление новых пользователей Используйте утилиту ```add_user``` для добавления пользователя без изменения кода: ``` ./build/release/add_user -username USER -password PASS ``` Пример: ``` ./build/release/add_user -username test -password 1234 ``` ## Запуск основного приложения ``` bash scripts/run.sh ``` - Запускает authapp с конфигурацией configs/config.toml - Поддерживает ввод логина и пароля с маской - Предусмотрена логика ограничения попыток и блокировки пользователя - Позволяет сбросить форму и повторить попытку Пример работы: ``` === AuthApp === Логин: admin Пароль: ****** Доступ разрешён. Добро пожаловать, admin! ``` ## Конфигурация (configs/config.toml) Пример: ``` [app] name = "AuthApp" max_login_attempts = 3 lock_timeout_sec = 300 [database] type = "sqlite" path = "./data/users.db" [security] password_hash = "sha256" [ui] show_welcome = true ``` - ```max_login_attempts``` — количество попыток перед блокировкой - ```lock_timeout_sec``` — время блокировки пользователя (сек) - ```password_hash``` — алгоритм хеширования пароля - ```show_welcome``` — вывод приветствия при старте ## Особенности и назначение утилит ```authapp```: Основное приложение для аутентификации пользователей ```init_users```:Создаёт начальных пользователей в базе SQLite (admin, user1) ```add_user```: CLI утилита для добавления новых пользователей без перекомпиляции ## Проверка работы Собрать проект: ``` bash scripts/build.sh ``` Инициализировать пользователей: ``` ./build/release/init_users ``` Запустить приложение: ``` bash scripts/run.sh ``` Протестировать успешный и неуспешный вход Добавить нового пользователя: ``` ./build/release/add_user -username test -password 1234 ``` # Анализ безопасности ## SAST (статический анализ) ### Настройка окружения ```bash bash scripts/config_sast.sh ``` ### Запуск анализа Человекочитаемые результаты (txt формат файлов): ```bash bash scripts/run_sast.sh ``` Вывод в формате sarif: ```bash bash scripts run_sast_sarif.sh ``` Результаты анализа в sast_results (3 утилиты для SAST). ## Фаззинг Сначала соберите приложение и инициализируйте тестовую базу (init_users). Далее (для учебных целей фаззинг ограничен по времени - 5 минут): 1. Запуск нативного фаззера (проверка функции аутентификации, ограничение в 1 поток для нормальной работы БД SQLite) 1.1. cd myfuzz 1.2. ./run_fuzz.sh 1.3. ./view_fuzz_coverage.sh 2. Запуск AFL++ в режиме blackbox (фаззинг готового бинарника) 2.1. cd aflfuzz 2.2. ./install.sh 2.3. ./run_fuzz.sh ### Попытка скрестить gccgo и afl провалилась, оставлю для истории 3. Запуск AFL++ при компиляции через gccgo (установите AFL++ как в пункте 2.2. если ещё не сделали этого) 3.1. cd aflfuzz 3.2. ./install_gccgo_for_afl.sh 3.3. ./build_for_afl.sh 3.4. ./run_afl.sh ### Черновики для go-fuzz На данный момент установка по официальной инструкции https://github.com/dvyukov/go-fuzz/blob/master/README.md не работает по причине golang.org/x/tools@v0.44.0 requires go >= 1.25.0 (running go 1.24.4) 4. Запуск go-fuzz 4.1. cd myfuzz 4.2. ./install_go-fuzz.sh (тут возникают проблемы, поэтому следующие шаги проверить не удалось + оказалось, что первая версия конфликтует с нативным фаззингом из пункта 1) 4.3. ./build_for_go-fuzz.sh 4.4. ./run_go-fuzz.sh ### Последняя попытка (тоже неудачная) Утилита обещает поддержку 4 фаззеров, оказалось это просто обёртка для генерации тестов в 4 форматах и запуска фаззеров. Из заявленных фаззеров удалось запустить только нативный (но я это и так сделал в пункте 1), а также сгенерировать тест для go-fuzz (но запустить не удалось, см. пункт 4 выше), для libfuzzer и afl даже тесты не сгенерировались (как я понял, тоже надо самому установить все нужные бинарники). 5. Запуск golang-fuzz 5.1. cd golang-fuzz 5.2. ./install_golang-fuzz.sh 5.3. ./run_golang-fuzz.sh ## Анализ зависимостей на известные уязвимости Используется версия govulncheck 1.1.4, т.к. следующие (1.2.0, 1.3.0) требуют Go версии 1.25. 1. cd govulncheck 2. ./install.sh 3. ./run.sh