Linux 시스템 보안 기초 · 34/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
15편에서 SSH 키 관리를 봤다면, 이번 편은 공격자 관점에서 authorized_keys가 어떻게 '재부팅에도 살아남는 백도어'가 되는지, 그리고 이를 어떻게 탐지·차단하는지 집중적으로 봅니다.
SSH 키 지속성의 특징:
Accepted publickey로 남음authorized_keys에 한 줄 추가면 끝게다가 SSH는 authorized_keys에 강제 명령(command=) 이나 옵션을 넣을 수 있어, 접속 시 특정 명령을 자동 실행하는 형태의 지속성도 가능합니다.
정상 로그인 흐름과 구분이 안 됨
공격자 ── ssh -i stolen_or_own_key alice@server
│ authorized_keys에 공격자 공개키 존재
▼
Accepted publickey (정상 로그처럼 보임) → 재침입
공격자가 한 번 권한을 얻으면, 자신의 공개키를 사용자·root의 ~/.ssh/authorized_keys에 추가합니다. 이후에는 비밀번호나 취약점 없이도 그 키로 언제든 로그인합니다. 로그에는 정상 공개키 인증으로 남아 무차별 대입 같은 시끄러운 흔적이 없습니다.
더 은밀한 변형: authorized_keys 줄 앞에 command="...", no-pty 등 옵션을 붙여, 접속 시 리버스 쉘을 자동 실행하거나 특정 동작만 하게 만들 수 있습니다. 그래서 키 '내용'뿐 아니라 '옵션'도 봐야 합니다.
# 모든 사용자의 authorized_keys 위치와 내용
sudo find /home /root -name authorized_keys 2>/dev/null \
-exec sh -c 'echo "== $1 =="; cat "$1"' _ {} \;
# command= / 강제옵션이 붙은 키 (은밀한 실행 지속성)
sudo grep -rE 'command=|no-pty|permitopen' /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null
# 키 지문 나열 후 기준선과 대조
for f in /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys; do ssh-keygen -lf "$f" 2>/dev/null; done
미등록 키 탐지 형식입니다. (예시 출력 — 백도어 키 주입 가정)
$ sudo cat /root/.ssh/authorized_keys
ssh-ed25519 AAAAC3Nz...admin admin@ops # 정상(관리 대장 존재)
ssh-rsa AAAAB3Nz...ZZZ attacker@kali # 미등록! 조사 대상
관리 대장에 없는 두 번째 키가 root 로그인을 허용하고 있습니다. 즉시 제거하고, 해당 키 지문·comment를 IOC로 등록한 뒤 유입 시점을 조사합니다.
command=로 접속 시 자동 실행.ssh 디렉터리/키의 최근 변경SSH 키 지속성은 무차별 대입보다 조용해, 정기적인 키 인벤토리 대조가 유일하게 확실한 탐지법입니다.
command=/강제옵션 검색~/.ssh/authorized_keys FIM 감시(15편).ssh 변경 시각 확인SSH 키 지속성은 MITRE T1098.004(SSH Authorized Keys)입니다. Wazuh FIM으로 모든 authorized_keys를 감시하면 키 추가를 실시간 탐지합니다. SIEM에서는 Accepted publickey의 fingerprint를 허용 목록과 대조해 '미등록 키 로그인'을 알람하고, 신규 지문을 IOC로 등록합니다.
[ ] 모든 authorized_keys 내용 확인
[ ] 키 지문 기준선 대조
[ ] command=/강제옵션 검색
[ ] authorized_keys FIM 설정
다음 편에서는 35. Linux 백도어 탐지 기초 를 다룹니다. Part 4를 마무리하며, 지금까지의 지속성 벡터를 하나로 묶어 백도어 종합 점검을 합니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.