운영체제 (LNX,WIN)

Linux 프로세스 및 파일 추가/변경/삭제 이벤트 로그수집 및 감사

날으는물고기 2024. 7. 18. 00:16

auditd를 통해 실행되는 프로세스 이벤트와 파일 추가/변경/삭제 이벤트를 로그로 기록하고 수집할 수 있습니다. 강력한 Linux 감사 프레임워크로, 다양한 시스템 이벤트를 모니터링하고 기록할 수 있습니다. 이를 위해서는 auditd를 설정하고 필요한 규칙을 정의해야 합니다.

 

다음은 auditd를 설정하고 프로세스 및 파일 이벤트를 모니터링하는 방법입니다.

  1. auditd 설치: CentOS 5에서는 auditd를 다음과 같이 설치할 수 있습니다.
    yum install audit
  2. auditd 서비스 시작: auditd 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.
    service auditd start
    chkconfig auditd on
  3. 규칙 정의: /etc/audit/audit.rules 파일에 규칙을 추가하여 모니터링할 이벤트를 정의합니다.
    • 프로세스 실행 모니터링: 특정 명령어 실행을 모니터링하려면 다음 규칙을 추가합니다.
      -a always,exit -F arch=b64 -S execve -k process_monitor
    • 파일 변경 모니터링: 특정 디렉토리에서 파일 생성, 수정, 삭제 이벤트를 모니터링하려면 다음 규칙을 추가합니다.
      -w /path/to/directory -p wa -k file_monitor
  4. 규칙 적용: 규칙을 추가한 후 auditd를 재시작하여 규칙을 적용합니다.
    service auditd restart
  5. 로그 확인: auditd는 이벤트를 /var/log/audit/audit.log 파일에 기록합니다. 이 로그 파일을 확인하여 모니터링된 이벤트를 분석할 수 있습니다.
    • 예시
      ausearch -k process_monitor | aureport -x --summary
      ausearch -k file_monitor | aureport -f --summary
    ausearch -k process_monitor
    ausearch -k file_monitor

이렇게 설정하면 auditd를 통해 실행되는 프로세스와 파일의 추가, 변경, 삭제 이벤트를 효과적으로 모니터링하고 로그로 기록할 수 있습니다. auditd의 규칙은 매우 유연하므로, 필요에 따라 추가적인 규칙을 정의하여 모니터링 범위를 확장할 수 있습니다.

 

auditd 규칙에서 예외 조건을 추가하여 특정 이벤트를 필터링할 수 있습니다. 예외 조건은 필터링 기준을 추가하여 특정 프로세스나 파일 경로를 제외하는 방식으로 설정할 수 있습니다. 다음은 예외 조건을 추가하는 방법을 예시와 함께 설명합니다.

1. 프로세스 이벤트에서 예외 조건 추가

프로세스 이벤트에서 특정 사용자를 제외하고 싶다면 auid 필터를 사용할 수 있습니다. 예를 들어, root 사용자의 프로세스 실행을 모니터링에서 제외하고 싶다면 다음과 같은 규칙을 사용할 수 있습니다.

프로세스 실행 모니터링 (root 사용자 제외)

-a always,exit -F arch=b64 -S execve -F auid!=0 -k process_monitor

2. 파일 이벤트에서 예외 조건 추가

파일 이벤트에서 특정 디렉토리를 제외하고 싶다면 -F dir!= 필터를 사용할 수 있습니다. 예를 들어, /var/log 디렉토리의 파일 변경 이벤트를 모니터링에서 제외하고 싶다면 다음과 같은 규칙을 사용할 수 있습니다.

파일 변경 모니터링 (/var/log 디렉토리 제외)

-w /path/to/directory -p wa -k file_monitor
-a always,exit -F arch=b64 -S open,openat,creat,unlink,unlinkat,rename,renameat -F dir!=/var/log -k file_monitor

예시 규칙 종합

프로세스 실행 모니터링 (특정 사용자 및 명령어 제외)

-a always,exit -F arch=b64 -S execve -F auid!=1001 -F exe!=/bin/ls -k process_monitor

위 규칙은 사용자 ID 1001 (특정 사용자)와 /bin/ls 명령어 실행을 제외하고 모든 프로세스 실행을 모니터링합니다.

파일 변경 모니터링 (특정 디렉토리 및 파일 제외)

-w /path/to/directory -p wa -k file_monitor
-a always,exit -F arch=b64 -S open,openat,creat,unlink,unlinkat,rename,renameat -F dir!=/var/log -F path!=/path/to/directory/excluded_file -k file_monitor

위 규칙은 /var/log 디렉토리와 /path/to/directory/excluded_file 파일을 제외하고 지정된 디렉토리 내 모든 파일의 변경 이벤트를 모니터링합니다.

규칙 적용 및 테스트

위 규칙들을 /etc/audit/audit.rules 파일에 추가한 후 auditd를 재시작하여 적용합니다.

service auditd restart

이후, ausearchaureport 명령어를 사용하여 로그를 확인합니다.

ausearch -k process_monitor
ausearch -k file_monitor

이렇게 하면 auditd를 통해 특정 예외 조건을 가진 프로세스 및 파일 이벤트를 모니터링할 수 있습니다. 필요에 따라 필터를 조정하여 원하는 예외 조건을 추가할 수 있습니다.

auditd 이벤트 로그를 Elastic Stack (Elasticsearch, Logstash, Kibana)로 중앙수집하여 모니터링 및 분석을 수행할 수 있습니다. 아래는 이를 설정하는 방법을 단계별로 설명합니다.

1. Elasticsearch 설치

먼저, Elasticsearch를 설치합니다. 공식 문서를 참고하여 적절한 버전을 다운로드하고 설치합니다.

Debian/Ubuntu

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch

RedHat/CentOS

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
sudo yum install elasticsearch

Elasticsearch 설치 후, elasticsearch.yml 파일을 설정합니다.

 

Elasticsearch 서비스를 시작합니다.

sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

2. Logstash 설치 및 설정

Logstash는 로그 데이터를 수집, 변환, 저장하는 도구입니다. Logstash를 설치합니다.

Debian/Ubuntu

sudo apt-get install logstash

RedHat/CentOS

sudo yum install logstash

Logstash 설정 파일을 생성합니다.

 

예를 들어, /etc/logstash/conf.d/auditd.conf 파일을 다음과 같이 설정합니다.

input {
  file {
    path => "/var/log/audit/audit.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  if [path] =~ "audit" {
    grok {
      match => { "message" => "%{AUDITD}" }
    }
    date {
      match => [ "timestamp", "UNIX" ]
    }
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "auditd-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}

Logstash 서비스를 시작합니다.

sudo systemctl enable logstash
sudo systemctl start logstash

3. Kibana 설치 및 설정

Kibana는 Elasticsearch 데이터를 시각화하는 도구입니다.

Debian/Ubuntu

sudo apt-get install kibana

RedHat/CentOS

sudo yum install kibana

Kibana 설정 파일을 편집합니다.

 

Kibana 서비스를 시작합니다.

sudo systemctl enable kibana
sudo systemctl start kibana

4. auditbeat 설치 및 설정

Auditbeat는 auditd 로그를 Elasticsearch로 전송하는 Beats 에이전트입니다. Auditbeat를 사용하면 설정이 더 간단할 수 있습니다.

Debian/Ubuntu

sudo apt-get install auditbeat

RedHat/CentOS

sudo yum install auditbeat

auditbeat.yml 파일을 설정합니다.

auditbeat.modules:
- module: auditd
  audit_rule_files: [ '${path.config}/audit.rules.d/*.conf' ]
  audit_rules: |
    -w /etc/passwd -p wa -k passwd_changes

output.elasticsearch:
  hosts: ["localhost:9200"]

setup.kibana:
  host: "localhost:5601"

Auditbeat 서비스를 시작합니다.

sudo systemctl enable auditbeat
sudo systemctl start auditbeat

요약

  1. Elasticsearch, Logstash, Kibana (ELK) 설치 및 설정.
  2. auditd 로그를 Logstash를 통해 수집하고 Elasticsearch로 전송.
  3. Kibana에서 로그 시각화.
  4. Auditbeat를 사용하여 auditd 로그를 직접 Elasticsearch로 전송.

이 설정을 통해 auditd 로그를 중앙 수집하고 Kibana에서 시각화하여 모니터링할 수 있습니다. 설정 과정 중 문제가 발생할 경우, 각 단계의 로그 파일을 확인하여 문제를 해결하세요.

728x90