오늘은 Server-Side Request Forgery에 대해서 알아보자.
1. What is SSRF?
- SSRF(Server-Side Request Forgery) : 서버 측에서 위조된 HTTP 요청을 발생시켜 직접적인 접근이 제한된 서버 내부 자원에 접근하여 외부로 데이터 유출 및 오동작을 유발하는 공격
이를 이해하기 위해서는 인터넷과 인트라넷의 차이를 알아야 한다.
사진을 보면 클라이언트(Attacker), 웹 서버(xyz.com), 데이터베이스(10.0.0.1)가 있다.
클라이언트(Attacker)와 웹 서버(xyz.com)는 인터넷을 통해 의사소통이 가능하지만 웹 서버(xyz.com)와 데이터베이스(10.0.0.1)는 인트라넷을 통해 소통하고 있어서 클라이언트(Attacker)가 직접적으로 내부 데이터베이스(10.0.0.1)와 소통할 수 없다.
따라서 삼각관계도를 보면 역시나 공격자가 직접적으로 내부 백엔드 시스템에 접근이 불가하여 웹 서버의 요청을 변조하여 의도한 바를 서버 내부망에 전달한다.
- 백엔드(Back-End) 개발 : 소프트웨어 개발 프로세스에서 서버 측 개발분야. 백엔드에서는 데이터를 저장하고 관리하며, 웹사이트의 클라이언트 측(Client-Side)에서 모든 것이 매끄럽게 작동할 수 있게 해줍니다. 백엔드는 사용자들이 직접 보거나 상호작용할 수는 없지만, 소프트웨어 개발의 일부분인 것은 맞다.
2. XSS·CSRF·SSRF
다음은 XSS과 CSRF, 그리고 SSRF의 차이점이다. XSS와 CSRF의 차이점을 먼저 살펴보면 XSS가 악성 스크립트를 사이트를 통해 클라이언트 측에서 실행시키는 공격이라면 CSRF는 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격이다. 따라서 XSS는 공격이 클라이언트 측으로 가해지고 CSRF는 서버 측으로 공격이 가해진다.
사이트 간 스크립팅(XSS)을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, 사이트간 요청 위조(CSRF)는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다. 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격(XSS) 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.
CSRF와 SSRF의 차이점은 둘 다 요청을 변조하는 공격이지만 CSRF는 클라이언트의 요청을 변조하는 것이고 SSRF는 서버의 요청를 변조하는 공격이다.
3. URL방식(GET방식 VS POST방식)
다음은 URL 관련 메서드로 GET방식과 POST방식 차이점에 대해 알아보자. 데이터 위치, 속도 측면 등등 여러 차이점이 있지만 결정적으로 GET방식은 URL에 데이터가 그대로 노출된다는 거고 POST방식은 그렇지 않다는 것이다.
4. GET방식을 통한 SSRF공격
이러한 GET방식을 통한 SSRF공격예시다. 우선 원래대로라면 사용자는 내부망에 접근이 불가하지만 사진과 같이 URL조작을 통해 내부망에 접근이 가능하다. 이 외에도 etc/passwd 파일에 접근, 사용자 웹 화면에서 내부망 쉘을 실행하는 등의 공격이 가능하다.
'정보보안' 카테고리의 다른 글
암호화(Encryption) (0) | 2024.10.30 |
---|---|
안전한 시스템 설계 8원칙 (2) | 2024.10.30 |
SQL Injection (0) | 2024.10.30 |
패킷분석(Packet Analysis) (0) | 2024.10.30 |
코드보안의 이해 (0) | 2024.10.30 |