Nyx — автономный антифорензик-инструмент от Simone Margaritelli - 2026
Published: 2026-08-18
Nyx — автономный (self-contained) скрипт для очистки цифровых следов и артефактов, остающихся после работы пользователя на операционных системах Linux, macOS и Windows. Название отсылает к Никте (Nyx) — греческой богине ночи, что символизирует стирание следов «в темноте». Проект разработан Симоне Маргарителли (Simone Margaritelli), широко известным в сообществе информационной безопасности под псевдонимом evilsocket — автором инструментов bettercap, pwnagotchi и множества других известных проектов.
Инструмент позиционируется как «ластик для компьютера, разработанный с оглядкой на цифровую криминалистику»: он способен за один запуск очистить историю команд, системные и сетевые журналы, данные браузеров, временные файлы, а также артефакты, оставляемые десятками приложений — от Docker и SSH до Git, Discord, Tor, майнинговых утилит и пентест-фреймворков. При этом сам проект честно помечен как alpha-стадия разработки: версия 1.0.0-alpha, и авторы прямо предупреждают, что использование может повлиять на стабильность системы.
Статья представляет собой детальный технический обзор проекта по состоянию на середину 2026 года: архитектура, состав модулей, тестовая инфраструктура, найденные в ходе анализа кода дефекты, а также оценка реальной эффективности инструмента с точки зрения цифровой криминалистики.
История проекта
Simone Margaritelli — итальянский исследователь безопасности, известный прежде всего как создатель bettercap (фреймворка для атак и мониторинга сетей), pwnagotchi (AI-устройства для перехвата WPA-хендшейков) и соавтор других известных утилит, таких как HFC, wifiphisher и flytrap. Его проекты отличает узнаваемый стиль: один автономный файл вместо пакета, минимум зависимостей, агрессивная функциональность и прозрачная документация.
Nyx продолжает эту традицию. Репозиторий nyx на GitHub был создан в 2026 году и на момент написания статьи насчитывает 22 коммита, около 780 звёзд и 62 форка при всего двух открытых issue. Такая динамика типична для проектов evilsocket: быстрый старт, шумная аудитория, но всё ещё ранняя стадия зрелости.
Примечательны коммиты: история разработки показывает итеративную доработку модулей «пакетами» — сначала шесть базовых Linux-модулей, затем расширенный набор (package, browser, ssh, container, systemd, print), потом новые категории (cicd, idsips, crypto, privacy, pentest, osint, iot, ml). Последний коммит с красноречивым сообщением «misc: small fix or general refactoring i did not bother commenting» («мелкий фикс или общий рефакторинг, который я не потрудился прокомментировать») характеризует стиль разработки.
Проект распространяется под лицензией GPLv3, имеет активный Discord-сервер для сообщества, логотип и целую тестовую инфраструктуру на базе Docker с systemd — что для скрипта, находящегося в альфе, является скорее исключением, чем правилом.
Состав репозитория
| Файл | Объём | Назначение |
|---|---|---|
| nyx.sh | 2027 строк | Основной скрипт для Linux и macOS (POSIX sh, не bash) |
| nyx.ps1 | 1206 строк | PowerShell-скрипт для Windows (совместим с Windows PowerShell 5 и PowerShell 7) |
| nyx.cmd | 2 строки | Batch-лаунчер для Windows: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -File nyx.ps1 %* |
| README.md | — | Документация, таблица модулей, quick start |
| LICENSE | — | Текст лицензии GPLv3 |
| logo.png | ~1,3 МБ | Логотип проекта |
| tests/ | ~3600 строк | Тестовая инфраструктура: Docker-тесты для Linux и скрипты тестирования Windows |
| .github/workflows/linux-tests.yml | — | CI-конвейер: сборка Docker-образа и прогон тестов на ubuntu-latest |
Ключевая особенность архитектуры — полная автономность: каждый скрипт является единым самодостаточным файлом, который можно скачать и запустить без установки зависимостей. Для работы требуются лишь стандартные утилиты (rm, find, awk, grep, journalctl, sqlite3 на macOS и т.п.) и права суперпользователя (root на Linux/macOS, Администратор на Windows).
Установка и быстрый старт
Linux и macOS
# Скачивание скрипта wget https://github.com/evilsocket/nyx/raw/refs/heads/main/nyx.sh chmod +x nyx.sh # Сначала прогон в режиме dry-run (без реальных изменений) sudo ./nyx.sh --dry-run # Полная очистка всеми модулями sudo ./nyx.sh --force
Windows
# Скачивание скрипта (запуск от имени Администратора) Invoke-WebRequest -Uri "https://github.com/evilsocket/nyx/raw/refs/heads/main/nyx.ps1" -OutFile "nyx.ps1" # Режим dry-run .\nyx.ps1 -DryRun # Полная очистка .\nyx.ps1 -Force # Включение аудит-логирования .\nyx.ps1 -Force -LogFile "nyx-audit.log"
Общие флаги командной строки
| Флаг | Назначение |
|---|---|
| -h, --help | Показать справку |
| -v, --version | Показать версию |
| -n, --dry-run | Показать, что будет очищено, без внесения изменений |
| -d, --debug | Подробный (verbose) вывод |
| -l, --list | Список доступных модулей |
| -m, --modules | Запятая-разделённый список модулей (например, -m shell,logs) |
| -f, --force | Пропустить запрос подтверждения |
| --logfile | Запись лога в файл (не документирован в справке) |
PowerShell-версия использует аналогичные параметры с именованием PascalCase: -Help, -Version, -DryRun, -Debug, -List, -Modules, -Force, а также уникальные -Advanced (режим углублённой очистки) и -LogFile.
Типовой безопасный сценарий работы: запуск с --dry-run для ознакомления, затем выборочная очистка конкретных модулей через -m, и только потом, при полной уверенности, запуск всех модулей с --force.
Архитектура скрипта
Общая структура nyx.sh
Скрипт написан на POSIX sh с включённым set -eu (остановка при ошибке и неопределённых переменных) и pipefail, если поддерживается оболочкой. Логика чётко разделена на слои:
- глобальные переменные (DRY_RUN, VERBOSE, MODULES, OS_TYPE, CLEANED_COUNT, FAILED_COUNT, LOGFILE);
- функции вывода (print_banner, print_warning, print_info, print_success, print_error, print_verbose) с цветами, отключаемыми при отсутствии TTY или установке переменной NO_COLOR;
- функция детекции ОС (detect_os) через uname -s;
- функция проверки привилегий (check_privileges) — требуется uid 0;
- три «безопасных» хелпера для операций с файлами;
- двадцать четыре функции-модуля для Linux и семь для macOS;
- диспетчер run_cleaners, выполняющий фильтрацию модулей;
- разбор аргументов parse_args, подтверждение confirm_action и итоговый отчёт print_summary.
Безопасные операции с файлами
Ключевая идея дизайна — три примитива, которыми пользуются все модули:
- safe_remove — удаление одиночного файла через rm -f --;
- safe_remove_tree — рекурсивное удаление каталога или файла через rm -rf --;
- truncate_file — обнуление файла через перенаправление > "$file".
Логи обнуляются, а не удаляются: это позволяет процессам, держащим файловые дескрипторы (syslogd, journald, веб-серверы), продолжать писать в те же файлы без падения. Конфигурационные файлы и кеши удаляются полностью.
Все три хелпера учитывают режим dry-run: при DRY_RUN=1 выводят сообщение «Would remove / Would truncate» и возвращают успех, не трогая файловую систему. При неудаче реальной операции инкрементируется глобальный счётчик FAILED_COUNT.
Идентификация пользовательских каталогов
Поскольку скрипт запускается от root, он самостоятельно собирает список домашних каталогов всех пользователей:
homes=$(awk -F: '$3 >= 1000 && $3 < 65534 {print $6}' /etc/passwd)
homes="$homes /root"
Обрабатываются каталоги пользователей с UID от 1000 до 65534 (исключая системные учётки), плюс /root. В macOS-ветке аналогичная выборка выполняется через find /Users -maxdepth 1, исключая Shared и Guest. Если скрипт запущен не от root (что разрешено только в режиме dry-run), обрабатывается только $HOME текущего пользователя.
Диспетчеризация модулей
Диспетчер run_cleaners построен на простом grep-фильтре:
if [ -z "$MODULES" ] || echo "$MODULES" | grep -q "shell"; then
clean_linux_shell_history
fi
Если переменная MODULES пуста — выполняются все модули платформы; если задана — только те, чьи имена содержатся в списке. Список приводится к нижнему регистру с удалением пробелов.
Итоговый отчёт
После завершения выводится сводка «Cleaning Complete» с общим количеством очищенных объектов и числом неудачных операций. Скрипт завершается с кодом 1 только при чрезмерном числе сбоев (FAILED_COUNT больше 50), что отражено в комментарии автора: «незначительные сбои (файл не найден и т.п.) нормальны и не должны вызывать падение скрипта».
Модули Linux
Linux-ветка содержит двадцать четыре модуля, которые можно разделить на три поколения: базовые, расширенные и новые категории.
| Модуль | Что очищает |
|---|---|
| shell | Файлы истории оболочки: .bash_history, .zsh_history, .sh_history, .ash_history, .fish_history, .python_history, .mysql_history, .psql_history, .sqlite_history, .rediscli_history, .lesshst, .viminfo, .wget-hsts, .node_repl_history, .Rhistory, .gdb_history, .mongo_history, .docker_history, .irb_history, .php_history, .perldb_hist, .erlang_history, .lua_history, .scala_history, .octave_hist, .rsync_history; вложенные истории IPython (history.sqlite), Julia, Haskell GHCi, MATLAB; истории fish/recently-used/mc/nano из .local/share |
| logs | Текстовые системные журналы /var/log (syslog, messages, auth.log, secure, kern.log, dmesg, boot.log, lastlog, wtmp, btmp, faillog, dpkg.log, apt, alternatives.log, yum/dnf, cron, mail, ufw, firewalld, iptables.log, Xorg, cups, daemon.log, mount.log); journald через journalctl --vacuum-size=1K и --vacuum-time=1s; журналы Apache/Nginx/HTTPD; журналы БД (MySQL, PostgreSQL, Redis, MongoDB); журналы VPN/прокси (OpenVPN, Squid); почтовые журналы (Postfix, Dovecot); журналы ELK (Elasticsearch, Logstash, Kibana); файлы sysstat |
| audit | Журналы auditd (/var/log/audit/audit.log*); удаление in-kernel правил через auditctl -D; остановка и перезапуск службы auditd |
| temp | Подозрительные скрипты в /tmp, /var/tmp, /dev/shm (*.sh, *.py, *.pl, *script*, *shell*, *payload*); скрытые файлы (кроме системных .X*, .ICE*, .font*, systemd); кеши миниатюр; core-дампы и crash-отчёты; systemd-coredump; корзины всех пользователей |
| network | Журналы daemon/journal/private; профили NetworkManager; кеш ARP (ip neigh flush all); DHCP-аренды; бинарные журналы MySQL (mysql-bin.*) и InnoDB (ib_logfile*); конфигурации OpenVPN и WireGuard; отложенная почта Postfix; правила iptables (rules.v4) |
| user | Журнал текущих входов utmp; старые миниатюры; GTK-закладки; базы GNOME Tracker; журналы Zeitgeist; следы редакторов (VS Code, code-server, JetBrains); конфигурации инструментов разработчика (.gitconfig, .git-credentials, .npmrc, .m2, .gradle, pip, cargo); облачные учётные данные (AWS, GCP, Azure, kubeconfig, Terraform); конфиги мониторинга (Prometheus, Grafana); инструменты бэкапа (Rsync, Restic, Borg, Duplicity); security-инструменты (Metasploit, Nmap, Aircrack-ng, John, Hashcat); мессенджеры (irssi, Weechat, Pidgin, Discord, Slack); виртуализация (VMware, VirtualBox, QEMU, Vagrant); сетевой анализ (Wireshark, tcpdump, Ettercap); форензика (Autopsy, Volatility, Sleuth Kit, Foremost); удалённый доступ (FreeRDP, Remmina, VNC, TeamViewer, AnyDesk); мониторинг (htop, Nagios, Zabbix); игры (Steam, Minecraft); файлообменники (Transmission, qBittorrent, Deluge, aMule); мультимедиа (VLC, Audacity, GIMP, OBS); продуктивность (LibreOffice, Thunderbird, Evolution, KeePass) |
| Модуль | Что очищает |
|---|---|
| package | Кеши и журналы APT/DPKG, YUM/DNF, Pacman |
| browser | Firefox (cache2, storage, thumbnails, sessionstore-backups, places.sqlite, cookies.sqlite, formhistory.sqlite) и Chrome/Chromium (Cache, History, Cookies, Web Data, Top Sites) |
| ssh | known_hosts, SSH-логи в домашнем каталоге, записи sshd из auth.log/secure через sed |
| container | Журналы контейнеров Docker, конфигурации Docker пользователя, overlay-каталоги Podman, журналы Kubernetes-подоб (/var/log/pods), журналы Libvirt/QEMU |
| systemd | Файл random-seed, live-журналы сессии /run/log/journal |
| История заданий CUPS (/var/spool/cups) и журналы CUPS | |
| cicd | Артефакты Jenkins, GitLab Runner, GitHub Actions (act), CircleCI, Travis CI |
| idsips | Журналы Snort, Suricata, OSSEC, Fail2ban, Samhain |
| crypto | Конфиги Bitcoin, keystore Ethereum, Monero, конфиги XMRig, кошельки Electrum |
| privacy | Tor Browser, torrc, I2P, ProtonVPN, Mullvad, Tails |
| pentest | Burp Suite, OWASP ZAP, Cobalt Strike, Empire, BeEF |
| osint | Maltego, SpiderFoot, theHarvester, Recon-ng, Shodan |
| iot | Home Assistant, Mosquitto MQTT, Node-RED, OpenHAB |
| ml | Jupyter, TensorBoard, PyTorch, Keras, MLflow, Weights & Biases |
Критическое замечание о «новых» модулях
Важная деталь: модули cicd, idsips, crypto, privacy, pentest, osint, iot и ml — вопреки ожиданиям от «инструмента для криминалистики» — удаляют только конфигурационные файлы и каталоги приложений по жёстко прописанным путям в домашних каталогах. Это не полноценная очистка всех возможных артефактов этих инструментов, а точечное удаление типовых конфигов.
Модули macOS
macOS-ветка заметно скромнее Linux-ветки: семь модулей.
| Модуль | Что очищает |
|---|---|
| shell | Те же файлы истории оболочки, что и на Linux (переиспользуется функция clean_linux_shell_history) |
| macos | Файлы .DS_Store по всей файловой системе (find / -name ".DS_Store" -delete), корзины всех пользователей, индекс Spotlight (mdutil -E), кеш QuickLook (qlmanage -r cache), системные журналы /var/log (system.log, wifi.log, install.log, accountpolicy.log, fsck, powermanagement, launchd, asl, appfirewall.log) |
| audit | BSM-трасса /var/audit с остановкой/возобновлением audit (audit -t / audit -s) |
| browser | Только Safari: History.db и кеш com.apple.Safari |
| unified | Журналы unified logging (10.12+): каталоги /var/db/diagnostics (Persist, Special, HighVolume, timesync), log erase --all |
| fileevents | FSEvents-каталоги (.fseventsd), база карантина LaunchServices (QuarantineEventsV2) — системная и пользовательские, через sqlite3 DELETE FROM LSQuarantineEvent |
| usage | База KnowledgeC (использование приложений), уведомления Notification Center, недавние элементы (defaults delete com.apple.recentitems) |
Важно отметить, что на macOS отсутствуют модули очистки Chrome и Firefox (есть только Safari), нет очистки Discord, Docker, SSH и всех остальных категорий, реализованных на Linux. Это серьёзный пробел, если рассматривать инструмент как кроссплатформенный антифорензик-комбайн.
Модули Windows
Windows-ветка (nyx.ps1) содержит семь модулей: events, history, registry, filesystem, temp, security, advanced. Скрипт использует Set-StrictMode -Version Latest, корректную проверку прав администратора через WindowsPrincipal, и поддерживает аудит в файл лога через -LogFile.
| Модуль | Что очищает |
|---|---|
| events | Все административные и операционные журналы событий через Get-WinEvent -ListLog и wevtutil cl, включая Security, System, Application, Sysmon, WinRM, PowerShell/Operational, AppLocker, AMSI; дополнительно Clear-EventLog для критичных журналов |
| history | История PowerShell (ConsoleHost_history.txt), история CMD (doskey), история диалога «Выполнить» (RunMRU), Prefetch, ReadyBoot, LNK-файлы, Jump Lists (Automatic/Custom Destinations), Windows Timeline/Activity History (ConnectedDevicesPlatform), история поиска Windows, история IE и Legacy Edge, история Edge Chromium (только профиль Default) |
| registry | MRU-ключи Explorer (OpenSavePidlMRU, LastVisitedPidlMRU, RecentDocs, TypedPaths), ShellBags (Bags/BagMRU во всех вариациях), UserAssist, Office MRU, история USB (USBSTOR), MountedDevices, BAM (Background Activity Monitor), ShimCache/AppCompatCache, MRU Windows Terminal, история RDP-подключений, история Windows Media Player |
| filesystem | USN-журнал (fsutil usn deletejournal /D на всех дисках), корзина ($Recycle.Bin на всех дисках), thumbcache_*.db, база SRUM (SRUDB.dat), индекс поиска Windows.edb (только -Advanced), база уведомлений, Thumbs.db |
| temp | Временные каталоги (%TEMP%, C:\Windows\Temp), кеш DNS (ipconfig /flushdns, Clear-DnsClientCache), теневые копии томов (vssadmin delete shadows /all /quiet), архивы WER, crash-дампы (Minidump, MEMORY.DMP), кеши NetBIOS/ARP (nbtstat -R, arp -d *), сохранённые сетевые учётные данные (cmdkey), история Windows Defender, Cortana, Defender ATP cache, журналы Firewall, журналы WMI, ключи восстановления BitLocker, кеш Group Policy, кеш аутентификации, следы гибернации, телеметрия Office, логи OneDrive/Teams, поиск Outlook, логи WSA, логи Xbox Game Bar |
| security | Логи EDR/AV: CrowdStrike Falcon, SentinelOne, Carbon Black, McAfee, Symantec Endpoint Protection; артефакты FTK Imager; логи Hyper-V, WSL, Docker Desktop |
| advanced | Сертификаты с маской NYX-TEST, запланированные задачи NYX-TEST, службы NYX-TEST, беспроводные профили NYX-TEST, VPN-подключения NYX-TEST, расширения Chrome nyxtest*, файлы криптопровайдера *nyx*, записи NYX-WINDOWS-UPDATE-TEST в журнале Windows Update, уведомления *nyx* |
Следует подчеркнуть важную особенность: модуль advanced на самом деле очищает не «продвинутые следы» вообще, а только собственные тестовые артефакты проекта Nyx (все маски содержат NYX-TEST или nyx). То есть его фактическое назначение — самоочистка тестовой среды, а не очистка произвольных артефактов пользователя.
Режим Advanced в Windows-версии
Параметр -Advanced включает дополнительные действия, требующие перезагрузки для полного эффекта:
- Prefetch-каталог: временно выдаются права на C:\Windows\Prefetch текущему пользователю (с сохранением ACL через icacls /save и восстановлением после очистки);
- Индекс поиска: остановка службы WSearch, удаление Windows.edb, пауза 3 секунды и перезапуск службы;
- Стирание памяти при выключении: powercfg -h off (удаление hiberfil.sys) и установка реестрового ключа ClearPageFileAtShutdown=1 в HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management.
Подход к очистке артефактов
Философия инструмента — «плоский» перебор статических путей с тремя стратегиями:
- журналы и файлы истории обнуляются (truncate) — файл остаётся на месте нулевого размера, чтобы не ломать демоны;
- конфигурации, кеши и базы удаляются (rm);
- активные кеши в памяти (ARP, DNS, NetBIOS) сбрасываются** утилитами (ip neigh flush, ipconfig /flushdns, nbtstat -R).
Особенности реализации, важные для понимания поведения:
- модуль shell дополнительно выполняет history -c и unset HISTFILE для текущей сессии (в POSIX sh эта команда не срабатывает, но ошибка глушится);
- модуль logs для journald использует вакуумирование, а не удаление файлов — journal сохраняет последний килобайт;
- модуль audit останавливает auditd, чистит журнал и перезапускает службу;
- модуль ssh вместо удаления auth.log целиком вырезает строки, содержащие sshd[, сохраняя остальные записи журнала;
- корзины очищаются как каталоги files/ и info/ у всех пользователей;
- имена файлов передаются в rm с защитой -- и в кавычках, пути жёстко зафиксированы — векторы командной инъекции отсутствуют.
Тестовая инфраструктура
Редкая для alpha-проекта особенность — полноценный тестовый конвейер на базе Docker.
Docker-контейнер
Dockerfile строит образ на Ubuntu 22.04 с настоящим systemd (systemd-sysv), пользователем testuser с sudo без пароля, и набором пакетов: auditd, NetworkManager, tracker, zeitgeist-core, apache2, nginx, imagemagick, все оболочки (bash, zsh, fish), клиенты MySQL/PostgreSQL/Redis/SQLite. Контейнер запускается с privileged: true — это необходимо для работы systemd и auditd внутри.
Фазы тестирования (entrypoint.sh)
- фаза 1 — создание артефактов от имени testuser (create-artifacts.sh, 1479 строк): 14 типов историй оболочки, 25+ типов журналов с маркерами NYX-TEST, NYXTEST и evilpkg, журналы auditd, пакетные кеши, временные файлы, миниатюры, базы GNOME Tracker, Zeitgeist, профили NetworkManager, корзины, записи journald;
- фаза 2 — запуск nyx.sh --force от root с таймаутом 600 секунд;
- фаза 3 — строгая верификация (verify-cleanup.sh, 1040 строк): проверка нулевого размера файлов (-s), отсутствия путей, отсутствия маркеров в журналах, валидация содержимого SQLite-баз (moz_places, moz_cookies) и т.д.
CI-конвейер (linux-tests.yml) запускает docker-test.sh на ubuntu-latest при каждом push и pull request в main, а при сбое прикладывает логи как артефакт.
Пробелы в тестовом покрытии
- Windows-тесты существуют (create-artifacts.ps1 и verify-cleaning.ps1, суммарно ~900 строк, с маркерами NYX-WIN-TEST), но не подключены к CI;
- macOS-тесты отсутствуют полностью;
- тестируется только ветка --force без подтверждения; режим dry-run в тестах не проверяется (что, как будет показано ниже, особенно печально).
Найденные баги и дефекты
В ходе детального анализа кода были выявлены следующие дефекты (по состоянию на август 2026 года).
1. Dry-run нарушается на macOS
Самый серьёзный дефект: в трёх macOS-модулях операции удаления выполняются без проверки переменной DRY_RUN, то есть в режиме «пробного запуска» файлы реально удаляются:
- clean_macos_unified_logs — rm -rf "$dir/*" по каталогам /var/db/diagnostics/{Persist,Special,HighVolume,timesync} выполняется безусловно; проверка DRY_RUN есть только у log erase --all;
- clean_macos_file_events — очистка FSEvents-каталогов (find / -name ".fseventsd" ... rm -rf) выполняется безусловно;
- clean_macos_usage_traces — удаление баз Notification Center (rm -rf "$nc_dir/db2/db*") также безусловно.
Это прямо противоречит заявленной семантике dry-run и означает, что на macOS безопасный сценарий «сначала посмотреть, потом очистить» не работает.
2. Потерянные счётчики в подшеллах
Конструкции вида find ... | while read -r file; do ... count=$((count + 1)); done выполняют цикл в подшелле, поэтому инкременты счётчика внутри цикла теряются для родительского процесса. Затронуты: чистка подозрительных и скрытых файлов в temp-модуле, очистка корзин macOS, FSEvents, Notification Center. Итоговые цифры в отчёте занижены.
3. Сломанная очистка JetBrains для не-root
В не-root ветке модуля user путь "$HOME/.local/share/.IntelliJIdea*/system/log" заключён в кавычки целиком — глоб не раскрывается, и очистка журналов JetBrains не выполняется никогда (в root-ветке глоб вынесен за кавычки и работает).
4. Невалидные модули молча игнорируются на Linux
PowerShell-версия валидирует имена модулей и завершается с ошибкой при неизвестном модуле; Linux-версия не делает этого вовсе: `sudo ./nyx.sh -m nonsense` просто ничего не выполнит и выведет «Cleaning Complete!» с нулями. Пользователь не узнает об опечатке.
5. Список модулей macOS врёт
list_modules для macOS рекламирует модули macos-logs, macos-wifi, macos-brew и editor, которых не существует в run_cleaners. Запуск -m macos-logs тихо ничего не сделает.
6. Недокументированный --logfile
Флаг --logfile существует в разборе аргументов, но отсутствует и в справке, и в README (в PowerShell-версии -LogFile документирован корректно).
7. Мелочи
- мёртвая переменная RESULTS, объявленная, но нигде не используемая;
- выборочная проверка Edge Chromium только профиля Default — остальные профили не затрагиваются;
- ошибки wevtutil cl не перехватываются (внешняя команда с 2>$null не бросает исключение PowerShell), поэтому часть сбоев молча не попадает в счётчик;
- в dry-run модуль events печатает жёстко зашитое число 180 вместо реального перечисления.
Деструктивные операции
Отдельного внимания заслуживает то, что часть модулей удаляет не «следы», а рабочие данные системы. Это важно понимать до запуска инструмента.
| Модуль | Что удаляется | Последствия |
|---|---|---|
| Linux network | Файл /etc/iptables/rules.v4 | Потеря персистентных правил межсетевого экрана после перезагрузки |
| Linux network | Конфигурации /etc/wireguard/*.conf и /etc/openvpn/client/*.conf | VPN-интерфейсы перестанут подниматься |
| Linux network | Профили NetworkManager | Потеря настроек Wi-Fi/сетевых подключений всех пользователей |
| Linux network | mysql-bin.* и ib_logfile* в /var/lib/mysql | Возможная некорректная работа или падение MySQL |
| Linux network | Отложенная почта /var/spool/postfix/deferred | Потеря писем из очереди |
| Linux user | .gitconfig, .aws/credentials, .kube/config, KeePass, Thunderbird, Discord и др. | Потеря личных конфигураций и учётных данных приложений |
| Linux audit | auditctl -D, остановка auditd | Временное отключение системного аудита |
| Windows registry | HKLM\SYSTEM\MountedDevices /va | Потеря привязок букв дисков |
| Windows registry | HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR | Удаление истории подключённых USB-устройств (пересоздаётся при переподключении) |
| Windows temp | vssadmin delete shadows /all /quiet | Удаление всех точек восстановления и теневых копий |
| Windows temp | cmdkey-учётные данные | Потеря сохранённых сетевых паролей |
Ограничения с точки зрения цифровой криминалистики
Несмотря на маркетинговое описание «ластик для компьютера, разработанный с оглядкой на цифровую криминалистику», инструмент имеет фундаментальные ограничения, которые необходимо учитывать при оценке его эффективности.
Нет безопасного стирания
Во всех трёх реализациях используется только обычное удаление (rm, Remove-Item) и обнуление (truncate, Clear-Content). Никакого многопроходного затирания, криптографического уничтожения или даже однопроходной перезаписи (shred, cipher /w, sdelete) нет. Это означает, что:
- удалённые файлы остаются на диске до перезаписи новыми данными и восстанавливаются стандартными инструментами (extundelete, PhotoRec, carving-инструменты);
- при обнулении файла данные физически остаются в блоках (обнуление меняет только логическую длину файла), и фрагменты могут быть восстановлены из неиспользуемых блоков;
- файловые системы с журналированием (ext4, APFS, NTFS) хранят историю операций в журнале, который инструмент не чистит (на NTFS не обрабатываются $LogFile и записи $MFT).
Не очищается свободное пространство
Инструмент не выполняет затирание свободных блоков, поэтому «мусор», накопившийся от старых версий файлов, журналов и БД, сохраняется на диске неопределённо долго.
Память, swap и гибернация
- на Linux не обрабатываются swap-раздел, hibernation-файлы и дампы памяти ядра (кроме /var/crash);
- на Windows очистка hiberfil.sys и pagefile включается только флагом -Advanced и требует перезагрузки;
- на macOS механизмы защиты целостности системы (SIP/TCC) ограничивают доступ к ряду баз даже от root — операции частично молча завершаются неудачей.
Обходные пути криминалистики
Инструмент не затрагивает: ext4 journal replay, atime/метаданные inode, MFT slack на NTFS, кеши иконок и gvfs-metadata в Linux, кеши DNS-резолверов (systemd-resolved), трейсы библиотек и подсистем (например, OpenSSL), облачные и серверные журналы, а также любые артефакты, хранящиеся вне локальной файловой системы (SIEM, EDR-облака, журналы роутера и т.п.).
Борьба с EDR бессмысленна
Модуль security на Windows удаляет локальные логи CrowdStrike, SentinelOne и Carbon Black. Однако современные EDR хранят телеметрию в ядре и облаке, а каталоги защищены механизмами tamper protection — попытка удаления либо не пройдёт, либо мгновенно создаст алерт в SOC. То есть очистка следов в реально защищённой среде невозможна, а в неподключённой — не нужна.
Вывод для криминалистики
С практической точки зрения Nyx подходит для «гигиенической» очистки очевидных артефактов (истории команд, кеши, логи) в сценариях, где угроза восстановления данных низкая. Для сценариев, где восстановление представляет реальную угрозу, необходим инструмент с криптографическим затиранием и очисткой свободного пространства — например, sfill/sdmem на Linux, sdelete с опцией -z на Windows или полное шифрование диска.
Сравнение с альтернативами
| Инструмент | Платформы | Метод удаления | Очистка свободного места | Модульность | Статус |
|---|---|---|---|---|---|
| Nyx | Linux, macOS, Windows | rm / truncate | Нет | 38 модулей, выбор через -m | Alpha |
| BleachBit | Linux, Windows | Удаление по шаблонам, опциональное затирание | Да (wipe free space) | Категории-пресеты | Зрелый |
| CCleaner | Windows, macOS | Удаление по шаблонам | Нет (очистка только в платных версиях) | Категории | Зрелый, проприетарный |
| sdelete (Sysinternals) | Windows | Затирание файлов и свободного пространства (DOD 5220.22-M, -z) | Да | Нет (поштучные операции) | Зрелый |
| shred / scrub | Linux | Многопроходное затирание | Частично (отдельные утилиты: sfill, sdmem) | Нет | Зрелые |
Главные отличия Nyx от «гигиенических» утилит (BleachBit, CCleaner) — ориентация на артефакты пентеста/форензики (Metasploit, Burp, Tor, кошельки, OSINT-инструменты) и статус автономного скрипта без зависимостей. Главное отличие от утилит безопасного стирания (sdelete, shred) — отсутствие затирания как такового.
Практические рекомендации
Основываясь на анализе кода, можно сформулировать безопасные сценарии использования:
- Никогда не запускать на рабочей системе без резервной копии или снапшота виртуальной машины — часть модулей удаляет рабочие конфигурации;
- всегда начинать с --dry-run, но на macOS не доверять его результатам: дефект с безусловным удалением в unified/fileevents/usage-модулях означает, что в dry-run данные всё равно могут быть удалены;
- использовать точечный выбор модулей (-m shell,logs,temp) вместо --force, чтобы избежать деструктивных network/user/registry-модулей;
- запускать в изолированной среде (VM, контейнер), если цель — только изучение поведения;
- не полагаться на инструмент как на средство безвозвратного уничтожения данных: при реальных требованиях к необратимости использовать затирание и шифрование диска;
- понимать, что заявленные «продвинутые» модули могут быть тестовыми — модуль advanced в Windows-версии очищает собственные тестовые артефакты Nyx, а не следы пользователя;
- следить за обновлениями: проект в alpha-стадии, и зафиксированные выше дефекты (dry-run, счётчики, JetBrains) могут быть исправлены в последующих коммитах.
Резюме
Nyx — амбициозный и хорошо структурированный автономный скрипт для очистки цифровых следов на трёх платформах, созданный признанным автором инструментов безопасности Simone Margaritelli. Проект выделяется на фоне аналогов продуманной архитектурой (единый файл, три примитива файловых операций, строгая система модулей), развитой тестовой инфраструктурой на базе Docker с systemd и честным статусом alpha.
Вместе с тем анализ кода выявляет серьёзные недостатки: нарушение семантики dry-run на macOS (удаление в «пробном» режиме), потерю счётчиков в подшеллах, сломанную очистку JetBrains в не-root ветке, молчаливое игнорирование невалидных модулей на Linux и рекламу несуществующих macOS-модулей. Часть операций (iptables, WireGuard, NetworkManager, MountedDevices, теневые копии) уничтожает рабочие данные системы, а не только следы.
С точки зрения цифровой криминалистики инструмент не обеспечивает безвозвратного уничтожения информации: отсутствие затирания, необработка свободного пространства, журналов ФС, swap и гибернации означают, что значительная часть данных остаётся восстанавливаемой. Поэтому Nyx следует рассматривать как инструмент «гигиенической» очистки очевидных артефактов в контролируемых средах, а не как средство гарантированного удаления следов. Для последнего по-прежнему требуются классические средства безопасного стирания и шифрование диска.
Проект находится в ранней стадии и активно развивается — при сохранении темпа доработок и исправлении выявленных дефектов он может стать заметным инструментом в арсенале специалистов по информационной безопасности.
