[보안이슈] OAuth Misconfiguration(3)
01___Intro
OAuth Misconfiguration으로 발생할 수 있는 취약점 사례에 대해 살펴보기로 하자.
02___취약점 사례
01) CSRF
하나의 서비스에 여러개의 SNS 계정을 연동할 수 있습니다.
계정을 연동하기 위해서는 OAuth 인증 과정을 통하게 되는데, 이 때 CSRF 공격으로 피해자 계정에 공격자 계증을 연동할 수 있습니다.
SNS 계정 연동 FLOW
1. 기존 계정과 SNS 계정 연동 요청 2. 요청 SNS 로그인 페이지 출력 (Client ID 값이 포함된 로그인 페이지) 3. ID/PW 를 통해 SNS 계정에 로그인 4. 로그인 성공 시 인증 서버로부터 Authorization code를 발급 받음 (Authentication Server -> 사용자) 5. 발급 받은 code 값과 state 값을 Client 서버로 전송 (사용자 -> Client Server) 6. code 값과 state 값 검증 후 Client 서버에 로그인 되어있는 계정과 SNS 계정이 연동됨 |
여기서 state 값은 CSRF token 역할을 하는데, 만약 state 값에 대해 검증이 누락되어 있거나 미흡할 경우 사용자 계정을 탈취할 수 있습니다. 5번 과정에서 Client 서버로 전송하는 내용을 추출하여 만든 CSRF 공격 페이지에 사용자(피해자)가 접근하면, 사용자(피해자) 계정과 공격자 계정이 연동되며, 공격자의 SNS 계정을 통해 사용자(피해자) 계정으로 로그인을 할 수 있습니다.
02) CSRF 실제사례
https://medium.com/@Jacksonkv22/oauth-misconfiguration-lead-to-complete-account-takeover-c8e4e89a96a
redacated.com 이라는 사이트가 존재한다고 가정해보자.
임시메일을 사용하여 계정을 만들고 로그인 후,
redacated.com 계정을 이용해 Facebook과 Google을 동기화하여
OAuth 기능을 이용해 계정에 쉽게 로그인이 가능하다는 것을 확인할 수 있었다.
Facebook 아이콘을 클릭하여 OAuth인증을 시도하는 최초 패킷을 Burp로 잡아보면 아래와 같은 내용을 확인할 수 있었다. 해당 패킷에서 파라미터를 확인 시 state에 대한 파라미터가 존재하지 않았고, 이는 CSRF 공격에 취약할 수 있음을 의미한다. Facebook에 성공적으로 인증한 후 발급된 Authorization 키를 이용해 redacated.com 서비스에 인증을 시도하는 Facebook에서의 콜백을 가로챌 수 있다.
아래는 Facebook에서의 콜백에 대한 패킷이다.
CSRF 공격을 시도하기 위한 피싱 페이지를 제작해보자. 코드는 아래와 같다.
코드 내 들어가는 Authorization 키는 공격자가 자신의 페이스북 계정을 정상 연동 시도 시 발생하는 키 값을 넣어준다.
이제 피해자 계정에서 해당 취약점을 테스트 할 수 있습니다. redacted.com 에서 테스트 계정 생성 후 해당 계정에 로그인 후 설정 페이지로 이동하면 Facebook과 연동하는 옵션을 확인할 수 있습니다. 이제 새 탭에서 이전에 작성된 악성 페이지를 열고 제출 버튼을 클릭 시 공격자의 페이스북 계정과 피해자의 redacted.com계정이 연동되어 공격자의 Facebook 계정으로 희생자 계정 로그인이 가능해짐을 확인할 수 있습니다.
03___CSRF 보안방안
- state 파라미터를 사용해야 합니다.
state 파라미터를 활용해야 합니다. OAuth 2.0 인증은 애플리케이션 이전 상태를 복원할 수 있는 state 파라미터를 제공합니다. 해당 파라미터는 인증 요청에서 클라이언트가 설정한 상태를 보존하고 응답에서 클라이언트가 사용할 수 있게 합니다.
조금 더 자세히 말하자면, 인증을 시작할 시 인증 요청과 관련하여 고유하고, 추측할 수 없는 값이 동시에 발급되어 각 절차마다 해당 값이 일치한지 확인함으로써 비정상적인 공격을 막을 수 있게 해줍니다.
[Proxy] Ultrasurf Setting (0) | 2020.03.26 |
---|---|
[보안이슈] OAuth Misconfiguration(4) : 취약점 사례(Convert Redirect) (0) | 2020.03.10 |
[보안이슈] OAuth Misconfiguration(2) : Checklist (0) | 2020.03.10 |
[보안이슈] OAuth Misconfiguration(1) : 정의 (0) | 2020.03.10 |
[WEB] SSRF(Server-Side Request Forgery) 실제 공격 사례 (0) | 2020.03.01 |