-
경쟁조건 (ToCTToU 취약점)CS/보안 2023. 1. 3. 19:37
경쟁 조건
시분할 OS에서 여러 프로세스나 스레드가 병'행' 수행 될때
같은 자원을 공유하는 프로세스나 스레드의 실행 순서에 따라 결과가 바뀌는 상황
Time of Check to Time of Use = ToCTToU 취약점
access() -> /tmp/X 파일이 RUID = user가 write 가능한 파일인지 확인
open() -> /tmp/X 파일이 EUID = root가 write 가능한 파일일 경우 open
=> /tmp/x 파일을 seed가 write 가능한 파일로 변경하여 access() 통과
=> /tmp/x 파일을 /etc/passwd를 가리키는 심볼릭 링크로 변경 = passwd 파일 open()
실습 준비
$sudo sysctl –w fs.protected_symlinks=0
심볼릭 링크 제한 해제
$ln –s /etc/passwd [파일명]
lrwxrwxrwx. 1 csos csos 11 oct 25 05:06 myln
-> /etc/passwd를 가르키는 심볼릭 링크
공격 프로그램
/tmp/X 파일을 유저가 실행 가능한 파일과 /etc/passwd를 가르키는 심볼릭 링크로 주기적으로 변경
쉘 스크립트
vulp = setuid가 지정된 취약한 프로그램
passwd_input = "test : hashgap : 0 : 0 : test : /root : /bin/bash" = root 권한의 유저 생성
ls – l = timestamp = /etc/passwd 파일이 변조됐는지 확인 = 변조 될 때 까지 수행
경쟁조건 방어 기법
1)atomic operation
O_CREAT = /tmp/X 가 존재하지 않으면 생성 후 open
=> 파일이 없을때 if 통과 -> /ect/passwd 심볼릭 링크 파일 생성 -> root 권한으로 open
f = open (file, O_CREAT | O_EXCL)
-> 파일이 이미 존재하거나 path name이 symbolic link면 open()이 실패함
2)check와 use 반복
파일을 3번 열어서 fd의 아이노드가 전부 동일한지 확인
3)Sticky Symlink Protection
$sudo sysctl –w fs.protected_symlinks=1
sticky bit가 지정된 디렉토리에 존재하는 심볼릭 링크는 owner (seed)가
follower (EUID = root)나 directory owner ( = root )와 일치해야함
4)최소 권한의 원칙
프로그램에게 필요한 최소한의 권한만 부여할 것
'CS > 보안' 카테고리의 다른 글
Code Reuse Attack ( RTL, ROP ) (0) 2023.01.03 버퍼 오버플로우 & 메모리 보호 기법 (0) 2023.01.03 인증 & 접근 제어 & 키 분배프로토콜 (0) 2023.01.02 공개키 암호 (0) 2023.01.02 대칭키 암호 운용 모드 (0) 2023.01.02