SSRF란 무엇인가요?

서버 측 요청 위조(Server-Side Request Forgery, SSRF) 공격은 웹 애플리케이션의 취약점을 악용해 내부 리소스에 접근합니다. 앱과 API를 보호하는 방법을 알아보세요.

SSRF는 공격자가 웹 애플리케이션이나 API를 조작하여 내부 리소스에 요청을 보내도록 할 때 발생하는 보안 취약점의 일종으로, 무단 액세스, 데이터 노출, 시스템 침해 및 원격 코드 실행으로 이어질 수 있습니다. 공격자는 입력 유효성 검사를 우회하고, 방화벽이나 가상 사설망(VPN) 솔루션으로 보호되는 경우에도 애플리케이션이 악성 웹 대상에 액세스하도록 강제합니다.

SSRF 공격이란 무엇이며 어떻게 작동하나요?

SSRF 공격에서 공격자는 일반적으로 서버 측 HTTP 요청의 대상 URL을 지정하는 데 사용되는 입력값을 조작합니다. 애플리케이션이 원격 리소스에서 데이터를 가져오기 전에 사용자가 입력한 URL을 검증하거나 정제하지 않을 경우 이러한 공격이 발생할 수 있습니다. 공격자는 대상 서버가 임의의 목적지로 요청을 보내도록 유도할 수 있으며, 이로 인해 다양한 보안 위험이 발생할 수 있습니다.

이러한 공격은 대상 리소스가 클라우드 메타데이터 서비스나 백엔드 API와 같은 다른 시스템과 신뢰 관계를 맺고 있는 경우에도 발생할 수 있습니다. 공격자는 이러한 신뢰할 수 있는 서비스에 요청을 보내 민감한 정보를 빼내거나 무단 작업을 수행할 수 있습니다.

최신 웹 애플리케이션이 최종 사용자에게 편리한 기능을 제공하면서 URL에서 리소스를 가져오는 작업이 일반적인 시나리오가 되었습니다. 그 결과 SSRF 발생 빈도가 증가하고 있습니다. 또한 API와 클라우드 서비스가 널리 보급되고 컴퓨팅 아키텍처가 더욱 분산되고 복잡해짐에 따라 SSRF의 심각성도 커지고 있습니다.

SSRF는 가장 중요한 웹 애플리케이션 보안 위험을 널리 인정받는 기준으로 정리한 OWASP 10대 애플리케이션 보안 위험 중 하나입니다. 또한 SSRF는 OWASP가 선정한 10대 보안 위험 중 앱과 API 모두에서 흔히 발생하는 위험에 해당하므로, 보안 솔루션을 구현할 때 특별히 고려해야 합니다.

SSRF 공격은 다음과 같은 방식으로 이루어집니다:

  • 애플리케이션은 사용자 입력을 통해 서버 측 요청의 대상 URL 또는 리소스를 결정할 수 있도록 허용합니다. 이러한 입력은 URL의 매개변수, 양식 필드에 입력된 사용자 데이터 또는 기타 데이터 소스에서 가져올 수 있습니다.
  • 공격자는 특수하게 조작된 요청을 전송하여 입력값이 자신이 액세스하거나 악용하려는 리소스를 가리키도록 변경합니다. 이 리소스는 내부 서버, 백엔드 서비스, API 또는 방화벽 뒤에 있어 외부 네트워크에서는 액세스할 수 없는 기타 내부 시스템일 수 있습니다.
  • 서버는 사용자의 악의적인 입력을 처리하고 지정된 URL로 요청을 생성합니다. 이 요청은 사용자의 브라우저가 아닌 서버 측에서 이루어지므로 서버 측 요청에 해당합니다.
  • 대상 서버가 내부 네트워크에 있는 경우, 공격자는 내부 리소스에 접근하여 민감한 정보를 탈취한 다음 공격자가 제어하는 외부 위치로 해당 데이터를 유출하려고 시도할 수 있습니다. 또한 SSRF를 사용해 내부 시스템의 포트를 스캔함으로써 잠재적인 약점과 취약점을 파악할 수도 있습니다.
  • SSRF 공격은 인스턴스가 민감한 메타데이터 서비스에 접근할 수 있는 클라우드 환경에서 특히 우려됩니다.
  • SSRF 공격은 민감한 데이터 및 서비스에 대한 무단 액세스부터 내부 시스템 악용, 나아가 전체 클라우드 환경 침해에 이르기까지 심각한 영향을 미칠 수 있습니다.

SSRF 공격의 예

실제 환경에서 SSRF 공격이 어떻게 발생할 수 있는지 살펴보겠습니다.

사용자가 처리할 이미지를 업로드할 수 있고, 처리하려는 이미지의 URL을 입력하는 기능이 있는 보안이 취약한 웹 애플리케이션을 생각해 보세요. 공격자는 정상적인 이미지 URL 대신, 내부 파일이나 백엔드 데이터베이스 등 애플리케이션 서버의 내부 리소스를 가리키는 악성 URL이 포함되도록 정교하게 조작한 입력값을 제출합니다. 애플리케이션 서버는 이 악성 URL을 별다른 검증 없이 처리하고 공격자의 입력에 따라 URL에 지정된 내부 리소스로 요청을 보내 민감한 데이터를 가져오거나 데이터베이스를 조회한 뒤, 그 데이터를 공격자에게 반환합니다.

서버가 침해되면 공격자는 외부 시스템에 요청을 보내거나 취약점을 탐색하고, 서버가 접근할 수 있는 서비스와 상호 작용할 수도 있습니다. SSRF 공격의 영향은 시스템 아키텍처와 침해된 서버의 권한에 따라 달라질 수 있습니다. 이러한 공격은 무단 데이터 접근, 서비스 중단 또는 내부 시스템 침해로 이어질 수 있습니다.

SSRF 공격의 세 가지 기본 유형

SSRF 공격은 공격자가 서버와 상호작용하고 정보를 추출하는 방식에 따라 여러 유형으로 분류할 수 있습니다.

표준 SSRF 공격

표준 SSRF 공격에서 공격자는 사용자 입력에 악성 URL을 삽입하여 서버가 지정된 리소스에 요청을 보내도록 유도합니다. 공격자는 서버의 응답을 직접 확인하고, 데이터 검색 방법이나 접근 가능한 서비스를 식별하는 방법 등 내부 네트워크에 관한 정보를 수집할 수 있습니다.

블라인드 SSRF 공격

블라인드 SSRF 공격에서는 공격자가 서버의 응답을 직접 받지 못합니다. 대신 애플리케이션의 동작 변화를 관찰하여 SSRF 공격의 성공 여부를 간접적으로 확인합니다.

공격자는 조작된 입력을 제출하여 서버가 외부 또는 내부 리소스에 요청을 보내도록 강제합니다. 그런 다음 오류 메시지나 응답 시간의 차이 또는 기타 부수 효과와 같이 애플리케이션의 동작에서 관찰 가능한 변화를 찾습니다. 공격자는 응답을 직접 확인할 수 없더라도 이러한 정보를 바탕으로 SSRF의 성공 여부를 추론할 수 있습니다.

시간 기반 블라인드 SSRF 공격

시간 기반 블라인드 SSRF 공격은 서버의 응답 지연을 악용하여 응답을 직접 확인하지 않고도 SSRF의 성공 여부를 추론하는 방식입니다.

다른 SSRF 공격과 마찬가지로 공격자는 악성 입력을 제출하여 서버가 외부 또는 내부 리소스에 요청을 보내도록 합니다. 공격자는 애플리케이션이 응답하는 데 걸리는 시간을 관찰합니다. 응답 시간이 지연되면 SSRF 공격이 성공했음을 의미할 수 있습니다. 공격자는 페이로드를 반복적으로 조정하고 시간 지연을 모니터링하여 내부 네트워크 또는 리소스에 관한 정보를 추출합니다.

SSRF 공격으로부터 보호하는 방법

SSRF 공격으로부터 보호하려면 다음을 포함한 다양한 사전 예방적 사이버 보안 조치를 함께 구현하세요:

  • 입력값 검증. 특히 애플리케이션이 외부 리소스에 요청을 보낼 때는 사용자가 제공한 입력값을 철저히 검증하고 정제하세요. URL 허용 목록을 구현하여 애플리케이션이 액세스해야 하는 신뢰할 수 있는 도메인이나 특정 URL만 허용하세요. http 및 https와 같이 예상된 프로토콜만 허용하고, SSRF 공격에 자주 악용되는 file:// 또는 ftp://와 같이 잠재적으로 위험한 프로토콜은 허용하지 마세요. 또한 사용자가 제공한 URL이 예상된 패턴이나 형식을 준수하는지 검증하여 악성 URL이 삽입될 가능성을 줄이세요.
  • 호스트 및 IP 주소 허용 목록. 애플리케이션이 상호 작용할 수 있도록 허용된 호스트 및 IP 주소의 허용 목록을 유지하세요. 이렇게 하면 요청을 신뢰할 수 있는 의도된 대상으로 제한하여 SSRF의 공격 표면을 줄일 수 있습니다.
  • 내부 리소스에 대한 액세스를 제한합니다. Implement 네트워크 세분화를 구현하여 내부 리소스의 노출을 제한합니다. 외부에 노출된 서버가 내부 시스템 및 서비스에 최소한으로만 액세스할 수 있도록 합니다. 웹 애플리케이션 방화벽(WAF)과 액세스 제어를 구성하여 애플리케이션 서버의 아웃바운드 연결을 제한합니다. 필요하고 사전에 정의된 연결만 허용하고 불필요한 아웃바운드 트래픽은 차단합니다. 리버스 프록시를 배포하여 애플리케이션과 외부 리소스 사이의 중개자 역할을 하도록 합니다. 애플리케이션이 액세스할 수 있는 외부 리소스를 제어하도록 프록시를 구성하여 제어 계층을 추가합니다.

이러한 예방 조치는 SSRF 공격을 방지하는 데 어떻게 도움이 될까요? 가상의 시나리오를 통해 살펴보겠습니다.

온라인 콘텐츠 관리 시스템에서는 사용자가 게시물에 외부 이미지를 삽입할 수 있도록 URL을 입력할 수 있습니다. 이 시스템은 적절한 입력값 검증 없이 사용자가 제공한 URL을 처리합니다. 입력값 검증이 미흡하다는 사실을 알고 있는 공격자는 내부 API 엔드포인트나 데이터베이스 서버 같은 내부 리소스를 가리키는 악성 URL을 제공하여 시스템을 악용하려고 시도합니다. 그러나 애플리케이션 보안팀은 허용되는 URL에 엄격한 규칙을 적용하도록 시스템의 입력값 검증을 강화합니다. 시스템은 사용자가 제공한 URL이 예상된 패턴을 준수하는지 검증하기 시작하며, 보안팀은 외부 리소스에 허용되는 도메인의 화이트리스트를 구현합니다.

공격자는 SSRF 취약점을 악용하기 위해 조작된 URL이 포함된 게시물을 제출하지만, 이제 입력값 검증 기능이 악성 URL을 탐지합니다. 입력값 검증 기능은 처리 과정에서 악성 URL을 거부하여 애플리케이션이 공격자가 지정한 내부 리소스에 요청을 보내지 못하도록 합니다. 강화된 입력값 검증으로 SSRF 공격이 차단됩니다. 시스템은 내부 리소스에 대한 무단 요청을 허용하지 않으며, 내부 시스템의 무결성과 보안이 유지됩니다.

입력값 검증을 구현하면 애플리케이션이 악의적인 입력을 거부하거나 무해하게 처리하여 무단 요청을 방지하고 SSRF 공격 위험을 줄일 수 있습니다.

F5가 지원하는 방법

SSRF 공격은 공격자가 방화벽 및 액세스 제어와 같은 기존 네트워크 보안 조치를 우회하여, 일반적으로 조직의 내부 네트워크에서 보호되며 인터넷에서 직접 액세스할 수 없도록 설계된 민감한 정보와 리소스에 접근할 수 있게 하므로 위험합니다. SSRF 공격은 데이터와 시스템 모두의 기밀성, 무결성 및 가용성에 심각한 위험을 초래하므로, 조직은 SSRF 취약점의 위협을 완화하고 잠재적인 악용을 방지하기 위해 WAF, 적절한 입력값 검증, 액세스 제어, 네트워크 세분화 등 강력한 보안 조치와 모범 사례를 구현해야 합니다.

F5 WAF 솔루션은 다음에서 비롯되는 광범위한 위험을 차단하고 완화합니다. OWASP Top 10에는 SSRF도 포함됩니다. F5 WAF 솔루션은 새로운 위협에 발맞추기 위해 시그니처 및 행동 기반 보호 기능과 함께 F5 Labs의 위협 인텔리전스 및 머신 러닝(ML)을 통한 자동화된 보안을 결합합니다. 또한 클라우드, 온프레미스 및 엣지 환경 전반에서 애플리케이션을 일관되게 보호하는 데 따르는 부담과 복잡성을 줄여 주며, 다양한 배포 옵션 중에서 선택할 수 있습니다. BIG-IP Advanced WAF는 SSRF 공격으로부터 애플리케이션을 안전하게 보호하고 소프트웨어 취약점에 대한 중요한 임시 방어책을 제공하는 강력한 솔루션이며, F5 Distributed Cloud WAF는 사용하기 쉬운 서비스형 보안 플랫폼을 통해 운영을 획기적으로 간소화하면서 어디서나 앱을 보호합니다.

F5 웹 애플리케이션 및 API 보호(WAAP) 솔루션은 WAF, API 보안, L3~L7 DDoS 완화, 악성 자동화 및 자동화된 위협에 대한 봇 방어를 포함한 포괄적인 보호 기능으로 최신 앱의 전체 공격 표면을 방어합니다. 이 분산형 플랫폼을 사용하면 일관된 정책을 손쉽게 배포하고 전체 앱 및 API 환경 전반으로 보안을 확장할 수 있으며, 호스팅 위치와 관계없이 API 수명 주기와 더 광범위한 에코시스템에 보안을 통합할 수 있습니다.