通过
audit
方式来实时获取ptrace
事件
设置/etc/audit/rules.d/audit.rules
来监听ptrace
-a always,exit -F arch=b64 -S ptrace -k ptrace_capture
-a always,exit:表示在系统调用退出时记录日志到
/var/log/audit/audit.log
-F arch=b64: 表示使用64位的系统调用
-S ptrace: 表示监控
ptrace
这个系统调用-k ptrace_capture: 指定一个key,可用于在log里作为关键字
然后重启audit服务
systemctl restart auditd
如果没办法重启该服务,重启一下机器
先找一个进程
[[email protected] buckxu]# systemctl status wazuh-manager.service
● wazuh-manager.service - Wazuh manager
Loaded: loaded (/etc/systemd/system/wazuh-manager.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-08-11 16:41:00 CST; 1min 23s ago
Process: 958 ExecStart=/usr/bin/env ${DIRECTORY}/bin/ossec-control start (code=exited, status=0/SUCCESS)
Tasks: 105 (limit: 23371)
Memory: 881.7M
CGroup: /system.slice/wazuh-manager.service
├─2138 /var/ossec/bin/ossec-authd
├─2144 /var/ossec/bin/wazuh-db
├─2163 /var/ossec/bin/ossec-execd
├─2172 /var/ossec/bin/ossec-analysisd
├─2177 /var/ossec/bin/ossec-syscheckd
├─2190 /var/ossec/bin/ossec-remoted
├─2200 /var/ossec/bin/ossec-logcollector
├─2228 /var/ossec/bin/ossec-monitord
└─2232 /var/ossec/bin/wazuh-modulesd
选用2138进程
[[email protected] buckxu]# gdb -p 2138 -ex "detach" -q -ex "q"
Attaching to process 2138
[New LWP 2145]
[New LWP 2146]
[New LWP 2147]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
0x00007f010ff9f29f in select () from /lib64/libc.so.6
Detaching from program: /var/ossec/bin/ossec-authd, process 2138
[Inferior 1 (process 2138) detached]
看一下audit.log
[[email protected] buckxu]# grep "ptrace_capture" /var/log/audit/audit.log
type=CONFIG_CHANGE msg=audit(1628671241.120:8): auid=4294967295 ses=4294967295 op=add_rule key="ptrace_capture" list=4 res=1AUID="unset"
type=SYSCALL msg=audit(1628671359.772:165): arch=c000003e syscall=101 success=yes exit=0 a0=10 a1=85a a2=0 a3=0 items=0 ppid=2616 pid=2650 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="gdb" exe="/usr/libexec/gdb" key="ptrace_capture"ARCH=x86_64 SYSCALL=ptrace AUID="buckxu" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
type=SYSCALL msg=audit(1628671359.772:166): arch=c000003e syscall=101 success=yes exit=0 a0=10 a1=861 a2=0 a3=0 items=0 ppid=2616 pid=2650 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="gdb" exe="/usr/libexec/gdb" key="ptrace_capture"ARCH=x86_64 SYSCALL=ptrace AUID="buckxu" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
type=SYSCALL msg=audit(1628671359.772:167): arch=c000003e syscall=101 success=yes exit=0 a0=10 a1=862 a2=0 a3=0 items=0 ppid=2616 pid=2650 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="gdb" exe="/usr/libexec/gdb" key="ptrace_capture"ARCH=x86_64 SYSCALL=ptrace AUID="buckxu" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
这种方法数据量非常大,因为2138进程只有4个进程
[[email protected] buckxu]# ls /proc/2138/task/
2138 2145 2146 2147
却产生了173条数据
[[email protected] buckxu]# grep "ptrace_capture" /var/log/audit/audit.log|grep "SYSCALL" |wc -l
173
而且,监控的进程明明是2138,在日志里却找不到
[[email protected] buckxu]# grep "ptrace_capture" /var/log/audit/audit.log |grep 2138
[[email protected] buckxu]#
根据https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-understanding_audit_log_files的说明:
a0
到a3
输入栏记录了前四个参数,在这个事件中使用 16 进制编码系统调用。这些参数取决于使用的系统调用;它们可以通过 ausearch 实用程序来解释。
根据ptrace
的原型
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
也就是说a1
的值就是pid
,把2138的16进制是85a。看看有没有
[[email protected] buckxu]# grep "ptrace_capture" /var/log/audit/audit.log |grep 85a
type=SYSCALL msg=audit(1628671359.772:165): arch=c000003e syscall=101 success=yes exit=0 a0=10 a1=85a a2=0 a3=0 items=0 ppid=2616 pid=2650 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="gdb" exe="/usr/libexec/gdb" key="ptrace_capture"ARCH=x86_64 SYSCALL=ptrace AUID="buckxu" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
这个进程所有线程的ID表示成16进制分别是85a, 861,862,863,都有。
[[email protected] buckxu]# grep "ptrace_capture" /var/log/audit/audit.log|grep "SYSCALL" |awk '{print $8}'|sort|uniq
a1=0
a1=85a
a1=861
a1=862
a1=863
a1=a5f
a1=a60
a1=a61
用ausearch
看一下,让日志变得更加可读
[[email protected] buckxu]# ausearch -k "ptrace_capture" -sc "ptrace" -i
----
type=PROCTITLE msg=audit(08/11/2021 16:42:39.772:165) : proctitle=gdb -p 2138 -ex detach -q -ex q
type=OBJ_PID msg=audit(08/11/2021 16:42:39.772:165) : opid=2138 oauid=unset ouid=root oses=-1 ocomm=ossec-authd
type=SYSCALL msg=audit(08/11/2021 16:42:39.772:165) : arch=x86_64 syscall=ptrace success=yes exit=0 a0=PTRACE_ATTACH a1=0x85a a2=0x0 a3=0x0 items=0 ppid=2616 pid=2650 auid=buckxu uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=gdb exe=/usr/libexec/gdb key=ptrace_capture
----
type=PROCTITLE msg=audit(08/11/2021 16:42:39.772:166) : proctitle=gdb -p 2138 -ex detach -q -ex q
type=OBJ_PID msg=audit(08/11/2021 16:42:39.772:166) : opid=2138 oauid=unset ouid=root oses=-1 ocomm=ossec-authd
type=SYSCALL msg=audit(08/11/2021 16:42:39.772:166) : arch=x86_64 syscall=ptrace success=yes exit=0 a0=PTRACE_ATTACH a1=0x861 a2=0x0 a3=0x0 items=0 ppid=2616 pid=2650 auid=buckxu uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=gdb exe=/usr/libexec/gdb key=ptrace_capture
可以看到可读性好多了,能够说明ptrace
做了什么操作。请注意上面的a0=PTRACE_ATTACH
。注意这个字段是以空格分隔的第9列,看看捕捉了哪些ptrace
动作
[[email protected] buckxu]# ausearch -k "ptrace_capture" -sc "ptrace" -i|grep "PTRACE_"|awk '{print $9}'|sort|uniq
a0=PTRACE_ATTACH
a0=PTRACE_CONT
a0=PTRACE_DETACH
a0=PTRACE_GETEVENTMSG
a0=PTRACE_GETREGS
a0=PTRACE_GETREGSET
a0=PTRACE_KILL
a0=PTRACE_PEEKTEXT
a0=PTRACE_PEEKUSER
a0=PTRACE_POKEDATA
a0=PTRACE_POKEUSER
a0=PTRACE_SETOPTIONS
a0=PTRACE_TRACEME
从这里来看,audit
是可以实时监控ptrace
,且能够把ptrace
的操作都记录下来。它的缺点就是数据量太大了。
=========================================
文中和文末的小广广,渴望你手指的触碰!!!
请关注,转发,点“在看”,谢谢!!
如需要转载,请在公众号留言!!
暗号:fbe17