본문 바로가기

* DevSecOps/Linux

유닉스 해킹의 기본 SetUID

SetUID는 유닉스 해킹하는 데 가장 중요한 요소입니다.

거의 모든 유닉스 해킹은 SetUID를 이용한다고 말해도 과언이 아닐정도 입니다.

먼저 SetUID란? 

유닉스 파일 시스템에서는 각각의 파일마다 권한이 설정되어 있습니다. 

rwxrwxrwx 이런식으로 r = 읽기권한 w = 쓰기권한 x = 실행권한입니다.

앞에서 3개 단위로 파일의 소유자, 소유자가 속한 그룹, 아무나 이렇게 권한을 설정합니다

예를 들면 rwxr-x--x 이런 권한의 파일이 있다면 파일의 소유자는 읽기 쓰기 실행의 권한이 있고

소유자가 속한 그룹의 유저는 읽기 실행권한, 아무나는 실행의 권한만 있게 됩니다.

각각을 비트로 표현하면 r = 4 w = 2 x = 1로 각 숫자를 더하여 표현합니다. 

위의 예를 비트로 표현하면 751 이 되는 겁니다.

4000 : SetUID설정

2000 : SetGID설정

1000 : Sticky-bit설정


SetUID는 조금 특이한 권한인데요 rwsr-x--x 이런식으로 표현하며, 비트로 4000 으로 표현합니다.

즉 rwsr-x--x 는 4751 이 되겠지요.

그럼 SetUID는 왜 있는 것일까요?

유닉스 계열을 OS를 사용하다보면 일반 유저 계정이라도 자기 자신의 패스워드는 

자기자신이 바꿀수 있습니다. 자신의 계정의 암호를 바꿀수 없다면 말이 안되죠

그럼 유닉스의 암호를 저장해 놓는 파일인 shadow파일의 권한을 한번 보겠습니다.

관리자 계정인 root도 읽기 권한 밖에 없습니다.

이러한 패스워드가 저장되어 있는 파일을 아무나 읽을수 있다면 당연히 말이 안되겠지요

그러나 일반 유저도 저 파일을 읽고 쓸수 있어야 패스워드를 변경할 수 있겠죠?

그래서 나온것이 SetUID입니다.

암호를 바꾸는 명령어인 passwd 파일의 권한을 한번 보겠습니다.

SetUID가 설정이 된것이 보입니다.

SetUID가 설정된 파일은 실행 되는 동안에 잠깐 관리자 권한을 빌려오고,

작업을 마친후엔 다시 권한을 돌려주게 되는것입니다.

그래서 일반 유저라도 자신의 패스워드는 변경 할 수 있는 것입니다.

유닉스에서는 관리 목적상 이러한 SetUID가 설정된 파일들이 많이 있습니다. 한 50여개로 알고 있는데요

여튼 이 SetUID를 이용한 유닉스 해킹을 해보겠습니다.

만약 쉘에 SetUID가 걸려있다면 어떻게 될까요? 

쉘이 실행되는 동안 관리자 권한으로 모든 작업을 할수 있게됩니다.

일반 계정 suer100의 홈디렉토리에 ksh를 복사하고 

chmod를 이용하여 ksh에 SetUID를 설정합니다.

user100계정의 홈디렉토리에 있는 콘쉘에 SetUID가 걸린것을 확인 할 수 있습니다.

그럼 이제 user100으로 로그인을 하여 ksh을 실행 해 보겠습니다.

프롬프트가 $인걸로 보아 일반 계정인걸 알수 있습니다.

id 를 처보니 일반 계정인것을 확실히 알수 있습니다.

이제 ksh을 실행 합니다.

실행하는 동시에 프롬프트가# 으로 바뀌고, id를 처보니 euid=0 (root) 라고 생깁니다.

이것은 root 권한을 잠깐 빌려온것을 뜻합니다.

즉 콘쉘이 끝나기 전까진 루트 권한으로 작업을 할 수 있다는 것입니다.

shadow파일도 읽을 수 있는걸 확인 할 수 있습니다.

그럼 이런 쉘파일에 SetUID를 어떻게 거느냐가 해킹의 관건이 되겠지요?

아주 간단하게 쉘 스크립트를 짜서 (저정도 쉘 스크립트느 4-5줄 안으로 끝납니다.)

메일에 첨부해서 관리자에게 보내게 되면, 관리자가 그 메일을 읽는 동시에

스크립트가 실행 되게끔 하면 일은 간단합니다.

그리하야 관리자들은 이런 SetUID가 걸린 파일들의 관리가 중요합니다.

이런 파일들은 목록화 하여 MD5라는 해쉬 알고리즘을 이용해 관리 하는 것이 필요합니다.

자칫 잘못하면 권한이 없는 사용자가 시스템을 망가트리는 경우가 생길 수도 있는 것입니다.



출처:이것이 IT 생활?

http://superuser.egloos.com/

'* DevSecOps > Linux' 카테고리의 다른 글

Vmware에 우분투 설치 방법  (14) 2012.08.17
우분투(ubuntu) 설치 오류  (4) 2012.08.17
SetUID  (0) 2012.06.08
리눅스 파일 관리 2  (0) 2011.11.23