AIDE를 이용한 시스템 무결성 구축

필자 : 이강석, 노병규 (ksalice, nono@kisa.or.kr)
한국정보보호센터

 

     

목차

    1. 데이터 무결성과 보안
    2. AIDE 소개
    3. AIDE 설치
    4. AIDE 사용법
    5. AIDE 룰 설정
    6. 결론
    7. 참고 사이트

 

1. 데이터 무결성(Integrity)과 보안

    네트워크 환경에 있는 시스템인 경우 외부의 크래커나 내부의 악의적인 사용자의 공격에 노출되어 있다. 이들은 시스템에 침투하여 중요한 파일을 변경 또는, 삭제하거나 백도어(Backdoor)와 같은 프로그램을 설치하여 시스템에 해를 끼칠 수 있다. 예를 들면, 리눅스 서버의 호스트를 보호하기 위해 많이 사용되고 있는 TCPWrapper는 /etc/hosts.allow 및 /etc/hosts.deny 에 접근권한을 설정하고 있는데, 이 파일에 누군가 조작을 가하면 모든 사용자들의 접속을 허용하도록 할 수 있다. 관리자는 파일을 열어보지 않고서는 파일이 변조되었음을 알 수가 없다. 이와 같은 문제로부터 시스템을 보호하기 위한 방법은 파일에 대한 불법 변조여부를 검사해 주는 것이다.

    데이터 무결성은 시스템 내의 중요한 데이터가 허가되지 않은 사용자에 의해 삭제, 수정, 추가 등의 행위에 대해 감시 또는 방지하는 기능이다. 이러한 기능을 제공하기 위해서는 무결성 대상 데이터를 정의하고, 데이터의 변경을 감지하기 위해 원본 데이터로부터 유일하게 구분되는 값인 무결성 데이터를 생성해야 한다. 무결성 대상 데이터는 시스템 내의 중요한 디렉토리나 파일이 해당된다. 무결성 데이터는 단 방향 함수라고 불리는 해쉬(Hash) 함수로 생성되며, 대표적인 해쉬 함수는 MD5, SHA1 등이 있다. 해쉬 함수는 입력 값에는 무관하게 일정한 길이의 출력 값을 생성하며, MD5인 경우 128비트, SHA1은 160비트의 출력 값을 생성하고, 생성된 값으로부터 본래의 입력 값을 알아내기는 어렵다.


    (그림 ) 데이터 무결성 과정

    데이터 무결성 과정은 (그림 1)과 같다. 무결성 대상 데이터는 해쉬함수를 통해 무결성 데이터를 생성하여 보관한다. 데이터가 변조되었는지를 검사하기 위해서는 동일한 과정으로 무결성 데이터를 생성하여 저장된 무결성 데이터와 비교하게 된다. 무결성 대상 데이터가 변조되었을 경우에는 변조여부를 바로 알게 된다. 데이터 무결성에 필요한 프로그램으로는 Tripwire나 AIDE 등이 있으며, 여기에서는 AIDE에 대해 소개한다.

 

2. AIDE 소개

    AIDE(Advanced Intrusion Detection Environment)는 데이터 무결성을 검사해주는 도구로, GPL(General Public License)로 배포된 제한이 없는 유틸리티이다. 이것은 Solaris 계열, Linux 계열, FreeBSD 등의 UNIX 환경의 플랫폼에서 동작한다.
    AIDE는 데이터의 변경을 감지하기 위해 무결성 알고리즘들을 이용하여 파일 또는 디렉토리 속성들에 대한 무결성을 유지해 준다. AIDE가 기본적으로 지원하는 무결성 알고리즘에는 MD5, SHA1, RMD160, TIGER, HAVAL 등이 있고, 더 많은 알고리즘들이 추가될 수 있다.

    AIDE는 환경설정 파일인 aide.conf에 정의된 정규 표현 방식에 따라 무결성 데이터베이스를 생성한다. 무결성 데이터베이스는 위에서 지원하는 여러 가지 무결성 알고리즘으로 생성되며, 파일의 무결성을 검사하는데 사용된다.

 

3. AIDE 설치

    여기서는 AIDE에 대한 설치환경과 설치방법에 대해 알아본다.

    3.1 필요한 요소

    AIDE를 설치하기 전에 다음과 같은 요소들이 필요하며, 설치 전에 필요한 다음 파일을 /tmp 디렉토리에 다운로드한다. 

    - AIDE source code (http://www.cs.tut.fi/~rammer/aide.html)
    - CRC32, HAVAL 그리고 GOST를 사용하고자 할 경우 MHASH library 설치
       (http://schumann.cx/mhash/)
    - Postgres sql을 연동할 경우에는 Postgres 설치 또는 확인

    3.2 설치 절차

    AIDE는 root 또는 특정 사용자가 동작해도 가능하지만, 좀더 보안을 강화하기 위해서는 root가 관리하는 것이 좋다.

    ① 무결성 알고리즘을 추가하여 CRC32, HAVAL, 그리고 GOST를 사용하고자 할 경우,
        mhash library를 설치하도록 한다. mhash 설치 절차는 다음과 같다.

    [root@digital /tmp]# ls
    aide-0.7.tar.gz  mhash-0.8.9.tar.gz

    [root@digital /tmp]# tar -vzxf mhash-0.8.9.tar.gz
    [root@digital /tmp]# cd mhash-0.8.9
    [root@digital mhash-0.8.9]# ./configure
    [root@digital mhash-0.8.9]# make;make install

    ② AIDE 설치도 마찬가지로 ./configure, make, make install을
        수행하여 간단히 설치하게 된다.

    [root@digital /tmp]# tar vzxf aide-0.7.tar.gz
    [root@digital /tmp]# cd aide-0.7

    MHASH와 함께 기본적으로 설치할 경우 컴파일 옵션은 다음과 같다.

    [root@digital aide-0.7]# ./configure --with-mhash

    설치 디렉토리를 사용자가 정의하고 설치할 경우 컴파일 옵션은 다음과 같다.

    [root@digital aide-0.7]# ./configure --with-mhash --prefix=/usr/local/aide

    AIDE의 설치 디렉토리는 /usr/local 에 설치되며, 실행파일은 /usr/local/bin에 위치하게 된다. 현재 배포된 버전(AIDE-0.7)에서는 위와 같이 기본(default)으로 설치하거나 사용자 정의 디렉토리 옵션을 사용하여 설치했을 경우, 환경설정 파일인 aide.conf의 위치를 찾지 못하기 때문에 configure 파일을 직접 수정해야 한다. 따라서 다음과 같이 ./configure 파일을 수정하도록 한다.

    [root@digital aide-0.7]# vi configure
    #! /bin/sh
    ......
    중간생략
    .....
    #define CONFIG_FILE “$sysconfdir/aide.conf // 2341  라인

    을 다음과 같이 수정한다.

    #define CONFIG_FILE “/usr/local/aide/etc/aide.conf”
    .....

    [root@digital aide-0.7]# ./configure --with-mhash --prefix=/usr/local/aide
    [root@digital aide-0.7]# make; make install

    설치 디렉토리는 /usr/local/aide이고, AIDE 실행파일은 /usr/local/aide/bin 에 있다. 사용자는 자신의 환경 설정파일에 /usr/local/aide/bin 디렉토리 경로를 설정한다. bash를 사용할 경우 다음과 같이 PATH를 설정한다.

    [root@digital aide-0.7]vi ~/.bash_profile
     .....
     PATH=/usr/bin;/etc;/usr/sbin;/usr/local/aide /bin;......
     .....

    [root@digital aide-0.7]source ~/.bash_profile

    [root@digital aide-0.7]# cd /usr/local/aide
    [root@digital aide]# ls
    bin/  man/

 

4 AIDE 사용법

    여기서는 환경설정파일인 aide.conf 파일에 대해 설명하고, 처음 AIDE를 실행할 때 필요한 작업들에 대해 알아본다.

    4.1  환경설정파일 aide.conf

    AIDE를 실행하기 위해서는 우선 aide.conf를 설정해야 한다. aide.conf를 설정하기 앞서 설치 디렉토리에서 etc 와 doc 디렉토리를 생성하고, 원본 AIDE 디렉토리의 doc 디렉토리에서 환경설정 파일을 생성한 etc 디렉토리 아래에 복사한다.

    [root@digital aide]# mkdir /usr/local/aide/etc
    [root@digital aide]# mkdir /usr/local/aide/doc
    [root@digital aide]# cp /tmp/aide-0.7/doc/aide.conf /usr/local/aide/etc

    기본으로 제공되는 aide.conf 파일을 열어 다음과 같이 수정한다. 세부적인 설명은 생략한다.

    [root@digital etc]# vi /usr/local/aide/etc/aide.conf
    # AIDE 0.7
     ..  중략 ..
    # 무결성 대상은 /etc 디렉토리가 된다.
       @@define TOPDIR /etc  
     ...
    # AIDE를 실행시킨 후에 무결성을 유지하기 위한 데이터베이스 파일이다.
       database=file:/usr/local/aide/doc/aide.db
     ...
    # Postgres sql을 사용하여 데이터를 저장할 경우에 사용한다.
    # database_out=sql:host:port:dbname:user :password:table
     ...
    # AIDE 첫 실행 후에 또는 갱신시에 생성되는 무결성 데이터베이스이다.
       database_out=file:/usr/local/aide/doc /aide.db.new
     ...
    # 생성된 데이터베이스를 gzip을 사용하여 압축을 할 경우에 사용되며, 압축을 하고자
    # 할 경우에는 #을 없애고 gip_dbout=yes 하면 된다.
    # gzip_dbout=no
     ...
    # 무결성 체크 후 그 결과에 대해 보고서를 작성하게 된다.
    # aide 의 report 옵션인 -r을 사용하거나 다음을 사용하여 report를 작성한다.
       report_url=file:/usr/local/aide/doc/report.txt
    # 무결성 체크 후 결과를 화면에 보여준다.
       report_

    url=stdout
     ...

    4.2 AIDE 사용법

    AIDE 사용법은 다음과 같다.

    [root@digital aide]# aide -h
            AIDE 사용법을 알려준다.

    [root@digital aide]# aide -i
            데이터베이스를 초기화한다. 즉, aide.db.new 파일을 생성한다.

    [root@digital aide]# aide -C
            무결성을 체크한다. aide.db와 단순히 변경 여부를 체크한다.

    [root@digital aide]# aide -u
            aide.db와 무결성을 체크하고, 현재 무결성 값을 aide.db.new로 생성한다.

    4.3 AIDE 실행

    AIDE의 실행파일이 있는 위치(/usr/local/aide/bin)를 PATH로 연결했다면, 다음과 같이 /usr/local/aide/doc로 이동한 후에 AIDE를 실행할 준비를 한다.

    [root@digital doc]# pwd
    /usr/local/aide/doc

    AIDE를 처음으로 실행하면서 데이터베이스를 초기화한다.

    [root@digital doc]# aide -i
    [root@digital doc]# ls
    aide.db.new report.txt

    -i 옵션은 aide.db.new를 생성하고, 그 결과를 report.txt에 저장하게 된다. 이 파일은 무결성 체크를 하기 위해 aide.db로 이름을 바꿔준다.

    [root@digital doc]# mv aide.db.new aide.db

    무결성을 체크한다. 파일의 변화가 발생했을 경우에는 화면에 결과를 보여주고, report.txt 파일에 그 결과를 기록한다.

    [root@digital doc]# aide -C

    무결성 데이터베이스를 갱신할 경우 -u 옵션을 사용하여 새로운 데이터베이스 파일을 생성하고, 이전 데이터베이스를 갱신한다. -u 옵션은 무결성을 체크하고 갱신하는 옵션이다.

    [root@digital doc]# aide -u
    [root@digital doc]# mv aide.db.new aide.db

 

5. AIDE 룰 설정

    AIDE는 환경설정 파일인 aide.conf에 무결성 대상과 방법을 설정하고 있다. 여기에서는 환경설정에 필요한 값들과 설정방법 그리고 룰 정책에 대해 알아본다.

    5.1 룰 표현 값

    다음 [표 1]은 룰을 설정하기 위한 표현 값들을 보여주고 있으며, 이 룰들을 이용하여 사용자는 원하는 룰을 만들 수 있다.
     

    표현

    설  명

    표현

    설  명

    p

     permissions

     md5

     md5 checksum

    i

     Inode

     rm160

     rmd160 checksum

    n

     link 수

     tiger

     tiger checksum

    u

     user

     R

     p+i+n+u+g+s+m+c+md5

    g

     group

     L

     p+i+n+u+g

    s

     size

     E

     Empty group

    b

     block count

     >

     Growing lofile p+u+g+i+n+S

    m

     mtime

     haval

     haval checksum

    a

     atime

     gost

     gost checksum

    c

     ctime

     crc32

     crc32 checksum

    s

     growing size

     

     


    [표 1] 기본적인 룰과 표현 값

    5.2 룰 예제

    다음은 무결성 대상데이터 설정과 해쉬알고리즘 설정에 대해 예제로 설명하고자 한다. aide.conf 파일을 다음과 같이 수정한다.

    [root@digital etc]# vi /usr/local/aide/etc/aide.conf
    database=file:/usr/local/aide/doc/aide.db # 읽어들일 데이터베이스 파일
    database_out=file:/usr/local/aide/doc/aide.db.new # 새로 생성되는 데이터베이스 파일
    verbose=20 # 파일무결성에 대한 정보의 양
    report_url=file:/usr/local/aide/doc/report.txt # 레포트 파일
    report_url=stdout # 화면에서 결과를 보이지 않게 하려면 이 부분을 마킹한다.

    MyRule=p+i+n+u+g+s+b+m+c+md5+sha1 # 룰 설정 부분
    /etc p+i+u+g    # /etc에 대해서는 permission, inode, user, 그리고 group만 체크한다.
    /bin MyRule     # /bin에 대해서는 일반적인 룰을 적용한다.
    /sbin MyRule    # /sbin에 대해서도 동일한 룰을 적용한다.
    /var MyRule     # /var에 대해서도 동일한 룰을 적용한다.
    !/var/log/.*    # /var/log 처럼 흔히 변하는 디렉토리에 대해서는 적용하지 않는다.
    !/var/spool/.*  # /var/spool 도 적용범위에서 제외된다.

    5.3 룰 정책

    무결성 대상데이터는 관리자의 정책을 가지고 설정할 필요가 있다. 보안을 강화하기 위해 무조건 많은 디렉토리와 파일에 대해 무결성을 유지하려 한다면, 무결성을 체크하는데 많은 시간과 작업을 필요로 하게 된다. 따라서, 무결성 대상데이터에 대한 선별이 이루어져야 하고, 얼마의 주기로 무결성을 체크하도록 할 것인가에 대한 정책을 가지고 있어야 한다. 무결성 대상데이터는 시스템에 중요한 파일 또는 디렉토리를 정하고, 시스템이 HTTP나 FTP 등과 같은 서버로서 동작을 하고 있다면 이들에 대한 데이터나 환경설정파일들에 대해서도 고려해야 할 것이다.

 

6. 결론

    AIDE는 데이터 무결성을 체크하는 도구로 Tripwire가 상용인데 반해, 그 사용의 제한이 없고 사용이 간편하다는 장점을 가지고 있지만, Postgres와의 연동문제와 컴파일시에 나타나는 문제가 남아 있다. 또한 무결성 체크를 원할 때마다 AIDE를 실행시켜야 하고, 갱신시에는 DB 파일 또한 갱신해야 한다는 불편함을 지니고 있다. AIDE는 TCP Wrapper와 같은 보안프로그램과 CRON 등의 백업도구를 함께 사용하여 단점을 보완하고 효율적으로 사용할 수 있을 것이며, 차후에는 데이터베이스 연동, 압축, 암호화 부분의 추가를 계획하고 있다.

 

7. 참고 사이트

    [1] Aide,
        http://www.cs.tut.fi/~rammer/aide.html
    [2] New article in Linux focus area
        : Securing Linux with AIDE,
           http://www.securityfocus.com/




▲ top

home으로...