122 lines
4.8 KiB
Markdown
122 lines
4.8 KiB
Markdown
# malware-watch 설치기
|
|
|
|
[English](README.md) | **한국어**
|
|
|
|
`malware-watch`는 프로세스/네트워크 행위 탐지, abuse.ch ThreatFox/MalwareBazaar IOC 피드, 확인된 위협 자동 격리, IOC 방화벽 차단 유지, 선택적 ClamAV 검사를 결합한 서버용 악성코드 감시 도구입니다.
|
|
|
|
## 구성 파일
|
|
|
|
- `install.sh` — malware-watch, abuse.ch 피드 업데이트, 자동 격리, IOC 방화벽 복원, systemd 타이머 및 선택적 공식 ClamAV를 설치합니다.
|
|
- `verify.sh` — 설치 상태가 정상인지 검증합니다.
|
|
- `src/` — 설치 시 `/usr/local/sbin/`으로 배포되는 실행 스크립트입니다.
|
|
- `.env` — 설치 설정 파일입니다. 설치 전에 플레이스홀더 값을 실제 값으로 변경해야 합니다.
|
|
|
|
저장소의 `.env`에는 플레이스홀더만 포함되어야 합니다. 실제 Discord Webhook 또는 abuse.ch Auth-Key를 Git에 커밋하지 마십시오.
|
|
|
|
## 설치
|
|
|
|
```bash
|
|
git clone https://github.com/javara999/malware-watch.git
|
|
cd malware-watch
|
|
chmod +x install.sh verify.sh
|
|
nano .env
|
|
sudo ./install.sh
|
|
```
|
|
|
|
`.env`에서 최소 다음 두 값을 설정해야 합니다.
|
|
|
|
```bash
|
|
DISCORD_WEBHOOK='디스코드웹훅URL'
|
|
ABUSECH_AUTH_KEY='abuse.ch api 키'
|
|
```
|
|
|
|
위 두 플레이스홀더를 실제 값으로 변경한 뒤 설치하십시오.
|
|
|
|
설치 도중 실패했더라도 `install.sh`를 다시 실행할 수 있습니다. 기존 malware-watch 파일은 교체 전에 `/root/security-evidence/malware-watch/install-backup-*` 아래에 백업됩니다.
|
|
|
|
## 이번에 수정된 ClamAV 설치 문제
|
|
|
|
새 Ubuntu 서버에서 아직 `clamav` 시스템 계정이 존재하지 않는 경우 기존 설치기가 다음 오류로 중단될 수 있었습니다.
|
|
|
|
```text
|
|
install: invalid user 'clamav'
|
|
```
|
|
|
|
현재 설치기는 다음 순서로 처리합니다.
|
|
|
|
1. 공식 ClamAV 패키지를 먼저 설치합니다.
|
|
2. `clamav` 그룹이 없으면 생성합니다.
|
|
3. `clamav` 시스템 계정이 없으면 생성합니다.
|
|
4. 그 다음 `/var/lib/clamav`를 `clamav:clamav` 소유로 생성합니다.
|
|
|
|
따라서 신규 Ubuntu 인스턴스에서도 해당 오류 없이 진행하도록 수정되었습니다.
|
|
|
|
## 설치 검증
|
|
|
|
```bash
|
|
sudo ./verify.sh
|
|
```
|
|
|
|
검증 항목:
|
|
|
|
- 필수 실행 파일 및 설정 파일 존재 여부
|
|
- `/etc/malware-watch/config` 권한
|
|
- malware-watch 및 abuse.ch systemd 타이머 상태
|
|
- ThreatFox / MalwareBazaar 피드 로드 상태
|
|
- ClamAV 설치 및 `clamav` 계정 존재 여부
|
|
- ClamAV 시그니처 DB 상태
|
|
- ClamAV 관련 systemd 타이머 상태
|
|
- `malware-watch.py` 실제 1회 실행
|
|
|
|
정상 상태의 마지막 출력 예시는 다음과 같습니다.
|
|
|
|
```text
|
|
Summary: PASS=<숫자> WARN=0 FAIL=0
|
|
```
|
|
|
|
설치 직후 ClamAV 시그니처가 아직 다운로드되지 않았다면 DB 관련 `WARN` 1개가 일시적으로 표시될 수 있습니다. `FAIL`이 있으면 해당 항목을 수정해야 합니다.
|
|
|
|
Discord Webhook까지 실제 테스트하려면:
|
|
|
|
```bash
|
|
sudo ./verify.sh --test-discord
|
|
```
|
|
|
|
## 수동 상태 확인
|
|
|
|
```bash
|
|
systemctl status malware-watch.timer --no-pager
|
|
systemctl status malware-feed-update.timer --no-pager
|
|
systemctl status clamav-freshclam-local.timer --no-pager
|
|
systemctl status clamav-risk-scan.timer --no-pager
|
|
systemctl status clamav-deep-scan.timer --no-pager
|
|
systemctl list-timers --all --no-pager | grep -E 'malware-watch|malware-feed-update|clamav-'
|
|
```
|
|
|
|
주요 로그 확인:
|
|
|
|
```bash
|
|
journalctl -u malware-watch.service -n 100 --no-pager
|
|
journalctl -u malware-feed-update.service -n 100 --no-pager
|
|
journalctl -u clamav-risk-scan.service -n 100 --no-pager
|
|
journalctl -u clamav-deep-scan.service -n 100 --no-pager
|
|
journalctl -u clamav-freshclam-local.service -n 100 --no-pager
|
|
```
|
|
|
|
## 주요 동작
|
|
|
|
- 1분 간격으로 프로세스와 네트워크를 검사합니다.
|
|
- ThreatFox IOC 및 MalwareBazaar SHA256과 비교합니다.
|
|
- `/tmp`, `/var/tmp`, `/dev/shm` 실행 파일, 삭제된 실행 파일, 알려진 miner 이름, 비정상적으로 높은 CPU 사용 등을 점수화합니다.
|
|
- 단순 휴리스틱만으로는 자동 삭제하지 않습니다.
|
|
- MalwareBazaar 해시 일치 등 확인도가 높은 경우에만 자동 격리를 수행합니다.
|
|
- 확인된 IOC IP는 호스트 및 Docker 트래픽에서 차단할 수 있습니다.
|
|
- 증거와 격리 파일은 `/root/security-evidence/` 아래에 보관합니다.
|
|
|
|
## 보안 주의사항
|
|
|
|
- 실제 Discord Webhook과 abuse.ch Auth-Key는 Git에 올리지 마십시오.
|
|
- 설치된 `/etc/malware-watch/config` 권한은 `600`이어야 합니다.
|
|
- `.env` 실사용 파일을 별도로 관리하려면 `.env.local`, `.env.secret`, `.env.real` 같은 무시 대상 파일명을 사용하는 것을 권장합니다.
|
|
- 자동 격리는 확인된 악성코드에만 적용되며 일반적인 고점수 휴리스틱 탐지는 알림 위주로 처리합니다.
|