자바스크립트는 현대 웹의 핵심이 되어, 브라우저는 V8, SpiderMonkey, JavaScriptCore와 같은 최적화된 엔진에 의존하고 있다. 이러한 엔진은 네이티브와 유사한 성능을 달성하기 위해 Just-In-Time 컴파일러를 사용하지만, 이것은 침묵적인 JIT 계산 오류와 같은 광범위한 공격 표면을 만들었다. 침묵적인 JIT 계산 오류는 원격 코드 실행을 위해 사용될 수 있는 논리적 결함으로, 전통적인 보안 오라클을 피할 수 있다. JIT 엔진을 보안하는 것은 전통적인 테스트 방법론의 한계로 인해 어려운데, 이는 종종 의미론적 정당성에 대해 무감각하다. 전통적인 퍼징 전략은 침묵적인 실패, 샌리타이저 무감각성, 크로스 엔진 노이즈로 인해 부족하다. 이를 해결하기 위해, JIT-Picking은 자바스크립트 엔진을 자신에 대한 공격으로 사용하는 정밀도 중심의 차이 퍼징 아키텍처를 도입한다. 이 접근 방식은 인터프리터 전용 모드와 JIT 활성화 모드에서 동일한 자바스크립트 입력을 실행하고, 로컬 변수 값을 캡처하기 위해 프로브를 삽입하고, 계산 오류를 감지하기 위해 프로브된 값을 해싱한다. JIT-Picking은 생산급 엔진에 대해 평가되었으며, 32개의 버그를 발견했으며, 그 중 27개는 JIT 특정 버그였으며, 루프 최적화의 버그를 감지하는 데 효과적이었다. 이 접근 방식은 전통적인 퍼저가 놓칠 수 있는 일시적인 계산 오류를 포착하는 데 탁월하며, 10개월 동안 생산급 엔진에 대한 평가를 통해 그 효과가 입증되었다. 브라우저 보안의 미래는 의미론적 인식 테스트에 있으며, 논리적 정당성을 1차 보안 경계로 취급하는 데 중점을 두며, 자동화된 차이 테스트는 브라우저 CI/CD 파이프라인에서 보안 브라우저를 보장하기 위해 필수적일 수 있다.
dev.to
JIT-Picking: Exploiting the Logic Gap in Modern JavaScript Engines
