강좌
클라우드/리눅스에 관한 강좌입니다.
보안 분류

파일 무결성 모니터링 프로그램 Fcheck

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

파일 무결성 모니터링 프로그램 Fcheck

리눅스를 설치하면 기본적으로 약 4-5만여 개가 넘는 파일들이 설치된다.

 

 

서버 관리를 할 때에는 이 많은 파일들에 대해 일일이 각 파일들이 실제로 정상적인 역할을 하는 파일들인지, 즉 이 모든 파일들이 무결(깨끗)한지 여부를 체크할 수 없는데, 이를 틈타 악의적인 목적을 가지고 시스템에 침입한 공격자는 중요한 시스템 파일을 변조하거나 관리자의 허락 없이 임의의 파일을 설치하는 경우가 있다.

 

이러한 것을 백도어(backdoor)라 하는데, 이를 상시적으로 체크하고 감시하기 위해 파일 무결성 체크 프로그램을 설치하여 감시하는 것이 중요하다.

 

일반적으로 이러한 파일 무결성을 감시하는 프로그램으로는 Tripwire가 많이 알려져 있지만, 많은 기능을 제공하는 만큼 설정이 너무 복잡하여 여기에서는 간단한 설정만으로도 쉽고 유용하게 관리할 수 있는 Fcheck라는 프로그램을 권장한다.

 

Fcheck는 간단한 설정으로 특정 디렉토리나 파일 또는 전체 파일 시스템에 대해 파일의 추가, 변경, 삭제여부를 빠르게 체크하여 그 결과를 알려주며 필자 또한 필자가 관리하고 있는 리눅스 시스템에는 모두 설치하여 운영하고 있다.

 

 

9.4.1 다운로드 및 설치

 

먼저 Fcheck 홈페이지인 http://www.geocities.com/fcheck2000/에 접속하여 최신 버전의 Fcheck를 다운로드 한다.

 

 

66c5a2160704502aa92738a9caad5ae6_1658887606_3767.png
 

[그림] fcheck 홈페이지

 

 

[root@www local]# tar zxvfp FCheck_2.xx.xx.tar.gz

fcheck/

fcheck/license

fcheck/fcheck

fcheck/fcheck.cfg

fcheck/README

fcheck/install

.

 

위와 같이 /usr/local/ 디렉토리에서 압축을 풀면 fcheck라는 디렉토리가 생기면서 관련 파일들이 설치된다.

 

 

생성된 fcheck 디렉토리로 이동하여 fcheck라는 실행파일과 fcheck.cfg 라는 설정파일 이렇게 두개 파일만 수정해 주면 된다.

 

 

 

 

9.4.2 설정 파일 수정 및 실행

 

fcheck 파일 설정하기

 

fcheck 파일을 열면

$config="/usr/local/admtools/conf/fcheck.cfg";

라는 부분이 있는데, 이 변수에서는 fcheck의 설정파일인 fcheck.cfg 파일의 위치를 지정해 주는 것이므로 각자 설치한 현재 디렉토리를 지정해 주면 된다.

 

 

만약 /usr/local/fcheck 디렉토리에 설치하였다면

$config="/usr/local/fcheck/fcheck.cfg"; 와 같이 수정하면 된다.

 

 

fcheck 실행 파일에 대한 설정은 이것으로 끝이다.

 

 

 

fcheck.cfg 파일 설정하기

 

이제 기본 설정파일인 fcheck.cfg를 설정해 보자. 다음은 fcheck.cfg 파일의 설정항목들과 이들 항목에 대한 설명이다.

 

 

 

Directory

 

이 부분은 파일의 무결성을 체크하고자 하는 디렉토리를 정의한다.

 

주로 시스템 관련 파일이 존재하면서 파일의 속성이 자주 변경되지 않는 디렉토리를 지정하면 된다.

 

 

아래와 같은 형식으로 원하는 만큼 계속 추가할 수 있다.

 

 

 

Directory=/etc/

Directory=/bin/

Directory=/usr/bin/

Directory=/sbin/

Directory=/usr/sbin/

 

Exclusion

 

이 부분은 위의 ‘Directory’ 부분에서 지정한 무결성 여부를 체크할 디렉토리 내에서 자주 변경되는 하부 디렉토리나 파일이 있는 경우 체크대상에서 제외할 파일이나 디렉토리 등을 지정하면 된다.

 

 

물론 제외할 디렉토리나 파일이 없으면 설정하지 않으면 되는데, 예를 들어 사용자들의 암호가 자주 변경된다면 아래와 같이 /etc/passwd/etc/shadow 파일을 추가하면 된다.

 

 

 

 

Exclusion = /etc/passwd

Exclusion = /etc/shadow

 

 

DataBase

 

fcheck는 현 상태의 파일 시스템에 대한 각종 정보를 파일 DB 형태로 기억하고 있다가 일정시간마다 DB에 기록된 정보와 현재의 파일 시스템을 비교하여 파일의 추가나 변경 또는 삭제가 있을 경우 이를 알려주게 되는데, DataBase는 이때 기억되는 각종 파일 시스템에 대한 정보를 기억하고 있을 DB의 경로 및 파일명을 지정하여 주는 것이다.

 

 

DataBase = /usr/local/fcheck/data/data.dbf

 

이를 위해 /usr/local/fcheck 디렉토리 밑에 mkdir datadata 디렉토리를 생성한다.

 

 

이와 같이 설정한 후 DB생성 명령어(./fcheck ac)를 입력하면 data라는 해당 디렉토리에 data.dbf라는 파일이 생성되며 이 파일에는 현재의 파일 시스템에 대한 속성정보가 저장된다.

 

 

 

 

TimeZone

 

TimeZone은 파일이 변조되었을 때 변조된 시각 등에 대한 정보를 위해 필요하다.

 

한국의 TIMEZONEGMT+9인데, GMT+9를 입력하면 시간의 차이가 생기며 오히려 GMT-9로 설정해 주어야 정상적으로 작동한다.

 

이는 프로그램의 버그인 듯하다.

 

따라서 아래와 같이 설정해 준다.

 

 

 

TimeZone =GMT-9

File

 

이 부분은 설정할 필요가 없는 부분이므로 아래와 같이 주석처리하면 된다.

 

 

 

 

#File = /usr/local/admtools/logs/sol.dbf

 

이로써 fcheck.cfg 파일의 모든 설정이 끝났다. 이외 다른 설정도 몇 가지 있지만 그대로 두어도 무방하다.

 

현재의 상태에서

 

[root@www fcheck]# ./fcheck ac

 

위와 같이 실행하면 앞에서 설정한 Directory 변수에서 지정한 현재의 파일 시스템을 빠르게 체크하고 파일 시스템에 대한 정보를 아래와 같이 생성한다.

 

 

 

[root@www fcheck]# ls -la data/

-rw------- 1 root root 156519 Apr 10 11:33 data.dbf

 

이제 모든 설정이 끝났으므로 정상적으로 무결성 체크가 되는지 확인해 보자.

[root@www fcheck]# touch /usr/bin/test를 실행하여 파일을 생성한 후 무결성을 스캔하기 위해 다음과 같이 ./fcheck a를 실행해 보았다.

ADDITION: [www.server.com] /usr/bin/test

Inode Permissons Size Created On

273211 -rw-r--r-- 0 Apr 10 12:21 2007

 

위와 같이 /usr/bin/test가 생성되었음을 알려준다.

 

각자 파일의 생성이나 변경, 삭제를 한 후 테스트를 해 보기 바란다.

 

 

 

 

 

9.4.3 무결성 체크를 자동화하는 방법

 

관리하는 시스템이 1-2대가 아니라 여러 대 있다면 일일이 각 시스템에 로긴 후 모두 체크하기란 여간 귀찮은 일이 아닐 수 없다.

 

따라서 이를 자동으로 체크하여 만약 파일 시스템의 변동이 있을 경우 관리자에게 변동 내용을 메일로 통보해 준다면 매우 편리할 것이다.

 

아쉽게도 Fcheck는 기본적으로 이러한 기능은 제공되지 않는데, 이를 위해 약간의 추가설정을 하면 된다.

 

 

이를 위해 /etc/cron.daily/fcheck.cgi라는 파일을 생성하여 아래와 같이 추가한 후 실행할 수 있도록 권한을 700으로 설정해 주기만 하면 된다.

 

 

 

 

#!/usr/bin/perl

 

$TASK = `/usr/local/fcheck/fcheck -a|grep Inode`; //자신의 경로에 맞게 설정한다.

 

 

$HOSTNAME = `/bin/hostname`;

$TO_MAIL = 'antihong@server.com'; // 파일변조시 통보를 받을 e-mail 주소

$SUBJECT = "$HOSTNAME File 변조"; // 메일로 통보받을 제목을 지정한다.

 

 

$MAIL_PROGRAM = "/usr/sbin/sendmail";

if ($TASK){

$TASK_CONFIRM = `/usr/local/fcheck/fcheck -a`; // 자신의 경로에 맞게 설정한다.

 

 

&task_confirm;

}

sub task_confirm{

open(MAIL, "|$MAIL_PROGRAM -t");

print MAIL "To: $TO_MAIL \n";

print MAIL "Subject: $SUBJECT \n\n";

print MAIL "Host: $HOSTNAME \n";

print MAIL "$TASK_CONFIRM \n";

close(MAIL);

}

위와 같이 설정한 후에는 매일 자동으로 파일 시스템의 무결성을 체크하여 변경이 있을 경우에는 변경된 내용을 관리자에게 메일로 통보해준다.

 

만약 통보된 변화가 정상적인 것이라면 관리자는 “fcheck ac” 명령을 이용하여 데이터베이스를 새로운 정보로 업데이트 하면 된다.

 

 

 

 

그리고 쉬우면서도 간단한 기능을 제공하는 fcheck보다 다양하고 많은 기능을 원한다면 osiris(http://osiris.shmoo.com/) 또는 samhain(http://www.la-samhna.de/samhain/)이라는 프로그램을 추천한다.

 

특히 samhain은 애초에 디자인 될 때부터 중앙집중식으로 구성되어 있어 대단위 시스템에서도 통합적인 관리가 가능하다.

 

이 프로그램은 samhain이라는 클라이언트, yule라는 서버, beltane이라는 웹 기반의 콘솔 프로그램으로 이루어져 있으며 mysql등과 같은 db와도 연동가능하다.

 

물론 한 서버 내에서도 이용가능하며 파일과 디렉토리에 대한 세심한 설정이 가능하고 커널모듈 기반의 루트킷에 대한 모니터링 기능도 제공하며 버전이 올라가면서 계속적으로 기능이 향상되고 있다.  

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 전체 회원수 59,499 명
  • 전체 게시물 31,134 개
  • 전체 댓글수 11,895 개