대상 OS: Debian 12 (bookworm)
서버가 침해되면 공격자가 가장 좋아하는 일 중 하나가 ‘정상 바이너리/설정 파일을 살짝 바꾸기’입니다.
로그인 쉘, sshd 설정, 라이브러리, 크론 스크립트처럼 눈에 잘 띄지 않는 곳에 손을 대면 오래 버틸 수 있기 때문이죠.
그래서 운영 보안의 기본기는 “지금 디스크 위의 파일이 원래 배포판이 설치한 그 파일이 맞는가?”를 자주 확인하는 것입니다.
Debian 12에서는 debsums로 패키지에 포함된 파일들의 체크섬을 비교해 변조/손상 가능성을 빠르게 잡아낼 수 있습니다.
이 글은 debsums를 이용해 패키지 파일 무결성을 점검하고, 정상 변경(오탐)을 관리하며, 정기 점검 자동화까지 운영 관점으로 정리합니다.
---
1) debsums가 해주는 것(그리고 한계)
1) dpkg로 설치된 패키지 파일의 체크섬을 기준으로 변경 여부를 확인한다
2) “어떤 파일이 달라졌는지”를 경로 단위로 빠르게 보여준다
3) 패키지 업데이트/손상/침해 모두에 대한 초기 신호가 될 수 있다
4) 패키지에 포함되지 않은 파일(/usr/local, 애플리케이션 배포 파일)은 기본적으로 범위 밖이다
5) 공격자가 더 깊게 장악한 경우(커널/사용자랜드 조작)에는 결과를 신뢰하기 어렵다
즉, debsums는 ‘결정타’라기보다 “빠른 스크리닝 + 증거 후보” 도구로 쓰는 게 맞습니다.
---
2) 설치 및 기본 점검
1) 설치
sudo apt update
sudo apt -y install debsums
2) 기본 실행(변경된 파일만 출력)
sudo debsums | head -n 80
아무 것도 출력되지 않으면, debsums가 확인 가능한 범위에서는 “변경 없음”일 가능성이 큽니다.
3) 특정 패키지만 점검(예: openssh-server)
sudo debsums openssh-server || true
---
3) 결과 해석: 어떤 종류의 변경이 위험 신호인가
debsums 출력은 보통 “파일 경로”가 나옵니다. 그 경로가 무엇인지가 중요합니다.
1) /usr/bin, /usr/sbin, /bin, /sbin 아래 바이너리 변경
2) /lib, /usr/lib 아래 라이브러리 변경
3) 시스템 서비스 유닛(/lib/systemd/system, /usr/lib/systemd/system) 변경
4) 보안 핵심 설정(/etc/ssh, /etc/sudoers 등) 변경
다만 /etc 아래는 패키지 설치 후 운영자가 정상적으로 수정하는 파일이 많아, “변경 자체”만으로 악성이라고 결론 내리면 안 됩니다.
---
4) ‘정상 변경’(오탐)을 다루는 기본 원칙
오탐을 없애려다가 보안이 무너지는 패턴이 흔합니다.
1) 무작정 예외로 빼지 말고, 먼저 “왜 바뀌었는지”를 확인한다
2) 패키지 업데이트 직후 변경이라면, dpkg 로그/apt 히스토리를 교차 확인한다
grep -E "upgrade |install |remove " /var/log/dpkg.log | tail -n 80
3) 운영자가 수정한 설정이라면, 변경 이력(티켓/커밋)과 일치하는지 확인한다
4) 정당한 변경이 확인된 경우에만 예외 정책을 만든다
---
5) “변조 의심 파일”을 만났을 때의 후속 체크
debsums가 경고를 줬다면, 다음 순서로 증거를 모읍니다.
1) 파일 메타데이터 확인(시간/권한/소유자)
sudo stat /path/to/file
sudo ls -la /path/to/file
2) 패키지 소속 확인
dpkg -S /path/to/file || true
3) 패키지 재설치로 원복 가능한지 검토(운영 영향 주의)
sudo apt -y --reinstall install PACKAGENAME
4) 실행 중인 프로세스/네트워크와 교차 확인
ps aux --sort=-%cpu | head -n 30
sudo ss -tnp | head -n 80
sudo journalctl -u ssh -n 200 --no-pager
운영 팁
- 침해가 의심되면 “원복”보다 “증거 보존”이 먼저일 수 있습니다.
- 상황에 따라 디스크 이미지/메모리 덤프/중앙 로그 확보가 우선입니다.
---
6) 정기 점검 자동화: 매일 ‘변경 목록’을 기록하기
정기 점검의 목적은 “그날그날의 변화”를 보는 것입니다.
1) 리포트 디렉터리 생성
sudo install -d -m 0755 /var/log/debsums
sudo chown root:root /var/log/debsums
2) 일일 점검 스크립트 생성
sudo tee /usr/local/sbin/debsums-daily >/dev/null "${outdir}/summary.${now}.txt"
EOF
sudo chmod 0755 /usr/local/sbin/debsums-daily
3) cron.daily 등록
sudo tee /etc/cron.daily/debsums-daily >/dev/null