Gelato 피드백 기반 가이드형 클라이언트 사이드 보안 분석
초록
본 논문은 현대 JavaScript 프레임워크와 라이브러리를 사용하는 복잡한 클라이언트‑사이드 웹 애플리케이션을 대상으로, 상태 인식 크롤러와 경량 동적 테인트 분석을 결합한 새로운 보안 분석 도구 Gelato를 제안한다. 피드백‑드리븐 방식으로 크롤러를 보안‑민감한 코드 위치(예: DOM‑XSS sink)로 유도하고, 기존 엔진 레벨 혹은 코드 변환 기반 테인트 도구보다 높은 재현율과 낮은 침해성을 보인다.
상세 분석
Gelato는 기존 클라이언트‑사이드 보안 도구들이 놓치고 있는 다섯 가지 핵심 요구사항을 체계적으로 해결한다. 첫째, 클라이언트‑상태 인식(C1)과 서버‑상태 인식(C2)을 동시에 지원함으로써 UI 변형과 백엔드 호출을 모두 탐색한다. 둘째, 동적 이벤트 핸들러 등록(D5)과 비동기 흐름을 고려해 이벤트 시퀀스와 데이터 입력을 자동 생성한다(F3·F4·F8·F9). 셋째, 문자열 제약 해결을 통한 가드 우회와 비결정성 처리(F10)를 구현해 무작위 난수·타임스탬프 등에 얽힌 경로도 탐색한다. 넷째, 보안 분석(F11)과 sink‑지향 가이드(F12·F13·F14)를 결합해 단순 코드 커버리지를 넘어 실제 취약점이 존재할 가능성이 높은 지점을 우선 탐색한다. 마지막으로, React·Knockout·Vue 등 최신 프레임워크를 직접 모델링하지 않고도 동적 호출 그래프를 추출·갱신함으로써(Feature F15) 수작업 모델링 비용을 크게 절감한다.
기술적으로 Gelato는 정적 호출 그래프를 초기화하고, 실행 중 수집된 런타임 트레이스를 통해 그래프를 점진적으로 정제한다. 이때 호출 거리(call‑graph distance)를 비용 함수로 사용해 목표 sink에 가까운 이벤트·입력을 우선 순위화한다. 또한, “단계적 테인트 추론(staged taint inference)”이라는 새로운 동적 테인트 기법을 도입한다. 첫 단계에서는 입력값이 DOM에 직접 흐르는 경로를 빠르게 탐지하고, 두 번째 단계에서는 복합적인 비동기 콜백·프라미스 체인 내에서의 간접 흐름을 추적한다. 기존 엔진 레벨 훅을 사용하지 않고, 바이트코드 수준이 아닌 소스 레벨에 삽입된 경량 어셈블리 코드를 이용해 브라우저 호환성을 유지하면서도 오버헤드를 최소화한다. 실험 결과, Gelato는 최신 웹 애플리케이션 30여 개에 대해 기존 도구 대비 평균 22 % 높은 재현율을 보였으며, 분석 시간은 1.3배 정도만 증가했다. 특히, 복잡한 SPA(single‑page application)에서 숨겨진 REST 엔드포인트와 DOM‑XSS sink을 자동으로 발견해 보안 테스트 효율을 크게 향상시켰다.
이러한 설계는 “검색 공간 폭발” 문제를 피드백‑드리븐 우선순위와 동적 입력 생성으로 완화하고, “정적‑동적 격차”를 실시간 그래프 정제와 단계적 테인트로 메우는 점에서 혁신적이다. 또한, 브라우저 수정 없이도 동작한다는 점은 기업 현장 적용성을 높이며, 향후 다른 클라이언트‑사이드 취약점(예: CSP 우회, 메모리 누수)에도 확장 가능성을 시사한다.
댓글 및 학술 토론
Loading comments...
의견 남기기