정규 표현식, 안전하게 쓰고 있나요? RE# 엔진으로 성능과 보안을 잡다.

by DD
3주 전
조회수 2

저자는 스택 오버플로우(Stack Overflow)의 26만 개 이상의 정규 표현식 관련 질문을 분석하여, 개발자들이 겪는 문제점을 파악함.

보완(complement) 및 교차(intersection) 연산 부재로 인한 복잡성, 백트래킹(backtracking) 엔진의 성능 저하 및 보안 취약점을 지적함.

유니코드(Unicode) 처리 시, \d 사용의 위험성을 경고하며, 버퍼 오버플로우(Buffer Overflow) 가능성을 제시함.

자체 개발한 정규 표현식 엔진 RE#을 소개하며, 성능 및 안전성 개선을 강조함.

정규 표현식 엔진의 성능 비교

저자는 RE# 엔진을 포함하여, 다양한 정규 표현식 엔진의 성능을 비교 분석했다. 특히, 보완 연산(Complement Operation)을 지원하는 RE#의 성능이 기존 엔진보다 우수함을 강조했다. 벤치마크 결과에 따르면, RE#은 복잡한 패턴에서 백트래킹(Backtracking) 기반 엔진보다 최대 6만 배 이상 빠른 속도를 보였다. 이는 HTML 파싱(HTML Parsing)과 같은 작업에서 성능 향상을 기대할 수 있음을 시사한다.

백트래킹(Backtracking) 엔진의 취약점

저자는 백트래킹(Backtracking) 기반 정규 표현식 엔진의 취약점을 지적하며, 특히 최악의 경우 지수 시간 복잡도(Exponential Time Complexity)를 갖는 문제를 강조했다. Python re와 같은 엔진은 특정 패턴에서 극심한 성능 저하(Severe Performance Degradation)를 보이며, 서비스 거부 공격(DoS)에 악용될 수 있다. 이러한 문제는 정규 표현식 취약점(Regex Vulnerability)으로 이어질 수 있으며, 코드 보안에 심각한 위협이 된다.

\d 사용의 위험성: 유니코드(Unicode) 문제

저자는 \d 메타 문자가 유니코드(Unicode) 숫자를 포함하여, 예상치 못한 결과를 초래할 수 있다고 경고했다. 예를 들어, \d{16} 패턴은 ASCII 숫자뿐만 아니라, 다양한 유니코드(Unicode) 숫자도 허용하여 유효성 검사(Validation)를 우회할 수 있다. 이는 버퍼 오버플로우(Buffer Overflow)와 같은 보안 취약점으로 이어질 수 있으며, 데이터 처리 과정에서 예기치 않은 문제를 발생시킬 수 있다.

RE# 엔진의 특징 및 활용 방안

저자는 RE# 엔진이 보완(complement), 교차(intersection) 연산을 지원하며, 백트래킹(Backtracking) 문제를 해결했다고 설명했다. RE#은 심볼릭 오토마타(Symbolic Automata)를 사용하여, 기존 엔진의 성능 및 보안 문제를 개선했다. 저자는 RE#을 활용하여, 정규 표현식 기반 시스템(Regex-based System)의 성능을 향상시키고, 보안 취약점을 줄일 수 있다고 제안했다.

what 262,715 regex questions on stack overflow haven't answered