Setuid에 대해서 알아보겠습니다. 🎲🎰🎴
SetUID : 사용자의 권한이 있어야만 실행을 할 수 있는 파일의 경우, 권한을 일시적으로 파일을 실행하는 일반 사용자들에게 부여하기 위해 사용
설정 방법 : chmod 4000
대표적인 파일이 /usr/bin/passwd 파일이다.
만약에 SetUID를 설정해주지 않으면 비밀번호를 바꿀때마다 관리자에게 요청을 해야되기 때문에 귀찮아진다.
SetUID를 사용하면 일반 사용자가 잠깐 관리자의 권한을 빌려와서 쓰고 나간다.
프로세스는 3가지 ID를 가진다.
Real user ID (RUID)
-프로세스의 실제 소유자
-나의 Real ID
Effective user ID (EUID)
-SetUID 설정된 파일에 의해 변경된다.
-.프로세스에 대한 권한을 결정한다.
Saved user ID (SUID)
-이전 EUID를 복원할 수 있다.
500번 UID를 가진 일반 사용자가 있다고 가정.
passwd파일을 실행하기전에는 RUID : 500, EUID : 500이다.
passwd 실행시 EUID를 SUID에 복사하고 루트의 EUID 0번을 받아온다.
passwd 프로세스 종료시 SUID를 다시 EUID에 받아와서 500번이 된다.
그렇다면 EUID 0을 가졌을 때 RUID를 가져올 수 있다면 관리자 계정을 계속 유지할 수 있다.
[ 간단한 예제 ]
파일을 만들어준다. touch sset.c
내용을 적어준다. setuid(o)을 통해서 RUID가 0이 되고 나가기전에 /bin/bash를 실행해서 관리자 계정으로 명령어를 입력할수 있게 된다.
파일을 컴파일 해준다. gcc -o ssetd sset.c
SetUID 설정을 한다. chmod 4711 ssetd
실행을 한다.
따라서 평소에 setuid가 설정되어 있는 모든 파일을 확인하고 추가된 파일의 여부를 체크.
[확인] find / -user root -perm -4000 2> /dev/null
자주 사용하지 않는 파일을 지우고 동일한 이름을 가진 파일을 만들어 침입할수도 있기 때문에 파일들의 hash값을 빈 파일에 저장해주고 변한것이 있는지 없는지 확인하자.
md5sum를 사용
md5sum /tmp/a를 하면 해시값이 e0b6e5b734a5f03588f211aef357fb4c가 나온다.
어느 날 a파일에 해시값을 확인했는데 다른 값이 나온다면 누가 a파일을 건드렸다는 것이다.