Documentation

/

White Papers

QueryPie gRPC 통신을 위한 DAST 보안 전략 : ZAP 커스텀 스크립트 적용 사례

noah

2025년 2월 6일

QueryPie gRPC 통신을 위한 DAST 보안 전략 : ZAP 커스텀 스크립트 적용 사례

QueryPie의 gRPC 보안: ZAP 스크립트 적용 사례

QueryPie는 높은 성능과 안정성을 위해 gRPC 통신 방식을 채택했습니다. gRPC는 HTTP/2 기반의 고효율 통신 프로토콜로, 프로토콜 버퍼를 사용해 데이터를 빠르고 경량화된 형태로 전송함으로써 네트워크 자원을 효율적으로 활용합니다. 또한, 클라이언트와 서버 간 양방향 스트리밍을 지원하여 실시간 데이터 처리가 가능하며, 다양한 언어와 플랫폼과의 호환성도 뛰어납니다. 이 화이트페이퍼에서는 gRPC로 구현된 웹 애플리케이션을 대상으로 취약점 진단하는 과정에서 발생하는 주요 이슈를 살펴보고, 이에 대한 해결 방안을 제안합니다.

gRPC 취약점 진단, 왜 어려울까?

HTTP/2의 바이너리 포맷은 텍스트 기반의 HTTP/1.1과 달리, 요청 및 응답의 내용을 일반적인 프록시 도구(예: Burp Suite, ZAP)로 쉽게 읽거나 수정할 수 없게 만듭니다. gRPC는 데이터 직렬화 포맷으로 Protocol Buffers (Protobuf)를 사용하는데, 이는 JSON이나 XML과 달리 바이너리 포맷이므로 분석이 까다롭습니다.

다음은 gRPC로 구현된 웹 애플리케이션 패킷의 예시를 살펴보면, POST 요청 데이터는 언뜻 보면 ‘cat’이라는 문자가 Base64로 인코딩되어 있을 뿐으로 보입니다.

gRPC 요청 POST 데이터에 대하여 Base64 디코딩
gRPC 요청 POST 데이터에 대하여 Base64 디코딩
gRPC 요청 POST 데이터 확인
gRPC 요청 POST 데이터 확인

하지만 'cat'이라는 문자를 다시 base64로 인코딩해 보면 기존 POST 데이터와 다르다는 것을 알 수 있으며, 서버에서는 해당 요청을 정상적으로 처리하지 못하는 것을 확인할 수 있습니다.

기존 gRPC 요청 POST 데이터와 상이함
기존 gRPC 요청 POST 데이터와 상이함
단순 Base64로 인코딩된 ‘cat’ 문자는 서버에서 정상적으로 처리 불가함
단순 Base64로 인코딩된 ‘cat’ 문자는 서버에서 정상적으로 처리 불가함

gRPC 데이터는 .proto 파일을 통해 메시지 구조를 파악하고 인코딩/디코딩 작업을 추가로 수행이 필요하지만, 대부분의 프록시 및 DAST 도구는 gRPC 인코딩/디코딩을 기본적으로 지원하지 않거나 제한적으로만 지원합니다. 또한 이러한 작업을 수동으로 반복 수행하면서 취약점 진단을 하려면 너무 많은 시간을 투자해야하는 문제점이 있습니다. 이러한 문제점으로 DAST 스캔 시 gRPC 인코딩/디코딩 작업과 취약점 식별을 자동으로 수행하여 생산성을 증가시킬 필요가 있습니다.

효율적인 gRPC 취약점 진단을 위한 ZAP 활용법

ZAP은 웹 애플리케이션 취약점 진단에 자주 사용되는 프록시 및 DAST 도구입니다. 커스텀 스크립트 기능을 통하여 자동 스캔 과정에서 로컬의 파일을 실행하거나 다른 작업에 활용할 수 있습니다. 이를 통해 gRPC POST 요청 데이터를 디코딩한 후 공격 페이로드를 삽입하고 다시 인코딩하여 전송할 수 있습니다. 또한, gRPC 서버 응답 데이터를 디코딩하여 분석함으로써 취약점을 확인하는 과정을 자동화할 수 있습니다.

ECMAScript(Graal.js) 엔진은 코딩이라는 수단을 제공한다는 점에서 진단자에게 높은 자유도를 제공하며, 로컬에서 쉘 명령어를 실행하고 그 결과를 활용해 다양한 작업을 정의하는 것도 가능합니다.

grpc-pentest-suite 스크립트 실행을 통한 gRPC 인코딩/디코딩
grpc-pentest-suite 스크립트 실행을 통한 gRPC 인코딩/디코딩