JSON 하이재킹은 웹 브라우저의 도메인 간 정책을 악용하여 JSON 응답에서 민감한 데이터를 훔치는 보안 취약점을 의미합니다. JSON은 자바스크립트 오브젝트 노테이션(JavaScript Object Notation)의 약자로, 일반적으로 웹 애플리케이션에서 클라이언트-서버 간 통신을 위해 사용되는 경량 데이터 교환 형식입니다.
JSON 하이재킹은 다음 단계를 통해 작동합니다:
다른 도메인에서 데이터 가져오기: 웹 애플리케이션이 자바스크립트를 사용하여 다른 도메인에서 데이터를 가져올 때, 일반적으로 JSON 데이터를 응답하는 API 엔드포인트에 요청을 보냅니다.
크로스 오리진 요청: 많은 웹 애플리케이션은 CSRF 공격을 방지하기 위해 JSON 데이터에 대한 크로스 오리진 요청을 허용합니다.
브라우저 조작: 공격자는 피해자의 브라우저를 속여 대상 도메인에 요청을 하게 만듭니다. 이 요청에는 쿠키와 같은 피해자의 인증 자격 증명이 포함됩니다.
요청 가로채기 및 데이터 접근: 공격자의 서버가 요청을 가로채고, 종종 민감한 정보를 포함하는 JSON 데이터에 접근합니다.
JSON 하이재킹 위험을 줄이기 위해 다음 예방 팁을 따를 수 있습니다:
서버에서 CORS(크로스 오리진 리소스 공유) 구현: CORS는 JSON 데이터를 액세스할 수 있는 도메인을 지정할 수 있습니다. CORS를 올바르게 구성하여 신뢰할 수 있는 도메인에만 액세스를 제한할 수 있습니다.
JSON 응답에 민감한 데이터 포함 피하기: 인증 토큰이나 PII와 같은 민감한 정보가 JSON 응답에 포함되지 않도록 보장하는 것이 중요합니다. 민감한 데이터를 JSON 데이터와 분리하여 공격자가 접근할 위험을 줄일 수 있습니다.
암호화 및 토큰화를 사용하여 민감한 데이터 보호: JSON 응답에서 전송 전에 민감한 데이터를 암호화하면 추가적인 보호 계층을 제공합니다. 토큰화 또한 민감한 데이터를 토큰으로 대체하여 데이터 노출 위험을 줄일 수 있습니다.
JSON 응답을 처리할 때 document.write
메서드 사용 피하기: document.write
메서드는 페이지에 악성 콘텐츠를 삽입할 수 있어 보안 취약점이 발생할 수 있습니다. 대신, 웹 애플리케이션에서 JSON 데이터를 동적으로 렌더링하기 위한 더 안전한 방법을 고려하십시오.
2007년, Twitter 웹사이트에서 JSON 하이재킹 취약점이 발견되었습니다. 이 취약점은 공격자가 서버의 JSON 응답을 조작하여 사용자의 직접 메시지를 훔칠 수 있도록 했습니다.
이 공격은 피해자를 특별히 제작된 웹 페이지로 유도하여 Twitter의 API에 크로스 도메인 JSON 요청을 하게 만드는 방식으로 작동했습니다. 응답이 수신되었을 때, 공격자의 자바스크립트 코드는 사용자의 직접 메시지를 포함한 JSON 데이터에 접근할 수 있었습니다.
Twitter는 while(1);
접두사를 사용하는 등 JSON 하이재킹 공격을 방지하기 위한 대책을 신속히 구현하여 이 취약점을 해결했습니다.
JSONP(패딩을 사용한 JSON)는 JSON 기반 통신의 대체 방법으로, JSON 하이재킹에 취약할 수 있습니다.
JSONP는 다른 도메인에서 제공되는 외부 자바스크립트 파일의 포함을 허용합니다. 공격자는 이 메커니즘을 악용하여 JSONP 응답에 악성 코드를 주입할 수 있으며, 사용자의 브라우저와 데이터 보안을 위협할 수 있습니다.
JSONP와 관련된 위험을 완화하기 위해 서버 측에서 JSONP 응답을 검증하고 정리하며, 신뢰할 수 있는 소스만 JSONP 콜백을 제공할 수 있도록 해야 합니다.
JSON 하이재킹은 주로 클라이언트 측 보안 문제로, 성공적으로 악용되기 위해서는 여러 취약점의 결합이 필요합니다. 최근에는 SameSite 쿠키 및 더욱 엄격한 CORS 정책과 같은 브라우저 보안 개선으로 인해 공격자들이 이러한 유형의 공격을 수행하는 것이 더 어려워졌습니다.
"JSON 하이재킹"이라는 용어는 보안 커뮤니티에서 흔히 사용되지 않습니다. 대신, 이 공격은 보통 "JSONP 하이재킹" 또는 "크로스 도메인 JSON 하이재킹"이라고 불립니다.
일부는 JSON 하이재킹 방지 책임이 단순히 웹 애플리케이션 개발자에게만 있지 않다고 주장합니다. 웹 브라우저와 웹 표준 또한 이 취약점을 완화하기 위해 더 엄격한 보안 조치를 시행해야 한다는 의견이 있습니다.
크로스 사이트 스크립팅 (XSS): 악성 스크립트를 다른 사용자가 보는 웹 페이지에 삽입하는 공격 유형.
크로스 오리진 리소스 공유 (CORS): 다른 도메인에서 자원을 요청할 수 있게 해주는 메커니즘.
크로스 사이트 요청 위조 (CSRF): 사용자가 현재 인증된 웹 애플리케이션에서 원치 않는 작업을 수행하도록 강요하는 공격.