20
이세한 (Alchemic) www.facebook.com/SeHan.Lee.KoreaTech www.softtrack.co.kr

레이스 컨디션 기초(Basic Race Condition)

  • View
    894

  • Download
    10

Embed Size (px)

Citation preview

Page 1: 레이스 컨디션 기초(Basic Race Condition)

이세한 (Alchemic)

www.facebook.com/SeHan.Lee.KoreaTech www.softtrack.co.kr

Page 2: 레이스 컨디션 기초(Basic Race Condition)

0x01. What is Race Condition? 0x02. The Basic of Race Condition Attack 0x03. The Story of Race Condition 0x04. DEMO 0x05. How can we prevent Race Condition?

Page 3: 레이스 컨디션 기초(Basic Race Condition)

자원을 동시에 사용하려는 프로세스들이 자원 사용을 하기 위해 프로세스들이 경쟁을 하는 것.

프로세스들이 경쟁하는 것을 이용하여 관리자 권한을 얻는 공격 방법.

Page 4: 레이스 컨디션 기초(Basic Race Condition)
Page 5: 레이스 컨디션 기초(Basic Race Condition)

1. 취약 프로그램이 생성하는 임시 파일의 이름을 파악. 2. 생성될 임시 파일과 같은 이름의 파일을 생성. 3. 이에 대한 심볼릭 링크를 생성. 4. 원본 파일을 지운 채 취약 프로그램이 심볼릭 링크를 건 파일과 같은 파일을 생성할 때를 기다린다. 5. 생성되었을 때, 심볼릭 링크를 이용해 파일 내용을 변경. 6. 시스템은 변경된 파일을 자신이 생성한 임시 파일로 생각하고 프로세스를 진행시킬 것이고, 공격자는 관리자 권한으로 실행되는 프로그램에 끼어들어 무언가를 할 수 있는 여지를 만든다.

Page 6: 레이스 컨디션 기초(Basic Race Condition)

실습환경 : Red Hat Linux 9.0

Page 7: 레이스 컨디션 기초(Basic Race Condition)

- 첫 번째 - 관리자는 일반 사용자들이 자유롭게 파일을 생성하고 내용을 입력할 수 있게 하도록 다음 소스 코드를 짜고, 실행 파일을 생성한 뒤, setuid 설정을 하여 일반 사용자도 이용할 수 있도록 합니다.

Page 8: 레이스 컨디션 기초(Basic Race Condition)

해커는 소스의 취약점을 분석하여 다음과 같은 행동을 합니다.

Page 9: 레이스 컨디션 기초(Basic Race Condition)

- 두 번째 - 자신이 만든 프로그램의 취약점으로 인해 해커가 관리자 권한을 취득한 것을 알아챈 관리자는 이를 막기 위해 소스코드를 수정합니다.

Page 10: 레이스 컨디션 기초(Basic Race Condition)

즉, 사용자들이 관리자가 지정한 파일만 수정할 수 있도록 소스를 수정합니다. 하지만 해커는 심볼릭 링크를 이용하여 다시 관리자 권한을 취득합니다. 심볼릭 링크를 통해 리눅스의 계정 관리 파일인 /etc/passwd 에 접근이 가능한 것입니다.

심볼릭 링크 생성

Page 11: 레이스 컨디션 기초(Basic Race Condition)

- 세 번째 – 관리자는 최후의 수단으로 자신이 지정한 파일을 지우고 새로 생성하도록 소스를 수정합니다. 이렇게 하면 기존에 생성되었던 심볼릭 링크 파일은 삭제가 되고 새로운 파일이 생성되어 해커가 이용할 수 없습니다.

Page 12: 레이스 컨디션 기초(Basic Race Condition)

결국 해커는 최후의 수단으로 Race Condition Attack 을 수행하려고 준비합니다.

attack1.c

attack2.c

Page 13: 레이스 컨디션 기초(Basic Race Condition)

먼저, 해커는 attack1 이라는 소스를 짜서 프로그램을 만든 뒤, 실행시킵니다.

Page 14: 레이스 컨디션 기초(Basic Race Condition)

다음으로, 해커는 attack2 라는 소스를 짜서 프로그램을 만든 뒤, 실행시킵니다.

Page 15: 레이스 컨디션 기초(Basic Race Condition)

Process attack1

Process attack2

sample.txt 삭제 sample.txt 생성 심볼릭 링크 생성

(X)

sample.txt 삭제 sample.txt 생성 심볼릭 링크 생성

(X)

심볼릭 링크 생성 sample.txt 생성 (명령어 수행)

Sample.txt 삭제 (O)

sample.txt 삭제 sample.txt 생성 심볼릭 링크 생성

(X)

sample.txt 삭제 sample.txt 생성

심볼릭 링크 생성

. . .

. . .

Page 16: 레이스 컨디션 기초(Basic Race Condition)
Page 17: 레이스 컨디션 기초(Basic Race Condition)
Page 18: 레이스 컨디션 기초(Basic Race Condition)

• if(lstat(filename, &st) != 0) • lstat함수는 파일의 심볼릭 링크의 유뮤에 대한 정보를 반환해준다.

• if(!s_ISREG(st.st_mode)) • 구조체 st에 대한 st_mode 값으로 파일의 종류에 대한 것을 확인한다. • S_ISBLK- 블록파일 테스트 • S_ISCHR- 문자파일 테스트 • S_ISDIR- 디렉토리 테스트 • S_ISFIFO- FIFO 테스트 • S_ISREG- 일반적인 파일 테스트 • S_ISLNK- 심볼릭 링크 테스트

Page 19: 레이스 컨디션 기초(Basic Race Condition)

• if(st.st_uid != 0) • 생성된 파일의 소유자가 root가 아닌 경우를 검사한다. 공격자에 의해 자신이 생성한 파일이 삭제되고, 접근하고자 하는 파일이 일반 계정 소유의 파일인지 확인한다.

• if(fstat(fd, &st2) ! = 0) • 파일 포인터에 의해서 열려진 파일의 정보를 모아 st2구조체에 이를 전달한다.

• if(st.st_ino != st2.st_ino) || st.st_dev != st2.st_dev) • 최초 파일에 대한 정보를 저장하고 있는 st와 파일을 연 후의 st2에 저장된 I 노드 값과 장치(device)값이 변경되었는지 확인한다.

Page 20: 레이스 컨디션 기초(Basic Race Condition)

Thank you!!