Blog | Tag | Local | Guest | Login | Write |  RSS


이전글 [UNIX 보안 기초 -1-] 개요.

대표적인 공격유형에 들어가기에 앞서 유닉스 파일시스템의 간단한 구조를 재짚어 보겠습니다.

UNIX 파일시스템 아주 간략하게~



유닉스에서는 하나의 파일을 한명의 유저가 소유한다. 이를 식별하기 위해 파일 정보에는 소유주에 대한 정보가 포함된다. -> UID
 
d rwx r-x r-x


실행파일을 실행시켜 프로세스를 생성할 때에는 세개의 UID가 관련된다.
1. 파일 소유주의 UID
2. 실행시킨 사용자의 UID
3. Effective UID

1번과 2번의 비교로 권한을 비교한다. 실행 권한을 가진것으로 판명 되었을 경우 실제로 프로세스가 생성될 때에는 사용자의 UID가 Real UID가 된다. 즉, 프로세스가 실행중에 실제로 어느 사용자의 권한을 행사할 것인지를 나타내는 것은 Effective UID이다. 일반적인 경우에는 Real UID 와 Effective UID가 같다.
 Real UID와 Effective UID가 달라지는 경우는, 예를들면, 암호변경 파일을 실행하였을 때이다. 사용자 계정관리에 있어서 암호와 그 외의 사용자 정보는 /etc/passwd에 저장된다.

hankyung@ubuntu:~/sectest$ ls -al /etc/passwd
-rw-r--r-- 1 root root 1337 2008-10-15 18:39 /etc/passwd
hankyung@ubuntu:~/sectest$
/etc/passwd 의 소유주는 수퍼유저이다.

암호를 변경하기 위해서는 /etc/passwd 파일을 수정해야 하는데 유닉스에서 Effective UID를 수퍼유저로 일시적으로 만들어줌으로써 해결하고 있다.

hankyung@ubuntu:~/sectest$ ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 29104 2008-04-02 18:08 /usr/bin/passwd
hankyung@ubuntu:~/sectest$
암호를 바꾸기 위해 실행되는 프로그램인 /usr/bin/passwd
-rwsr-xr-x 에서 볼 수 있듯이 SETUID비트가 붙어있다.

* SETUID
이것의 의미는 Effective UID를 파일 소유주의 UID와 같게 한다는 것이다.
즉 자신의 암호를 수정하기 위해 /bin/passwd를 실행하면 프로그램이 실행되는 동안 수퍼유저의 권한을 가지게 된다는 것이다. 하지만 프로그램이 실행중일 때에만 다른 권한을 지니므로 다른 작업은 수행하지 못하고 해당 프로그램이 제공하는 기능만 수행할 수 있다.

만약 이러한 프로그램이 정상적으로 작동하지 못하고 다른 작업을 수행해 버린다면 그때는 시스템에 커다란 문제를 일으킬 수 있다.

* 링크
링크는 하나의 파일을 여러개의 서로 다른 이름으로 접근할 수 있도록 하는것.
이 기능을 악용하게 되면, /tmp/tmp_data 라는 파일이 있다고 치자. 이 프로그램이 수행되는 도중에 /tmp/tmp_data를 /etc/passwd로 링크시킨다면 이 프로그램은 자신이 생성한 임시 데이터를 /etc/passwd에 쓰고자 할 것이고 만약에 허용된다면 문제가 된다. 물론 이러한 방법은 해당 프로그램이 root의 권한으로 실행되지 않는다면 /etc/passwd를 수정할 수 없으므로 다소 조건이 까다로워지지만 앞서 말한 SETUID와 함께 사용된다면 충분히 가능성은 있다.


* Reference
- [book] Security PLUS for UNIX
- 내컴퓨터



시험기간이라...ㄷㄷㄷ