Translated ['src/linux-hardening/privilege-escalation/euid-ruid-suid.md'

This commit is contained in:
Translator 2025-02-12 14:29:38 +00:00
parent 174aa44751
commit 14589db187

View File

@ -2,11 +2,12 @@
{{#include ../../banners/hacktricks-training.md}}
### 사용자 식별 변수
- **`ruid`**: **실제 사용자 ID**는 프로세스를 시작한 사용자를 나타냅니다.
- **`euid`**: **유효 사용자 ID**로 알려져 있으며, 시스템이 프로세스 권한을 확인하는 데 사용하는 사용자 신원을 나타냅니다. 일반적으로 `euid``ruid`와 일치하지만, SetUID 바이너리 실행과 같은 경우에는 `euid`가 파일 소유자의 신원을 취하여 특정 작업을 수행할 수 있는 권한을 부여합니다.
- **`suid`**: 이 **저장된 사용자 ID**는 높은 권한의 프로세스(일반적으로 root로 실행)가 특정 작업을 수행하기 위해 일시적으로 권한을 포기해야 할 때 중요하며, 이후 다시 초기 상승된 상태를 회복합니다.
- **`euid`**: **유효 사용자 ID**로 알려져 있으며, 시스템이 프로세스 권한을 확인하는 데 사용하는 사용자 신원을 나타냅니다. 일반적으로 `euid``ruid`와 일치하지만, SetUID 바이너리 실행과 같은 경우에는 `euid`가 파일 소유자의 신원을 취하여 특정 작업 권한을 부여합니다.
- **`suid`**: 이 **저장된 사용자 ID**는 높은 권한의 프로세스(일반적으로 root로 실행)가 특정 작업을 수행하기 위해 일시적으로 권한을 포기해야 할 때 중요하며, 이후 다시 초기 상승된 상태를 회복합니다.
#### 중요 참고 사항
@ -30,7 +31,7 @@ root로 실행되지 않는 프로세스는 현재 `ruid`, `euid` 또는 `suid`
- **사용자 ID 보존**:
- `ruid`, `euid` 및 추가 그룹 ID는 변경되지 않습니다.
- 새 프로그램에 SetUID 비트가 설정된 경우 `euid`에 미세한 변화가 있을 수 있습니다.
- `suid` 실행 후 `euid`에서 업데이트됩니다.
- 실행 후 `suid``euid`에서 업데이트됩니다.
- **문서**: 자세한 정보는 [`execve` man page](https://man7.org/linux/man-pages/man2/execve.2.html)에서 확인할 수 있습니다.
#### **`system` 함수**
@ -49,10 +50,10 @@ root로 실행되지 않는 프로세스는 현재 `ruid`, `euid` 또는 `suid`
- 더 많은 세부정보는 [`bash` man page](https://linux.die.net/man/1/bash)에서 확인할 수 있습니다.
- **`sh`**:
- `bash``-p`와 유사한 메커니즘이 없습니다.
- 사용자 ID와 관련된 동작은 명시적으로 언급되지 않으며, `-i` 옵션 하에서 `euid``ruid`의 동등성을 보존하는 것에 중점을 둡니다.
- 사용자 ID와 관련된 동작은 명시적으로 언급되지 않으며, `-i` 옵션 하에서 `euid``ruid`의 동등성을 강조합니다.
- 추가 정보는 [`sh` man page](https://man7.org/linux/man-pages/man1/sh.1p.html)에서 확인할 수 있습니다.
이러한 메커니즘은 작동 방식이 다르며, 프로그램을 실행하고 전환하는 데 다양한 옵션을 제공하며, 사용자 ID가 관리되고 보존되는 방식에 특정한 미세한 차이가 있습니다.
이러한 메커니즘은 작동 방식이 다르며, 프로그램을 실행하고 전환하는 데 다양한 옵션을 제공하며, 사용자 ID가 관리되고 보존되는 방식에 특정한 뉘앙스가 있습니다.
### 실행에서 사용자 ID 동작 테스트
@ -89,7 +90,7 @@ uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconf
- `ruid``euid`는 각각 99 (nobody)와 1000 (frank)로 시작합니다.
- `setuid`는 둘 다 1000으로 맞춥니다.
- `system`은 sh에서 bash로의 심볼릭 링크로 인해 `/bin/bash -c id`를 실행합니다.
- `bash``-p` 없이 `euid``ruid`와 일치시키며, 결과적으로 둘 다 99 (nobody)가 됩니다.
- `bash``-p` 없이 `euid``ruid`와 일치시키로 둘 다 99 (nobody)가 됩니다.
#### 케이스 2: system과 함께 setreuid 사용
@ -162,7 +163,7 @@ uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconf
```
**분석:**
- `euid``setuid`에 의해 1000으로 설정되었지만, `bash``-p`가 없기 때문에 euid를 `ruid`(99)로 재설정합니다.
- `euid``setuid`에 의해 1000으로 설정되었지만, `bash``-p`가 없기 때문에 `ruid`(99)로 `euid` 재설정합니다.
**C 코드 예제 3 (bash -p 사용):**
```bash
@ -183,7 +184,7 @@ bash-4.2$ $ ./e
bash-4.2$ $ id
uid=99(nobody) gid=99(nobody) euid=100
```
## 참고 문헌
## References
- [https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail](https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail)