文章 19
评论 1
浏览 92856
linux上八种记录命令的方法以及应对--搬运自zeronights

linux上八种记录命令的方法以及应对--搬运自zeronights

原ppt:https://zeronights.ru/wp-content/uploads/2021/09/09_agarkov.pdf

主要考虑记录三样内容:命令行本身,shell中的输入stdin,shell中的stdout。

0x0 bash_history

敲命令的时候把命令记录到bash_history文件,退出的时候保存到文件,可以用history命令看见之前敲过什么。

如何避免被记录:
  • 用kill -9 $$ 退出,而不是exit或者ctrl+D
  • 每条命令前加个空格
  • 将命令记录直接输出到null,而不是history文件,ln -sf /dev/null ~/.*_history
  • 使用mc/screen等别的shell

0x1 bash debug traps

每次输入的东西都会被trap functions处理,如果想记录:

#!/bin/sh
debug_poc() {
  echo "$USER($UID:$GROUPS) ran $BASH_COMMAND" >> /tmp/commands.log
}
trap debug_poc DEBUG

这个只记录命令,别的输入输出不记录,而且只在bash上有这个。
如何避免:

  • 不加任何参数直接运行一下trap命令,清除所有traps
  • 新建一个shell,比如screen/mc/zsh/csh

0x2 script

script是一个能记录命令/输入/输出的工具,还可以用scriptreplay工具还原整个会话。
比如:

$ script -B session.data -T session.time
[ … run your shell session here … ]
$ exit
$ scriptreplay -B session.data -T session.time

好处很明显,除了命令,stdin以及stdout也都可以记录,和各种curses也可以配合,自带“回放”工具
如何避免:

  • 通过pkill -9 script退出
  • lsof -p $(pidof script)找到script的输出文件,然后删掉

0x3 screen

screen命令用起来很方便,比如,登录一个ssh之后,通过screen -R [session_name] 来新建一个会话,然后ctrl+A/D来脱离会话,之后还可以再attach上,扎样就省得多开几个ssh会话了。
可以用来记录shell命令,输出也是完整记录:

$ screen -L -Logfile session.log
( do your stuff here )
$ exit
$ cat session.log

如何发现以及避免:

  • stty -echo 禁止回显,不过命令的输出还是可以正常的看到
  • rsync/scp/sftp to upload malicious .screenrc with eval/exec

0x4 sudo

0x5 linux audit

追踪syscall等,发送给auditd。比如:

# auditctl -a always,exit -F arch=b64 -S execve -F euid=0
# cat /var/log/audit/audit.log | grep -P ‘(SYSCALL|EXECVE)’

规则写的不高效的话,cpu占用很大。

应对方法是,获取root权限,然后关掉~

0x6 SELinux

selinux也是一种审计机制,内核级的一个组件。允许的会被记录,不允许的会被拒绝。
如果配置正确,root用户的命令行为也会被记录。
内核级监控,只能动内核。

0x7 LD_PRELOAD & LKML/eBPF

LD_PRELOAD

LD_PRELOAD的方法:经典的动态链接库注入,替换掉一些函数,记录这些函数的参数,从而记录shell中运行的程序的关键函数的参数、输入、输出等。

好处:不需要root就可以得到一些东西,对于普通用户来说不容易察觉,如果有root权限,可以加到/etc/ld.so.preload里面来全局生效。

短板:得写点儿代码,对于suid文件不管用,对于静态连接的文件不管用。
如何避免这种监控:

  • unset LD_PRELOAD变量
  • 直接通过/lib/ld-linux.so.2运行二进制文件
  • 使用静态链接的二进制文件

LKML/eBPF

eBPF: https://github.com/iovisor/bpftrace

足够底层的监控记录,记录内核/syscall等。
关于bash的例子比如:https://github.com/iovisor/bpftrace/blob/master/tools/bashreadline.bt
bashreadlinebpftrace.gif


标题:linux上八种记录命令的方法以及应对--搬运自zeronights
作者:erlkonig
地址:https://erlkonig.tech/articles/2021/09/30/1632967545350.html

记录精彩的程序人生

取消