Burp로 GraphQL 보안 테스트 전략
Burp를 이용한 GraphQL 스키마 탐색과 쿼리 인젝션 점검 방법, 도구 설정과 검증 원리, 취약점 대응 방안을 초보자가 참고할 수 있는 실무 자료
목차
개요
GraphQL API는 유연한 쿼리 구조 때문에 전통적인 REST와 다른 보안 고려사항이 필요하다. 이 글에서는 Burp Suite를 중심으로 GraphQL 스키마 탐색과 쿼리 기반 취약점 분석 접근법을 정리한다. 초보자가 이해하기 쉽도록 개념 설명과 절차, 검증 예시를 순서대로 다룬다. 주요 키워드는 Burp GraphQL 테스트, GraphQL 인젝션 Burp, Burp GraphQL 스키마 탐색이다.
사전 준비
권한과 윤리
테스트는 반드시 대상 시스템 소유자의 명시적 허가 하에 진행한다. 허가 없는 공격적 분석은 법적 책임을 초래할 수 있다. 실무 환경에서는 범위(scope)와 허용된 테스트 유형을 문서화한다.
필요한 도구
- Burp Suite (Community 또는 Professional)
- GraphQL 요청을 보기 쉬운 확장 기능(예: 파서/뷰어 확장)
- 브라우저 프록시 설정과 인증 토큰 준비
스키마 탐색 (인트로스펙션)
인트로스펙션의 의미
GraphQL 인트로스펙션은 서버가 제공하는 타입과 필드를 조회하는 표준 방식이다. 경우에 따라 인트로스펙션을 허용하면 내부 구조를 파악하기 쉽다. 반대로 차단하면 탐색 난이도가 올라가므로 다른 기술을 병행한다.
Burp로 인트로스펙션 수행 방법 개념
Burp에서 GraphQL 엔드포인트로 인트로스펙션 쿼리를 전송하고 응답을 분석한다. 응답에서 타입, 필드, 인풋 타입, 스칼라 타입 등을 추출하면 실제 쿼리 작성과 취약점 가설 수립에 도움이 된다.
예시 인트로스펙션 쿼리
{
__schema {
types {
name
kind
fields {
name
args { name type { name kind }}
type { name kind }
}
}
}
}
위 쿼리를 Burp Repeater로 전송해 응답을 확인한다. 응답에서 민감한 필드나 과도한 노출 지점을 찾는다.
쿼리 인젝션 분석
쿼리 인젝션의 개념
GraphQL 인젝션은 쿼리 구조나 변수값을 통해 의도치 않은 동작을 유도하는 경우를 말한다. 주로 입력 검증 부족, 권한 검증 누락, 과도한 데이터 노출로 나타난다. 공격 벡터는 전통적인 SQL/명령어 인젝션과는 다르므로 공격패턴을 재정의할 필요가 있다.
탐지 관점에서의 접근
- 변수 검증: 입력값을 변수로 분리한 뒤 정상 범위를 벗어난 값을 주고 응답 변화를 확인한다.
- 필드 접근 제어: 인증된 사용자와 비인증 사용자 간의 응답 차이를 비교한다.
- 에러 메시지 관찰: 과도한 내부정보가 노출되는지 확인한다.
검증 예시 (안전한 패턴)
아래는 변수를 사용하는 기본 쿼리 예시다. Burp에서 변수값을 바꿔가며 응답 상태와 내용 변화를 관찰한다.
{
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}
}
// variables
{
"id": "1"
}
이 과정에서 중요한 점은 이상 징후를 기록하고 재현 가능한 패턴으로 정리하는 것이다. 발견된 이상은 로그와 스크린샷으로 증거를 남긴다.
Burp 활용 팁
효율적인 워크플로
- 인터셉트로 쿼리 포맷을 파악한 후 Repeater로 반복 테스트
- 스캔 결과는 수동 검토로 보완
- 확장 기능으로 JSON 응답 구조를 더 보기 쉽게 변환
보고와 대응
취약점은 재현 단계, 영향 범위, 권한 요건, 권고안 순으로 정리한다. 권고안에는 입력 검증 강화, 필드 기반 권한 체크, 인트로스펙션 차단 또는 필터링 등이 포함된다.
결론
Burp를 활용한 GraphQL 보안 테스트는 스키마 탐색과 쿼리 기반 검증의 조화로 이뤄진다. 인트로스펙션을 통해 API 구조를 이해하고, 변수와 필드 접근을 중심으로 이상을 탐지한다. 모든 활동은 명확한 허가와 윤리적 범위 내에서 수행되어야 하며, 발견된 문제는 운영팀과 협의해 우선순위별로 대응하는 것이 권장된다.