* 여기에 기술된 내용을 보고 악의적인 이유로 이용할 시 법적 책임은 자신에게 있습니다.
setuid bit 설정은 파일 소유자의 권한으로 실행할 수 있게 합니다.
root 관리자의 소유 파일이 이 권한 설정이 되어있다면 관리자 권한을 빌려서 프로그램을 구동할 수 있습니다.
setuid는
chmod로 설정할 수 있습니다
setuid = 4000
setgid = 2000
sticky bit = 1000 (공용 디렉터리)
동작 구조는 이렇게 진행됩니다.
Real user id(RUID)
프로세스를 시작하는 사용자 결정
Effective user id(EUID)
프로세스에 대한 권한 결정 - (setuid 설정시)
Saved user id(SUID)
동작을 다 끝내고
이전 EUID로 돌아오기 위해 EUID를 저장해 둠
passwd 파일이 setuid 설정이 되어있는 대표적인 파일이니
실행 원리를 확인해보겠습니다.
실행 전 RUID 500 EUID 500
실행 RUID 500 EUID 0 SUID 500(전의 EUID 복사)
EUID가 0이 되어 root 권환 획득 (패스 워드 변경 가능)
종료 후 RUID 500 EUID 500 (SUID에서 복사해 옴)
보안을 위해서 버전이 올라감에 따라 EUID의 권한 변경으로는 권한을 얻지 못하게 되고 있습니다.
앞으로는 RUID의 권한을 필요로 하게 됩니다.
gcc에서 setuid 함수는
프로세스의 ruid euid suid를 모두 변경합니다.
단 파일 소유자가 root가 아닌 경우는 euid만 변경됩니다.
1. 소유자 root
실행 root
2. 소유자 root
실행 일반계정(1004)
소스에서 setuid(1003)을 넣었음에도 euid가 변경이 되지 않았습니다.
3. 소유자 root setuid bit 설정
실행 일반계정(1004)
chmod 4700 test1
euid가 0 관리자로 변경되었고 그로 인해 setuid(1003)이 작동하게 됩니다.
실행할 때 관리자의 euid로 변경이 되었습니다.
프로그램 종료 후 다시 1004로 돌아왔습니다.
4. 소유자 일반계정 (1003) setuid bit
실행 일반계정(1004)
소유자 1003으로 setuid bit 설정을 하고
다른 계정 1004로 실행했을 때입니다.
euid가 setuid bit 설정한 1003이 되었습니다.
그러나 setuid(1003)을 했음에도 uid는 1004가 되었고 euid는 1003으로 변경되었는데요
그 이유는
파일 소유자가 root 가 아니면 euid만 변경하게 되어있기 때문입니다.
그래서 위의 경우 euid만 변경이 되었습니다.
#include <stdio.h>
int main()
{
int uid,euid;
uid = getuid();
euid = geteuid();
printf("uid = %d euid = %d\n",uid,euid);
setuid(euid);
system("touch /root/test"); //root 폴더안 test파일 생성
system("id");
}
1. 소유자 root
실행 일반계정(1003)
touch가 허가 거부 되었습니다.
그 이유는 권한이 없는 uid이기 때문입니다.
2. 소유자 root setuid bit
실행 일반계정 (1003)
euid가 0 즉 root로 바뀌면서
setuid(euid)가 되어서 =setuid(0)
파일 소유자가 root이기 때문에 ruid euid suid가 모두 변경됩니다.
/root/test 파일도 문제없이 생성되었습니다.
그러면 이 문제를 어떻게 생각해 볼 수 있을까요
파일 소유자가 관리자(root)이고 setuid bit 설정되어있는 파일이 있다면
보안 적으로 위험할 수 있다는 증거가 됩니다.
이런 파일 실행과 더불어 setuid 함수를 만나게 되면 관리자 권한을 얻게 되니 말이죠
그래서 이 setuid bit 설정이 조금 더 한정적으로 사용될 필요가 있습니다.
'Hacking > System Hacking' 카테고리의 다른 글
Backdoor - NetCat (리버스 텔넷) (0) | 2019.09.26 |
---|---|
Backdoor - NetCat(Portbind) (0) | 2019.09.26 |
john the ripper (linux 계정 크래킹) (0) | 2019.09.26 |
Unsecure (FTP 크래킹) (0) | 2019.09.26 |
Cain & Abel (윈도우 계정 크래킹) (0) | 2019.09.26 |