User Namespace
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
Basic Information
μ¬μ©μ λ€μμ€νμ΄μ€λ μ¬μ©μ λ° κ·Έλ£Ή ID λ§€νμ 격리λ₯Ό μ 곡νλ 리λ μ€ μ»€λ κΈ°λ₯μΌλ‘, κ° μ¬μ©μ λ€μμ€νμ΄μ€κ° μμ λ§μ μ¬μ©μ λ° κ·Έλ£Ή ID μΈνΈλ₯Ό κ°μ§ μ μλλ‘ ν©λλ€. μ΄ κ²©λ¦¬λ μλ‘ λ€λ₯Έ μ¬μ©μ λ€μμ€νμ΄μ€μμ μ€νλλ νλ‘μΈμ€κ° μ«μμ μΌλ‘ λμΌν μ¬μ©μ λ° κ·Έλ£Ή IDλ₯Ό 곡μ νλλΌλ μλ‘ λ€λ₯Έ κΆνκ³Ό μμ κΆμ κ°μ§ μ μκ² ν©λλ€.
μ¬μ©μ λ€μμ€νμ΄μ€λ νΉν 컨ν μ΄λνμμ μ μ©νλ©°, κ° μ»¨ν μ΄λλ λ 립μ μΈ μ¬μ©μ λ° κ·Έλ£Ή ID μΈνΈλ₯Ό κ°μ ΈμΌ νλ―λ‘ μ»¨ν μ΄λμ νΈμ€νΈ μμ€ν κ°μ 보μ λ° κ²©λ¦¬λ₯Ό κ°μ ν μ μμ΅λλ€.
How it works:
- μλ‘μ΄ μ¬μ©μ λ€μμ€νμ΄μ€κ° μμ±λλ©΄, λΉ μ¬μ©μ λ° κ·Έλ£Ή ID λ§€ν μΈνΈλ‘ μμν©λλ€. μ΄λ μλ‘μ΄ μ¬μ©μ λ€μμ€νμ΄μ€μμ μ€νλλ λͺ¨λ νλ‘μΈμ€κ° μ΄κΈ°μλ λ€μμ€νμ΄μ€ μΈλΆμμ κΆνμ΄ μμμ μλ―Έν©λλ€.
- ID λ§€νμ μλ‘μ΄ λ€μμ€νμ΄μ€μ μ¬μ©μ λ° κ·Έλ£Ή IDμ λΆλͺ¨(λλ νΈμ€νΈ) λ€μμ€νμ΄μ€μ ID κ°μ μ€μ λ μ μμ΅λλ€. μ΄λ μλ‘μ΄ λ€μμ€νμ΄μ€μ νλ‘μΈμ€κ° λΆλͺ¨ λ€μμ€νμ΄μ€μ μ¬μ©μ λ° κ·Έλ£Ή IDμ ν΄λΉνλ κΆνκ³Ό μμ κΆμ κ°μ§ μ μκ² ν©λλ€. κ·Έλ¬λ ID λ§€νμ νΉμ λ²μμ IDμ νμ μ§ν©μΌλ‘ μ νλ μ μμ΄, μλ‘μ΄ λ€μμ€νμ΄μ€μ νλ‘μΈμ€μ λΆμ¬λ κΆνμ λν μΈλ°ν μ μ΄κ° κ°λ₯ν©λλ€.
- μ¬μ©μ λ€μμ€νμ΄μ€ λ΄μμ, νλ‘μΈμ€λ λ€μμ€νμ΄μ€ λ΄μμμ μμ μ λν΄ μ 체 λ£¨νΈ κΆν(UID 0)μ κ°μ§ μ μμΌλ©°, μ¬μ ν λ€μμ€νμ΄μ€ μΈλΆμμλ μ νλ κΆνμ κ°μ§λλ€. μ΄λ 컨ν μ΄λκ° νΈμ€νΈ μμ€ν μμ μ 체 λ£¨νΈ κΆνμ κ°μ§μ§ μκ³ λ μμ μ λ€μμ€νμ΄μ€ λ΄μμ 루νΈμ μ μ¬ν κΈ°λ₯μ μνν μ μκ² ν©λλ€.
- νλ‘μΈμ€λ
setns()μμ€ν νΈμΆμ μ¬μ©νμ¬ λ€μμ€νμ΄μ€ κ°μ μ΄λνκ±°λ,unshare()λλclone()μμ€ν νΈμΆμ μ¬μ©νμ¬CLONE_NEWUSERνλκ·Έμ ν¨κ» μλ‘μ΄ λ€μμ€νμ΄μ€λ₯Ό μμ±ν μ μμ΅λλ€. νλ‘μΈμ€κ° μλ‘μ΄ λ€μμ€νμ΄μ€λ‘ μ΄λνκ±°λ μμ±ν λ, ν΄λΉ λ€μμ€νμ΄μ€μ μ°κ²°λ μ¬μ©μ λ° κ·Έλ£Ή ID λ§€νμ μ¬μ©νκΈ° μμν©λλ€.
Lab:
Create different Namespaces
CLI
sudo unshare -U [--mount-proc] /bin/bash
μλ‘μ΄ μΈμ€ν΄μ€μ /proc νμΌ μμ€ν
μ --mount-proc λ§€κ°λ³μλ₯Ό μ¬μ©νμ¬ λ§μ΄νΈνλ©΄, μλ‘μ΄ λ§μ΄νΈ λ€μμ€νμ΄μ€κ° ν΄λΉ λ€μμ€νμ΄μ€μ νΉμ ν νλ‘μΈμ€ μ 보μ λν μ ννκ³ κ²©λ¦¬λ λ·°λ₯Ό κ°λλ‘ λ³΄μ₯ν©λλ€.
μ€λ₯: bash: fork: λ©λͺ¨λ¦¬λ₯Ό ν λΉν μ μμ΅λλ€
unshareκ° -f μ΅μ
μμ΄ μ€νλ λ, Linuxκ° μλ‘μ΄ PID(νλ‘μΈμ€ ID) λ€μμ€νμ΄μ€λ₯Ό μ²λ¦¬νλ λ°©μ λλ¬Έμ μ€λ₯κ° λ°μν©λλ€. μ£Όμ μΈλΆμ¬νκ³Ό ν΄κ²°μ±
μ μλμ μ€λͺ
λμ΄ μμ΅λλ€:
- λ¬Έμ μ€λͺ :
- Linux 컀λμ νλ‘μΈμ€κ°
unshareμμ€ν νΈμΆμ μ¬μ©νμ¬ μλ‘μ΄ λ€μμ€νμ΄μ€λ₯Ό μμ±ν μ μλλ‘ νμ©ν©λλ€. κ·Έλ¬λ μλ‘μ΄ PID λ€μμ€νμ΄μ€λ₯Ό μμ±νλ νλ‘μΈμ€(μ΄λ₯Ό βunshareβ νλ‘μΈμ€λΌκ³ ν¨)λ μλ‘μ΄ λ€μμ€νμ΄μ€μ λ€μ΄κ°μ§ μμΌλ©°, μ€μ§ κ·Έ μμ νλ‘μΈμ€λ§ λ€μ΄κ°λλ€. %unshare -p /bin/bash%λ₯Ό μ€ννλ©΄/bin/bashκ°unshareμ λμΌν νλ‘μΈμ€μμ μμλ©λλ€. κ²°κ³Όμ μΌλ‘/bin/bashμ κ·Έ μμ νλ‘μΈμ€λ μλ PID λ€μμ€νμ΄μ€μ μμ΅λλ€.- μλ‘μ΄ λ€μμ€νμ΄μ€μμ
/bin/bashμ 첫 λ²μ§Έ μμ νλ‘μΈμ€λ PID 1μ΄ λ©λλ€. μ΄ νλ‘μΈμ€κ° μ’ λ£λλ©΄, λ€λ₯Έ νλ‘μΈμ€κ° μμ κ²½μ° λ€μμ€νμ΄μ€μ μ λ¦¬κ° νΈλ¦¬κ±°λ©λλ€. PID 1μ κ³ μ νλ‘μΈμ€λ₯Ό μ μνλ νΉλ³ν μν μ κ°μ§κ³ μμ΅λλ€. κ·Έλ¬λ©΄ Linux 컀λμ ν΄λΉ λ€μμ€νμ΄μ€μμ PID ν λΉμ λΉνμ±νν©λλ€.
- κ²°κ³Ό:
- μλ‘μ΄ λ€μμ€νμ΄μ€μμ PID 1μ μ’
λ£λ
PIDNS_HASH_ADDINGνλκ·Έμ μ 리λ₯Ό μ΄λν©λλ€. μ΄λ‘ μΈν΄ μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±ν λalloc_pidν¨μκ° μλ‘μ΄ PIDλ₯Ό ν λΉνμ§ λͺ»νκ² λμ΄ βλ©λͺ¨λ¦¬λ₯Ό ν λΉν μ μμ΅λλ€β μ€λ₯κ° λ°μν©λλ€.
- ν΄κ²°μ± :
- μ΄ λ¬Έμ λ
unshareμ ν¨κ»-fμ΅μ μ μ¬μ©νμ¬ ν΄κ²°ν μ μμ΅λλ€. μ΄ μ΅μ μunshareκ° μλ‘μ΄ PID λ€μμ€νμ΄μ€λ₯Ό μμ±ν ν μλ‘μ΄ νλ‘μΈμ€λ₯Ό ν¬ν¬νλλ‘ λ§λλλ€. %unshare -fp /bin/bash%λ₯Ό μ€ννλ©΄unshareλͺ λ Ή μμ²΄κ° μλ‘μ΄ λ€μμ€νμ΄μ€μμ PID 1μ΄ λ©λλ€./bin/bashμ κ·Έ μμ νλ‘μΈμ€λ μ΄ μλ‘μ΄ λ€μμ€νμ΄μ€ λ΄μμ μμ νκ² ν¬ν¨λμ΄ PID 1μ μ‘°κΈ° μ’ λ£λ₯Ό λ°©μ§νκ³ μ μμ μΈ PID ν λΉμ νμ©ν©λλ€.
unshareκ° -f νλκ·Έμ ν¨κ» μ€νλλλ‘ λ³΄μ₯ν¨μΌλ‘μ¨, μλ‘μ΄ PID λ€μμ€νμ΄μ€κ° μ¬λ°λ₯΄κ² μ μ§λμ΄ /bin/bashμ κ·Έ νμ νλ‘μΈμ€κ° λ©λͺ¨λ¦¬ ν λΉ μ€λ₯ μμ΄ μλν μ μμ΅λλ€.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
μ¬μ©μ λ€μμ€νμ΄μ€λ₯Ό μ¬μ©νλ €λ©΄ Docker λ°λͺ¬μ **--userns-remap=default**λ‘ μμν΄μΌ ν©λλ€(μ°λΆν¬ 14.04μμλ /etc/default/dockerλ₯Ό μμ ν ν sudo service docker restartλ₯Ό μ€ννμ¬ μ΄ μμ
μ μνν μ μμ΅λλ€).
νλ‘μΈμ€κ° μ΄λ€ λ€μμ€νμ΄μ€μ μλμ§ νμΈνκΈ°
ls -l /proc/self/ns/user
lrwxrwxrwx 1 root root 0 Apr 4 20:57 /proc/self/ns/user -> 'user:[4026531837]'
docker 컨ν μ΄λμμ μ¬μ©μ λ§΅μ νμΈνλ κ²μ λ€μκ³Ό κ°μ΄ κ°λ₯ν©λλ€:
cat /proc/self/uid_map
0 0 4294967295 --> Root is root in host
0 231072 65536 --> Root is 231072 userid in host
νΈμ€νΈμμ:
cat /proc/<pid>/uid_map
λͺ¨λ μ¬μ©μ λ€μμ€νμ΄μ€ μ°ΎκΈ°
sudo find /proc -maxdepth 3 -type l -name user -exec readlink {} \; 2>/dev/null | sort -u
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name user -exec ls -l {} \; 2>/dev/null | grep <ns-number>
μ¬μ©μ λ€μμ€νμ΄μ€ λ΄λΆλ‘ λ€μ΄κ°κΈ°
nsenter -U TARGET_PID --pid /bin/bash
λν, λ£¨νΈ μ¬μ©μλ§ λ€λ₯Έ νλ‘μΈμ€ λ€μμ€νμ΄μ€μ λ€μ΄κ° μ μμ΅λλ€. κ·Έλ¦¬κ³ λμ€ν¬λ¦½ν°κ° μμΌλ©΄ λ€λ₯Έ λ€μμ€νμ΄μ€μ λ€μ΄κ° μ μμ΅λλ€ (μ: /proc/self/ns/user).
μλ‘μ΄ μ¬μ©μ λ€μμ€νμ΄μ€ μμ± (λ§€ν ν¬ν¨)
unshare -U [--map-user=<uid>|<name>] [--map-group=<gid>|<name>] [--map-root-user] [--map-current-user]
# Container
sudo unshare -U /bin/bash
nobody@ip-172-31-28-169:/home/ubuntu$ #Check how the user is nobody
# From the host
ps -ef | grep bash # The user inside the host is still root, not nobody
root 27756 27755 0 21:11 pts/10 00:00:00 /bin/bash
Recovering Capabilities
μ¬μ©μ λ€μμ€νμ΄μ€μ κ²½μ°, μλ‘μ΄ μ¬μ©μ λ€μμ€νμ΄μ€κ° μμ±λλ©΄, ν΄λΉ λ€μμ€νμ΄μ€μ λ€μ΄κ°λ νλ‘μΈμ€λ κ·Έ λ€μμ€νμ΄μ€ λ΄μμ μ 체 κΆν μΈνΈλ₯Ό λΆμ¬λ°μ΅λλ€. μ΄λ¬ν κΆνμ νλ‘μΈμ€κ° νμΌ μμ€ν μ λ§μ΄νΈνκ±°λ, μ₯μΉλ₯Ό μμ±νκ±°λ, νμΌμ μμ κΆμ λ³κ²½νλ λ±μ νΉκΆ μμ μ μνν μ μκ² ν΄μ£Όμ§λ§, μ€μ§ μμ μ μ¬μ©μ λ€μμ€νμ΄μ€μ λ§₯λ½ λ΄μμλ§ κ°λ₯ν©λλ€.
μλ₯Ό λ€μ΄, μ¬μ©μ λ€μμ€νμ΄μ€ λ΄μμ CAP_SYS_ADMIN κΆνμ κ°μ§κ³ μμ λ, νμΌ μμ€ν
μ λ§μ΄νΈνλ κ²κ³Ό κ°μ΄ μΌλ°μ μΌλ‘ μ΄ κΆνμ΄ νμν μμ
μ μνν μ μμ§λ§, μ€μ§ μμ μ μ¬μ©μ λ€μμ€νμ΄μ€μ λ§₯λ½ λ΄μμλ§ κ°λ₯ν©λλ€. μ΄ κΆνμΌλ‘ μννλ λͺ¨λ μμ
μ νΈμ€νΈ μμ€ν
μ΄λ λ€λ₯Έ λ€μμ€νμ΄μ€μ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
Warning
λ°λΌμ, μλ‘μ΄ μ¬μ©μ λ€μμ€νμ΄μ€ λ΄μ μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±νλ κ²μ΄ λͺ¨λ κΆνμ λ€μ λΆμ¬λ°κ² ν κ²μ λλ€ (CapEff: 000001ffffffffff), μ€μ λ‘λ λ€μμ€νμ΄μ€μ κ΄λ ¨λ κΆνλ§ μ¬μ©ν μ μμ΅λλ€ (μ: λ§μ΄νΈ) νμ§λ§ λͺ¨λ κΆνμ μ¬μ©ν μλ μμ΅λλ€. λ°λΌμ, μ΄κ²λ§μΌλ‘λ Docker 컨ν μ΄λμμ νμΆνκΈ°μ μΆ©λΆνμ§ μμ΅λλ€.
# There are the syscalls that are filtered after changing User namespace with:
unshare -UmCpf bash
Probando: 0x067 . . . Error
Probando: 0x070 . . . Error
Probando: 0x074 . . . Error
Probando: 0x09b . . . Error
Probando: 0x0a3 . . . Error
Probando: 0x0a4 . . . Error
Probando: 0x0a7 . . . Error
Probando: 0x0a8 . . . Error
Probando: 0x0aa . . . Error
Probando: 0x0ab . . . Error
Probando: 0x0af . . . Error
Probando: 0x0b0 . . . Error
Probando: 0x0f6 . . . Error
Probando: 0x12c . . . Error
Probando: 0x130 . . . Error
Probando: 0x139 . . . Error
Probando: 0x140 . . . Error
Probando: 0x141 . . . Error
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


