타이밍 공격: 코드가 비밀을 유출할 수 있는 이유
카테고리
인프라/DevOps/보안
서브카테고리
보안
대상자
웹 개발자, 보안 엔지니어, 인프라 관리자
핵심 요약
- 타이밍 공격은 실행 시간 차이를 통해 비밀 정보(예: 비밀번호, 개인 키)를 유출하는 사이드채널 공격의 일종입니다.
- 웹 애플리케이션에서 인증 시 비밀번호 검증, 데이터베이스 조회 등 연산 시간 차이를 통해 공격자가 비밀 정보를 추출할 수 있습니다.
- 방어 전략:
timingSafeEqual
등 타이밍 안전 함수 사용, 가상 해시 트릭, 리퀘스트/응답 분리 아키텍처 도입이 핵심입니다.
섹션별 세부 요약
1. 타이밍 공격의 정의와 위협
- 사이드채널 공격은 암호화 알고리즘 자체를 공격하지 않고, 시스템의 물리적 실행 시간 차이를 분석해 정보를 유출합니다.
- 타이밍 공격은 네트워크를 통해 원격으로 수행될 수 있으며, 물리적 접근 없이도 수행 가능합니다.
- 2003년 RSA 1024비트 개인 키 유출 사례에서 네트워크 지터를 무시하고 시간 분석으로 공격이 성공했습니다.
2. 타이밍 공격의 실무 사례
- JavaScript 문자열 비교:
"HELLO" === "AAAA"
와 같은 조건에서,V8
엔진은 최초 불일치 시 조기 종료로 인해 시간 차이가 발생합니다. - 인증 시스템:
bcrypt.compare()
와 같은 비밀번호 비교 함수가 수행 시간에 따라 시간 유출이 발생합니다. - 레이트 제한 시스템: 정상 요청과 제한된 요청의 응답 시간 차이를 통해 공격자가 제한 기준을 파악할 수 있습니다.
3. 타이밍 공격 방어 전략
- 타이밍 안전 비교 함수 사용:
timingSafeEqual
과 같은 상수 시간 알고리즘을 통해 실행 시간이 비밀 정보와 무관하도록 설계해야 합니다. - 가상 해시 트릭: 사용자 존재 여부에 관계없이 항상 느린 비밀번호 검증을 수행해 시간 유출을 방지합니다.
- 아키텍처 차원의 방어: 요청/응답 분리, 서비스 분리, 일관된 처리 파이프라인 등으로 시간 정보를 공격자에게 무의미하게 만듭니다.
4. 모니터링 시스템 활용
- 타이밍 공격 감지: 요청 패턴, 응답 시간, 비정상 행동을 분석해 공격 시도를 탐지하고 경고합니다.
- 레이트 제한과 차별화: 감지 시스템은 요청을 차단하지 않고, 공격 패턴을 분석해 대응합니다.
결론
- 타이밍 공격 방어는
timingSafeEqual
함수 사용, 가상 해시 트릭, 아키텍처 재설계 등 3가지 핵심 전략을 통해 수행해야 합니다. - 상수 시간 알고리즘과 모니터링 시스템 도입은 타이밍 공격의 유출 경로를 차단하는 데 필수적입니다.