Nyx — автономный антифорензик-инструмент от Simone Margaritelli - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 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
Файл Объём Назначение
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"

Общие флаги командной строки

Флаги nyx.sh (Linux/macOS)
Флаг Назначение
-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-ветка содержит двадцать четыре модуля, которые можно разделить на три поколения: базовые, расширенные и новые категории.

Базовые модули 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)
Расширенные и новые модули Linux
Модуль Что очищает
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
print История заданий 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-ветки: семь модулей.

Модули macOS
Модуль Что очищает
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.

Модули Windows
Модуль Что очищает
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 с типовыми альтернативами
Инструмент Платформы Метод удаления Очистка свободного места Модульность Статус
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 следует рассматривать как инструмент «гигиенической» очистки очевидных артефактов в контролируемых средах, а не как средство гарантированного удаления следов. Для последнего по-прежнему требуются классические средства безопасного стирания и шифрование диска.

Проект находится в ранней стадии и активно развивается — при сохранении темпа доработок и исправлении выявленных дефектов он может стать заметным инструментом в арсенале специалистов по информационной безопасности.

Ссылки

×
Реклама
ИКС