Linux 시스템 보안 기초 · 15/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
키 인증은 무차별 대입을 막는 강력한 방법이지만, 키 관리가 허술하면 새로운 위험이 됩니다. 특히 authorized_keys는 공격자가 지속성을 심는 대표적 위치입니다. 이번 편은 키 파일들의 역할·권한·탈취 시나리오를 정리합니다.
관련 파일과 역할입니다.
| 파일 | 위치 | 역할 |
|---|---|---|
| 개인키 | ~/.ssh/id_ed25519 | 클라이언트가 서명. 절대 유출 금지 |
| 공개키 | ~/.ssh/id_ed25519.pub | 서버에 등록되는 값 |
| authorized_keys | 서버 ~/.ssh/ | 로그인 허용할 공개키 목록 |
| known_hosts | 클라이언트 ~/.ssh/ | 접속한 서버 지문 기록(MITM 탐지) |
권한이 틀리면 sshd가 키를 거부합니다: ~/.ssh는 700, 키 파일은 600이 원칙입니다.
정상 등록 공격자 지속성
authorized_keys: authorized_keys:
ssh-ed25519 AAA... alice ssh-ed25519 AAA... alice
ssh-ed25519 ZZZ... attacker ← 몰래 추가
│
└ 비밀번호 없이 언제든 재침입
공격자가 서버 권한을 얻으면, 자신의 공개키를 사용자 authorized_keys에 한 줄 추가합니다. 그러면 비밀번호를 몰라도, 무차별 대입 없이도 언제든 그 계정으로 로그인할 수 있습니다. 로그에는 정상적인 Accepted publickey로 남기 때문에 매우 은밀합니다(34편에서 지속성 관점 심화).
개인키 탈취도 치명적입니다. 패스프레이즈가 없는 개인키가 유출되면 즉시 해당 계정 권한이 넘어갑니다. 그래서 개인키에는 패스프레이즈를, 서버에는 authorized_keys 무결성 감시를 둡니다.
# .ssh 및 키 파일 권한 점검
ls -la ~/.ssh
# 등록된 공개키 목록과 지문
ssh-keygen -lf ~/.ssh/authorized_keys 2>/dev/null
# 모든 사용자의 authorized_keys 위치 나열 (관리자)
sudo find /home /root -name authorized_keys -exec ls -l {} \;
실습 환경에서 키 지문 조회 예입니다. (예시 출력 — authorized_keys 등록 시)
$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:aB3d... alice@lab (ED25519)
여기에 관리자가 등록한 적 없는 지문(다른 comment/키)이 나오면 곧바로 조사 대상입니다. 정상 지문 목록을 기준선으로 저장해 두면, 추가된 키를 즉시 식별할 수 있습니다.
~/.ssh 700, 키 600, 등록 키는 관리 대장과 일치.authorized_keys에 미등록 공개키 → 지속성 백도어공개키 로그인은 무차별 대입에 강한 대신, 한 번 심긴 키는 조용히 재침입을 허용한다는 점을 기억해야 합니다.
authorized_keys 변경 감사: auditd -w /home -p wa는 광범위 → 사용자별 ~/.ssh/authorized_keys watchAccepted publickey의 fingerprint를 인벤토리와 대조Wazuh FIM으로 각 사용자 ~/.ssh/authorized_keys를 감시하면 키 추가를 실시간 탐지할 수 있습니다. 이는 34편의 '키 기반 지속성'과 직결됩니다. SIEM에서는 Accepted publickey 로그의 fingerprint를 허용 키 목록과 대조해 '미등록 키 로그인'을 알람으로 올립니다. 신규 키 지문은 IOC로 관리합니다.
[ ] ~/.ssh와 키 파일 권한(700/600) 확인
[ ] authorized_keys 등록 키 지문 확인
[ ] 미등록 키 존재 여부 점검
[ ] authorized_keys 변경 감사 설정
다음 편에서는 16. Linux 파일 권한과 보안 를 다룹니다. Part 3로 넘어가, 파일 권한을 '접근통제'라는 보안 렌즈로 다시 봅니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.