시스템 관리자라면 보안에 대한 고민은 끊이지 않을 겁니다. 특히, 서버에 대한 접근 기록, 파일 변경 이력 등은 문제 발생 시 원인 분석과 재발 방지를 위해 매우 중요합니다. 이 모든 것을 효과적으로 기록하고 관리할 수 있는 도구가 바로 `auditd`입니다. 이번 리뷰에서는 `auditd`를 사용해 시스템 감사 로그를 설정하는 방법에 대해 자세히 알아보고, 실제 사용 경험을 바탕으로 장단점을 분석해 보겠습니다.
auditd란 무엇인가
`auditd`는 리눅스 운영체제에서 시스템 콜을 감사하는 데 사용되는 사용자 공간 감사 시스템입니다. 커널의 감사 기능을 활용하여 파일 접근, 시스템 호출, 명령어 실행 등 다양한 시스템 활동을 기록합니다. 기록된 로그는 시스템 보안 사고 발생 시 원인 분석 및 법적 증거 자료로 활용될 수 있습니다. 단순히 로그를 남기는 것뿐만 아니라, 특정 이벤트 발생 시 알림을 보내는 기능도 제공하여 실시간 보안 모니터링에도 유용합니다.
auditd 설치와 기본 설정
`auditd`는 대부분의 리눅스 배포판에서 기본적으로 제공되거나 패키지 관리자를 통해 쉽게 설치할 수 있습니다. 예를 들어, CentOS/RHEL에서는 다음과 같이 설치할 수 있습니다.
sudo yum install auditd
sudo systemctl enable auditd
sudo systemctl start auditd
Ubuntu/Debian에서는 다음과 같이 설치합니다.
sudo apt update
sudo apt install auditd
sudo systemctl enable auditd
sudo systemctl start auditd
설치 후에는 `/etc/audit/auditd.conf` 파일을 통해 `auditd`의 동작 방식을 설정할 수 있습니다. 로그 파일 위치, 로그 보관 기간, 로그 파일 크기 등 다양한 옵션을 조정할 수 있습니다.
auditd 규칙 설정의 중요성
`auditd`는 모든 시스템 활동을 기록할 수 있지만, 모든 것을 기록하는 것은 오히려 분석을 어렵게 만들 수 있습니다. 따라서, 중요한 이벤트만 선택적으로 기록하는 규칙을 설정하는 것이 중요합니다. 규칙은 `/etc/audit/rules.d/audit.rules` 파일에 정의하며, `auditctl` 명령어를 사용하여 실시간으로 규칙을 추가하거나 삭제할 수 있습니다.
auditctl 명령어 사용법
`auditctl`은 `auditd`의 규칙을 관리하는 데 사용되는 명령줄 도구입니다. 다음은 자주 사용되는 `auditctl` 명령어의 예시입니다.
- `-l`: 현재 설정된 규칙 목록을 표시합니다.
- `-a always,exit -S open -F path=/etc/passwd -k passwd_changes`: `/etc/passwd` 파일에 대한 `open` 시스템 콜을 항상(always) 기록하고, 종료 시(exit) 감사하며, `passwd_changes` 키워드를 추가합니다.
- `-D`: 모든 규칙을 삭제합니다.
- `-R /etc/audit/rules.d/audit.rules`: 규칙 파일을 다시 로드합니다.
규칙을 설정할 때는 어떤 이벤트를 기록할지 신중하게 결정해야 합니다. 너무 많은 규칙은 성능 저하를 유발할 수 있으며, 너무 적은 규칙은 필요한 정보를 놓칠 수 있습니다.
규칙 예시와 설명
다음은 몇 가지 유용한 `auditd` 규칙 예시입니다.
`/etc/passwd` 파일 변경 감시
-w /etc/passwd -p wa -k passwd_changes
이 규칙은 `/etc/passwd` 파일에 대한 쓰기(w) 및 속성 변경(a)을 감시하고, `passwd_changes` 키워드를 사용하여 로그를 필터링할 수 있도록 합니다.
특정 사용자 명령어 실행 감시
-a always,exit -F auid>=1000 -F auid!=4294967295 -C uid!=gid -S execve -k user_commands
이 규칙은 UID가 1000 이상인 사용자가 실행한 모든 명령어를 감시하고, `user_commands` 키워드를 사용하여 로그를 필터링할 수 있도록 합니다. `-F auid!=4294967295`는 로그인하지 않은 상태에서 실행되는 명령어를 제외합니다. `-C uid!=gid`는 UID와 GID가 다른 경우만 기록합니다 (일반적인 사용자 명령어 실행).
로그인/로그아웃 이벤트 감시
-w /var/log/lastlog -p wa -k logins
-w /var/run/utmp -p wa -k logins
-w /var/log/wtmp -p wa -k logins
-w /var/log/btmp -p wa -k logins
이 규칙은 로그인/로그아웃 관련 파일에 대한 변경을 감시하고, `logins` 키워드를 사용하여 로그를 필터링할 수 있도록 합니다.
ausearch와 aureport 활용
`auditd`는 로그를 남기는 것뿐만 아니라, 로그를 분석하고 보고서를 생성하는 도구도 제공합니다. `ausearch`는 로그를 검색하는 데 사용되며, `aureport`는 로그를 기반으로 보고서를 생성하는 데 사용됩니다.
ausearch를 이용한 로그 검색
ausearch -k passwd_changes
이 명령어는 `passwd_changes` 키워드를 가진 로그를 검색합니다.
ausearch -u <사용자_ID> -ts today
이 명령어는 특정 사용자가 오늘 실행한 모든 이벤트를 검색합니다.
aureport를 이용한 보고서 생성
aureport -au
이 명령어는 모든 사용자 활동에 대한 보고서를 생성합니다.
aureport -f -ts today
이 명령어는 오늘 변경된 파일에 대한 보고서를 생성합니다.
auditd 사용 경험 및 성능 분석
실제로 `auditd`를 사용하면서 느낀 점은 보안 강화에 매우 효과적이라는 것입니다. 특히, 중요한 파일에 대한 접근 기록을 남겨두면, 보안 사고 발생 시 원인 파악에 큰 도움이 됩니다. 또한, 특정 사용자의 명령어 실행 기록을 감시하면, 내부자의 악의적인 행위를 탐지하는 데 유용합니다.
하지만 `auditd`는 설정이 복잡하고, 잘못 설정하면 성능 저하를 유발할 수 있다는 단점도 있습니다. 특히, 모든 시스템 활동을 기록하도록 설정하면, 로그 파일 크기가 급격하게 증가하고, 디스크 공간을 빠르게 소모할 수 있습니다. 따라서, `auditd`를 사용하기 전에 충분한 테스트를 거쳐 최적의 규칙을 설정하는 것이 중요합니다.
또한, `auditd` 로그는 분석하기 어려울 수 있습니다. 로그가 시스템 콜 수준으로 기록되기 때문에, 일반 사용자가 이해하기 어려운 경우가 많습니다. 따라서, 로그 분석 도구를 함께 사용하는 것이 좋습니다. 예를 들어, `Elasticsearch`와 `Kibana`를 사용하여 `auditd` 로그를 시각화하고 분석하면, 보다 쉽게 보안 위협을 탐지할 수 있습니다.
유사 제품/서비스와의 비교
`auditd`와 유사한 기능을 제공하는 제품 및 서비스는 여러 가지가 있습니다. 예를 들어, `Sysmon`은 윈도우 운영체제에서 시스템 활동을 감시하는 데 사용되는 도구입니다. `Sysmon`은 `auditd`보다 설정이 간단하고, 로그 분석 기능도 강력하지만, 윈도우 운영체제에서만 사용할 수 있다는 단점이 있습니다.
또한, 상용 보안 솔루션 중에는 시스템 활동 감시 기능을 제공하는 제품들이 많습니다. 이러한 제품들은 `auditd`보다 사용하기 쉽고, 다양한 보안 기능을 제공하지만, 비용이 비싸다는 단점이 있습니다.
`auditd`는 무료로 사용할 수 있고, 리눅스 운영체제에서 광범위하게 사용되는 도구라는 장점이 있습니다. 하지만, 설정이 복잡하고, 로그 분석 기능이 부족하다는 단점도 있습니다. 따라서, `auditd`를 사용할지, 다른 제품/서비스를 사용할지는 비용, 사용 편의성, 기능 요구 사항 등을 고려하여 결정해야 합니다.
auditd 설정 시 주의사항
`auditd`를 설정할 때는 다음과 같은 사항에 주의해야 합니다.
- 필요한 이벤트만 기록하도록 규칙을 설정하십시오.
- 로그 파일 크기 및 보관 기간을 적절하게 설정하십시오.
- 로그 파일을 주기적으로 백업하십시오.
- 로그 분석 도구를 함께 사용하여 로그를 분석하십시오.
- `auditd` 설정 변경 후에는 반드시 테스트를 거치십시오.
auditd를 활용한 보안 강화 전략
`auditd`는 시스템 보안을 강화하는 데 매우 유용한 도구입니다. 다음은 `auditd`를 활용하여 시스템 보안을 강화할 수 있는 몇 가지 전략입니다.
- 중요 파일에 대한 접근 감시: `/etc/passwd`, `/etc/shadow`, `/etc/sudoers` 등 중요한 파일에 대한 접근을 감시하여 무단 변경을 탐지합니다.
- 특정 사용자 명령어 실행 감시: 관리자 권한을 가진 사용자의 명령어 실행을 감시하여 악의적인 행위를 탐지합니다.
- 로그인/로그아웃 이벤트 감시: 로그인/로그아웃 이벤트를 감시하여 비정상적인 접근을 탐지합니다.
- 시스템 콜 감시: 특정 시스템 콜을 감시하여 보안 취약점을 악용한 공격을 탐지합니다.
- 보안 정책 준수 감사: 시스템 설정이 보안 정책을 준수하는지 감사합니다.
`auditd`를 효과적으로 활용하기 위해서는 보안 정책을 수립하고, 정책에 따라 규칙을 설정해야 합니다. 또한, 로그를 주기적으로 분석하고, 보안 위협을 탐지하는 프로세스를 구축해야 합니다.