반응형
정의
SSRF(Server Side Request Forgery)는 서버 측 요청 위조를 의미하는 웹 보안 취약점입니다. 이 취약점은 공격자가 목표 서버로부터 다른 내부 또는 외부 리소스로 요청을 보낼 수 있게 해주는 것을 의미합니다. SSRF를 통해 공격자는 서버의 제한이나 보안 조치를 우회하여 악의적인 요청을 보낼 수 있습니다.
하지만 실무에서는 SSRF 취약점이 발생할 수 있는 위험한 상황이 많지 않습니다. URL을 파라미터로 전달받는 경우가 거의 없기 떄문입니다.
취약점 발생 지점 리스트
SSRF 취약점은 주로 입력 유효성 검사가 부족하거나, 신뢰할 수 없는 사용자 입력을 처리하는 기능에서 발생합니다. 서버가 외부 리소스에 액세스해야 하는 기능을 갖춘 웹 애플리케이션에서 특히 취약성이 높습니다.
- 내부 네트워크의 시스템 또는 서비스에 액세스해야 하는 경우
- 인증이 필요한 서비스에 대한 우회 접근이 필요한 경우
- 웹 애플리케이션의 취약한 구성을 악용하여 시스템에 대한 정보 수집이나 공격적인 동작을 수행해야 하는 경우
- HTTP요청: 파라미터로 URL을 받는 경우.
- api: 날씨 정보를 출력해주는 기능.
- 사용자 입력을 통해 원격 URL을 받고 이를 서버에서 처리하는 경우
- 서버 측에서 URL을 동적으로 생성하여 외부 리소스에 요청을 보내는 경우
취약 지점 예제
import requests
def process_image(url):
response = requests.get(url)
# 이미지 처리 로직
# 사용자 입력을 처리하는 부분
user_input = input("이미지 URL을 입력하세요: ")
process_image(user_input)
위의 예제에서는 사용자가 입력한 이미지 URL을 process_image() 함수로 전달합니다. 그러나 사용자는 임의의 URL을 입력할 수 있으며, 이를 통해 SSRF 취약점이 발생할 수 있습니다. 사용자가 악의적으로 내부 시스템의 URL을 입력하면, 서버는 해당 URL로 요청을 보내게 됩니다.
공격 순서
- 공격자는 악의적인 요청을 서버로 전송하고, 이를 통해 URL을 조작합니다.
- 서버는 조작된 요청을 받아서 외부 서비스에 전송합니다.
- 외부 서비스는 요청을 처리하고 응답을 반환합니다.
- 서버는 외부 서비스의 응답을 받아 공격자에게 반환합니다.
공격 구조
공격 예제
대응방법
파라미터를 URL로 보내지 않는다면 이는 근본적인 대응방법이 될수 있습니다.
하지만 반드시 사용해야 한다면 아래와 같은 대응방법이 있습니다.
- 입력 유효성 검사: 사용자가 입력한 URL을 신뢰할 수 있는지 확인하기 위해 적절한 입력 유효성 검사를 수행해야 합니다. 허용되는 도메인 또는 IP 주소의 목록을 만들어 사용자 입력을 필터링하거나, URL을 파싱하여 유효성을 검증해야 합니다.
- 화이트리스트 필터링: 서버가 접근할 수 있는 리소스를 제한하기 위해 화이트리스트 필터링을 구현해야 합니다. 내부 시스템에 대한 액세스를 허용할 필요가 없는 경우, 외부 리소스로의 요청만 허용하는 것이 좋습니다.
- 보안 구성 및 네트워크 격리: 서버와 내부 시스템 간의 네트워크 격리를 구성하여 외부로부터의 액세스를 제한해야 합니다. 내부 시스템에 대한 접근을 필요한 경우에도, 외부로의 접근을 제한하고 필요한 경우 안전한 프록시 서버를 통해 간접적으로 액세스해야 합니다.
- 업데이트 및 보안 패치: 사용 중인 소프트웨어와 라이브러리를 최신 버전으로 유지하고 보안 패치를 적용해야 합니다. SSRF와 관련된 취약점에 대한 업데이트 및 패치가 제공되면, 즉시 적용해야 합니다.
반응형
'old > Cyber Security' 카테고리의 다른 글
개발자 도구로 자바스크립트 함수 요청 하는 법 (0) | 2023.07.29 |
---|---|
웹 해킹 예제: 인증과 인가 취약점_CTF: Write (0) | 2023.07.22 |
SSRF 공격기법 리스트 (0) | 2023.07.19 |
사이버 보안: 사회공학기법이란? (0) | 2023.07.19 |
XSS 공격기법 리스트 (0) | 2023.07.19 |