레이스 컨디션 (Race Condition)
발표자 : 박율기 (20052224)
Page 2
목차
1. 레이스 컨디션
2. 링크의 이해 및 실습
3. 레이스 컨디션의 이해 및 실습1. 임시파일을 이용한 레이스 컨디션
4. Q & A
레이스 컨디션 발표 순서
Page 3
레이스 컨디션
레이스 컨디션 (Race Condition)
레이스 컨디션과 공격
레이스 컨디션 – 경쟁 상태 두개 이상의 프로세스가 경쟁하는 상태 운영체제상 레이스 컨디션이 발생하면 예기치 못한 결과가 초래된다 .
레이스 컨디션 (Race Condition) 공격
관리자 권한으로 실행중인 프로세스 (A) 와 경쟁 상태 (Race Codnition) 를 만듦 A 프로세스가 사용하는 임시파일을 목표 (target) 로 한다 . A 프로세스가 사용중인 파일에 아주 짧은 공백 시간 동안 접근 하여 수정
Page 4
프로세스 A
프로세스 B
a = 10b = 5 a = 5 b = 10
Page 5
링크의 이해 및 실습
심볼릭 링크
링크의 이해
원본과 링크한 파일의 inode 가 다르다 . 원본 파일을 가리키는 파일 원본 파일 삭제 시 링크한 파일은 없는 파일을 가리키게 된다 . 디렉토리 링크 가능 다른 FileSystem 에서도 사용가능
하드 링크 원본과 링크한 파일의 inode 가 같다 . 원본 파일에 복수의 이름을 지정하는것과 같다 . 링크한 파일을 모두 삭제하여야 원본파일 삭제 된다 . 파일만 링크 가능 같은 FileSystem 에 사용가능
Page 6
Name:../Ainode:100
Name:../Binode:200
심볼릭 링크
하드 링크
DataHello World
Datalink:../A
Name:../Ainode:100
Name:../Binode:100
DataHelloWorld
Page 7
링크의 이해 및 실습
준비사항
실습 전 준비
원활한 실습을 위하여 wishfree 라는 일반권한 계정을 생성 /wishfree( 홈 디렉토리 ) 디렉토리에 race 디렉토리 생성 /root 디렉토리 확인 /root 디렉토리에 a.txt 라는 이름의 관리잔 소유 파일생성 후
실행 확인을 위하여 실행 시 눈에 띄는 문구삽입
Page 8
링크의 이해 및 실습
하드 링크
링크의 이해
1. /root/a.txt 파일 내용 확인2. a.txt 의 권한 , 링크 수 , 소유자 , 소유그룹 확인3. /root/a.txt 파일을 링크하는 link.txt 파일을 /wishfree/race 에 생성4. /wishfree/race/link.txt 파일내용 표시5. a.txt 의 권한 , 링크 수 , 소유자 , 소유그룹 확인
링크의 변화가 있는 것을 확인 할 수 있다 .
Page 9
링크의 이해 및 실습
심볼릭 링크
링크의 이해
1. /root/a.txt 파일 내용 확인2. a.txt 의 권한 , 링크 수 , 소유자 , 소유그룹 확인3. /root/a.txt 파일을 링크하는 symlink.txt 파일을 /wishfree/race 에
생성4. /wishfree/race/symlink.txt 파일내용 표시5. a.txt 의 권한 , 링크 수 , 소유자 , 소유그룹 확인
링크의 변화가 없는 것을 확인 할 수 있다 .
Page 10
링크의 이해 및 실습
/wishfree/race 디렉토리 내용
링크의 이해
결과
심볼릭 링크는 원본 파일의 링크 수에 영향을 주지 않는다 . 링크한 파일을 수정하면 원본 파일이 수정된다 .
Page 11
레이스 컨디션의 이해 및 실습
준비 사항
임시파일을 이용한 레이스 컨디션
Linux 6.2 / 7.0 (6.2 를 추천함 ) Vmware 6.0 에서 작동 (6.5 에서 Linux 6.2 / 7.0 구동 안됨 ) 일반권한 계정 필요 ( 실습의 원활한 진행을 위해 wishfree 로 진행 )
Page 12
레이스 컨디션의 이해 및 실습
소스 해석
임시파일을 이용한 레이스 컨디션
if (argc != 3) {fprintf (stderr, „usage : %s file message\n“, argv[0])exit(EXIT_FAILURE);
} 실행 시 argument 의 개수 오류검증
slep(20);if ((fp = fopen (argv[1], “w”)) == NULL) {
fprintf (“stderr, “Can’t open\n”);exit(EXIT_FAILURE);
} 쓰기권한으로 파일열수 없을 경우 오류검증
Page 13
레이스 컨디션의 이해 및 실습
소스 해석
임시파일을 이용한 레이스 컨디션
Page 14
레이스 컨디션의 이해 및 실습
/etc/shadow 파일 백업
임시파일을 이용한 레이스 컨디션
컴파일 및 SetUID 설정
chmod 4755 : UID 구분 / 소유주 권한 / 그룹권한 / 다른 사용자 권한
계정에 대한 정보가 저장되어 있고 shadow 파일을 수정하므로 백업 한다 shadow 실습 후 root 계정 정보를 변경하므로 백업이 필요하다 .
Page 15
/wishfree/race/ 에 빈 temp 파일 생성
wishfree 계정으로 로그인 한다 . 읽어 들일 임시 파일을 생성 후 tempbug 을 background(&) 로 실행한다 . 파일을 실행할 때 읽어 들일 파일명 , 삽입할 문자열을 순서대로 기입한다 .
레이스 컨디션의 이해 및 실습
임시파일을 이용한 레이스 컨디션
tempbug 실행 중 파일수정
임의로 주어놓은 20 초 안에 삭제와 링크를 하여야 한다 . fg 를 이용하여 background 작업중인 프로세스를 foreground 로 돌린다 .
Page 16
① Account 가 저장되는 항목 최대 8 자② 최대 13 글자의 password 가 암호화 되어 저장③ 1970 년 1 월 1 일로부터 최근 password 변경 날짜까지의 기간④ password 재설정 대기기간
(0 일 경우 언제든 변경 가능 )
⑤ password 유효기간(99999 일 경우 유효기간 없음 )
⑥ password 변경 경고 기간⑦ password 만기 후 계정을 사용할 수 없게 되는 기간⑧ 1970 년 1 월 1 일부터 계정이 사용불가가 된 날짜까지의 기간
root : : 12519 : 0 : 99999 : 7 : : :① ② ③ ④ ⑤ ⑥ ⑦ ⑧
__①__:__②__:__③__:__④__:__⑤__:__⑥__:__⑦__:__⑧__:
Page 17
tmpbug 프로세스
B 프로세스
/etc/shadow
temptemp
link:/etc/shadow
Page 18
root 계정 로그인
password 없이 로그인이 가능하다
/etc/shadow 복구
이전에 백업 해둔 /etc/shadow.backup 를 /etc/shadow 로 덮어쓴다 . 이제 로그인시 password 를 물어보며 , password 는 레이스 컨디션 전의 비번이다 .
레이스 컨디션의 이해 및 실습
임시파일을 이용한 레이스 컨디션
Page 19
기회가 된다면 ptrace 레이스 컨디션과레이스컨디션 방어법에 대해 추가 발표를 원합니다 .
ptrace 레이스 컨디션 실패 화면 입니다
Page 20
Q & A질문 및 부탁 드립니다 .