토픽 199 / 210·애플리케이션 보안
TOCTOU (Time-of-Check to Time-of-Use) 공격
TOCTOU (Time-of-Check to Time-of-Use) 공격
자원의 검사 시점(Time-of-Check)과 실제 사용 시점(Time-of-Use) 사이의 시간차를 악용하여 검사를 우회하는 경쟁 상태(Race Condition) 기반 공격 (125회 출제)
목적: 접근 권한 검사 우회, 권한 상승, 파일/자원 조작, 인증 우회
특징: 경쟁 상태(Race Condition) 악용, 시간 간격(Time Window) 존재, 비결정적 재현(타이밍 의존), 다중 프로세스/스레드 환경에서 발생
동작 시나리오 (파일 시스템 TOCTOU)
- •① 프로세스 A: access("/tmp/file", W_OK)로 파일 접근 권한 검사 → 허용
- •② 공격자: 검사와 사용 사이 시간차에 심볼릭 링크 변경 (ln -sf /etc/shadow /tmp/file)
- •③ 프로세스 A: open("/tmp/file", O_WRONLY)로 파일 열기 → 실제로는 /etc/shadow에 접근
- •④ 결과: 권한 없는 /etc/shadow 파일에 쓰기 성공 → 권한 상승
유형
- •파일 시스템 TOCTOU: 파일 존재/권한 확인 후 실제 접근 시 심볼릭 링크 변경 (가장 일반적)
- •인증 TOCTOU: 인증 토큰 검증 후 실제 사용 시점에 토큰 교체/변조
- •메모리 TOCTOU: 공유 메모리 값 검증 후 사용 전 다른 스레드가 변경
- •네트워크 TOCTOU: DNS 응답 검증 후 실제 연결 시 DNS 리바인딩
방어 기법
- •원자적 연산(Atomic Operations): 검사와 사용을 단일 원자적 작업으로 수행 (O_CREAT|O_EXCL 플래그)
- •파일 잠금(File Locking): flock(), fcntl() 잠금으로 경쟁 상태 방지
- •안전한 API 사용: access()+open() 대신 open() 후 fstat()으로 파일 디스크립터 기반 검사
- •파일 디스크립터 기반 연산: 경로명 대신 fd 기반 함수 사용 (fchown, fchmod, fstat)
- •권한 분리: 최소 권한 원칙, setuid 프로그램 최소화
- •안전한 디렉토리 사용: /tmp 대신 제한된 권한의 전용 디렉토리 사용
CWE 매핑: CWE-367 (Time-of-check Time-of-use Race Condition)
관련 CWE: CWE-362(경쟁 상태), CWE-59(심볼릭 링크 추적), CWE-61(UNIX 심볼릭 링크 추적)
장점(공격자): 탐지 어려움, 타이밍만 맞으면 권한 상승, setuid 프로그램 대상 효과적
단점(공격자): 재현 불확실(타이밍 의존), 환경 의존적, 자동화 어려움
적용사례: Unix/Linux setuid 프로그램 취약점, 웹 애플리케이션 파일 업로드, 컨테이너 환경 파일 접근
비교: TOCTOU(시간차 악용/경쟁상태) vs Buffer Overflow(메모리 초과/스택) vs SQL Injection(입력값 조작/쿼리)
연관: Race Condition, CWE, 시큐어 코딩, 접근 제어, 권한 상승