본문 바로가기
정보보안/시스템보안

시스템 보안위협 레이스 컨디션 공격

by 피갓자 2025. 2. 23.

시스템 보안위협 레이스 컨디션 공격
시스템 보안위협 레이스 컨디션 공격

레이스 컨디션(Race Condition)

기본 개념

레이스 컨디션은 둘 이상의 프로세스나 스레드가 공유 자원에 동시에 접근할 때, 접근 순서에 따라 비정상적(원하지 않는) 결과가 발생하는 조건/상황을 말함

실행되는 프로세스가 임시 파일을 만드는 경우, 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시 파일을 목적 파일로 연결(심볼릭 링크)하여 악의적인 행위를 할 수 있는데 이를 레이스 컨디션 공격이라 함

만약 프로세스가 setuid 설정이 되어 root 권한으로 실행된다면, 권한 상승을 통해 중요 자원(파일)에 접근할 수 있는 심각한 문제가 발생할 수 있음

파일 링크

하드 링크

  • 하드 링크를 간단히 말하면 똑같이 복사된 파일을 만드는 것임. 하드 링크된 파일을 수정하면 원래 파일도 똑같이 수정됨. 또한, 두 파일 중 하나를 삭제하면 파일의 내용은 바뀌지 않고 링크의 숫자만 하나 줄어듦
  • 즉, 하드 링크에서는 두 파일이 각각 동일한 수준의 데이터를 가지며 서로 그 데이터를 동기화함
  • 하드 링크에는 한 가지 제약점이 있는데, 동일한 파티션 내에서만 사용할 수 있으며 다른 파티션에 존재하는 파일을 링크할 수 없음

심볼릭 링크

  • 레이스 컨디션 공격에 쓰이는 심볼릭 링크는 하드 링크와는 조금 다름. 심볼릭 링크는 하드 링크와 달리 실제 두 파일을 생성하여 링크하지 않음
  • 데이터가 있는 파일은 하나만 존재하고, 심볼릭 링크는 단지 원본 파일 데이터를 가리키는 링크 정보만 가짐
  • 원본 파일과 심볼릭 링크는 원본 파일이 삭제되더라도 원본 파일의 이름과 위치를 기억하고 계속 그 파일을 바라보는 상태로 남음
  • 만약에 삭제된 원본 파일 대신 처음 원본 파일과는 다르지만, 똑같은 경로에 같은 파일명으로 파일을 생성해 보면, 심볼릭 링크 파일은 새로 생성된 파일에 여전히 심볼릭 링크 파일로 존재하게 됨

심볼릭 링크와 레이스 컨디션 공격

  • 레이스 컨디션 공격은 소유자가 root이고, SetUID 비트를 가지며, 임시 파일을 생성하는 파일을 대상으로 함
  • 이렇게 실행되는 프로그램에 대해 레이스 컨디션 공격을 수행하려면 생성되는 임시 파일의 이름과 위치를 알고 있어야 함
  • 파일이 생성되는 디렉터리에 쓰기 권한이 있어야 함
  • 리눅스에는 lsof(list open files)라는 명령어가 있음. lsof 명령어로 특정 파일에 접근하는 프로세스 목록이나 해당 프로세스가 사용하는 파일 목록을 확인할 수 있음
  • 생성된 임시 파일을 확인한 후, 해당 임시 파일 이름으로 프로그램이 실행되기 전 심볼릭 링크 파일을 생성할 수 있음. 더불어 해당 심볼릭 링크 파일은 관리자 권한으로만 접근할 수 있는 /etc/passwd와 같은 중요 파일 등을 가리킬 수 있게 됨

대응책

  • 프로그램 로직에서 임시 파일을 생성한 후, 임시 파일에 접근하기 전에 임시 파일에 대한 심볼릭 링크 설정 여부와 권한에 대한 검사 과정 추가
  • 가능하면 임시 파일을 생성하지 않음
  • 임시 파일 생성 시 umask를 적어도 022로 설정하여, 임시 파일에 대한 공격자의 악의적인 삭제 예방
  • Sticky Bit를 설정하여 unlink( )를 통한 파일 삭제 제한
  • 임시 파일 사용 시 파일의 링크 상태, 종류, 소유자, 변경 여부 등을 점검
  • SetUID가 설정된 파일을 오픈할 때는 심볼릭 링크 여부 확인
  • 심볼릭 링크를 사용하지 않거나, 추측이 어려운 파일 이름 사용