TOCTOU 경쟁조건 (Time-of-Check to Time-of-Use (TOCTOU) Race Condition)

정보보안학
한 줄 정의: 자원의 상태를 확인하는 시점과 실제로 사용하는 시점 사이에 그 상태가 몰래 바뀌어 발생하는 보안 취약점입니다.

쉽게 풀면

은행 창구에서 신분증을 확인한 뒤 바로 처리하면 문제가 없지만, 확인만 하고 잠시 자리를 비운 사이 다른 사람이 신분증을 바꿔치기하면 엉뚱한 사람에게 돈을 내줄 수 있습니다. TOCTOU 경쟁조건은 프로그램이 파일이나 자원의 상태를 "확인"한 시점과 실제로 "사용"하는 시점 사이에 그 틈을 노려 상태를 바꿔치기하는 공격입니다. 프로그램 입장에서는 분명 확인을 했는데도 결과가 달라지는 셈입니다. 이 틈이 아주 짧더라도 반복 시도를 통해 공격이 성공할 수 있습니다.

왜 중요한가

파일 권한 검사, 임시 파일 생성, 인증 상태 확인 등 시스템 프로그램에서 "확인 후 사용"하는 패턴은 매우 흔하기 때문에, TOCTOU 취약점은 오래전부터 시스템 보안 연구의 단골 주제입니다. 이 취약점이 커널 권한상승이나 파일 위변조 같은 심각한 공격으로 이어질 수 있어 정보보안학에서 계속 다뤄지고 있습니다.

논문에서는 이렇게 쓰입니다

"파일 시스템 접근 함수에서 발견된 TOCTOU 경쟁조건을 이용해 권한 검사를 우회하는 공격을 시연하였다."

파일 접근 권한을 확인한 직후 그 파일을 다른 파일로 바꿔치기해서 검사를 무력화하는 공격을 실제로 재현했다는 뜻입니다.

"심볼릭 링크를 이용한 TOCTOU 공격은 검사 대상 경로와 실제 사용되는 경로를 다르게 만든다."

바로가기 링크의 성질을 악용해서, 검사할 때와 실제 열 때 서로 다른 파일을 가리키도록 조작하는 방식이라는 설명입니다.

조금 더 깊게 보면

TOCTOU 취약점을 방어하는 방법으로는 확인과 사용을 하나의 원자적(atomic) 연산으로 묶는 방식, 파일 디스크립터처럼 이름이 아닌 고정된 참조를 사용해 중간에 대상이 바뀌지 않도록 하는 방식 등이 연구되어 왔습니다. 이 취약점은 넓게 보면 동시성 프로그래밍에서 발생하는 경쟁조건(race condition)의 한 종류로 분류됩니다.

주의할 점

공격이 성공하기 위한 시간 간격이 매우 짧아 보일 수 있지만, 반복 시도나 시스템 부하를 이용해 그 간격을 의도적으로 넓히는 기법도 존재하므로 짧다고 안전하다고 단정할 수 없습니다.

관련 용어