무결성 감시에는 곤란한 성질이 하나 있습니다. 깨끗하다고 알려진 시스템에서 뜬 기준이 필요하다는 것입니다. 서버가 3년째 돌고 있는데 침해의 문제가 오늘에야 떠올랐다면, 그 기준을 뜨기에는 이미 늦었습니다. 거기 있는 것이 무엇이든 정상으로 기록하게 될 테니까요.

그런데 Debian과 Ubuntu에는 기준이 이미 존재하며, 그것은 당신의 것이 아닙니다. 설치된 모든 패키지가 자기 파일의 체크섬을 지니고 있습니다. 그것과의 비교에는 설정도 사전 스냅숏도 필요 없고, 어떤 시스템에서든 어느 순간에든 작동합니다. 도구의 이름은 debsums입니다.

쓰는 법

sudo apt install debsums
sudo debsums -c

-c 플래그는 기준과 맞지 않은 파일만 출력합니다. 그것이 없으면 출력은 시스템의 모든 파일에 대한 줄별 보고서가 되고, 수만 줄에 이릅니다.

확인은 몇 분이 걸리고 디스크에 부하를 주니, 돌고 있는 서버에서는 낮은 우선순위로 실행할 가치가 있습니다.

sudo ionice -c3 nice -n19 debsums -c

결과 읽는 법

빈 출력은 확인된 모든 파일이 배포판이 설치한 것과 일치한다는 뜻입니다. 비어 있지 않은 출력은 살펴봐야 하며, 발견물은 매우 다른 두 부류로 나뉩니다.

/etc 아래의 설정 파일. 그것들을 바꾸는 것은 평범한 작업입니다. sshd_config를 편집했고, nginx를 설정했으며, 커널 매개변수를 넣었습니다. 그런 차이는 예상된 것입니다. 그것들이 방해가 되지 않게 하는 별도 모드가 있습니다.

sudo debsums -e -c

-e는 설정 파일만 확인합니다 — 이 머신에서 당신이 바꾼 것 전부의 목록을 보는 데 이따금 유용합니다.

실행 파일과 라이브러리. /usr/bin, /usr/sbin, /bin, /usr/lib의 차이야말로 이 확인을 실행한 이유입니다. 정당한 원인도 있지만 많지는 않습니다. 문제를 살피는 도중에 손으로 파일을 편집했다, 서드파티 패치를 적용했다, 확인 중에 패키지가 업그레이드되고 있었다. 그중 어느 것도 들어맞지 않으면 진지하게 들여다볼 때입니다.

바꿔치기의 고전적 표적은 ls, ps, netstat, ss, find, sshd입니다. 바꿔치기된 버전은 중요한 줄을 자기 출력에서 숨기고, 그다음부터 당신의 모든 확인은 진실을 말하지 않게 됩니다.

적용 범위는 완전하지 않다 — 이것은 알아야 한다

대개 언급되지 않는 한계입니다. 모든 패키지가 체크섬을 담고 있지는 않습니다. 그런 패키지의 파일은 아예 확인되지 않으며 어떤 경우에도 보고서에 나타나지 않습니다. 목록은 이렇게 볼 수 있습니다.

sudo debsums -l

그러니 깨끗한 debsums 보고서는 「시스템이 수정되지 않았다」가 아니라 「확인된 부분에서는 모든 것이 정상이다」를 뜻합니다. 패키지 관리자 밖에서 설치된 모든 것도 마찬가지입니다. 소스에서 컴파일했든, 바이너리로 내려받았든, 개발자 사이트의 스크립트로 설치했든 — debsums는 정의상 그 어느 것도 지켜보지 않으며, 바로 거기에 AIDE가 필요합니다.

정기적으로 실행하기

패키지에는 이미 만들어진 작업이 딸려 오고, /etc/default/debsums에서 켭니다.

CRON_CHECK=weekly

주 1회가 합리적인 빈도입니다. 확인은 디스크에 눈에 띄는 부하를 주고, 시스템 파일은 업데이트 사이에 거의 바뀌지 않습니다. 매일 돌리면 부하 말고는 더해지는 것이 없습니다.

파일이 정말로 바꿔치기됐다면

첫 충동은 패키지를 다시 설치해 원본을 되찾는 것입니다.

sudo apt install --reinstall coreutils

명령 자체는 옳지만 첫 행동으로서는 아닙니다. 바꿔치기된 시스템 바이너리는 누군가에게 root가 있었다는 뜻이고, 파일을 되돌리는 것은 그 문제를 풀지 못한 채 흔적만 없앱니다. 순서는 반대여야 합니다. 먼저 의심스러운 파일의 사본과 그 수정 시각을 남기고, 같은 기간에 또 무엇이 바뀌었는지 보고, cron 작업과 SSH 키와 사용자 목록을 확인하세요. 복구는 그 뒤에.

방법의 한계도 기억할 가치가 있습니다. 시스템이 깊이 침해됐다면 debsums 자신과 그것이 쓰는 라이브러리까지 다른 모든 것과 함께 바꿔치기됐을 수 있습니다. 안에서의 확인은 절대적 보장을 줄 수 없습니다 — 그것은 외부 매체로 부팅해서 하는 일입니다. 다만 일상적인 작업에는 이것으로 충분합니다. 공격의 압도적 다수는 자동화된 것이고 그렇게 정교하지 않습니다.

전체 그림에서의 자리

debsums의 장점은 아무것도 필요로 하지 않고 즉시 작동한다는 것이며 — 그래서 이력을 모르는 서버에 편리한 출발점이 됩니다. 약점은 불완전한 적용 범위와, 패키지 밖에서 설치된 것에 대한 무지입니다. 「debsums 더하기 AIDE」의 짝이 양쪽을 닫습니다. 시스템 파일에 대해서는 배포판이 준비한 기준, 나머지에 대해서는 당신 자신의 스냅숏.

늘 그렇듯 요점은 실행하는 것이 아니라 최신 결과가 날짜와 함께 훤히 보이는 데 있습니다. 그것이 어떤 모습인지는 아래 데모에서.