VM에서 커널 메모리 조작 징후 검사

이 페이지에서는 Virtual Machine Threat Detection의 커널 모드 루트킷 발견의 유효성을 확인하기 위해 수행할 수 있는 작업을 설명합니다. 커널 모드 루트킷 발견 항목은 VM의 커널 메모리가 멀웨어에 의해 조작되었을 수 있음을 나타냅니다.

VM Threat Detection에서 커널 모드 루트킷 감지 결과를 수신하면 영향을 받은 Compute Engine 인스턴스에서 다음 Linux 명령어를 실행하여 시스템에서 도용된 시스템 호출이나 숨겨진 커널 모듈과 같이 이상을 나타낼 수 있는 데이터 포인트를 조사하는 것이 좋습니다.

또는 영향을 받는 VM에서 제공된 데이터 수집 스크립트를 실행할 수 있습니다. 스크립트는 이 페이지에 설명된 명령어를 실행합니다.

달리 명시되지 않는 한 이 페이지의 각 검사 작업은 모든 커널 모드 루트킷 발견과 관련이 있습니다.

이 문서에서는 다음을 가정합니다.

  • VM Threat Detection에서 커널 모드 루트킷 발견을 받은 후 이 문서의 태스크를 실행하고 있습니다. 관련 발견 항목 카테고리 목록은 커널 모드 루트킷 위협 발견 항목을 참고하세요.

  • Linux 명령줄 도구 및 Linux 커널을 이해하고 있습니다.

VM Threat Detection 정보

Virtual Machine Threat Detection은 Enterprise 및 Premium 등급에서 사용할 수 있는 Security Command Center의 기본 제공 서비스입니다. 이 서비스는 Compute Engine 인스턴스를 스캔하여 보안 침해된 클라우드 환경에서 실행되는 암호화폐 채굴 소프트웨어, 커널 모드 루트킷, 멀웨어와 같은 잠재적 악성 애플리케이션을 감지합니다.

VM Threat Detection은 Security Command Center 위협 감지 제품군의 일부이며 Event Threat DetectionContainer Threat Detection의 기존 기능을 보완하도록 설계되었습니다.

VM Threat Detection에 대한 자세한 내용은 Virtual Machine Threat Detection 개요를 참고하세요. VM Threat Detection 발견 항목의 세부정보를 보는 방법은 Google Cloud 콘솔에서 발견 항목 검토를 참고하세요.

시작하기 전에

Security Command Center에서 모든 리소스 및 발견 항목을 보고 영향을 받는 Compute Engine 인스턴스를 관리하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

영향을 받는 VM 식별

  1. 발견 항목 세부정보 보기
  2. 영향을 받은 리소스 섹션의 리소스 전체 이름 필드에서 링크를 클릭합니다. 영향을 받은 Compute Engine 인스턴스의 세부정보 보기가 새 탭에서 열립니다.
  3. 인스턴스에 연결합니다. 자세한 내용은 Compute Engine 문서의 Linux VM에 연결을 참고하세요.

예상치 못한 커널 모듈 찾기

VM에 예기치 않은 모듈이 있으면 VM의 커널 메모리가 손상되었을 수 있습니다.

예상치 못한 커널 모듈을 찾으려면 다음 단계를 따르세요.

  1. VM에 로드된 모든 커널 모듈을 나열합니다.

    lsmod
    cat /proc/modules
    
  2. 로드된 모듈과 로드 취소된 모듈의 sysfs 항목을 나열합니다.

    ls -l /sys/module/
    
  3. 이러한 목록의 결과를 프로젝트의 다른 VM 목록과 비교합니다. 영향을 받은 VM에는 표시되지만 다른 VM에는 표시되지 않는 모듈을 찾습니다.

트리 외부 모듈을 위해 syslog 검색

트리 외부 모듈이 VM에 로드되었다는 신호는 비정상적인 커널 모듈이 로드되었음을 나타낼 수 있습니다. 커널 로그 버퍼와 syslog 메시지를 검색하여 트리 외부 모듈이 로드되었는지 확인할 수 있습니다. 로그 항목에서 트리 외부 모듈은 오염된 로드로 표시됩니다.

커널 로그 버퍼 및 syslog 메시지에서 다음과 유사한 로그 항목을 검색합니다.

MODULE_NAME: loading out-of-tree module taints kernel.
  • 커널 로그 버퍼에서 트리 외부 모듈의 존재를 나타내는 로그 항목을 검색합니다.

    sudo dmesg | grep out-of-tree
    
  • 트리 외부 모듈의 존재를 나타내는 로그 항목이 있는지 모든 syslog 메시지를 검색합니다.

    grep "out-of-tree" /var/log/syslog*
    

실시간 패치 확인

VM에서 실시간 패치하면 VM Threat Detection 감지가 방해받을 수 있으며 거짓양성 발견 항목이 트리거될 수 있습니다.

실시간 패치를 확인하려면 다음 단계를 따르세요.

  1. syslog에서 실시간 패치 모듈 설치 및 로깅을 확인합니다. 실시간 패치는 일반적으로 커널 ftrace 포인트를 설치하여 커널 코드를 수정합니다.

    sudo grep livepatch /var/log/syslog*
    
  2. 실시간 패치용으로 설치된 새 커널 모듈을 검색합니다 (일반적으로 접두사가 livepatch임).

    sudo lsmod | grep livepatch
    
  3. 패치 파일을 검색합니다.

    sudo ls -l /sys/kernel/livepatch
    

실시간 패치에 관한 자세한 내용은 Linux 커널 문서의 Livepatch를 참고하세요.

VM에서 감지된 다른 악의적인 활동이 있는지 확인

  1. Security Command Center에서 조사 중인 VM Threat Detection 발견 항목의 세부정보를 확인합니다.
  2. 영향을 받은 리소스 섹션의 리소스 전체 이름 필드에서 드롭다운 화살표를 클릭한 다음 이 리소스 전체 이름이 있는 모든 발견 항목 표시를 클릭합니다. 이 VM의 발견 항목만 표시되도록 발견 항목 쿼리가 업데이트됩니다.
  3. 잠재적인 암호화폐 채굴 활동, 멀웨어, 비정상적인 IAM 권한 부여, 기타 보안 위협을 나타내는 발견 항목을 확인합니다.

바이러스 백신 소프트웨어로 인해 거짓양성 결과가 발생하는지 확인

바이러스 백신 소프트웨어는 VM Threat Detection 감지를 방해하고 거짓양성 발견을 트리거할 수 있습니다.

시스템에서 실행 중인 모든 프로세스 확인

예기치 않은 프로세스가 있으면 VM Threat Detection 발견 항목이 유효하고 VM이 손상되었음을 나타낼 수 있습니다.

  1. VM에서 실행 중인 모든 프로세스를 나열합니다.

    ps -eAf
    
  2. 일반적으로 이 VM에서 실행하지 않는 디버거 프로세스(예: gdb, strace, pstack)를 찾습니다. 디버거 프로세스는 다른 프로세스를 스누핑할 수 있습니다.

  3. VM에서 다른 의심스러운 프로세스를 찾습니다.

부팅된 커널 확인

부팅된 커널을 확인하여 Linux 커널을 식별합니다.

cat /proc/version

반환된 값이 예상되는 커널 버전이 아닌 경우 커널의 kexec 도구를 악용하여 실행되는 도용 공격을 나타낼 수 있습니다. kexec 도구는 시스템을 소프트 부팅하여 다른 커널을 사용할 수 있습니다.

Unexpected kernel code modification 발견사항에 대한 추가 작업

이 섹션의 태스크는 Defense Evasion: Unexpected kernel code modification 검색 결과 카테고리에만 해당됩니다. 다음 섹션의 작업을 수행하여 이 카테고리의 발견 항목의 유효성을 확인합니다.

이 섹션에서는 VM이 디버거 API를 사용하는지 확인하는 데 도움이 됩니다. 디버거 API는 실행 중인 커널의 코드 영역을 수정할 수 있으므로 거짓양성 발견을 트리거할 수 있습니다.

일반적으로 VM Threat Detection은 디버거 API 사용을 감지하면 발견 항목을 생성하지 않습니다. 그러나 VM이 VM Threat Detection에 알려지지 않은 디버거 API를 사용하는 경우에도 거짓양성 발견이 발생할 수 있습니다.

사용 설정된 디버그 트레이서 확인

nop 트레이서를 제외한 트레이서는 커널 코드 수정을 일으킬 수 있습니다. 이러한 요소는 VM Threat Detection 감지를 방해하고 거짓양성 발견 항목을 트리거할 수 있습니다. 일반적으로 VM Threat Detection에서 트레이서가 있는 것을 감지하면 Defense Evasion: Unexpected kernel code modification 발견 항목을 전송하지 않습니다.

사용 설정된 디버그 트레이서를 확인하려면 다음 단계를 따르세요.

  1. 사용 가능한 트레이서를 확인합니다.

    cat /sys/kernel/debug/tracing/available_tracers
    

    다음과 유사한 결과가 출력됩니다.

    hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop
    
  2. 현재 트레이서를 확인합니다.

    cat /sys/kernel/debug/tracing/current_tracer
    

    결과는 이전 명령어에서 반환된 사용 가능한 트레이서 중 하나입니다.

  3. 시스템에서 추적이 사용 설정되어 있는지 확인합니다.

    cat /sys/kernel/debug/tracing/tracing_on
    

    값이 1이면 시스템에서 추적이 사용 설정된 것입니다.

  4. 추적이 사용 설정된 CPU를 나열합니다.

    cat /sys/kernel/debug/tracing/tracing_cpumask
    
  5. 추적 세부정보 보기

    cat /sys/kernel/debug/tracing/trace_stat/function*
    

    다음과 유사한 결과가 출력됩니다.

    Function       Hit    Time            Avg             s^2
    

디버그 트레이서 이벤트 확인

커널에서 이벤트 모니터링을 수행하면 커널 코드가 수정되고 VM Threat Detection 발견 항목이 거짓양성으로 표시될 수 있습니다. 많은 디버깅 및 성능 모니터링 도구에서 이벤트 모니터링을 자동으로 사용 설정할 수 있습니다.

이벤트 모니터링이 사용 설정되어 있는지 확인하려면 다음 명령어를 실행합니다.

cat /sys/kernel/debug/tracing/events/enable
cat /sys/kernel/debug/tracing/events/*/enable

출력이 0이면 이벤트 모니터링이 사용 중지된 것입니다. 출력이 1이면 이벤트 모니터링이 사용 설정된 것입니다.

이벤트 모니터링을 사용 중지하여 VM Threat Detection에서 동일한 발견 항목을 내보내는지 확인해 보세요. 발견 항목이 줄어들면 초기 발견 항목 중 일부가 거짓양성 발견 항목이었음을 나타낼 수 있습니다.

kprobes, eBPF 규칙, netfilter 확인

Netfilter, kprobe, eBPF 규칙은 맞춤 콜백으로의 호출 전달을 트리거하므로 코드 수정을 트리거할 수 있습니다. VM Threat Detection은 이러한 프로브의 존재를 감지하고 수정된 코드 페이지에 매핑하며, 거짓양성을 트리거할 수 있는 프로브를 고려하지 않습니다.

kprobes, eBPF 규칙, netfilter를 확인하려면 다음 명령어를 실행합니다.

iptable -L
cat /sys/kernel/debug/kprobes/enabled
cat /sys/kernel/debug/kprobes/list
cat /sys/kernel/debug/kprobes/blacklist
cat /sys/kernel/debug/tracing/enabled_functions
sudo apt-get update && sudo apt-get install bpftrace
bpftrace -l
sudo apt install linux-tools-`uname -r`
bpftool prog

초기 디버그 트레이서 확인

부팅 시 사용 설정되는 초기 디버그 트레이서가 있으면 VM Threat Detection 감지를 방해하고 거짓양성 발견을 트리거할 수 있습니다.

초기 디버그 트레이서를 확인하려면 다음 명령어를 실행합니다.

cat /proc/cmdline

가능한 초기 디버그 트레이서의 목록은 Linux 커널 문서의 부팅 시간 추적을 참고하세요.

Unexpected system call handler의 추가 작업

Defense Evasion: Unexpected system call handler 발견 항목이 표시되면 이 작업을 실행합니다.

시스템 호출을 감사하고 사용량과 호출자에 이상이 있는지 확인합니다. 감사 로그는 호출 프로세스 및 시스템 호출의 인수에 관한 정보를 제공합니다. 확인 작업을 실행하여 일반적인 시스템 호출의 예상 동작을 확인할 수도 있습니다. 자세한 내용은 이 페이지의 Diamorphine 루트킷을 사용한 검사 예시를 참고하세요.

Unexpected interrupt handler의 추가 작업

Defense Evasion: Unexpected interrupt handler 발견 항목이 표시되면 이 작업을 실행합니다.

시스템의 실시간 인터럽트 핸들러를 나열하고 결과를 프로젝트의 다른 유사한 VM의 정보와 비교합니다. 예상치 못한 인터럽트 핸들러는 VM이 손상되었음을 나타낼 수 있습니다.

실시간 인터럽트 핸들러를 나열하려면 다음 명령어를 실행합니다.

cat /proc/interrupts

다음과 유사한 결과가 출력됩니다.

           CPU0       CPU1
  0:         44          0   IO-APIC   0-edge      timer
  1:          9          0   IO-APIC   1-edge      i8042
  4:      17493          0   IO-APIC   4-edge      ttyS0
  8:          0          0   IO-APIC   8-edge      rtc0
  9:          0          0   IO-APIC   9-fasteoi   acpi
 12:          0        152   IO-APIC  12-edge      i8042
 24:         16          0   PCI-MSI 81920-edge      virtio2-config
 25:          0      40194   PCI-MSI 81921-edge      virtio2-inflate
 26:      58528          0   PCI-MSI 81922-edge      virtio2-deflate
 27:          0     966356   PCI-MSI 81923-edge      virtio2-stats
 28:          0          0   PCI-MSI 49152-edge      virtio0-config
 29:          0          0   PCI-MSI 49153-edge      virtio0-control
 30:          0          0   PCI-MSI 49154-edge      virtio0-event
 31:          0     555807   PCI-MSI 49155-edge      virtio0-request
 32:          0          0   PCI-MSI 98304-edge      virtio3-config
 33:        184          0   PCI-MSI 98305-edge      virtio3-input
 34:          0          0   PCI-MSI 65536-edge      virtio1-config
 35:     556203          0   PCI-MSI 65537-edge      virtio1-input.0
 36:     552746          1   PCI-MSI 65538-edge      virtio1-output.0
 37:          1     426036   PCI-MSI 65539-edge      virtio1-input.1
 38:          0     408475   PCI-MSI 65540-edge      virtio1-output.1

Unexpected processes in runqueue의 추가 작업

Defense Evasion: Unexpected processes in runqueue 발견이 있으면 다음 단계를 수행합니다. 이 섹션에서는 발견한 내용을 조사하는 데 도움이 되는 추가 데이터 포인트를 수집할 수 있습니다. 이러한 데이터 포인트는 멀웨어 문제를 직접적으로 나타내지 않을 수 있습니다.

이 작업에서는 CPU별 스케줄러 대기열을 검토합니다. 일부 프로세스는 수명이 짧을 수 있지만 CPU당 실행 중인 프로세스를 사용하여 스케줄러 대기열 동작을 평가하여 비정상 동작을 찾을 수 있습니다.

  1. 실행 중인 각 프로세스가 CPU당 소비하는 시간에 관한 세부정보를 표시합니다. 이를 통해 특정 CPU가 과도하게 사용 중인지 확인할 수 있습니다. /proc/interrupts에서 CPU에 고정된 인터럽트와 결과를 연결할 수 있습니다.

    cat /proc/schedstat
    

    이 명령어에 관한 자세한 내용은 Linux 커널 문서의 스케줄러 통계를 참고하세요.

  2. 현재 실행 가능한 모든 작업과 각 CPU의 컨텍스트 전환에 관한 세부정보를 나열합니다.

    cat /proc/sched_debug
    

    다음과 유사한 결과가 출력됩니다.

    Sched Debug Version: v0.11, 5.4.0-1081-gke #87-Ubuntu
    ktime                                   : 976187427.733850
    sched_clk                               : 976101974.761097
    cpu_clk                                 : 976101973.335113
    jiffies                                 : 4538939132
    sched_clock_stable()                    : 1
    
    sysctl_sched
      .sysctl_sched_latency                    : 12.000000
      .sysctl_sched_min_granularity            : 1.500000
      .sysctl_sched_wakeup_granularity         : 2.000000
      .sysctl_sched_child_runs_first           : 0
      .sysctl_sched_features                   : 2059067
      .sysctl_sched_tunable_scaling            : 1 (logarithmic)
    
    cpu#0, 2199.998 MHz
      .nr_running                    : 0
      .nr_switches                   : 16250401
      .nr_load_updates               : 0
      .nr_uninterruptible            : 12692
      .next_balance                  : 4538.939133
      .curr->pid                     : 0
      .clock                         : 976101971.732857
      .clock_task                    : 976101971.732857
      .avg_idle                      : 880408
      .max_idle_balance_cost         : 500000
    
    runnable tasks:
     S           task   PID         tree-key  switches  prio     wait-time             sum-exec        sum-sleep
    -----------------------------------------------------------------------------------------------------------
     S        systemd     1     51740.602172    326778   120         0.000000    165741.786097         0.000000 0 0 /init.scope
     S       kthreadd     2   1482297.917240      1361   120         0.000000       112.028205         0.000000 0 0 /
     I      rcu_sched    11   1482642.606136   1090339   120         0.000000     17958.156471         0.000000 0 0 /
     S        cpuhp/1    15       537.058588         8   120         0.000000         2.275927         0.000000 0 0 /
     S  idle_inject/1    16        -2.994953         3    49         0.000000         0.012780         0.000000 0 0 /
     S    migration/1    17         0.000000    245774     0         0.000000      5566.508869         0.000000 0 0 /
     S    ksoftirqd/1    18   1482595.656315     47766   120         0.000000      1235.099147         0.000000 0 0 /
     I   kworker/1:0H    20       536.961474         5   100         0.000000         0.043908         0.000000 0 0 /
     S      kdevtmpfs    21     11301.343465       177   120         0.000000         3.195291         0.000000 0 0 /
     I          netns    22         6.983329         2   100         0.000000         0.021870         0.000000 0 0 /
     Srcu_tasks_kthre    23        10.993528         2   120         0.000000         0.010200         0.000000 0 0 /
     S        kauditd    24   1482525.828948       319   120         0.000000        14.489652         0.000000 0 0 /
    
  3. 다음을 찾습니다.

    • 실행 중인 프로세스 이름
    • CPU당 컨텍스트 전환 수입니다. 프로세스가 CPU에서 스위치를 너무 적게 또는 너무 많이 발생시키는지 확인합니다.
    • 사용된 CPU 시간 (유휴 시간이 아님)입니다.

Diamorphine 루트킷을 사용한 검사 예시

이 섹션에서는 Diamorphine 루트킷이 설치된 VM의 검사를 보여줍니다. Diamorphine은 널리 사용되는 로드 가능한 커널 모듈 (LKM)입니다. 이 루트킷은 다음과 같은 발견 항목 카테고리를 트리거합니다.

  • Defense Evasion: Unexpected system call handler
  • Defense Evasion: Unexpected kernel modules
  • Defense Evasion: Unexpected kernel read-only data modification

이러한 발견 항목 카테고리에 대한 자세한 내용은 커널 모드 루트킷 위협 발견 항목을 참고하세요.

수행된 검사 단계 및 VM에서 관찰된 증상은 다음과 같습니다.

  1. syslog에서 로드된 모든 트리 외부 커널 모듈을 검색합니다.

    1. 커널 로그 버퍼를 검색합니다.

      sudo dmesg | grep out-of-tree
      

      출력:

      diamorphine: loading out-of-tree module taints kernel.
      
    2. syslog 메시지를 검색합니다.

      grep "out-of-tree" /var/log/syslog*
      

      출력:

      /var/log/syslog: diamorphine: loading out-of-tree module taints kernel.
      
  2. syslog에서 모듈 인증 실패를 검색합니다 (일부 Linux 배포에서는 사용할 수 없음).

    1. 커널 로그 버퍼를 검색합니다.

      sudo dmesg | grep "module verification failed"
      

      출력:

      diamorphine: module verification failed: signature and/or required key missing - tainting kernel
      
    2. syslog 메시지를 검색합니다.

      sudo grep "module verification failed" /var/log/syslog*
      

      출력:

      /var/log/syslog: diamorphine: module verification failed: signature and/or required key missing - tainting kernel
      
  3. 모듈이 /proc/moduleslsmod 명령어에서 숨겨져 있는지 확인합니다.

    sudo grep diamorphine /proc/modules
    sudo lsmod | grep diamorphine
    

    결과가 표시되지 않았습니다.

  4. 모듈의 sysfs에 항목이 있는지 확인합니다.

    sudo cat /sys/module/diamorphine/coresize
    

    출력:

    16384
    
  5. 아키텍처의 시스템 호출 테이블을 가져옵니다.

    sudo ausyscall --dump
    

    출력:

    Using x86_64 syscall table:
    0       read
    1       write
    2       open
    3       close
    

    일반적으로 루트킷에 의해 조작되는 시스템 호출(예: killgetdents)의 이상치를 감사합니다.

  6. 시스템 호출 핸들러 조작을 확인하려면 시스템 호출을 감사하고 비정상적인 동작이 있는지 확인합니다. 이러한 동작은 시스템 호출마다 다릅니다.

    일반적으로 해킹되는 시스템 호출은 kill 호출입니다. kill 시스템 호출이 우회되었는지 확인할 수 있습니다. 다음 예에서는 kill 시스템 호출이 감사되었습니다.

    1. auditd를 설치하고 Diamorphine 루트킷이 없는 VM의 동작을 관찰합니다.

      $ sudo apt-get update && sudo apt-get install auditd
      $ # Add audit rules for specific system calls
      $ sudo echo "-a exit,always -F arch=b64 -S kill -k audit_kill" >> /etc/audit/rules.d/audit.rules
      $  sudo /etc/init.d/auditd restart
      Restarting auditd (via systemctl): auditd.service.
      
      $ # Behavior observed without rootkit
      $ sleep 600 &
      [1] 1119
      $ sudo kill -9 1119
      $ sudo ausearch -k audit_kill | grep -A 3 "pid=1119"
      type=OBJ_PID msg=audit(1677517839.523:198): opid=1119 oauid=1001 ouid=0 oses=1 obj=unconfined ocomm="sleep"
      type=SYSCALL msg=audit(1677517839.523:198): arch=c000003e syscall=62 success=yes exit=0 a0=45f a1=9 a2=0 a3=7f61c64b2ac0 items=0 ppid=1034 pid=1035 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0
      tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined key="audit_kill"
      $ sleep 600 &
      [1] 1087
      $ sudo kill -31 1087
      $ sudo ausearch -k audit_kill | grep -A 3 "pid=1087"
      type=OBJ_PID msg=audit(1677517760.844:168): opid=1087 oauid=1001 ouid=0 oses=1 obj=unconfined ocomm="sleep"
      type=SYSCALL msg=audit(1677517760.844:168): arch=c000003e syscall=62 success=yes exit=0 a0=43f a1=1f a2=0 a3=7f61c64b2ac0 items=0 ppid=1034 pid=1035 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0        ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined key="audit_kill"
      

      검사 중 Diamorphine 루트킷이 설치되었습니다. 다음 단계에서는 루트킷이 설치된 후 VM의 동작을 보여줍니다.

    2. Diamorphine 루트킷이 설치된 후 신호의 감사 로그 항목이 더 이상 없는지 확인합니다.

      $ sudo ausearch -k audit_kill | grep -A 3 "pid=1158"
      $ sleep 600 &
      [2] 1167
      
    3. 신호의 감사 로그 항목에서 세부정보를 확인합니다. 이 예시에서 이 특정 신호는 루트킷에 의해 완전히 도용되지는 않았지만 호출자 프로세스에 관한 정보는 사용할 수 있습니다.

      $ sudo kill -9 1167
      $ sudo ausearch -k audit_kill | grep -A 3 "pid=1167"
      type=OBJ_PID msg=audit(1677518008.586:237): opid=1167 oauid=1001 ouid=0 oses=1 obj=unconfined ocomm="sleep"
      type=SYSCALL msg=audit(1677518008.586:237): arch=c000003e syscall=62 success=yes exit=0 a0=48f a1=9 a2=0 a3=7f61c64b2ac0 items=0 ppid=1034 pid=1035 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0
      tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined key="audit_kill"
      

데이터 수집 스크립트 디버그

다음 스크립트는 이 페이지에 설명된 여러 디버깅 작업을 실행합니다. 이 스크립트는 sudo 또는 root 모드에서 실행할 수 있습니다. 이 스크립트는 시스템에서 디버그 정보만 읽습니다.

$ cat kprot.sh
#!/bin/bash

echo "Boot command line"
cat /proc/cmdline
echo "=================================================="
echo "Loaded modules"
cat /proc/modules
echo "=================================================="
echo "Current tracer"
cat /sys/kernel/debug/tracing/current_tracer
echo "=================================================="
echo "Tracing event enable"
cat /sys/kernel/debug/tracing/events/enable
echo "=================================================="
echo "Tracing sub events enable"
for en in `find /sys/kernel/debug/tracing/events/*/enable`; do printf "\b$en\n"; cat $en; done
echo "=================================================="
echo "IP table rules"
iptables -L
echo "=================================================="
echo "Ftrace list"
cat /sys/kernel/debug/tracing/enabled_functions
echo "=================================================="
echo "Kprobes enabled"
cat /sys/kernel/debug/kprobes/enabled
echo "=================================================="
echo "Kprobes list"
cat /sys/kernel/debug/kprobes/list
echo "=================================================="
echo "Kprobes blocklist"
cat /sys/kernel/debug/kprobes/blacklist
echo "=================================================="
echo "BPF trace"
sudo apt update && sudo apt-get update && sudo apt-get install bpftrace
bpftrace -l
echo "=================================================="
echo "BPF prog list"
sudo apt update && sudo apt install linux-tools-`uname -r`
bpftool prog
echo "=================================================="

다음 단계