다양한 기록

Running Command with Privilege 본문

운영체제보안

Running Command with Privilege

라구넹 2024. 10. 12. 22:39

권한이 정상적으로 상승하는 경우

1. set-uid program

2. sudo

3. POSIX capabilities *(Portable Operating System InterFace for Unix)

* POSIX capabilities

루트한테 권한이 너무 많으니 권한을 캐이퍼빌리티로 쪼갬

getcap / setcap


SetUID / SetGID

퍼미션에서 실제로 사용되는 비트는 12개

s 두개랑 스티키 비트

 

passwd 명령

-rwsr-xr-x 1 root root ..

누구나 명령 실행이 가능하지만 setuid 비트가 켜져 있어서 실행 중에는 권한이 오너의 것으로 상승됨

passwd의 오너는 루트이니 루트의 권한으로 실행됨

그 잠깐의 실행 중에는 일반 사용자의 uid가 0으로 바뀜

* 정확히는 euid가 바뀜

 

-rwsr-xr-x의 표현

4755

4: 2진수 100 => setuid 비트 켜짐

7: rwx .. 기본적으로 setuid 프로그램은 실행 가능

5: r-x .. 4 + 1

5: r-x .. 4 + 1

 

chmod 4744 setuid1 # -rwsr--r--
chmod u+s setuid2 # -rwSr--r--

위랑 아래의 차이

아래는 x비트가 안켜져서 대문자 S.. 문제 있다는 뜻

8진수로 나타내면 4644 임


2. sudo

1. /etc/sudoers 에 %sudo ALL=(ALL:ALL) ALL 설정 되어 있어야 함

2. /etc/group 에 sudo:x:27:name 그룹에 들어가 있어야 함

새 사용자한테 sudo 권한 줄 때는 : 붙이고 이름 추가하기

* sudoers에 가끔 # 처리해서 주석처리 되어있는 경우도 있어 확인 필요

 

루트 쉘 가는 법

sudo -s

sudo bash

sudo su

그런데 루트쉘 쓰는 건 추천되지 않음. sudo 쓰자

 

다른 사용자의 권한으로 실행하는 법

sudo -u UName CommadName


Capabilities Overview

도입되기 전에는 루트가 모든 걸 했음

공격자가 루트 권한 탈취 시 방어가 안 됨

=> 루트 권한을 더 작은 권한으로 분할

Fine-grained..

 

Capability Description
CAP_CHOWN 파일의 uid 또는 gid를 제한 없이 변경
CAP_DAC_OVERRIDE rwx 권한 체크 없이 접근
CAP_DAC_READ_SEARCH rwx 권한 우회만으로도 너무 강해서 존재
읽기 권한만 패스
CAP_IPC_LOCK 메모리 락 제한을 무시하고, 메모리 매핑을 위한 큰 TLB 플래그를 허용합니다.
IPC 시 레이스 컨디션 발생 가능 > 락 필요.. 제한없이 우선 락 가능
CAP_KILL any 프로세스에 시그널 보내기
시그널 받을 준비가 안된 프로세스는 반드시 종료됨
CAP_NET_ADMIN 네트워크 관련 작업 수행
CAP_NET_RAW 네트워크 패킷 캡쳐 가능
ping이 사용
CAP_SETFCAP 파일 캐이퍼빌리티 설정
CAP_SETPCAP 프로세스 캐이퍼빌리티 설정
CAP_SYS_ADMIN 다양한 시스템 관리 작업에 대한 포괄적인 권한.
CAP_SYS_BOOT 시스템 재부팅
CAP_SYS_CHROOT chroot 사용
가상의 루트 시스템을 만들 때 사용
CAP_SYS_MODULE 커널 모듈 로드, 언로드
CAP_SYS_NICE 스케줄러 정책 및 nice 값 설정
CAP_SYS_PTRACE ptrace로 임의의 프로세스 추적
CAP_SYS_RESOURCE 리소스 제한 관리
CAP_SYS_TIME 시스템 날짜 및 시간 세팅

 

프로세스 캐이퍼빌리티 셋

- 프로세스와 관련된 캐이퍼빌리티들

- Effective : 프로세스가 현재 커널에 제시하는 권한

- Permitted : 프로세스가 활성화할 수 있는 기능

 

프로세스가 허용된 캐이퍼빌리티를 얻는 방법 : 밑에 거 체크

파일 캐이퍼빌리티 셋

Permitted (강제 허가) : 프로세스의 permitted 셋에 추가

Inheritable (상속 시킴) : 자식 프로세스의 상속 가능 권한에 있으면 permitted 권한을 줌

Effective: 1비트짜리

0: exec 이후 그냥 0됨

1: Permitted 셋에 있으면 1됨

 

파일에 +e 비트가 설정되어 있으면 즉시 권한 활성화 및 실행 가능

sudo setcap "cap_sys_time=pe" date
sudo setcap cap_net_bind_service+ep /path/to/the/file

p 설정: 최대 권한 범위에 설정

e 설정: 실제로 활성화되도록 설정

만약 i까지 설정했으면 상속도 가능했을 것

 

 

 

'운영체제보안' 카테고리의 다른 글

리눅스 매뉴얼, 커맨드  (0) 2024.10.14
User Authentication  (0) 2024.10.14
File permissions  (0) 2024.10.12
리눅스 보안 introduction  (0) 2024.10.12
Trusted OS  (0) 2024.10.12