AIDE

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page AIDE and the translation is 74% complete.
Outdated translations are marked like this.


AIDE(Advanced Intrusion Detection Environment : 고급 침입 탐지 환경)은 호스트 기반 침입 탐지 시스템입니다. AIDE는 파일 및 기타 자원을 검사하며, 이 파일 정보를 데이터베이스에 저장합니다. 저장한 정보에는 파일 해시 출력, 파일 크기, 소유자, 수정 일시, 생성 일시 등의 주요 파일 속성을 담고 있습니다. 데이터베이스를 처음 만들고 나면, AIDE에서 시스템을 다시 검사하고 새 검사 결과와 이전 검사 값과 비교합니다. 값이 다르면 파일의 내용이 바뀌었음을 의미하며, 바뀐 내용을 보고합니다. AIDE를 사용하는 개념은 시스템 스냅샷을 만들고 각 스냅샷의 내용을 비교하여 감시 범위를 벗어난 파일을 찾는 것에 있습니다.

USE 플래그

app-forensics/aide를 설치하는 일은 다음 항목과 같이 USE 플래그를 설정하면 참 간편합니다.

USE flags for app-forensics/aide AIDE (Advanced Intrusion Detection Environment) is a file integrity checker

acl Add support for Access Control Lists
audit Enable support for Linux audit subsystem using sys-process/audit
curl Use curl for http,https and ftp backends
e2fs Enable support for checking file attributes on ext2/ext3/ext4 filesystems
mhash Add support for the mhash library
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
xattr Add support for extended attributes (filesystem-stored metadata)

각각의 꾸러미 상태를 바꾸는 USE 플래그는 /etc/portage/package.use 파일 또는 /etc/portage/package.use 디렉터리의 텍스트 파일에 설정합니다. 예를 들어 /etc/portage/package.use "파일"을 사용한다면:

파일 /etc/portage/package.useAIDE용 zlib 기능 지원 활성화
app-forensics/aide zlib

Emerge

USE 플래그를 설정했으면, 프로그램을 설치하십시오:

root #emerge --ask app-forensics/aide

설정

간단히 살펴보기

app-forensics/aide 프로그램 설정 파일은 처음에 보신 바와 같이 주눅들게 하지는 않습니다. 기본 파일은 /etc/aide/aide.conf에 있지만 원할 경우 설정 파일 여러 개로 쉽게 만들 수 있습니다. 몇가지 변수에 따라, 설정 파일에는 파일의 어떤 특징을 검사할 지(해시만 검사할지, inode 정보 등까지 검사할 지)와 어떤 파일을 검사할 지 조금 간단한 표기 설정이 들어있습니다.

일단 database 변수를 들여다보도록 하겠습니다:

파일 aide.confAIDE 데이터베이스 설정 변수
database=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new

상단 예제의 첫번째 줄(database)에서는 알려진 값을 보관하는 데이터베이스의 위치를 설정합니다. 두번째 줄(database_out) 다른 데이터베이스를 이미 만들었을 경우 새 데이터베이스를 저장할 위치를 설정합니다. 보통 동일한 데이터베이스를 가리키도록 두 변수의 값을 설정(두 변수에 동일한 경로를 설정)하는 것이 좋습니다. 어떤 데이터베이스가 다른 데이터베이스에 덮어쓰기를 한다면, 가장 좋은 방법이 있다면, 한 위치에서 다른 위치로 이미 만든 데이터베이스에 "직접 복사"하는 방법이 있습니다. 예를 들어 앞의 데이터베이스를 그 다음 데이터베이스로 덮어쓰려면, 다음 명령을 사용할 수 있습니다:

root #cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

일단, 데이터베이스 변수 값은 그대로 두겠습니다. 자세한 내용은 이 글에서 나중에 다루겠습니다.

다음, 어떤 정보를 데이터베이스에 기록할 지 간단한 표기법으로 나타낸 변수를 고려해보겠습니다.

파일 aide.conf간단한 표기 방식의 AIDE 설정
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
Logs = p+i+n+u+g+S
...
참고
md5sha1는 (각각) MD5와 SHA-1 체크섬 방식을 취함을 의미하는 것임이 틀림없습니다.

각 문자의 설명은 aide.conf 기본 파일에 들어있지만, 다음 표를 통해 편의상 보통 사용하는 옵션을 보여드리겠습니다:

간단 표기 설명
p 권한
i inode 번호
n (하드)링크 갯수
u 사용자 정보
g 그룹 정보
s 크기
S 크기 (크기가 갑자기 작아지는 경우만 보고 - 늘어나는건 허용함)
b 블록 갯수
m 수정 일시

다음은 어떤 디렉터리를 검사할 지, 어떤 항목을 검사할 지 간략하게 보여줍니다. 여기 예제 세 줄을 따라 살펴보면, AIDE는 /bin/sbin 디렉터리를 Binlib로 줄여 표기한 변수에 지정한 방식대로 검사하라고 지시를 받습니다. /var/log 파일에서는 상단에 설정한 Logs 변수의 내용대로 검사 내용을 보여줍니다.

파일 aide.conf검사 대상 옵션
/bin Binlib
/sbin Binlib
/var/log Logs
...

AIDE에는 정규표현식을 지원하며 일치하는 요소를 "제거" 할 수 있습니다. 예를 들어, /var/log를 검사하지만 /var/log/portage를 검사하지 않으려면, 다음과 같이 제외 경로 앞에!(느낌표)를 붙여 제외 항목을 설정하십시오:

파일 aide.conf다른 검사 대상
/var/log Logs
!/var/log/portage

상세 옵션

설정 파일은 파일 및 디렉터리에 대한 정규 표현식, 매크로, 규칙이 기반입니다. tripwire solution 을 활용해 본 사용자는 AIDE 설정 파일을 다루는데 난해함이 없겠습니다. 다음 매크로를 활용할 수 있습니다:

매크로 설명 문법
ifdef If defined @@ifdef "name"
ifndef If not defined @@ifndef "name"
define Define a variable @@define "name" "value"
undef Undefine a variable @@undef "name"
ifhost if "hostname" @@ifhost "hostname"
ifnhost if not "hostname" @@ifnhost "hostname"
endif define과 undef를 제외하고 매크로를 작성한 다음 줄에 사용해야 함 @@endif

여러 젠투 머신에서 동일한 설정을 활용할 경우 이 매크로를 다루기 편해집니다. 모든 머신에서 동일한 서비스를 실행하거나 동일한 사용자를 보유하고 있는건 아닙니다.

다음, 파일과 디렉터리를 검사할 권한, 파일 속성, 검사합, 암호화 해시를 식별하는 플래그를 알아보겠습니다.

플래그 설명
p 권한
i 아이노드
n 링크 수
u 사용자
g 그룹
s 크기
b 블록 수
m mtime
a atime
c ctime
S 크기 증가 확인
md5 md5 checksum
sha1 sha1 checksum
rmd160 rmd160 checksum
tiger tiger checksum
R p+i+n+u+g+s+m+c+md5
L p+i+n+u+g
E 빈 그룹
> Growing logfile p+u+g+i+n+S

AIDE에서 mhash를 지원하도록 컴파일했다면, 마찬가지로 다음 플래그도 활용할 수 있습니다:

플래그 설명
haval haval checksum
gost gost checksum
crc32 crc32 checksum

초기화 및 꾸준한 검사

기본 AIDE 설정을 하려면, 데이터베이스를 초기화 해야합니다. --init 옵션을 사용하여 진행합니다. AIDE가 이전 섹션에서 설정한 환경 설정 내용을 활용하도록 한다면 올바른 설정 파일을 가리키도록 --config 옵션을 확실히 전달하십시오:

root #aide --init --config=/etc/aide/aide.conf
AIDE, version 0.14.2
  
### AIDE database at /var/lib/aide/aide.db.new initialized.

초기화를 하고 나면, 이전의 데이터베이스 파일 사본을 넘길 수 있습니다:

root #cd /var/lib/aide; cp aide.db.new aide.db

새 데이터베이스가 있으면, --check 옵션을 사용하여 (지금 아니면 나중에) 항목을 다시 검사할 수 있습니다. 이 명령을 통해 데이터베이스를 처음 만든 후 파일 시스템에 바뀐 내용이 있다면 바뀐 내용이 들어있는 다른 데이터베이스를 만듭니다. --config 옵션 값이 처음 데이터베이스를 만든 위치와 동일한 지 확인하십시오:

root #aide --check --config=/etc/aide/aide.conf
AIDE, version 0.14.2
  
### All files match AIDE database. Looks okay!

파일 수정이 발생하면, 다음 알림을 내보냅니다:

This is not a real error and is simply aide stating it cannot find a database so it must create one, this may take several minutes.

root #aide --check --config=/etc/aide/aide.conf
AIDE found differences between database and filesystem!!
Start timestamp: 2013-04-11 15:31:02
  
Summary:
  Total number of files:        318
  Added files:                  0
  Removed files:                0
  Changed files:                2
  
  
---------------------------------------------------
Changed files:
---------------------------------------------------
  
changed: /etc/pam.d
changed: /etc/pam.d/run_init
  
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
  
  
Directory: /etc/pam.d
  Mtime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:01
  Ctime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:01
  
File: /etc/pam.d/run_init
  Size     : 205                              , 208
  Mtime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:00
  Ctime    : 2013-04-09 22:11:18              , 2013-04-11 15:31:01
  Inode    : 394203                           , 394053
  MD5      : Mm0KPzpPt63eqGClTJ/KaQ==         , eLUrP2BsIq25f3AZX+dlBA==
  SHA1     : NrQtsUeOsXS4RHUq+ejYBne5V6E=     , 5A6ef6VJCcMiqEjKQ7e9xkBNZB8=

모범 사례

검사 대상을 확실히 설정 하십시오

기본 AIDE 설정은 유용하지만, 사용자의 요구에 맞추려면 세밀하게 조절해야 합니다. 어떤 파일을 왜 검사해야 하는지 아는 것이 중요합니다.

예를 들어, 인증 관련 파일만을 모두 검사하지만, 다른 파일에 대해서는 검사하지 않는다면, 다음처럼 설정을 사용할 수 있습니다:

파일 aide.conf인증 관련 검사 대상
# SELinux policy and settings
/etc/selinux ConfFiles
# Authentication databases
/etc/passwd ConfFiles
/etc/shadow ConfFiles
/etc/nsswitch.conf ConfFiles
# Authentication configuration
/etc/pam.d ConfFiles
/etc/securetty ConfFiles
/etc/security ConfFiles
# PAM libraries
/lib(64)?/security Binlib

데이터베이스를 오프라인 상태 및 읽기 전용으로 유지하십시오

두번째로 중요한 양상은, 필요하지 않을 때는 데이터베이스를 오프라인에 저장해야하며, 필요할 때는 읽기 전용 방식으로 사용하려 하는 점입니다. 이러한 방식을 통해 타협 숙주를 지니고 데이터베이스를 멋대로 수정하는 악의적인 사용자로부터 보호할 수 있습니다. 예를 들어 읽기 전용 NFS 마운트(서버) 또는 CD/DVD 또는 읽기 전용 USB 메모리같은 읽기 전용 매체(머신에 직접 접근할 수 있을 경우)를 통해 결과 데이터베이스를 제공할 수 있습니다.

각각의 읽기전용 위치에 데이터베이스를 저장한 후, aide.conf 파일을 업데이트 하여 database가 새 위치를 가리키도록 하십시오.

오프라인 상태에서 검사하십시오

가능하다면, 시스템에 대해 오프라인 검사 방법을 사용해보십시오. 가상 플랫폼의 경우 시스템의 스냅샷을 취할 수 있고 이 스냅샷을 마운트(읽기 전용) 할 수 있으며 마운트한 파일 시스템에 대해 AIDE 검사를 수행할 수 있습니다.

root #losetup /dev/loop0 /srv/virt/gentoo.img
root #vgscan
root #vgchange -ay
root #mount -o ro /dev/volgrpX/volumeY /mnt/image
root #chroot /mnt/image
root #aide --check --config=/path/to/aide.conf
root #exit
root #umount /mnt/image
root #vgchange -an /dev/volgrpX
root #losetup -d /dev/loop0

위의 접근 방식에서는 chroot를 사용했습니다. 실제 시스템에서 초기 파일 시스템을 검사할 경우에만 필요하며, 관리자는 오프라인 방식 검사를 원합니다. 초기 오프라인 검사가 끝나면, aide.conf파일은 마운트 지점을 가리키며, 데이터베이스는 이 경로를 즉시 사용합니다. 따라서 chroot를 할 필요가 없습니다.

추가 참조

외부 자료