Атаки с использованием NTFS-потоков в Windows давно стали классикой. В Linux-средах про расширенные атрибуты (xattr) вспоминают реже, хотя идея схожая: благодаря этой фиче злоумышленник может скрыть вредоносный код в абсолютно легитимном и доверенном файле, что помогает обходить детекты со стороны защитных решений. Техника не новая, но она работает до сих пор, потому что EDR на Linux почти не смотрят в эту область.
Суть атаки:
Расширенные атрибуты позволяют привязать к любому файлу пару “ключ-значение”. Размер значения может достигать 64 КБ. Важно, что поддержка есть во всех основных файловых системах. В качестве файла-носителя подойдёт любой, например, .bash_history. Алгоритм таков:
— создаётся обычный reverse shell (например, через msfvenom),
— полученный шелл-код сохраняется в атрибуте user.ATTRIBUTE файла .bash_history, это можно сделать такой командой:
setfattr --name=user.ATTRIBUTE --value="$buf" .bash_history
— также понадобится загрузчик на C, который считает этот атрибут функцией getxattr и передаст управление на полученный массив байт,
— остаётся доставить файлы на хост-жертву и запустить загрузчик.
По большому счету, сама нагрузка может быть чем угодно: бекконнект, модификация crontab, закрепление через systemd-таймеры - всё, что помещается в строку.
Однако техника имеет свои ограничения: большинство утилит не сохраняют xattr по умолчанию. Чтобы решить эту проблему, то есть доставить файл с пейлоадом в расширенном атрибуте на хост-жертву, злоумышленник может использовать:
tarс аргументом--xattrsrsyncс аргументом-Xили--xattrs
Как ловить атаку:
Для детектирования попыток сокрытия полезной нагрузки в расширенных атрибутах файлов стоит ввести мониторинг системных вызовов для getxattr/setxattr и анализировать их содержимое. Простейшие правила для auditd могут выглядеть следующим образом:
-a always,exit -F arch=b64 -S getxattr -k xattr_read
-a always,exit -F arch=b64 -S setxattr -k xattr_write Кроме того, с учетом вышеупомянутых ограничений этой техники, для детектирования можно отслеживать запуски утилит tar и rsync с соответствующими аргументами командной строки, которые отвечают за сохранение расширенных атрибутов.

