본문 바로가기
Study/Software Security

[소프트웨어보안] Set-UID 권한 프로그램과 공격 기법

by 8희 2022. 11. 16.

권한 있는 프로그램의 필요성

Linux 환경

- /etc/shadow에 password를 저장

- 사용자가 자신의 비밀번호를 수정하고자 할 때 해당 파일 사용

- Only Writable to the owner, Owner만 사용 가능!

- 파일의 정보를 보려면 root로 접근하거나 sudo를 사용

 

일반 사용자가 패스워드 파일을 볼 수 있게 하는 방법

- 패스워드의 변경을 위해서 shadow 파일에 대한 변경 필요

- 일반 사용자는 shadow 파일을 변경하지 못한다. (root만 변경 가능)

- 운영체제가 세밀한 접근통제를 수행하도록 하는 방법

1) 현재는 파일 단위로 접근 통제를 수행

2) 파일 내의 특정 영역까지 접근 통제 규칙을 적용 (현재 불가능)

 

Set-UID 메커니즘

shadow 파일의 구성

username : password : last password change : minimum : maximum : warn : inactive : expire

 

Daemon을 통한 통제

- Daemon은 프로그램 백그라운드에서 항상 실행, 통상적을 시스템이 구동되면서 실행된다.

- Daemon이 root 권한을 갖는 소프트웨어에 일을 요청하고,  프로그램을 특정한 데몬 프로그램에 맡겨서 권한을 통제할 수  있게 한다.

 

Set-UID 프로그램을 통한 통제

- Daemon을 통한 통제보다 좀 더 정교

- 프로그램에 실질적인 ID(effective uid)를 지정하여 //chown root

- 이를 통해 실행 시 권한을 부여 //chmod 4775

- Specially marked Unix program이 파일을 업데이트 할 수 있게 한다.

(* Specially marked: 소유주를 root로 하고 권한을 4775로 해 주는 행위)

 

UNIX 파일의 User ID

- Real user ID: 프로세스의 실 소유주를 명시, 프로세스를 실행하는 사용자 / 프로그램을 실행한 사용자

- Effective user ID: 접근 통제를 위해 사용하는 ID로서 프로세스가 가지고 있는 권한(privilege)을 명시해 준다. / 프로그램의 소유주 (owner)

- Saved user ID: 권한의 부여 및 제거를 돕기 위해 활용

 

Set-UID 프로그램의 공격 표면(Attack Surfaces)

Set-UID 프로그램의 공격의 지점

1) User input, 즉 사용자 입력이자 외부 입력

2) 사용자가 제어 가능한 System input  -> 파일 형태로 존재

3) 환경 변수

4) 사용자에 의해 제어 가능한 일반 사용자 프로그램(프로세스) -> Capability leaking

 

capability leaking

목적: Set-UID 프로그램이 권한을 이용하여 얻은 자원이 유출될 때 어떤 문제점을 가질수 있는 지 확인하기 위함

 

system vs execve

- system 함수는 shell 프로그램에게 명령어의 실행을 요청

1) system("명령어"); -> /bin/sh - 명령어 -> 명령어를 실행

2) system("명령어1; 명령어2")' -> /bin/sh -c 명령어1; 명령어2 -> 명령어 1 실행 후, 명령어 2 실행

3) system("cat aa;/bin/sh"); -> /bin/sh -c cat aa;/bin/sh -> cat aa 실행 후 /bin/sh 실행

 

- execve 함수는 운영체제에게 직접 명령어의 실행을 요청

1) execve("명령어1", "입력파라미터", "환경변수"); -> execve("/etc/cat"aa;/bin/sh", 0};

/etc/cat aa;/bin/sh -> 해당 파일을 찾을 수 없게 한다.