【问题标题】:Monitoring Process Syscalls in Live Environment在实时环境中监控进程系统调用
【发布时间】:2020-06-07 14:41:42
【问题描述】:

我从事一个项目已经有一段时间了,第一步是为进程构建一个系统调用跟踪库。从本质上讲,我想要做的是有一个系统,其中每次进程通过系统调用请求操作系统服务时,事件的相关信息(调用进程、时间、系统调用名称)都会记录到文件中。

从理论上讲,这听起来很简单,但是随着时间的推移,实现它变得越来越痛苦。我想给我造成问题的主要原因是普遍不知道从哪里开始实施。

最初,我认为这可以通过在内核入口点添加几行代码来解决,但是在研究了 entry_64.S 一段时间后,我得出结论,必须有一个更简单的方法.我的下一个想法是用我自己的服务覆盖 sys_call_table 指向的所有服务,该服务进行日志记录,然后调用原始服务。但是,事实证明,由于 sys_call_table 不再被导出,这种方法在 linux 内核 5.4.18 中存在一些困难。而且,即使在重新编译内核以导出 sys_call_table 时,该表也位于内存受保护的位置。最后,我一直在尝试使用 auditd。具体来说,我关注了this link,但它似乎不起作用(当我执行 kill 命令时,ausearch 中只有大约 50% 的时间基于时间戳的相应结果)。

所有这些死胡同让我有点筋疲力尽,我真的希望最终能够启动并运行我的项目的第一阶段。有人对我应该尝试什么有任何指示吗?

解决方案:BPFTrace 正是我想要的。

【问题讨论】:

  • 您的目标是自己编写这个工具,还是只是想要一些方法来监控系统调用?如果是后者,那么已经有工具可以做到这一点,例如ftracesystem tap。即使你想重新发明工具,你也可以考虑看看那些现有的工具是如何完成任务的。
  • 谢谢,我会调查这些的。
  • 我的目标只是收集每个进程系统调用跟踪的 dara。理想的工具将为任何运行的进程收集。我宁愿自己不编写工具。

标签: linux kernel monitoring system-calls audit


【解决方案1】:

我使用 BPFTrace 记录每次内核开始执行系统调用(不包括那些由 BPFTrace 本身发起的调用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多