link 링크란?

윈도우의 바로가기 처럼, 존재하는 파일에 대한 포인터를 갖는 기능이다.

 

 

 

하드 링크 (Hard link)

ln 명령어를 통해 하드 링크를 생성한다.

 

- 실제 파일의 아이노드를 가리키는 링크로, 대상 파일과 동일한 아이노드 번호와 허가권을 가진다.

- 원본 파일이 이동하거나 삭제되더라도 아이노드 번호를 기반으로 원본 파일을 참조할 수 있다.

- 대상 파일을 옮기거나 삭제하더라도 참조할 수 있다.

- 디렉토리는 링크할 수 없다.

 

원본 파일이 위치할 /origin 디렉토리와 링크 파일이 위치할 /link 디렉토리를 생성하였다.

 

/origin 디렉토리에 hello 라는 파일을 생성하였다. 이때, 아이노드 번호에 주목해야한다. 디렉토리와 그 하위 파일의 아이노드 번호는 순차적이다. 

 

다음으로, 원본 파일에 대한 하드링크 파일을 /link 디렉토리의 하위에 생성하였다. /link 디렉토리가 가진 아이노드 번호의 다음 순번이 아닌, 원본 파일과 하드 링크 파일의 아이노드 번호가 일치하는 것을 확인할 수 있다.

 

심볼릭 링크 (Symbolic link)

ln -s 명령어로 심볼릭 링크를 생성한다.

 

- 실제 파일의 아이노드를 가리키는 링크가 아닌, 

파일의 경로만을 참조

다.

- 원본 파일과 심볼릭 링크는 아이노드 번호와 허가권이 불일치한다.

- 원본 파일이 이동하거나 삭제되면 원본 파일을 참조할 수 없다.

- 디렉토리도 링크할 수 있다.

 

원본 파일에 대한 심볼릭 링크 파일을 생성하였다.

 

하드링크와 달리, /link 디렉토리가 가진 아이노드 번호의 다음 순번인 아이노드 번호를 사용하고 있는 것을 확인할 수 있다.

 

하드 링크과 심볼릭 링크 비교

 

원본 파일, 하드 파일 그리고 심볼릭 링크가 모두 같은 내용을 공유하고 있음을 확인할 수 있다.

 

하드 링크는 디렉토리 링크 불가능, 심볼릭 링크는 가능하다.

 

원본 파일이 삭제되거나 변경되면 하드링크는 참조 가능, 심볼릭 링크는 불가능하다.

 

 

레이스 컨디션 공격

둘 이상의 프로세스 및 스레드가 공유 자원에 접근할 때, 순서에 따라서 결과가 발생하게 된다. 이때, 관리자 권한으로 실행되는 프로그램의 중간에 공격자가 끼어들어 원하는 작업을 수행하는 공격이다.

 

일반 사용자가 Set-UID 특수 권한이 설정되어있는 파일을 실행할 때, 생성되는 임시 파일의 이름과 동일하게 주요 파일을  심볼릭 링크하여 공격자가 root 권한 상승을 통한 공격을 수행한다. 주요 파일을 수정하거나 root 패스워드를 탈취할 수 있다. 

 

다음과 같은 내용으로 작성된 race.c 파일이 있다.

 

정상적인 동작

- 임시 파일 존재여부를 확인한다.

- 이미 존재한다면, 삭제 후 재생성한다.

- 임시 파일에 접근한 후 작업을 수행한다.

 

race.c 동작

- 임시 파일 존재 여부를 확인한다.

- 존재하는 경우, 심볼릭 링크가 아니면 삭제한다.

- 임시 파일의 이름으로 심볼릭 링크를 생성한다.

 

race.c 파일을 컴파일한 후, Set-UID 값을 설정하였다.

 

1) root 계정 암호 없이 접속

 

race 파일이 실행되는 20초 사이에, /tmp/sevas 원본을 삭제하고 재생성한 후 주요 파일인 /etc/shadow 를 심볼릭 링크하여 해당 파일의 내용을 수정하였다. /etc/shadow 파일이 악의적으로 수정된 것을 확인할 수 있다.

 

그 결과, 암호 없이도 root 계정 로그인이 가능해진 것을 확인할 수 있다.

 

2) 관리자 계정 생성

race.c 파일의 w 값을 a 로 변경한 후 진행한다.

 

race 파일 실행 도중, 원본 파일 삭제 후 재생성한 파일에 심볼릭 링크를 걸어 홈 디렉토리가 /root 인 새 계정을 생성하였다.

 

마찬가지 방법으로, 해당 계정에 대한 암호 정보를 수정하였다.

 

그 결과, 새 계정으로 비밀번호 없이 접속하면 root 계정으로 접속되는 것을 확인할 수 있다.

 

*대응 방안*

- 가급적 임시 파일 생성을 금지한다.

- 프로세스 상에 링크가 걸려있는 것은 되도록 사용을 금한다.

- 동일한 이름의 파일이 존재하는 경우, 쓰기 및 생성을 금지한다.

 - UMASK 값을 최하 값인 022 로 유지하여 임시 파일이 공격자에 의해 사용되지 않도록 한다.

-  Set-UID 와 같은 관리자 권한이 있는 파일을 주기적으로 관리한다.

 

 

 

 

공부하면서 정리한 내용을 글로 작성하였습니다.
혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다. :)

COMMENT