일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 언리얼엔진
- ret2libc
- CTF
- MLFQ
- pdlc
- 게임개발
- Security
- gas
- frequency-domain spectrum analysis
- linear difference equation
- stride
- Unreal Engine
- gameplay ability
- reverse gravity
- Race condition
- MAC
- 유니티
- DSP
- 유스케이스
- 게임 개발
- Rr
- ability task
- sampling theory
- 운영체제
- 메카님
- 언리얼 엔진
- DP
- gameplay effect
- dirty cow
- dtft
- Today
- Total
다양한 기록
Running Command with Privilege 본문
권한이 정상적으로 상승하는 경우
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 |