Linux 프로세스 및 파일 추가/변경/삭제 이벤트 로그수집 및 감사
auditd
를 통해 실행되는 프로세스 이벤트와 파일 추가/변경/삭제 이벤트를 로그로 기록하고 수집할 수 있습니다. 강력한 Linux 감사 프레임워크로, 다양한 시스템 이벤트를 모니터링하고 기록할 수 있습니다. 이를 위해서는 auditd
를 설정하고 필요한 규칙을 정의해야 합니다.
다음은 auditd
를 설정하고 프로세스 및 파일 이벤트를 모니터링하는 방법입니다.
- auditd 설치: CentOS 5에서는
auditd
를 다음과 같이 설치할 수 있습니다.yum install audit
- auditd 서비스 시작:
auditd
서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.service auditd start chkconfig auditd on
- 규칙 정의:
/etc/audit/audit.rules
파일에 규칙을 추가하여 모니터링할 이벤트를 정의합니다.- 프로세스 실행 모니터링: 특정 명령어 실행을 모니터링하려면 다음 규칙을 추가합니다.
-a always,exit -F arch=b64 -S execve -k process_monitor
- 파일 변경 모니터링: 특정 디렉토리에서 파일 생성, 수정, 삭제 이벤트를 모니터링하려면 다음 규칙을 추가합니다.
-w /path/to/directory -p wa -k file_monitor
- 프로세스 실행 모니터링: 특정 명령어 실행을 모니터링하려면 다음 규칙을 추가합니다.
- 규칙 적용: 규칙을 추가한 후
auditd
를 재시작하여 규칙을 적용합니다.service auditd restart
- 로그 확인:
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
이후, ausearch
와 aureport
명령어를 사용하여 로그를 확인합니다.
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
요약
- Elasticsearch, Logstash, Kibana (ELK) 설치 및 설정.
auditd
로그를 Logstash를 통해 수집하고 Elasticsearch로 전송.- Kibana에서 로그 시각화.
- Auditbeat를 사용하여
auditd
로그를 직접 Elasticsearch로 전송.
이 설정을 통해 auditd
로그를 중앙 수집하고 Kibana에서 시각화하여 모니터링할 수 있습니다. 설정 과정 중 문제가 발생할 경우, 각 단계의 로그 파일을 확인하여 문제를 해결하세요.