그래프 API 보안 취약점 탐지를 위한 정적·동적 오염 분석

그래프 API 보안 취약점 탐지를 위한 정적·동적 오염 분석
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 그래프 API, 특히 GraphQL 기반 API에서 발생할 수 있는 접근 제어 결함을 발견하기 위해 정적 및 동적 오염(taint) 분석 기법을 체계화한다. 노드와 엣지를 데이터와 관계로 모델링하고, 민감 데이터가 포함된 노드를 오염 라벨링한 뒤, API 호출을 그래프 변환 규칙으로 표현한다. 정적 단계에서는 Critical Pair Analysis를 이용해 소스 규칙과 싱크 규칙 사이의 직접·간접 의존성을 탐지하고, 동적 단계에서는 실제 실행 환경에서 오염 흐름을 검증한다. GitHub GraphQL API의 일부에 적용해 두 종류의 접근 제어 위반(허가되지 않은 접근 및 허가된 접근 미허용)을 성공적으로 식별한다.

상세 분석

이 논문은 그래프 API 보안 분석에 대한 최초의 포괄적 프레임워크를 제시한다는 점에서 학술적·실무적 의미가 크다. 먼저, 데이터 모델을 노드와 엣지로 추상화하고, “특정 권한이 요구되는 데이터”를 나타내는 노드에 오염 라벨을 부착한다는 아이디어는 기존 웹 애플리케이션의 변수 수준 오염 분석을 그래프 구조 전체로 확장한 것이다. 이를 위해 API 호출을 그래프 변환 규칙으로 모델링한다. 규칙의 LHS는 적용 전 패턴, RHS는 적용 후 패턴을 정의하며, 공통 부분 K는 변하지 않는 요소를 나타낸다. 이렇게 하면 소스(오염 데이터 생성)와 싱크(오염 데이터 사용) 규칙을 명시적으로 구분할 수 있다.

정적 분석 단계에서는 Critical Pair Analysis(CPA)를 활용한다. CPA는 두 규칙 사이에 발생할 수 있는 충돌(conflict)과 의존성(dependency)을 자동으로 탐지한다. 논문은 CPA가 직접적인 오염 흐름(소스 바로 뒤에 싱크가 적용되는 경우)뿐 아니라, 중간에 다른 변환이 삽입된 간접 흐름을 탐지할 수 있는 조건을 정리한다(예: 규칙 사이의 의존성 사슬이 모두 쓰기(write) 규칙이거나, 중간 규칙이 오염 라벨을 보존하는 경우). 이론적으로는 Theorem 3.13을 통해 특정 형태의 간접 흐름을 완전하게 포착함을 증명한다. 또한, 새로운 개념인 “역할 커버리지(role coverage)”를 도입해, 접근 제어 정책에 정의된 모든 역할이 테스트 시나리오에 포함되는지를 정량화한다(Definition 3.18).

동적 분석은 정적 결과의 실현 가능성을 검증한다. 오염된 노드가 실제 실행 시점에 권한 검증을 우회하거나 누락되는지를 확인하기 위해, 자동 생성된 테스트 케이스를 GraphQL 서버에 주입한다. 여기서 중요한 점은 정적 분석이 불완전할 수 있기에, 동적 단계에서 놓친 흐름을 보완한다는 점이다.

실험에서는 GitHub GraphQL API의 일부 스키마에 적용했으며, 두 가지 실제 보안 이슈를 재현한다. 첫 번째는 “권한이 없는 사용자가 특정 리포지토리를 수정할 수 없는 경우”를 확인하는 것으로, 정책이 과도하게 제한된 상황을 탐지한다. 두 번째는 “권한이 있는 사용자가 제한된 필드에 접근할 수 있는 경우”를 찾아내어, 정책이 충분히 허용되지 않은 상황을 드러낸다. 이러한 사례는 기존 보안 스캐너가 놓치기 쉬운 그래프 구조 특유의 복합적인 권한 검증 로직을 효과적으로 드러낸다.

전체적으로 이 연구는 (1) 그래프 변환 기반의 정형화된 모델링, (2) CPA를 통한 자동 의존성 분석, (3) 정적·동적 연계 검증이라는 세 축을 결합함으로써, 그래프 API의 접근 제어 결함을 체계적이고 확장 가능하게 탐지한다는 점에서 큰 기여를 한다. 향후 연구에서는 더 복잡한 다중 역할 정책, 동시성에 의한 레이스 컨디션, 그리고 다른 그래프 데이터베이스(Neo4j 등)와의 연계 분석으로 범위를 확대할 여지가 있다.


댓글 및 학술 토론

Loading comments...

의견 남기기