Computer Science Basic/Software Enginnering & Security

[소프트웨어 보안] 퀴즈: Dirty COW 경쟁 조건 공격

gapsoo 2025. 5. 17. 16:41

1. Dirty COW(Copy-On-Write) 취약점에 대한 설명으로 옳은 것은?

(1) 쓰기 작업이 발생하면 즉시 메모리 복사본이 생성되며 보호된다.

(2) MAP_SHARED로 메모리 매핑 시 개인 복사본이 생성되어야 한다.

(3) COW는 A, B, C 단계가 atomic하게 수행되므로 race condition이 없다.

(4) madvise() 호출로 페이지 테이블이 원래 매핑된 메모리를 다시 가리킬 수 있다.

 

더보기

정답: (4) madvise() 호출로 페이지 테이블이 원래 매핑된 메모리를 다시 가리킬 수 있다.

해설:

(1) X 쓰기 작업 시 즉시 복사본이 생성되지 않음. 쓰기 요청이 있을 때만 복사본을 만들며, 이때 race condition이 발생할 수 있음.

(2) X MAP_SHARED는 메모리를 공유하는 경우 사용되고, 개인 복사본은 MAP_PRIVATE에서 생성됨.

(3) X A(복사), B(페이지 테이블 갱신), C(쓰기)는 atomic하지 않아 공격자가 중간에 끼어들 수 있음.

(4) O madvise()는 MADV_DONTNEED 플래그를 이용해 페이지를 커널이 다시 매핑하도록 유도하며, Dirty COW 공격의 핵심이다.

 

2. Dirty COW 취약점 공격 코드에서 madvise() 호출의 목적은 무엇인가?

 

더보기

답:
madvise()는 매핑된 메모리를 무효화하고 페이지 테이블을 다시 원래 메모리로 가리키도록 유도하여,

Copy-On-Write로 생성된 개인 복사본을 제거하도록 한다. 이를 통해 write()가 원본 메모리에 직접 쓰게끔 race condition을 유도할 수 있다.

 

해설:
madvise()는 복사본이 아닌 원본 메모리를 수정하도록 유도하기 위해 사용된다.


3. O/X 퀴즈 
(1) Dirty COW 취약점은 Copy-On-Write 메커니즘의 원자성 부족에서 발생한다.
(2) MAP_PRIVATE로 매핑한 메모리는 여러 프로세스 간에 공유된다.
(3) /proc/self/mem 경로를 통해 현재 프로세스의 메모리에 접근할 수 있다.
(4) writeThread는 strcpy를 사용해 메모리에 문자열을 쓰는 역할을 한다.

(5) Dirty COW 취약점은 루트가 아닌 사용자도 /etc/passwd 파일을 수정 가능하게 만든다.

 

더보기

(1) O: 단계 A-B-C가 원자적으로 실행되지 않아 다른 스레드가 중간에 끼어들 수 있음
(2) X: MAP_PRIVATE는 공유하지 않고 각 프로세스에 복사본을 제공함
(3) O: /proc/self/mem은 현재 프로세스의 메모리 공간을 읽고 쓸 수 있게 함
(4) X: write() 시스템 호출을 사용함. strcpy()는 사용되지 않음
(5) O: Dirty COW 취약점은 루트가 아닌 사용자도 /etc/passwd 파일을 수정 가능하게 만든다. O COW 취약점으로 읽기 전용 파일의 실제 내용을 변경할 수 있어 권한 상승이 가능함