본문 바로가기

정보보안기사 실기

정보보안기사 _ 7일차 _ 시스템 기본 학습 _ 시스템해킹 (레이스컨디션)

레이스 컨디션 공격

개념

1. 레이스 컨디션은 둘 이상의 프로세스나 스레드가 공유 자원에 동시에 접근할 때 접근하는 순서에 따라 비정상적인 결과가 발생하는 조건/상황

2. 실행되는 프로세스가 임시 파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행중에 끼어들어 임시파일을 목적파일로 연결해 악의적인 행위 가능

3. 만약 프로세스가 setuid 설정이 되어있어 root 권한으로 실행된다면 권한 상승을 통한 중요 자원(파일)에 접근하는 심각한 문제 발생 가능

 

내가 상식적이어서 이해가 안되는거라고 좋게 생각을 해보자.

책의 예시는 먼저

1) race_cond.c 라는 파일에 데이터를 쓸 수 있는 프로그램을 만든다.

2) 실행파일에 setuid를 설정한다.(나는 이런 상황 자체가 있을 수 없다는 생각이 너무 많이 들어.)

3) /etc/shadow 파일에서 /tmp/tmp.dat으로 심볼릭 링크 생성

   (이것도 말이 안되지 누가 /etc/shadow에 심볼릭 링크를 거니)

   * 심볼릭 링크 근데 바로가기 개념이라면서 바로가기 수정했다고 원래 파일 내용도 바뀌어?

   * 이렇게 링크를 걸면 /etc/shadow 파일은 /tmp/tmp.dat 파일을 가리키는 용도로만 존재한다고 함(이해됨)

4) /etc/shadow 파일 패스워드 확인 (이러면 현재 패스워드 암호화된게 나와)

5) 일반 사용자 모드로 race_cond 프로그램을 실행해서 /tmp/tmp.dat에 root::16118:0:99999:7::: 데이터 입력

6) 위가 일반 사용자 모드여도 setuid 설정 때문에 root권한으로 실행되고, 그래서 /etc/shadow 내용이 변경됨

7) root로 들어가서 /etc/shadow 가보면 5)에서 실행한대로 변경되어있고, 그래서 root 패스워드가 마음대로 변경된상황

 

아니 근데 이게 왜 race condition이야 뭔가 경쟁이 붙어야 race condition 아니었어? 이게뭐야...

 

대응방안

1) 가능하면 임시 파일을 생성하지 않는다

2) 파일 생성 시 이미 동일한 파일이 존재하는 경우 파일 생성 또는 쓰기를 금지한다.(????)

3) 사용하고자 하는 파일에 링크가 걸려있으면 실행을 중단한다.( 이거 훌륭하네)

4) umask를 최하 022정도로 유지하여 임시로 생성한 파일이 공격자에 의해 악의적으로 삭제되지 않도록 한다

* umask 022로 생성하면 파일은 666, 디렉터리는 777이 기본이라 644 / 755가 된다