[FTZ] training10
드디어 마지막 트레이닝입니다. 이번에는 로컬 해킹시 핵심인 SetUID에 대해 알아봅니다.
해킹에는 Remote 해킹과 Local 해킹 두 가지가 있습니다. Remote 해킹은 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻으려 시도하는 것입니다. 다른 하나는 Local 해킹입니다. 이것은 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, 관리자 권한(root)을 얻으려 시도하는 것입니다.
Remote 해킹 방법엔 무작위로 아이디와 비밀번호를 입력해 접속하는 방법부터 데몬 취약점을 공략하는 방법, 게시판과 방명록을 이용해 접속하는 방법 등 수많은 방법이 있다고 합니다.
하지만 루트 권한을 얻는 과정이 가장 중요하기 때문에 Local 해킹이 중요합니다.
SetUID
Local 해킹에서 가장 중요한 부분이 SetUID입니다. SetUID가 있는 파일을 조작하면, 관리자 권한을 얻을 수 있습니다.
SetUID란? 직역해보자면 “ID를 설정한다”라는 의미입니다. SetUID은 바로 일시적으로 ID를 변경하는 것입니다.
그럼 SetUID는 왜 필요할까요? 어떤 사람이 자신 계정의 비밀번호를 바꾸는 상황을 생각해봅시다. 리눅스에서 사용자의 비밀번호는 모두 /etc/shadow
저장된다고 했습니다. 또한 shadow파일의 접근권한은 오직 루트에게만 있다고 했습니다.
이러한 상황에서 자신의 암호를 변경하는 passwd
파일에 루트 권한의 SetUID가 있어서 일반 사용자들이 passwd 파일을 실행하는 동안에는 루트로 일시적 아이디 변경이 가능한 것입니다.
정리하자면 SetUID가 걸린 파일을 실행하면 일시적으로 사용자의 아이디가 변경되고, 실행이 종료되면 원래의 아이디로 돌아온다는 것입니다.
대략, 어떤 원리로 루트 권한을 취득할 수 있는지 알 수 있겠죠?
SetUID 확인
passwd 파일에 SetUID가 걸려있다 했으므로 이를 확인해봅시다.
1 | [trainer10@ftz trainer10]$ ls -al /usr/bin/passwd |
결과를 분석해보면 권한부분에 s라는 문자가 있습니다. 지금까지 살펴본 문자들은 d, r, w, x밖에 없습니다. s의 의미가 바로 SetUID입니다. 원래 s 문자의 위치에는 실행권한이 있어야할 부분입니다. 즉, s는 실행권한을 포함합니다.
위의 결과는 root에게 SetUID가 걸려있으므로 어떤 사용자가 실행하더라도 실행 중에는 root 권한을 갖게된다고 분석할 수 있습니다.
우리는 find
명령어로 서버 전체에 SetUID가 걸린 파일을 찾을 수 있습니다.
1 | find / -perm -4000 |
위의 명령어는 /
디렉토리부터, 적어도 SetUID가 걸린 모든 파일을 찾도록 하는 명령입니다. -
는 적어도를 의미하며, 뒤의 숫자들이 권한을 의미합니다. 4는 SetUID, 000은 rwx를 의미합니다.
- 옵션
- -perm: 권한과 일치하는 파일을 찾습니다.
- -name: 이름과 일치하는 파일을 찾습니다.
- -user: 유저와 일치하는 파일을 찾습니다.
- -group: 그룹과 일치하는 파일을 찾습니다.
위의 옵션들은 서로 조합해 동시에 사용할 수도 있습니다.
이제, FTZ level 워게임들이 남아 있습니다. FTZ training은 사전지식 없는 사람들을 대상으로 만들어졌지만 FTZ level 워게임은 트레이닝에서 소개되지 않은 다른 리눅스 명령어들, 버퍼오버플로우와 같은 해킹 기법들을 활용합니다. 원래는 해커스쿨 강의실에서 학습한 후, FTZ 워게임을 통해 복습할 수 있도록 구성됐지만 아쉽게도 해커스쿨의 서비스가 정상적으로 제공되고 있지 않기 때문에 개인적으로 공부하며 진행하는 것이 좋습니다.
FTZ 워게임을 진행하면서 공부하셔도 되고, 어느 정도의 사전 공부를 하신 후에 도전하셔도 괜찮습니다. 오래된 문서이긴 하지만 Wowhacker팀의 달고나 문서와 약간의 리버싱 지식을 공부한 후, 입문하시는 것을 추천드립니다.
FTZ training10 정리글을 마칩니다.
FTZ level1의 비밀번호는 level1입니다.
[FTZ] training10