ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 경쟁조건 (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 = rootwrite 가능한 파일일 경우 open

     

    => /tmp/x 파일을 seedwrite 가능한 파일로 변경하여 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 namesymbolic link open()이 실패함

     

     

     

    2)checkuse 반복

    파일을 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
Designed by Tistory.