SetUID 란?

보안/시스템 보안 2018. 3. 21. 21:22

SetUID 는 파일이 실행되는 동안에 해당 파일 소유자의 권한을 획득하는 것을 의미한다. 만약 소유자가

root라고 가정을 하면 root의 권한을 가진 일반 사용자가 해킹에 이용을 할 수 있단 소리다. 

SetUID를 이용해서 백도어를 만들 수 있고, 백도어가 있는 곳을 내 마음대로 오갈 수 있는 통로가 된다.



* 특수권한 (SetUID, SetGID, Sticky Bit)

http://brothernsister.tistory.com/32


SetUID를 기본적으로 테스팅을 해보면 아래의 간단한 프로그래밍으로 테스트를 해본다.

SetUID를 사용학 위해선 unistd.h, sys/types.h 헤더파일이 필요하다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
 
int main(int argc, char **argv)
{
    if(argc != 2)
    {
        printf("Usage: %s [user id]\n",argv[0]);
        printf("*** user id is number ***\n");
        return 1;
    }
 
    printf("real user id:%d effective user id:%d\n",getuid(), geteuid());
    uid_t uid=atoi(argv[1]);
    setuid(uid);
    printf("real user id:%d effective user id:%d\n",getuid(), geteuid());
 
    return 0;
}
cs



컴파일을 하고 터미널 창에 아래의 명령어를 입력해준다.

$ whoami
$ grep 사용자ID /etc/passwd

터미널을 이용해서 간단한 명령어를 입력하면 아래의 화면이 출력이 된다. 




/etc/passwd


            root:x:0:0:root:/root:/bin/bash

              ①  ②③④    ⑤    ⑥     ⑦          


① 필드 1 : 사용자명

② 필드 2 : 패스워드(/etc/shadow 파일에 암호화되어 있음)

③ 필드 3 : 사용자 계정 uid

④ 필드 4 : 사용자 계정 gid

⑤ 필드 5 : 사용자 계정 이름(정보)

⑥ 필드 6 : 사용자 계정 홈 디렉토리

⑦ 필드 7 : 사용자 계정 로그인 쉘


그리고 지금 로그인한 계정 말고, 다른 계정을 만들거나 다른 계정의 정보도 위의 명령어를 이용해서 /etc/passwd 정보를 확인한다.

위의 컴파일한 프로그램을 권한을 준다.


$ chomod u+s es_setuid(프로그램명)


그리고 다른 계정으로 로그인을 한다.

$ su test

$ ./ex_setuid 1001

위의 명령을 입력하면 프로그램의 원 작성자의 uid가 셋팅되어있다. 


그리고 밑에는 위의 프로그램을 리버싱을 한 것이다. 이건 다음 시간에...ㅎㅎㅎ









'보안 > 시스템 보안' 카테고리의 다른 글

[FTZ] 해커스쿨 Level5  (0) 2018.03.30
[FTZ] 해커스쿨 Level4  (0) 2018.03.28
[FTZ] 해커스쿨 Level3  (0) 2018.03.27
[FTZ] 해커스쿨 level2  (0) 2018.03.26
시스템 보안 개론  (0) 2018.02.06

설정

트랙백

댓글