정규 표현식 서비스 거부 공격

Regular Expression Denial of Service (ReDoS)

설명

정규 표현식 서비스 거부 공격(Regular Expression Denial of Service, ReDoS)은 악의적으로 구성된 입력을 통해 정규 표현식을 무한 루프에 빠지게 하여 서버 자원을 소진시키는 공격입니다. 이는 서버가 입력을 처리하느라 과도한 시간을 소비하게 하여 서비스 거부 상태를 유발할 수 있습니다.

잠재적 영향

  • 서비스 거부: 서버 자원이 소진되어 정상적인 요청을 처리할 수 없게 됩니다.

  • 성능 저하: 서버 성능이 급격히 저하되어 사용자 경험이 나빠집니다.

  • 리소스 고갈: 서버 메모리 및 CPU 사용률이 높아져 다른 중요한 작업이 중단될 수 있습니다.

해결 방법

  • 정규 표현식 검토: 정규 표현식을 간단하고 효율적으로 설계합니다.

  • 타임아웃 설정: 정규 표현식 매칭에 시간 제한을 설정하여 무한 루프를 방지합니다.

  • 입력값 검증: 정규 표현식 매칭 전에 입력값을 검증하여 악의적인 패턴을 차단합니다.

취약한 코드 및 안전한 코드 예시

Unsafe Regular Expression code & Safe Regular Expression code

# Unsafe Regular Expression code
import re

pattern = re.compile(r'(a+)+$')
test_string = 'a' * 10000 + '!'
if pattern.match(test_string):
    print("Match found")
else:
    print("No match")

설명:

  • 취약한 코드: 정규 표현식이 악의적으로 구성된 입력에 대해 무한 루프에 빠져 서비스 거부 상태를 유발할 수 있습니다.

  • 안전한 코드: regex 모듈의 타임아웃 옵션을 사용하여 정규 표현식 매칭 시간을 제한합니다.

참조

Last updated