检测linux进程注入3:audit方式

admin 2023年2月15日10:23:50评论65 views字数 6172阅读20分34秒阅读模式

通过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

如果没办法重启该服务,重启一下机器

先找一个进程

[root@localhost 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进程

[root@localhost 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

[root@localhost 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个进程

[root@localhost buckxu]# ls /proc/2138/task/
2138  2145  2146  2147

却产生了173条数据

[root@localhost buckxu]# grep "ptrace_capture" /var/log/audit/audit.log|grep "SYSCALL" |wc -l
173

而且,监控的进程明明是2138,在日志里却找不到

[root@localhost buckxu]# grep "ptrace_capture" /var/log/audit/audit.log |grep 2138
[root@localhost buckxu]# 

根据https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-understanding_audit_log_files的说明:

a0a3 输入栏记录了前四个参数,在这个事件中使用 16 进制编码系统调用。这些参数取决于使用的系统调用;它们可以通过 ausearch 实用程序来解释。

根据ptrace的原型

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

也就是说a1的值就是pid,把2138的16进制是85a。看看有没有

[root@localhost 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,都有。

[root@localhost 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看一下,让日志变得更加可读

[root@localhost 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动作

[root@localhost 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


原文始发于微信公众号(奶牛安全):检测linux进程注入3:audit方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月15日10:23:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   检测linux进程注入3:audit方式https://cn-sec.com/archives/1553734.html

发表评论

匿名网友 填写信息