운영체제 (LNX,WIN)

Linux Auditing System 리눅스 감사 시스템 모니터링 운영

날으는물고기 2024. 8. 4. 00:44

Linux Audit과 관련된 syscall 지연 및 기타 위험을 완화하기 위한 모니터링 개선 사항에 대해 설명합니다.

Linux Audit란 무엇인가?

Linux Audit는 syscalls에 응답하여 감사 기록을 생성합니다. 이러한 기록에는 권한 상승 시도나 의심스러운 네트워크 활동과 같은 보안 관련 정보가 포함될 수 있습니다. syscall이 발생하면, Linux는 감사 기록을 내부 백로그에 추가하여 auditd와 같은 사용자 공간 소비자가 비동기적으로 처리할 수 있도록 합니다.

옵션, 위험 및 신호

고처리량 시스템에서는 Linux가 사용자 공간 소비자가 처리할 수 있는 속도보다 빠르게 감사 기록을 생성할 수 있습니다. Linux Audit이 어떻게 구성되어 있는지에 따라, 이는 메모리 소진, 감사 기록 손실 또는 syscall 지연을 초래할 수 있습니다.

옵션

Linux Audit 구성 옵션 중 backlog_limit와 backlog_wait_time을 주로 살펴보겠습니다. 이 옵션들은 각각 백로그의 최대 크기와 기록이 드롭되기 전에 백로그가 소진될 때까지 Linux가 기다리는 시간을 결정합니다.

위험

이 옵션들은 위험 트레이드오프를 조정할 수 있습니다. backlog_limit을 비활성화하거나 매우 높은 값으로 설정하면 백로그 오버플로우의 위험이 줄어들지만 메모리 소진의 위험이 증가합니다. backlog_wait_time을 줄이면 백로그가 소진될 때까지 기다리는 동안 발생하는 지연의 길이를 줄일 수 있지만 감사 기록이 드롭될 위험이 증가할 수 있습니다.

신호

Linux Audit 구성의 위험 프로파일에 따라, 어떤 신호를 우선적으로 모니터링할지를 결정할 수 있습니다. 예를 들어, backlog_limit이 0이 아닌 경우 백로그 오버플로우와 관련된 위험을 완화하기 위해 백로그 사용률을 주시해야 합니다. 반면, backlog_limit이 0으로 설정된 경우 시스템 메모리 사용률에 더 주의를 기울여야 합니다.

안내

고처리량 Linux 머신에서 사용자 공간 감사 기록 소비자가 주기적으로 기록 생성 속도를 따라가지 못한다고 가정해 봅시다. 아래 표는 해당 머신에서 설정할 수 있는 다양한 Linux Audit 구성 옵션에 따른 위험의 심각도와 신호의 중요도를 보여줍니다.

Linux Audit 구성 옵션

  backlog_limit 0 backlog_limit 64 backlog_limit 64
backlog_wait_time 0 backlog_wait_time 0 backlog_wait_time 60000  
메모리 소진 위험 (감사 기록으로 인한) 높음 낮음 낮음
감사 기록 손실 높음 중간 낮음
syscall 지연 (Linux Audit으로 인한) 없음 없음 높음
메모리 사용률 높음 낮음 낮음
백로그 사용률 없음 높음 중간
백로그 대기 없음 없음 높음

메트릭 및 측정 도구

우리의 backlog_limit는 5000으로 설정되어 있고 backlog_wait_time은 15000입니다. 이러한 설정은 고처리량과 사용자 공간 감사 기록 프로세서에 대한 메모리 할당이 부족하여 백로그 오버플로우 및 syscall 지연을 초래할 수 있습니다. 구성 및 위험 프로파일을 고려할 때, 백로그 사용률, 백로그 대기 및 손실된 기록을 우선적으로 모니터링하는 것이 합리적입니다.

상태 메트릭 수집

상태 객체는 auditctl -s 명령어 또는 Netlink 소켓을 통해 가져올 수 있습니다.

$ sudo auditctl -s | grep backlog\|lost | sort
backlog 0
backlog_limit 5000
backlog_wait_time 15000
lost 0

우리는 linux-audit-exporter를 사용하여 Prometheus와 통합하고, DataDog을 통해 백로그 사용률(100 * (backlog / backlog_limit)) 및 손실된 기록을 모니터링합니다.

백로그 대기

백로그가 오버플로우되고 syscall이 지연되었을 때 백로그가 소진되면, 메트릭 수집 패스 사이에서 발생하는 백로그 대기 시간을 모니터링하는 것도 중요합니다. 이는 성능 저하의 원인을 파악하는 데 도움이 됩니다.

audit_log_start 및 eBPF

우리는 audit_log_start 함수를 사용하여 백로그 대기 시간을 대신할 수 있는 신호를 수집합니다. eBPF는 커널 내부에서 안전하고 성능이 뛰어난 코드를 실행할 수 있는 프레임워크로, 사용자 공간 프로그램과 달리 컨텍스트 전환 없이 커널 동작을 관찰할 수 있습니다.

ebpf_exporter

우리는 ebpf_exporter를 사용하여 audit_log_start 지연 시간을 Prometheus 형식으로 내보내고 DataDog을 통해 수집 및 모니터링합니다. 이는 백로그 대기 시간을 간접적으로 측정하는 데 도움이 됩니다.

단점

  • 불완전한 신호: audit_log_start 지연 시간은 백로그 대기 동작을 직접 측정하는 것이 아니며, 다른 이유로 인해 지연 시간이 급증할 수 있습니다.
  • 유지 관리: audit_log_start는 Linux API의 일부가 아니며, 커널 버전이 변경될 때마다 사용이 어려울 수 있습니다.

이러한 점을 고려하여 적절한 Linux Audit 모니터링 전략을 구성하는 것이 중요합니다.

Linux 감사 도구를 사용한 침입자 탐지 및 시스템 건강 상태 점검

Linux에서 감사(Audit)는 보안 관련 이벤트를 캡처하고 안전하게 저장한 다음, 이를 검색할 수 있게 해주는 중요한 기능입니다. 감사 로그는 시스템 운영 중 문제가 발생했을 때 침입자를 추적하는 데 유용한 정보를 제공합니다. Linux 감사 프레임워크는 사용자 공간과 커널 모두에서 여러 구성 요소로 이루어져 있으며, 각 구성 요소는 특정 역할을 합니다.

Linux 감사 프레임워크의 구성 요소

주요 구성 요소 및 데이터 흐름

  1. 이벤트 생성: 시스템에서 발생하는 다양한 활동이 감사 이벤트를 생성합니다. 예를 들어, 파일을 열거나 시스템 호출을 수행할 때 커널은 이러한 이벤트를 감지합니다.
  2. 커널의 역할: 커널은 시스템 부팅, 런 레벨 전환, 데몬 시작 및 중지, 사용자 로그인 및 로그아웃 등 시스템의 주요 상태 변화를 감사 이벤트로 기록합니다.
  3. Netlink 소켓: 커널은 감사 이벤트를 Netlink 소켓을 통해 사용자 공간으로 보고합니다.
  4. auditd: 사용자 공간에서 auditd 데몬이 Netlink 소켓을 통해 커널로부터 이벤트를 읽어 감사 로그 파일에 저장합니다.
  5. audisp: audisp는 이벤트를 실시간으로 분석할 프로그램(예: 침입 탐지/방지 시스템 IDS/IPS)으로 전달하거나 원격 서버로 전송하는 역할을 합니다. 이를 통해 감사 로그의 안전성을 높일 수 있습니다.

감사 규칙 및 도구

감사 규칙 설정

감사 규칙은 커널이 어떤 이벤트를 기록할지 결정합니다. 이러한 규칙은 시스템 시작 시 statically 설정되거나 런타임 중 dynamically 설정할 수 있습니다. 주요 도구로는 auditctl, aureport, ausearch 등이 있습니다.

  1. auditctl: 감사 규칙을 설정하는 데 사용됩니다. 예를 들어, 특정 파일이나 디렉토리를 감시하거나 특정 시스템 호출을 추적할 수 있습니다.
    • 예: /var/cache/something 디렉토리의 쓰기 작업을 감시
      # auditctl -w /var/cache/something -p w -k "cache offender"
    • -w 옵션은 감시할 파일 시스템 위치를 지정하고, -p 옵션은 관심 있는 접근 권한(읽기, 쓰기, 속성 변경)을 설명합니다. -k 옵션은 나중에 이벤트를 찾기 쉽게 키를 추가합니다.
  2. aureport: 감사 로그의 요약 또는 상세 보고서를 생성합니다. 다양한 옵션을 사용하여 특정 이벤트 그룹에 대한 보고서를 생성할 수 있습니다.
    • 예: 인증 시도 보고서 생성
      # aureport --auth
  3. ausearch: 특정 이벤트를 검색하는 데 사용됩니다. 이벤트 ID, 사용자 ID, 프로세스 ID, 명령어 이름 등을 기준으로 필터링할 수 있습니다.
    • 예: 특정 이벤트 ID로 검색
      # ausearch -a 1665 -i

감사 로그 분석 예시

  1. 감사 로그 파일: 감사 로그는 기본적으로 /var/log/audit.log에 저장됩니다. 이 파일에는 시스템에서 발생하는 다양한 이벤트가 기록됩니다.
  2. 로그 형식: 감사 로그는 여러 키-값 쌍으로 구성된 이벤트 기록으로 이루어져 있습니다. 각 이벤트는 유형(type), 메시지(msg), 사용자 ID(auid), 프로세스 ID(pid) 등 다양한 필드를 포함합니다.
  3. 검색 예시
    • 예: 특정 이벤트 ID로 검색하여 자세한 정보를 출력
      # ausearch -a 1665 -i

고급 감사 설정

  • 정적 규칙: 정적 감사 규칙은 /etc/audit/audit.rules 또는 /etc/audit/audit.rules.d 파일에 저장됩니다. 시스템 시작 시 이 규칙들이 적용됩니다.
  • 동적 규칙: 동적 감사 규칙은 런타임 중 auditctl 명령어로 설정할 수 있으며 시스템 재부팅 시 사라집니다.
  • 감시 설정 예시
     # auditctl -w /var/cache/something -p w -k "cache offender"

시스템 호출 추적

특정 시스템 호출을 추적하여 이벤트를 기록할 수도 있습니다. 예를 들어, 파일 삭제를 추적하기 위해 unlink(2)unlinkat(2) 시스템 호출을 감시할 수 있습니다.

  • 시스템 호출 규칙 추가
     # auditctl -a exit,always -F arch=b64 -S unlink,unlinkat -F path=/var/cache/something -k "cache offender, part two"

시각화 도구

감사 데이터 시각화 도구로는 mkgraphmkbar가 있습니다. 이 도구들은 그래프와 막대 차트를 생성하여 감사 데이터를 시각화합니다.

  • mkgraph 사용 예시
     LC_ALL=C aureport -s -i | awk '/^[0-9]/ { printf "%s %s\n",$6, $4 }' | sort -u | ./mkgraph

Linux 감사 도구는 시스템 보안 상태를 모니터링하고 침입자를 탐지하는 데 중요한 역할을 합니다. 감사 로그를 적절히 설정하고 분석 도구를 활용하면, 시스템의 보안 상태와 운영 상태를 효과적으로 모니터링할 수 있습니다. 이를 통해 시스템의 잠재적인 위협을 조기에 발견하고 대응할 수 있습니다.

Linux Auditing System: 원격 서버로의 중앙 집중 로그 설정

서버가 여러 대 있을 경우, 각 서버의 로그를 개별적으로 관리하는 것은 매우 번거롭고 비효율적일 수 있습니다. 여러 서버에서 생성된 로그를 중앙 집중 로그 스테이션으로 보내면 모든 로그를 한 곳에서 분석할 수 있어 편리합니다. Linux Auditing System을 사용하여 중앙 집중 로그 서버를 설정하는 방법을 단계별로 설명합니다.

 

Linux Auditing System은 시스템에서 발생하는 중요한 활동에 대한 심층적인 정보를 수집할 수 있는 기능입니다. 커널 수준에서 구현되기 때문에 시스템 호출, 파일 접근, 사용자 로그인/로그아웃 등의 정보를 상세하게 기록할 수 있습니다. 일반적인 Unix/Linux 로그 기능과 유사하지만, 신뢰할 수 있는 애플리케이션에서만 로그를 기록한다는 점이 다릅니다.

Linux Auditing System은 시스템에서 발생하는 보안 관련 정보를 추적할 수 있는 도구를 제공합니다. 추가적인 보안을 제공하는 것은 아니지만, 보안 정책 위반을 조사하는 데 유용합니다. 이 시스템은 매우 유연하고 거의 모든 것을 모니터링할 수 있으며, 완전히 무료입니다.

 

세 대의 머신이 있는 네트워크를 가정합니다.

  1. 데이터 소스 서버 두 대 (server-one, server-two)
  2. 중앙 집중 로그 스테이션 한 대 (station)

세 머신 모두 동일한 NAT 네트워크에 있으며, Ubuntu Server가 설치되어 있습니다.

1단계: 구성 요소 설치 및 설정

각 원격 서버(server-one, server-two)에 auditdaudispd-plugins를 설치합니다.

$ sudo apt install -y auditd audispd-plugins

설치 후, auditd가 실행 중인지 확인합니다.

$ systemctl status auditd

이제 원격 서버의 audisp 원격 로그 플러그인을 설정합니다. 다음 명령어를 입력하여 설정 파일을 엽니다.

$ sudo nano /etc/audisp/audisp-remote.conf

파일 상단에 다음 두 줄을 추가합니다. (여기서 10.0.2.6은 중앙 스테이션의 IP 주소로 변경합니다)

remote_server = 10.0.2.6
port = 60

2단계: 중앙 로그 스테이션 설정

중앙 로그 스테이션에 auditd를 설치합니다.

$ sudo apt install -y auditd

방화벽 설정이 되어 있다면 포트 60에 대한 수신 트래픽을 허용해야 합니다. 설정 파일을 열어 tcp_listen_port 줄의 ##를 제거합니다.

$ sudo nano /etc/audit/auditd.conf
...
tcp_listen_port = 60
...

데몬을 재시작합니다.

$ sudo service auditd restart

3단계: 감사 규칙 및 감시자 설정

이제 /etc/passwd 파일에 대한 접근을 모니터링하는 규칙을 설정해 봅시다.

$ sudo nano /etc/audit/rules.d/audit.rules

다음 줄을 추가합니다.

-w /etc/passwd -p wrxa -k identity

이 규칙은 /etc/passwd 파일에 대한 쓰기, 읽기, 실행, 속성 변경 권한을 감시하며, 이 규칙에 "identity" 키를 할당합니다. 설정을 적용하려면 auditd를 재시작합니다.

$ sudo service auditd restart

4단계: 로그 시작

이제 원격 서버(server-one, server-two)에서 원격 로그 플러그인을 활성화합니다.

$ sudo nano /etc/audisp/plugins.d/au-remote.conf

파일에서 active 옵션을 yes로 설정합니다.

...
active = yes
...

설정을 적용하려면 auditd를 재시작합니다.

$ sudo service auditd restart

이제 원격 서버에서 /etc/passwd 파일을 읽거나 쓰거나 속성을 변경하려고 할 때 중앙 로그 스테이션에서 해당 이벤트를 확인할 수 있습니다. 로그 파일을 읽는 것은 일반 파일을 읽는 것과 비슷하지만, 로그 파일은 매우 크고 복잡할 수 있습니다. ausearch 유틸리티를 사용하면 로그에서 특정 이벤트를 쉽게 검색할 수 있습니다.

 

예를 들어, server-one에서 발생한 "identity" 키가 포함된 이벤트를 검색하려면 다음 명령어를 사용합니다.

$ ausearch --node server-one -k identity

Linux Auditing System을 사용하여 중앙 집중 로그 시스템을 설정하면 여러 서버의 로그를 효율적으로 관리하고 분석할 수 있습니다. 이 시스템은 설정이 간단하고 사용하기 쉬우며, 시스템 보안에 대한 새로운 가능성을 열어줍니다.

 

원문 : https://engineering.teacherspayteachers.com/

728x90