IMG-LOGO
공지사항 :

악성코드 및 루트킷 탐지: Lynis와 Chkrootkit을 이용한 보안 취약점 진단

lmkfox - 2026-06-10 07:27:40 4 Views 0 Comment

서버를 안정적으로 운영하는 시스템 엔지니어와 보안 담당자에게 가장 두려운 시나리오는 자신도 모르는 사이에 서버가 악성코드에 감염되거나, 해커에게 최고 권한을 탈취당해 좀비 서버로 악용되는 상황입니다. 특히 시스템의 가장 깊숙한 곳인 커널(Kernel) 수준에 상주하며 자신을 숨기는 '루트킷(Rootkit)'은 일반적인 ps 명령어나 ls 명령어로는 감지조차 되지 않기 때문에 보안 사고의 발견을 늦추는 치명적인 위협입니다.

이를 방어하고 인프라의 보안 수준을 선제적으로 진단하기 위해 오픈소스 기반의 강력한 보안 감사 도구인 Lynis와 루트킷 전용 탐지 도구인 Chkrootkit의 활용법이 널리 쓰입니다. 두 도구의 설치부터 실무 진단 예제, 그리고 결과 분석 및 조치 방법까지 상세히 살펴보겠습니다.

1. 리눅스 보안의 은밀한 침입자: 악성코드와 루트킷

보안 진단을 시작하기 전, 우리가 탐지하고자 하는 대상의 본질을 이해해야 합니다. 리눅스 환경에서의 악성코드는 대개 CPU 자원을 무단 점유하여 암호화폐를 채굴하는 마이너(Miner), 외부 공격의 경유지로 쓰이는 봇넷(Botnet), 그리고 시스템 명령어를 변조하는 루트킷 형태로 나타납니다.

루트킷(Rootkit)이란 무엇인가?

루트킷은 시스템의 관리자 권한(Root)을 획득한 공격자가 이후에도 언제든지 은밀하게 접속(Backdoor)하고 자신의 흔적을 지우기 위해 설치하는 악성 소프트웨어 모음집(Kit)입니다. 작동 위치에 따라 크게 두 가지로 나뉩니다.

  • 사용자 영역(Userland) 루트킷: ls, ps, netstat, top 같은 기본 시스템 실행 파일 자체를 변조합니다. 해커의 프로세스나 파일, 네트워크 포트가 존재하더라도 변조된 명령어가 이를 결과에서 의도적으로 누락시켜 관리자의 눈을 속입니다.

  • 커널 영역(Kernel-level) 루트킷: LKM(Loadable Kernel Module) 형태로 커널 자체에 침투합니다. 시스템 콜(System Call)을 가로채기 때문에 시스템 명령어가 변조되지 않았더라도 운영체제 하부 구조 시스템 전체가 거짓말을 하게 만듭니다.

이처럼 눈에 보이지 않는 위협을 찾아내기 위해, 시스템 내부의 무결성을 검증하는 전문 진단 도구가 필수적입니다.

2. Chkrootkit: 시스템 무결성 및 루트킷 전용 탐지

Chkrootkit은 리눅스 시스템 내부에 루트킷의 징후가 있는지 정밀하게 검사하는 고전적이고 신뢰성 높은 셸 스크립트 기반 도구입니다. 시스템 바이너리가 수정되었는지 파악하고, 알려진 수많은 루트킷의 시그니처를 대조하며, 프로미스큐어스(Promiscuous) 모드로 작동 중인 네트워크 인터페이스 등을 잡아냅니다.

Chkrootkit 설치

대부분의 주요 리눅스 배포판 패키지 관리자에 포함되어 있어 설치가 간단합니다.

Bash

# Ubuntu / Debian 계열 설치
sudo apt-get update
sudo apt-get install chkrootkit

# Rocky Linux / RHEL 계열 설치 (EPEL 저장소 필요)
sudo dnf install epel-release -y
sudo dnf install chkrootkit -y

실무 진단 예제 및 로그 분석

설치가 완료되면 root 권한으로 즉시 전체 검사를 수행할 수 있습니다.

Bash

# 시스템 전체 루트킷 검사 실행
sudo chkrootkit

명령어를 실행하면 시스템 내부 명령어를 하나씩 점검하며 상태를 출력합니다.

  • not infected: 해당 항목에서 악성 징후가 발견되지 않음

  • INFECTED: 주의 필요. 루트킷이나 악성코드 변조 흔적이 발견됨

실무 대응 예제: 오탐(False Positive)과 진탐 구별하기

검사 결과 중에 간혹 다음과 같은 경고 메시지가 출력될 수 있습니다.

Plaintext

Checking `ps'... INFECTED
Checking `aliens'... 5 sys_links found

이 메시지를 마주했을 때 무조건 해킹당했다고 결론짓기 전에 교차 검증을 해야 합니다. 최신 패치로 인해 ps 명령어의 용량이나 체크섬이 바뀌었거나, 특정 모니터링 에이전트 프로그램이 시스템 호출을 감시하는 과정에서 chkrootkit이 이를 루트킷으로 오해하는 '오탐'일 확률이 있기 때문입니다.

진짜 감염인지 확인하기 위해서는 패키지 관리자의 무결성 검증 기능을 연계하여 사용해야 합니다.

Bash

# Rocky Linux / RHEL 계열에서 ps 명령어의 무결성 검증
rpm -V procps-ng

# Ubuntu / Debian 계열에서 ps 명령어 무결성 검증
debsums -s procps

만약 무결성 검증 명령어에서 아무런 출력도 나오지 않는다면 파일이 변조되지 않은 오탐이므로 안심해도 됩니다. 반면 파일의 해시값이나 크기가 변경되었다고 경고가 뜬다면 실제 진탐(감염) 상황이므로 해당 서버를 즉시 네트워크에서 격리하고 백업본을 통해 바이너리를 복구해야 합니다.

3. Lynis: 시스템 전반의 보안 감사 및 취약점 하드닝

Chkrootkit이 루트킷이라는 '범인'을 잡는 데 특화되어 있다면, Lynis는 시스템 전체의 보안 상태를 진단하고 구멍 난 곳을 찾아내는 '종합 건강검진 도구'입니다. 시스템 설정 오류, 취약한 패스워드 정책, 잘못된 파일 권한, 방화벽 설정 미비 등 인프라의 전반적인 하드닝(보안 강화) 상태를 점검하여 점수(Hardening Index)로 환산해 줍니다.

Lynis 설치

Lynis는 지속적으로 업데이트되는 최신 보안 취약점 데이터베이스를 반영해야 하므로, 패키지 관리자보다는 공식 웹사이트의 최신 소스코드를 직접 가져와 실행하는 방식을 권장합니다. 시스템에 아무런 흔적을 남기지 않고 독립적으로 실행할 수 있다는 장점도 있습니다.

Bash

# /opt 디렉토리로 이동하여 최신 Lynis 다운로드 및 압축 해제
cd /opt
sudo wget https://downloads.cisofy.com/lynis/lynis-3.1.2.tar.gz
sudo tar -xzvf lynis-3.1.2.tar.gz
cd lynis

시스템 보안 감사 실행

Bash

# 시스템 전체 보안 감사(Audit) 시작
sudo ./lynis audit system

명령어를 실행하면 계정 상태, 파일 시스템, 스토리지, 네트워킹, 방화벽, SSH 설정 등 수십 가지 카테고리를 자동으로 검사하며 화면에 진행 상황을 기록합니다. 검사가 끝나면 하단에 종합 요약 리포트가 생성됩니다.

4. Lynis 감사 결과 분석과 취약점 조치 실무

Lynis 검사 결과 리포트에서 가장 집중적으로 보아야 할 항목은 Warnings(경고)와 Suggestions(제안)입니다. 경고는 즉각적인 보안 위협이 되는 요소이며, 제안은 시스템 하드닝을 위해 개선을 권장하는 사항입니다.

실무에서 가장 빈번하게 발생하는 핵심 지적 사항과 그에 따른 구체적인 조치 예제를 살펴보겠습니다.

지적 사항 예제 1: SSH 서비스 보안 취약 (Suggestion)

Plaintext

- SSH daemon allows root login [SUGGESTION]
- SSH daemon policy for MaxAuthTries is default [SUGGESTION]

해커들이 원격에서 무작위 대입 공격(Brute Force)을 감행할 때 주 타겟은 root 계정입니다. 외부에서 root로의 직접적인 SSH 로그인을 허용하는 것은 매우 위험합니다.

조치 방법:

Bash

# SSH 설정 파일 수정
sudo vi /etc/ssh/sshd_config

# 아래 항목들을 찾아 수정 및 주석 해제
PermitRootLogin no          # root 계정의 직접 로그인 차단
MaxAuthTries 3              # 로그인 실패 허용 횟수를 3회로 제한

# SSH 서비스 재시작하여 반영
sudo systemctl restart sshd

지적 사항 예제 2: 컴파일러 권한 방치 (Warning)

Plaintext

- Danger - Compiler found on system without restriction [WARNING]

서버 내부에 gccmake 같은 개발용 컴파일러가 아무런 제한 없이 방치되어 있으면, 공격자가 웹 취약점 등을 통해 시스템에 일반 권한으로 침투했을 때 권한 상승(Privilege Escalation)용 악성코드 소스코드를 서버 안에서 직접 컴파일하여 실행할 수 있는 무기를 제공하는 셈이 됩니다.

조치 방법:

컴파일러를 아예 삭제하는 것이 가장 좋으나, 관리 목적으로 남겨두어야 한다면 일반 사용자는 실행할 수 없도록 권한을 오직 root로만 제한해야 합니다.

Bash

# gcc 컴파일러의 실행 권한을 root 계정 전용(700)으로 제한
sudo chmod 700 /usr/bin/gcc

지적 사항 예제 3: 배너 메시지 미설정 (Suggestion)

Plaintext

- Login banner message not configured [SUGGESTION]

시스템에 로그인할 때 원격 사용자에게 이 시스템은 모니터링 중이며 인가되지 않은 접근은 법적 처벌을 받을 수 있음을 고지하는 법적 경고문(Banner)이 없다는 지적입니다. 정보보호 인증 심사 시 필수 항목입니다.

조치 방법:

Bash

# 원격 접속 시 출력될 경고 배너 생성
sudo echo "WARNING: Unauthorized access to this system is forbidden and will be prosecuted." > /etc/issue.net

# SSH 설정에서 배너 활성화
sudo vi /etc/ssh/sshd_config
Banner /etc/issue.net

# 서비스 재시작
sudo systemctl restart sshd

5. 자동화를 통한 상시 방어 체계 구축

보안 진단은 일회성 이벤트로 끝나서는 안 됩니다. 어제까지 안전했던 서버가 오늘 배포된 웹 소스코드의 취약점으로 인해 밤사이 악성코드에 감염될 수 있기 때문입니다. 따라서 ChkrootkitLynis를 크론탭(cron)에 등록하여 주기적으로 자동 검사를 수행하고, 이상 징후 발생 시 관리자에게 이메일이나 로그로 즉시 알리는 상시 방어 체계를 구축해야 합니다.

실무 예제: 주간 자동 취약점 진단 및 리포트 저장 스크립트

매주 일요일 새벽에 시스템을 진단하고 결과를 특정 관리 디렉토리에 누적 저장하는 자동화 스크립트 구성 예시입니다.

Bash

# 1. 자동화 스크립트 파일 생성
sudo vi /root/security_scan.sh

# 2. 스크립트 내용 작성
#!/bin/bash
SCAN_DATE=$(date +%Y%m%d)
LOG_DIR="/var/log/security_scan"

mkdir -p $LOG_DIR

# Chkrootkit 실행 및 infected 항목만 필터링하여 로그 저장
echo "=== Chkrootkit Scan Started ===" > $LOG_DIR/chkrootkit_$SCAN_DATE.log
chkrootkit >> $LOG_DIR/chkrootkit_$SCAN_DATE.log 2>&1

# Lynis 비대화형(cron) 모드로 실행하고 리포트 생성
/opt/lynis/lynis audit system --cronjob --report-file $LOG_DIR/lynis_report_$SCAN_DATE.txt > /dev/null

# 검사 결과 중 중대한 위협이 발견되었는지 패턴 매칭 후 관리자 통보용 로그 기록
if grep -q "INFECTED" $LOG_DIR/chkrootkit_$SCAN_DATE.log; then
    echo "ALERT: Rootkit infection suspected on $SCAN_DATE" >> /var/log/messages
fi

# 3. 스크립트 실행 권한 부여
sudo chmod 700 /root/security_scan.sh

# 4. 크론탭 시스템에 매주 일요일 새벽 2시에 실행되도록 등록
sudo echo "0 2 * * 0 /root/security_scan.sh" >> /var/spool/cron/root

6. 결론: 계층적 방어(Defense in Depth)의 필요성

보안에는 완벽한 단 하나의 솔루션이란 존재하지 않습니다. 시스템을 안전하게 지키기 위해서는 방화벽이나 침입 차단 시스템 같은 네트워크 경계 보안도 중요하지만, 이미 경계선이 무너져 내부로 침투한 침입자를 잡아내는 시스템 내부의 방어 기제도 매우 중요합니다.

Chkrootkit을 통해 커널과 시스템 명령어의 무결성을 상시 감시하여 침입의 흔적을 추적하고, 동시에 Lynis를 활용해 시스템 내부의 취약점을 지속적으로 제거하여 공격자가 발붙일 틈을 주지 않는 하드닝 작업을 병행해야 합니다. 이처럼 도구들의 특성을 이해하고 자동화된 보안 진단 체계를 인프라 운영에 녹여낼 때, 비로소 외부의 거센 위협 속에서도 흔들리지 않는 단단한 서버 환경을 유지할 수 있습니다.


댓글