SSRF 공격이란? 서버가 공격자의 대리인이 되는 이유

SSRF의 정의

SSRF(Server-Side Request Forgery, 서버 측 요청 위조)는 공격자가 서버로 하여금 자신이 원하는 곳으로 대신 요청을 보내게 만드는 공격 기법입니다. 정상적인 사용자라면 브라우저에서 직접 외부 서버에 접근하지만, SSRF는 대상 서버 자체가 요청을 발생시키기 때문에 서버의 권한과 네트워크 위치를 그대로 이용할 수 있다는 점이 핵심입니다. 예를 들어 이미지 URL을 입력받아 서버가 대신 다운로드해주는 기능이 있다면, 공격자는 그 URL 자리에 내부 시스템 주소를 넣어 서버가 대신 접속하도록 유도할 수 있습니다.

동작 원리와 예시

SSRF는 흔히 외부 URL을 입력받아 서버가 그 주소로 요청을 보내는 기능에서 발생합니다. 예를 들어 ‘이미지 미리보기’, ‘웹훅 등록’, ‘PDF 변환’ 같은 기능이 대표적입니다. 사용자가 url=http://example.com/image.png 같은 값을 넘기면 서버는 해당 주소로 요청을 보내 결과를 반환합니다. 문제는 이 값이 검증 없이 처리될 때 발생합니다. 공격자가 url=http://169.254.169.254/latest/meta-data/처럼 클라우드 메타데이터 서버 주소나 url=http://localhost:8080/admin 같은 내부 관리자 페이지 주소를 넣으면, 서버는 마치 관리자인 것처럼 자기 자신이나 내부망에 요청을 보내버립니다. 이는 마치 우체국 직원에게 소포를 대신 배달해달라고 부탁했더니, 직원이 자신의 신분증을 사용해 원래는 외부인이 들어갈 수 없는 회사 내부 창고까지 배달해주는 상황과 비슷합니다. 외부에서는 막혀 있던 문이, 서버라는 ‘내부자’를 통하면 자연스럽게 열리는 것입니다.

실무에서 왜 중요한가

SSRF가 위험한 이유는 방화벽이나 네트워크 분리로 보호되던 내부 자원이 서버의 신뢰받는 위치 덕분에 노출될 수 있기 때문입니다. 특히 클라우드 환경에서는 메타데이터 서버를 통해 IAM 자격 증명이 탈취되는 사고로 이어지기도 합니다. 방어를 위해서는 다음과 같은 조치가 필요합니다.

  • 사용자 입력 URL에 대한 화이트리스트 기반 검증
  • 내부 IP 대역(127.0.0.1, 169.254.169.254, 10.0.0.0/8 등)으로의 요청 차단
  • 서버에서 발생하는 아웃바운드 요청에 대한 네트워크 정책 적용
  • 리다이렉트 응답을 그대로 따라가지 않도록 처리

결국 SSRF는 ‘서버를 대리인 삼아 내부로 침투하는 공격’이라는 점을 이해하면, 왜 입력값 검증과 네트워크 접근 제어가 함께 필요한지 명확해집니다.

댓글 남기기