레이스 컨디션(Race Condition)
기본 개념
레이스 컨디션은 둘 이상의 프로세스나 스레드가 공유 자원에 동시에 접근할 때, 접근 순서에 따라 비정상적(원하지 않는) 결과가 발생하는 조건/상황을 말함
실행되는 프로세스가 임시 파일을 만드는 경우, 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시 파일을 목적 파일로 연결(심볼릭 링크)하여 악의적인 행위를 할 수 있는데 이를 레이스 컨디션 공격이라 함
만약 프로세스가 setuid 설정이 되어 root 권한으로 실행된다면, 권한 상승을 통해 중요 자원(파일)에 접근할 수 있는 심각한 문제가 발생할 수 있음
파일 링크
하드 링크
- 하드 링크를 간단히 말하면 똑같이 복사된 파일을 만드는 것임. 하드 링크된 파일을 수정하면 원래 파일도 똑같이 수정됨. 또한, 두 파일 중 하나를 삭제하면 파일의 내용은 바뀌지 않고 링크의 숫자만 하나 줄어듦
- 즉, 하드 링크에서는 두 파일이 각각 동일한 수준의 데이터를 가지며 서로 그 데이터를 동기화함
- 하드 링크에는 한 가지 제약점이 있는데, 동일한 파티션 내에서만 사용할 수 있으며 다른 파티션에 존재하는 파일을 링크할 수 없음
심볼릭 링크
- 레이스 컨디션 공격에 쓰이는 심볼릭 링크는 하드 링크와는 조금 다름. 심볼릭 링크는 하드 링크와 달리 실제 두 파일을 생성하여 링크하지 않음
- 데이터가 있는 파일은 하나만 존재하고, 심볼릭 링크는 단지 원본 파일 데이터를 가리키는 링크 정보만 가짐
- 원본 파일과 심볼릭 링크는 원본 파일이 삭제되더라도 원본 파일의 이름과 위치를 기억하고 계속 그 파일을 바라보는 상태로 남음
- 만약에 삭제된 원본 파일 대신 처음 원본 파일과는 다르지만, 똑같은 경로에 같은 파일명으로 파일을 생성해 보면, 심볼릭 링크 파일은 새로 생성된 파일에 여전히 심볼릭 링크 파일로 존재하게 됨
심볼릭 링크와 레이스 컨디션 공격
- 레이스 컨디션 공격은 소유자가 root이고, SetUID 비트를 가지며, 임시 파일을 생성하는 파일을 대상으로 함
- 이렇게 실행되는 프로그램에 대해 레이스 컨디션 공격을 수행하려면 생성되는 임시 파일의 이름과 위치를 알고 있어야 함
- 파일이 생성되는 디렉터리에 쓰기 권한이 있어야 함
- 리눅스에는 lsof(list open files)라는 명령어가 있음. lsof 명령어로 특정 파일에 접근하는 프로세스 목록이나 해당 프로세스가 사용하는 파일 목록을 확인할 수 있음
- 생성된 임시 파일을 확인한 후, 해당 임시 파일 이름으로 프로그램이 실행되기 전 심볼릭 링크 파일을 생성할 수 있음. 더불어 해당 심볼릭 링크 파일은 관리자 권한으로만 접근할 수 있는 /etc/passwd와 같은 중요 파일 등을 가리킬 수 있게 됨
대응책
- 프로그램 로직에서 임시 파일을 생성한 후, 임시 파일에 접근하기 전에 임시 파일에 대한 심볼릭 링크 설정 여부와 권한에 대한 검사 과정 추가
- 가능하면 임시 파일을 생성하지 않음
- 임시 파일 생성 시 umask를 적어도 022로 설정하여, 임시 파일에 대한 공격자의 악의적인 삭제 예방
- Sticky Bit를 설정하여 unlink( )를 통한 파일 삭제 제한
- 임시 파일 사용 시 파일의 링크 상태, 종류, 소유자, 변경 여부 등을 점검
- SetUID가 설정된 파일을 오픈할 때는 심볼릭 링크 여부 확인
- 심볼릭 링크를 사용하지 않거나, 추측이 어려운 파일 이름 사용
'정보보안 > 시스템보안' 카테고리의 다른 글
시스템 보안위협 시스템 자원고갈 공격 (0) | 2025.02.25 |
---|---|
시스템 보안위협 백도어 (0) | 2025.02.24 |
시스템 보안위협 포맷 스트링 공격 (0) | 2025.02.22 |
시스템 보안위협 버퍼 오버플로 공격 (0) | 2025.02.21 |
서버 보안 서버 해킹 기법 (0) | 2025.02.20 |