EYEN

레이스 컨디션 본문

자기주도학습/환경설정 및 배경지식

레이스 컨디션

EYEN 2024. 9. 27. 20:36

 
1) 레이스 컨디션 공격의 개념
 
- 레이스 컨디션은 둘 이상의  프로세스나 스레드가 공유 자원에 동시 접근할 때 순서에 따라 결과가 달라지는 조건이나 상황을 말한다.
- 실행중인 프로세스(공격대상)가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시파일을 목적파일로 연결(=심볼릭 링크) 하여 악의적인 행위를 할 수 있다. 
- 만약 프로세스가 SetUID 설정이 되어 root 권한으로 실행된다면 권한 상승을 통해 심각한 문제가 발생할 수 있음
 
2) 레이스 컨디션 공격의 아이디어
 
- 일종의 끼워넣기
- 관리자 권한으로 실행되는 프로그램 중간에 끼어들어 자신이 원하는 작업을 수행하는 것( 관리자 권한의 형태로 실행되고 있는 프로그램에 끼어드는 것= 권한 상승 공격)
기존 프로세스
- 프로세스 시작->임시파일 열기->임시파일에 대한 작업 수행->임시파일 닫기->프로세스 종료
공격 시
-프로세스 시작->임시파일에 대한 공격->임시파일 열기-> 임시파일에 대한 작업 수행->임시파일 닫기->프로세스 종료
  
예시
1) ./decipher tmp & : 로 암호문을 평문으로 해독해서 tmp에 저장하도록함. decipher는 20초 뒤에 동작하도록함.
2) ln -s ./file tmp : 로 file이 tmp를 가리키게 심볼릭 링크를 만듦
3) cat file : 이걸하면 tmp를 볼 수 있게 됨. 
 
같은 원리로 만약 임의의 파일에 임의의 내용을 쓸 수 있는 race라는 실행파일이 있을 때
1) ./race etc/password (root권한을 가진 사용자)
2) ln -s ./attack 
3) 
중간이 ln -s 가 안 됐긴한데 이전에 이미 해놔서 그대로 잘 적용됐다. 

 
3) 임계 영역 개념
 
- 레이스 컨디션 공격을 막기 위함
- 하나의 프로세스를 끝내기 전에는 CPU를 놓지 않음
- 즉, 다른 프로세스가 중간에 끼어들 수 없음
- 레이스 컨디션 패치 방법
 
레이스 컨디션이랑 심볼릭 링크랑 연계된 이유가 뭐임
자원이 겹치는거랑 심볼릭 링크랑 뭔 상관이냐고
원본을 실행시키는 척하면서 심볼릭 링크를 실행한다는건가??
 
3. 파일 링크의 이해
1) 파일 링크란?
windows의 바로가기
하드링크와 심볼릭 링크가 있음
 
2) 하드 링크
원본이 똑같이 생성되고, 동일한 수준이며 로그 또한 동기화됨
총 두 개가 만들어짐
하드 링크된 파일을 수정하면 원래 파일 /root/a.txt 파일도 똑같이 수정됨
리눅스에서 ls명령어를 통해 나오는 링크 개수는 하드링크 개수를 말하며 원본 파일을 수정하면 하드링크도 수정됨, 하드링크를 수정하면 원본 파일도 수정됨
 
3) 심볼릭 링크
하드 링크와 달리 두개의 파일을 생성하지 않음
동기화의 개념이 아니라 데이터가 있는 파일이 처음부터 하나 뿐임
포인터 개념과 비슷함
하드링크는 파일이 두개여서 두개가 동기화되지만, 심볼릭 링크는 파일이 하나이며 바로가기처럼이동하여 파일을 보여줌
  
4) 동일 권한의 원본 파일 재생성하기
심볼릭 링크는 원본 파일이 삭제되더라도 원본 파일의 이름과 위치를 기억하고 계속 그 파일을 바라보는 상태로 남게됨
삭제된 원본 파일 대신 똑같은 경로에 새 파일을 생성할 경우 처음과 같은 심볼릭 링크로 파일 존재
dangling pointer 같은 거구나
 
 
4. 레이스 컨디션 공격의 이해
1) 심볼릭 링크와 레이스 컨디션 공격
- 실행되는 프로그램에대한 레이스 컨디션 공격 수행 조건
  파일 소유자가 root 이고 SetUID 비트를 가져야함
  생성되는 임시 파일의 이름을 알고 있어야함
 
ps 명령어로 특정 파일에 접근하는 프로세스 목록 확인
lsof 명령어로 특정 프로세스가 사용하는 파일 목록 출력 가능
 
생성된 임시 파일을 확인하면 임시 파일 이름으로 프로그램이 실행되기 전 심볼릭 링크 파일 생성 가능
프로그램이 임시 파일을 사용하기 위해 생성한
 
 
참고 자료
https://cordingdiary.tistory.com/119

[시스템 보안] 레이스 컨디션 (race condition)

1. 공유자원의 접근 1) 공유 자원 - 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말함 - 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라짐 2)

cordingdiary.tistory.com

 
 

'자기주도학습 > 환경설정 및 배경지식' 카테고리의 다른 글

DreamHack-Use after free  (0) 2024.10.29
IDA 플러그인으로는 작동이 안 되는 bindiff쓰기  (0) 2024.10.14
Firebase 보안 규칙  (0) 2024.05.20
Nox 다운로드  (1) 2024.03.17
Cheat Engin  (0) 2023.04.06