CentOS 7에서 Linux Malware Detect(LMD)와 ClamAV 설치 및 구성 가이드

개요
Linux Malware Detect(LMD)는 공유 호스팅 환경을 위해 설계된 리눅스용 악성코드 탐지기입니다. 간단히 말해, 파일 시스템을 스캔해 웹 쉘, 악성 PHP 등 호스팅 환경에서 흔히 발생하는 위협을 찾아냅니다.
Clam AntiVirus(ClamAV)는 트로이 목마, 악성코드, 바이러스 등을 탐지하는 오픈소스 안티바이러스 엔진입니다. LMD는 ClamAV를 내부 스캔 엔진으로 활용해 대규모 파일 집합에서 성능 좋은 검사를 수행합니다.
중요: 이 문서는 CentOS 7을 기준으로 작성되었습니다. 다른 배포판에서는 명령이나 경로가 다를 수 있습니다.
전제 조건
- CentOS 7이 설치된 서버
- 루트(root) 권한 또는 sudo 사용 권한
1단계 — EPEL 저장소와 mailx 설치
LMD는 이메일로 검사 결과를 보낼 수 있으므로 시스템에 mailx가 필요합니다. 먼저 EPEL 저장소와 mailx를 설치합니다.
yum -y install epel-release
yum -y install mailx
중요: 메일 전송은 로컬 MTA(예: postfix) 설정 또는 외부 SMTP 릴레이 설정에 따라 달라집니다. 이메일이 도착하지 않으면 MTA 로그(/var/log/maillog)를 확인하세요.
2단계 — Linux Malware Detect (LMD) 설치
LMD는 CentOS 기본 저장소나 EPEL에 포함되어 있지 않으므로 소스에서 설치합니다. 임시 디렉터리로 이동해 tarball을 내려받고 압축을 풉니다.
cd /tmp
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -xzvf maldetect-current.tar.gz
maldetect 디렉터리로 이동해 설치 스크립트를 실행합니다.
cd maldetect-1.5
./install.sh
설치 후 maldet 명령을 /bin에 심볼릭 링크로 연결합니다.
ln -s /usr/local/maldetect/maldet /bin/maldet
hash -r
ALT: LMD 설치 후 터미널에 출력된 설치 로그 화면
3단계 — LMD 구성
LMD는 “/usr/local/maldetect/“에 설치됩니다. 해당 디렉터리의 구성 파일을 편집합니다.
cd /usr/local/maldetect/
vim conf.maldet
권장 설정 요약:
- 이메일 알림 활성화: email_alert 값을 “1”로 설정
email_alert="1"
- 수신 이메일 주소 설정: email_addr에 이메일 입력
email_addr="[email protected]"
- ClamAV를 기본 스캔 엔진으로 사용: scan_clamscan 값을 “1”로 변경
scan_clamscan="1"
- 검사 중 자동 격리 활성화: quarantine_hits 값을 “1”로 변경
quarantine_hits="1"
- 클린 기반 악성 주입(clean-based malware injections) 방지 위해 격리 시 클린 옵션 활성화
quarantine_clean="1"
설정 변경 후 파일을 저장하고 에디터를 종료합니다.
중요: conf.maldet의 주석과 기본값을 잘 읽고 변경하세요. 잘못된 설정은 오탐 기반 자동 격리로 정상 파일 손상을 초래할 수 있습니다.
4단계 — ClamAV 설치 및 DB 업데이트
ClamAV는 EPEL 저장소에서 설치할 수 있습니다.
yum -y install clamav clamav-devel
설치 후 바이러스 데이터베이스를 업데이트합니다.
freshclam
ALT: freshclam 명령 실행 후 최신 데이타베이스 업데이트 로그 화면
참고: freshclam은 네트워크 접근이 필요합니다. 방화벽이나 프록시가 있다면 설정을 확인하세요.
5단계 — LMD와 ClamAV 동작 테스트
웹 루트(/var/www/html)를 예시로 수동 검사를 실행해 봅니다. 테스트용 샘플 악성코드(eicar)를 다운받습니다.
cd /var/www/html
wget http://www.eicar.org/download/eicar.com.txt
wget http://www.eicar.org/download/eicar_com.zip
wget http://www.eicar.org/download/eicarcom2.zip
웹 루트 디렉터리를 maldet로 스캔합니다.
maldet -a /var/www/html
ALT: maldet가 지정 디렉터리를 스캔한 결과 로그. 탐지 건수와 격리 동작이 표시됨
출력에서 LMD가 ClamAV 엔진을 사용했음을 확인하세요. 샘플 3개가 적발되어 자동으로 격리됩니다. 생성된 SCANID는 출력에 표시됩니다.
보고서를 확인하려면 SCANID를 사용합니다.
maldet --report 161008-0524.9466
SCANID = 161008-0524.9466는 예시이며 실제 출력에서 값을 확인하세요.
ALT: maldet 리포트 화면, 탐지한 파일 목록과 경로 표시
메일로 결과를 받았는지 확인:
tail -f /var/mail/root
ALT: root 메일 박스의 스캔 리포트 수신 내용 화면
메일에 리포트가 도착했다면 이메일 설정과 LMD email_alert 구성이 정상 동작하는 것입니다.
6단계 — 자주 쓰는 LMD 명령 모음
- 특정 확장자만 검사:
maldet -a /var/www/html/*.php
- 모든 리포트 목록 확인:
maldet -e list
- 최근 X일 이내 생성/수정된 파일만 검사:
maldet -r /var/www/html/ 5
(여기서 5 = 최근 5일)
- 격리된 파일 복원(복원할 SCANID 사용):
maldet -s SCANID
ALT: maldet 복원 명령 실행 후 파일이 원래 위치로 복원되는 로그
- 디렉터리 모니터링 활성화(실시간 감시):
maldet -m /var/www/html/
- 모니터 로그 확인:
tail -f /usr/local/maldetect/logs/inotify_log
ALT: inotify_log 파일의 최근 감지 이벤트 로그
운영 관점에서의 권장 워크플로우
- 정기 검사 스케줄 설정: cron으로 하루 1회 이상의 전체 스캔과 실시간 모니터링 병행.
- 이메일/슬랙 알림 구성: 보안팀에게 즉시 알림.
- 자동 격리 후 수동 검토: 자동 격리는 운영 중인 웹사이트에 영향을 줄 수 있으므로 복원 전 수동 검토를 권장.
- 탐지 시 인시던트 플레이북 수행(아래 참조).
인시던트 플레이북(간단한 절차)
- 탐지 즉시: 해당 SCANID와 파일 경로 확보.
- 격리 상태 확인: maldet –report SCANID로 세부 정보 확인.
- 영향 범위 조사: 웹 로그, 접근 로그, 최근 파일 변경 내역 확인.
- 복원 여부 결정: 정상 파일로 오탐이 확인되면 maldet -s SCANID로 복원.
- 추가 조치: 웹 애플리케이션 코드 리뷰, 패치 적용, 비밀번호 변경.
보안 하드닝 권장사항
- 파일 및 디렉터리 권한 최소화: 웹 루트에는 쓰기 권한을 제한합니다.
- 웹 업로드 위치 분리: 업로드 파일은 실행 권한이 없는 별도 디렉터리에 저장.
- 정기 백업: 격리/복원 실패 대비 정기 백업 실행.
- 로그 중앙화: SIEM 또는 중앙 로그 서버로 전송해 상관분석.
- ClamAV DB 자동 업데이트: cron에 freshclam 등록.
역할별 체크리스트
시스템 관리자:
- EPEL 및 mailx 설치 확인
- freshclam 자동 업데이트 설정
- cron에 정기 maldet 스캔 등록
보안 운영팀(SecOps):
- 알림 채널(이메일/슬랙) 구성
- 탐지 시 수동 검토 프로세스 수립
- 주기적 위협 인텔리전스와 시그니처 검토
호스팅 운영자:
- 사용자 업로드 제한 정책 수립
- 파일 권한 및 SELinux 정책 점검
테스트 사례 및 수용 기준
- 테스트 1: eicar 샘플을 웹 루트에 놓고 maldet -a로 탐지되는지 확인. 수용 기준: 탐지 후 자동 격리 또는 알림 발생.
- 테스트 2: 최근 2일 이내 변경된 파일만 검사(maldet -r) 정상 동작 확인. 수용 기준: 대상 파일만 검사됨.
- 테스트 3: 모니터링 활성화(maldet -m) 후 새로운 업로드가 자동으로 감지되는지 확인. 수용 기준: inotify_log에 이벤트 기록 및 scan 발생.
대안 및 한계
- 대안: 상업용 엔드포인트/서버 안티바이러스 솔루션을 도입하면 실시간 보호와 중앙 관리를 더 쉽게 할 수 있습니다.
- 한계: LMD와 ClamAV는 파일 기반 스캔에 강점이 있지만, 메모리 기반 익스플로잇이나 행위 기반 탐지에는 한계가 있습니다. 웹 애플리케이션 취약점 자체를 차단하려면 WAF(웹 애플리케이션 방화벽)를 병행하세요.
빠른 용어집
- LMD: Linux Malware Detect의 약자, 파일 시스템 기반 악성코드 스캐너.
- ClamAV: 오픈소스 안티바이러스 엔진.
- SCANID: maldet가 생성하는 스캔 ID.
FAQ
LMD가 ClamAV를 못 찾는다면 어떻게 하나요?
ClamAV가 설치되어 있고 freshclam로 DB가 업데이트되었는지 확인하세요. conf.maldet에서 scan_clamscan=”1”로 설정했는지도 확인합니다.
오탐으로 정상 파일이 격리되면 어떻게 복원하나요?
maldet –report SCANID로 상세 리포트를 확인한 뒤 maldet -s SCANID로 복원하세요. 복원 전에 백업을 권장합니다.
실시간 모니터링은 시스템 부하를 높이나요?
감시 대상 파일 수에 따라 부하가 발생할 수 있습니다. 먼저 비슷한 규모의 테스트 환경에서 부하를 측정하고 필요한 경우 모니터링 범위를 좁히세요.
요약
- EPEL과 mailx 설치 후 LMD를 소스에서 설치합니다.
- conf.maldet에서 이메일 알림, ClamAV 엔진, 자동 격리를 활성화하세요.
- ClamAV를 설치하고 freshclam으로 DB를 업데이트합니다.
- maldet로 스캔, 보고서 확인, 격리/복원, 모니터링을 연습하세요.
- 운영 체크리스트와 인시던트 플레이북을 마련해 실전 대응을 준비하세요.
참고 자료: