Server-Side Request Forgery

서버 측 요청 위조(Server-Side Request Forgery, SSRF) 공격은 공격자가 서버를 속여 무단 요청을 보내도록 유도하는 수법이다.

  1. 내부 자원 접근: 공격자가 내부 네트워크에 있는 서버나 리소스에 접근하는 데 사용될 수 있다. 이를 통해 내부 데이터베이스, 파일 시스템 등에 접근하여 민감한 정보를 유출할 수 있다.
  2. 외부 서비스 공격: 공격자가 외부 서비스나 웹 사이트에 악의적인 요청을 보내서 그 결과를 이용해 공격을 수행할 수 있다. 예를 들어, 공격자가 악성 코드를 실행하거나 인증 정보를 탈취할 수 있다.
  3. 서버 공격: 공격자가 악의적인 요청을 통해 서버에 부하를 주거나 서비스를 마비시킬 수 있다. 이는 서버의 가용성을 저하시키는 결과를 낳을 수 있다.

공격 방법:

shop.example.com/?url=file:///etc/passwd 이런식으로 요청을 보내서, 클라이언트로 passwd 파일 응답을 받을 수 있다.

방어 방법:

  • 입력 검증 및 허용 목록: 애플리케이션에서 받아들이는 URL이 특정 도메인이나 IP 주소 목록에 속하는지 검증하고, 허용되지 않는 주소에 대한 요청을 거부한다.
  • 리소스 격리: 서버와 클라이언트 간에 네트워크 격리를 유지하여 내부 리소스에 대한 접근을 제한한다.
  • 보안 정책 및 권한: 서버에서 URL을 요청하는 것과 관련된 보안 정책과 권한을 강화하여 외부 요청을 최소화한다.
  • 애플리케이션 패치: 애플리케이션 프레임워크와 라이브러리를 최신 버전으로 유지하고 보안 패치를 적용하여 악용 가능한 취약성을 줄인다.

Blind SSRF

응답을 받아 민감 정보를 탈취하려는 목적보다는, 서버 자체를 공격하려는 목적이다.

shop.example.com/?url=http://example.com/some-very-large-file.png 로 이동하도록 했다고 가정해 보자. 여기서 서버는 외부 서버에서 비정상적으로 용량이 큰 파일을 가져오기 위해 계속 시도한다. 이 요청은 shop.example.com의 웹 서버를 멈추게 하고 서비스 거부(DoS)로 이어질 수 있다. 가시적인 응답이나 데이터를 끌어내는 것이 아니라 서버를 대신해 유해한 작업을 수행하는데 초점을 둔다는 점에서 이 유형의 SSRF 공격을 '블라인드' SSRF라고 한다.