피드로 돌아가기
Dev.toSecurity
원문 읽기
SSH 보안 실패는 호스트명·IP 주소 검증 부재에서 비롯되며, DNS 중독·호스트 파일 변조·라우팅 공격으로 중간자 공격 노출
How SSH Works—and How It Breaks: A Practical Guide to Secure Remote Access
AI 요약
Context
SSH는 원격 접속의 표준 프로토콜이지만, 관리자들은 종종 호스트명이나 IP 주소만으로 서버 신원을 검증한다고 잘못 가정한다. 이러한 신뢰 모델은 DNS 중독, 호스트 파일 변조, BGP 하이재킹 등 여러 공격 벡터에 취약하며, 특히 공개 Wi-Fi나 보안 취약 내부 LAN에서 중간자 공격의 진입점이 된다.
Technical Solution
- 호스트명·IP 주소 기반 검증 제거: 호스트 신원 검증을 DNS/네트워크 레이어에서 암호화 기반으로 전환
- 공개키 지문 검증 도입: 서버 초접속 시 ED25519 키의 SHA256 지문을 사용자가 확인하고 ~/.ssh/known_hosts에 저장
- StrictHostKeyChecking 활성화: SSH 클라이언트에서 StrictHostKeyChecking=yes로 설정해 미등록 호스트 접속 차단
- Ansible에서 호스트 키 검증 강제: ANSIBLE_HOST_KEY_CHECKING=False 제거 후 인증서 기반 검증 전략(CA 도입 또는 known_hosts 사전 구성) 도입
- 임시 구성의 습관 개선: 프로젝트 초기 단계에서 StrictHostKeyChecking=no 우회 후 운영 전 proper 검증 전략으로 전환
Key Takeaway
SSH 보안은 네트워크 인프라의 신뢰도가 아닌 암호화 호스트 키 검증에 의존해야 하며, 테스트 환경도 동일 자격증명 또는 프로덕션 네트워크 접근이 있으면 공격 stepping stone이 될 수 있으므로 모든 환경에 적용해야 한다.
실천 포인트
원격 서버에 SSH로 접속하는 모든 엔지니어와 자동화 도구는 첫 접속 시 StrictHostKeyChecking=yes를 기본값으로 유지하고 서버 공개키 지문을 대역 외(out-of-band) 채널에서 확인하거나 인증서 기반 검증을 도입해야 중간자 공격으로 인한 자격증명 탈취 및 세션 모니터링 위험을 제거할 수 있다.