Tripwire 를 이용한 파일 모니터링

LinuxBeginner
지금 연습하기

소개

이 실습에서는 강력한 호스트 기반 침입 탐지 시스템 (HIDS) 인 Tripwire 를 사용하여 파일 무결성을 모니터링하는 방법을 배웁니다. Tripwire 는 시스템 파일의 기준점 (Baseline) 데이터베이스를 생성한 다음, 주기적으로 이를 스캔하여 파일의 추가, 삭제 또는 수정을 감지하는 방식으로 작동합니다. 이 과정은 승인되지 않은 변경 사항을 식별하고 시스템 보안을 유지하는 데 필수적입니다.

보안 키의 초기 설정부터 모니터링 정책 사용자 정의, 기준점 생성, 변경 사항 감지 및 보고서 검토에 이르는 전체 프로세스를 직접 실습해 보겠습니다.

이 실습은 단계별 안내를 제공하여 학습과 실습을 돕는 가이드형 실습입니다. 각 단계를 주의 깊게 따라가며 실무 경험을 쌓으세요. 통계에 따르면 이 실습은 초급 수준이며, 87%의 수료율과 학습자들로부터 95%의 긍정적인 평가를 받았습니다.

Tripwire 키 설정

실습에 오신 것을 환영합니다. 시간을 절약하기 위해 tripwire 패키지는 환경에 미리 설치되어 있습니다. 첫 번째 작업은 Tripwire 가 데이터베이스와 설정 파일을 보호하는 데 사용하는 암호화 키를 설정하는 것입니다. 이 키는 공격자가 자신의 흔적을 숨기기 위해 Tripwire 자체 파일을 변조하는 것을 방지합니다.

  1. 먼저 Tripwire 버전을 확인하여 설치 여부를 검증합니다.

    tripwire --version

    설치된 Tripwire 버전 정보가 출력되어야 합니다.

    Tripwire(R) 2.4.3.7
    (i686-pc-linux-gnu)
    ...
  2. 다음으로 twadmin을 사용하여 암호화 키를 수동으로 생성합니다. *사이트 키 (site key)*와 *로컬 키 (local key)*를 모두 생성해야 합니다. 사이트 키는 정책 및 설정 파일을 보호하고, 로컬 키는 해당 장비의 데이터베이스를 보호합니다.

    먼저 사이트 키를 생성합니다.

    sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key

    키 파일이 이미 존재한다는 메시지가 나오면 y를 입력하고 Enter 를 눌러 덮어씁니다.

    사이트 키 비밀번호 (passphrase) 를 묻는 메시지가 나타나면 labex-password를 입력하고 Enter 를 누릅니다. 확인을 위해 비밀번호를 한 번 더 입력합니다.

    참고: 보안을 위해 비밀번호 입력 시 화면에는 아무런 글자도 표시되지 않지만, 시스템은 입력을 정상적으로 받아들이고 있습니다.

  3. 이어서 로컬 키를 생성합니다.

    sudo twadmin --generate-keys --local-keyfile /etc/tripwire/$(hostname)-local.key

    마찬가지로 기존 키 파일을 덮어쓸지 묻는다면 y를 입력하고 Enter 를 누릅니다.

    로컬 키 비밀번호를 묻는 메시지가 나타나면 labex-password를 입력하고 Enter 를 누릅니다. 확인을 위해 다시 입력하세요. 비밀번호 입력은 화면에 표시되지 않음을 유의하세요.

    비밀번호 입력을 마치면 두 키가 생성되어 /etc/tripwire/ 디렉토리에 저장됩니다. 키 생성 프로세스는 완료까지 몇 분 정도 걸릴 수 있습니다.

모니터링 정책 사용자 정의

초기 데이터베이스 (기준점) 를 생성하기 전에 Tripwire 가 어떤 파일과 디렉토리를 모니터링할지 설정해야 합니다. 기본 정책 파일은 초기화 중에 세그멘테이션 오류 (segmentation fault) 를 일으킬 수 있는 호환성 문제가 있을 수 있으므로, 필수 시스템 파일과 프로젝트 디렉토리에 집중한 간소화된 정책을 생성하겠습니다.

  1. 먼저 원본 정책 파일의 백업을 생성합니다.

    sudo cp /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
  2. 문제가 될 수 있는 가상 파일 시스템을 제외한 새로운 간소화 정책 파일을 생성합니다.

    sudo nano /etc/tripwire/twpol-simple.txt
  3. 파일에 다음 내용을 추가합니다. 이 정책은 초기화 오류를 유발할 수 있는 경로를 피하면서 필수 시스템 파일과 프로젝트 디렉토리를 모니터링합니다.

    #
    ## Simplified Tripwire Policy File for Lab Environment
    #
    
    @@section GLOBAL
    TWBIN = /usr/sbin;
    TWETC = /etc/tripwire;
    TWVAR = /var/lib/tripwire;
    
    @@section FS
    
    SEC_CRIT      = $(IgnoreNone)-SHa ;
    SEC_BIN       = $(ReadOnly) ;
    SEC_CONFIG    = $(Dynamic) ;
    SEC_LOG       = $(Growing) ;
    SEC_INVARIANT = +tpug ;
    SIG_LOW       = 33 ;
    SIG_MED       = 66 ;
    SIG_HI        = 100 ;
    
    (
      rulename = "Tripwire Binaries",
      severity = $(SIG_HI)
    )
    {
        $(TWBIN)/siggen         -> $(SEC_BIN) ;
        $(TWBIN)/tripwire       -> $(SEC_BIN) ;
        $(TWBIN)/twadmin        -> $(SEC_BIN) ;
        $(TWBIN)/twprint        -> $(SEC_BIN) ;
    }
    
    (
      rulename = "Tripwire Data Files",
      severity = $(SIG_HI)
    )
    {
        $(TWVAR)/$(HOSTNAME).twd    -> $(SEC_CONFIG) -i ;
        $(TWETC)/tw.pol             -> $(SEC_BIN) -i ;
        $(TWETC)/tw.cfg             -> $(SEC_BIN) -i ;
        $(TWETC)/$(HOSTNAME)-local.key  -> $(SEC_BIN) ;
        $(TWETC)/site.key           -> $(SEC_BIN) ;
        $(TWVAR)/report             -> $(SEC_CONFIG) (recurse=0) ;
    }
    
    (
      rulename = "Critical system files",
      severity = $(SIG_HI)
    )
    {
        /bin            -> $(SEC_BIN) ;
        /sbin           -> $(SEC_BIN) ;
        /etc/passwd     -> $(SEC_CONFIG) ;
        /etc/shadow     -> $(SEC_CONFIG) ;
    }
    
    (
      rulename = "Lab Project Files",
      severity = $(SIG_HI)
    )
    {
      /home/labex/project        -> $(SEC_BIN) ;
    }
  4. Ctrl + O를 누른 뒤 Enter를 쳐서 저장하고, Ctrl + X를 눌러 nano 편집기를 종료합니다.

  5. 원본 정책 파일을 방금 만든 간소화 버전으로 교체합니다.

    sudo cp /etc/tripwire/twpol-simple.txt /etc/tripwire/twpol.txt

이제 실습 환경에서 안정적으로 작동할 간소화된 모니터링 정책을 만들었습니다. 다음 단계에서는 이 정책을 사용하여 초기 데이터베이스를 생성하겠습니다.

Tripwire 데이터베이스 초기화

간소화된 정책이 준비되었으므로 이제 Tripwire 데이터베이스를 생성할 차례입니다. 이 데이터베이스는 시스템의 "정상 상태"를 기록한 기준점 스냅샷 역할을 합니다. Tripwire 는 현재 파일 상태를 이 기준점과 비교하여 변경 사항을 감지합니다.

  1. 먼저 호환성을 보장하기 위해 새 사이트 키를 사용하여 설정 파일을 다시 생성합니다.

    sudo twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key /etc/tripwire/twcfg.txt

    사이트 키 비밀번호를 묻는 메시지가 나타나면 labex-password를 입력하고 Enter 를 누릅니다.

  2. 텍스트 형식의 정책 파일을 Tripwire 가 사용하는 서명된 바이너리 형식으로 변환합니다.

    sudo twadmin --create-polfile /etc/tripwire/twpol.txt

    마찬가지로 사이트 키 비밀번호 (labex-password) 를 입력합니다.

  3. 데이터베이스를 초기화합니다. 이 명령은 정책에 지정된 모든 파일과 디렉토리를 스캔하고 암호화 서명 및 속성을 기록합니다.

    sudo tripwire --init

    로컬 키 비밀번호를 묻는 메시지가 나타나면 labex-password를 입력하고 Enter 를 누릅니다.

  4. 초기화 중에 데이터베이스 파일이 처음에 존재하지 않는다는 경고가 표시될 수 있습니다.

    #### Warning: File system error.
    #### Filename: /var/lib/tripwire/68b1139d06fc790d9895e107.twd
    #### No such file or directory
    #### Continuing...

    이는 첫 초기화 시 발생하는 정상적이고 예상된 반응입니다. 프로세스는 계속 진행되어 데이터베이스 파일을 생성합니다.

  5. 프로세스가 완료되면 데이터베이스 파일이 생성되었는지 확인합니다.

    ls -l /var/lib/tripwire/

    머신의 호스트 이름 뒤에 .twd 확장자가 붙은 파일 (예: 68b1139d06fc790d9895e107.twd) 이 보여야 합니다. 이 파일의 존재는 기준점 데이터베이스가 성공적으로 구축되었음을 의미합니다.

    total 8
    -rw-r--r-- 1 root root 4164 Aug 29 11:00 68b1139d06fc790d9895e107.twd
    drwxr-xr-x 2 root root    6 Nov 11  2021 report

이제 Tripwire 시스템이 기준점 데이터베이스와 함께 적절히 초기화되었습니다. 앞으로 무결성 점검을 실행하면 모니터링 대상 파일의 모든 변경 사항이 감지됩니다.

파일 변경 감지 및 보고

Tripwire 에 기준점이 마련되었으므로 변경 사항을 감지하는 능력을 테스트해 볼 수 있습니다. 모니터링 대상 영역에서 수정 사항을 어떻게 감지하는지 확인하기 위해 프로젝트 디렉토리에 새 파일을 생성해 보겠습니다.

  1. 먼저 project 디렉토리에 새 파일을 생성합니다. 이 디렉토리는 정책에 명시적으로 추가한 모니터링 대상입니다.

    touch ~/project/test_file.txt
  2. 변경을 마친 후 무결성 점검을 실행합니다. Tripwire 는 시스템을 스캔하고 기준점 데이터베이스와 비교합니다.

    sudo tripwire --check

    로컬 키 비밀번호를 묻는 메시지가 나타나면 labex-password를 입력하고 Enter 를 누릅니다.

  3. 스캔이 완료되면 Tripwire 는 보고서를 생성하고 콘솔에 요약을 출력합니다. 요약에는 추가되거나 수정된 객체가 강조 표시됩니다. 다음과 유사한 출력을 볼 수 있습니다.

    ===============================================================================
    Rule Summary:
    ===============================================================================
    
      Rule Name                       Severity Level    Added    Removed  Modified
      ---------                       --------------    -----    -------  --------
      Tripwire Binaries               100               0        0        0
      Critical system files           100               0        0        0
    * Tripwire Data Files             100               1        0        0
    * Lab Project Files               100               1        0        1
      (/home/labex/project)
    
    Total objects scanned:  16
    Total violations found:  3
    
    ===============================================================================
    Object Summary:
    ===============================================================================
    
    -------------------------------------------------------------------------------
    Rule Name: Lab Project Files (/home/labex/project)
    Severity Level: 100
    -------------------------------------------------------------------------------
    
    Added:
    "/home/labex/project/test_file.txt"
    
    Modified:
    "/home/labex/project"
  4. 보고서를 통해 Tripwire 가 다음을 감지했음을 알 수 있습니다.

    • Added (추가): 프로젝트 디렉토리 내의 새로운 test_file.txt
    • Modified (수정): /home/labex/project 디렉토리 자체 (내용물이 변경되었기 때문)
    • Tripwire Data Files: 데이터베이스 파일도 "추가"된 것으로 표시되는데, 이는 초기화 이후 첫 번째 점검이기 때문입니다.

이 출력은 Tripwire 가 사용자가 수행한 파일 시스템 변경 사항을 성공적으로 감지했음을 확인시켜 줍니다.

무결성 보고서 검토

--check 명령의 요약은 좋은 개요를 제공하지만, 상세한 분석을 위해서는 전체 보고서 파일을 확인해야 합니다. 이 보고서들은 바이너리 형식으로 저장되므로 twprint 유틸리티를 사용하여 읽어야 합니다.

  1. 먼저 보고서 디렉토리의 내용을 나열하여 가장 최근 보고서의 이름을 찾습니다. 보고서 파일 이름에는 타임스탬프가 포함되어 있습니다.

    sudo ls -lt /var/lib/tripwire/report/

    가장 최신 보고서가 맨 위에 나열됩니다. 일반적으로 hostname-YYYYMMDD-HHMMSS.twr 형식을 따르는 파일 이름을 확인하세요.

    total 4
    -rw------- 1 root root 3456 Aug 29 11:02 68b1139d06fc790d9895e107-20250829-110252.twr
  2. twprint 명령을 사용하여 보고서를 읽기 쉬운 형식으로 확인합니다. [REPORT_FILENAME] 부분을 이전 단계에서 확인한 실제 파일 이름으로 바꿉니다.

    sudo twprint --print-report --twrfile /var/lib/tripwire/report/[REPORT_FILENAME]

    예시:

    sudo twprint --print-report --twrfile /var/lib/tripwire/report/68b1139d06fc790d9895e107-20250829-110252.twr
  3. 상세 보고서에는 요약과 동일한 정보가 포함되지만 추가적인 메타데이터가 함께 표시됩니다.

    Report created on:            Fri Aug 29 11:02:52 2025
    Database last updated on:     Never
    
    Host name:                    68b1139d06fc790d9895e107
    Host IP address:              172.18.0.8
    Policy file used:             /etc/tripwire/tw.pol
    Configuration file used:      /etc/tripwire/tw.cfg
    Database file used:           /var/lib/tripwire/68b1139d06fc790d9895e107.twd
    Command line used:            tripwire --check

    보고서는 타임스탬프, 파일 속성, 체크섬을 포함하여 각 변경 사항에 대한 포괄적인 세부 정보를 제공합니다. 이러한 수준의 상세 정보는 시스템에서 정확히 어떤 변경이 일어났는지 파악하기 위한 포렌식 분석에 매우 중요합니다.

  4. --verbose 플래그를 사용하여 파일 속성이 포함된 더 자세한 버전을 볼 수도 있습니다.

    sudo twprint --print-report --verbose --twrfile /var/lib/tripwire/report/[REPORT_FILENAME]

    이렇게 하면 감지된 각 변경 사항에 대해 파일 권한, 소유권, 크기 및 다양한 암호화 해시 값과 같은 추가 정보가 표시됩니다.

이러한 보고서를 읽는 방법을 익히는 것은 시스템 관리자가 잠재적인 보안 사고를 조사하고 시스템 무결성을 유지하는 데 필수적입니다.

요약

이 실습에서는 파일 무결성 모니터링을 위해 Tripwire 를 사용하는 기본 사항을 배웠습니다. Tripwire 보안 키를 성공적으로 설정하고, 특정 프로젝트 디렉토리를 포함하도록 모니터링 정책을 사용자 정의했으며, 시스템 파일 상태의 기준점 데이터베이스를 구축했습니다.

또한 파일을 의도적으로 수정하고, 무결성 점검을 실행하여 이러한 변경 사항을 감지하며, 상세 보고서를 분석하여 무엇이 변경되었는지 파악하는 시스템 관리자의 핵심 워크플로우를 연습했습니다. 이러한 기술은 시스템 보안을 유지하고 승인되지 않은 활동을 감지하는 데 기초가 됩니다.