Network 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 μ§€μ›ν•˜κΈ°

Basic Information

λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€λŠ” λ„€νŠΈμ›Œν¬ μŠ€νƒμ˜ 격리λ₯Ό μ œκ³΅ν•˜λŠ” λ¦¬λˆ…μŠ€ 컀널 κΈ°λŠ₯으둜, 각 λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ 독립적인 λ„€νŠΈμ›Œν¬ ꡬ성, μΈν„°νŽ˜μ΄μŠ€, IP μ£Όμ†Œ, λΌμš°νŒ… ν…Œμ΄λΈ” 및 λ°©ν™”λ²½ κ·œμΉ™μ„ κ°€μ§ˆ 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 이 κ²©λ¦¬λŠ” μ»¨ν…Œμ΄λ„ˆν™”μ™€ 같은 λ‹€μ–‘ν•œ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μœ μš©ν•˜λ©°, 각 μ»¨ν…Œμ΄λ„ˆλŠ” λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆ 및 호슀트 μ‹œμŠ€ν…œκ³Ό 독립적인 λ„€νŠΈμ›Œν¬ ꡬ성을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.

How it works:

  1. μƒˆλ‘œμš΄ λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μƒμ„±λ˜λ©΄, μ™„μ „νžˆ 격리된 λ„€νŠΈμ›Œν¬ μŠ€νƒμœΌλ‘œ μ‹œμž‘ν•˜λ©°, 루프백 μΈν„°νŽ˜μ΄μŠ€(lo) μ™Έμ—λŠ” λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” μƒˆλ‘œμš΄ λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 기본적으둜 λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‚˜ 호슀트 μ‹œμŠ€ν…œμ˜ ν”„λ‘œμ„ΈμŠ€μ™€ 톡신할 수 μ—†μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  2. veth 쌍과 같은 가상 λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 간에 이동할 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ„€μž„μŠ€νŽ˜μ΄μŠ€ κ°„ λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€μ™€ 호슀트 μ‹œμŠ€ν…œ κ°„μ˜ λ„€νŠΈμ›Œν¬ 연결을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, veth 쌍의 ν•œ μͺ½ 끝을 μ»¨ν…Œμ΄λ„ˆμ˜ λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ°°μΉ˜ν•˜κ³ , λ‹€λ₯Έ μͺ½ 끝을 호슀트 λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ λΈŒλ¦¬μ§€ λ˜λŠ” λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€μ— μ—°κ²°ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆμ— λ„€νŠΈμ›Œν¬ 연결을 μ œκ³΅ν•©λ‹ˆλ‹€.
  3. λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‚΄μ˜ λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ μžμ‹ μ˜ IP μ£Όμ†Œ, λΌμš°νŒ… ν…Œμ΄λΈ” 및 λ°©ν™”λ²½ κ·œμΉ™μ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ„œλ‘œ λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œ λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ ꡬ성을 κ°€μ§ˆ 수 있으며, 마치 λ³„λ„μ˜ λ„€νŠΈμ›Œν¬ μ‹œμŠ€ν…œμ—μ„œ μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. ν”„λ‘œμ„ΈμŠ€λŠ” setns() μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ—¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 간에 μ΄λ™ν•˜κ±°λ‚˜, unshare() λ˜λŠ” clone() μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ—¬ CLONE_NEWNET ν”Œλž˜κ·Έμ™€ ν•¨κ»˜ μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ μ΄λ™ν•˜κ±°λ‚˜ 생성할 λ•Œ, ν•΄λ‹Ή λ„€μž„μŠ€νŽ˜μ΄μŠ€μ™€ μ—°κ²°λœ λ„€νŠΈμ›Œν¬ ꡬ성 및 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν•©λ‹ˆλ‹€.

Lab:

Create different Namespaces

CLI

sudo unshare -n [--mount-proc] /bin/bash
# Run ifconfig or ip -a

/proc 파일 μ‹œμŠ€ν…œμ˜ μƒˆ μΈμŠ€ν„΄μŠ€λ₯Ό λ§ˆμš΄νŠΈν•˜λ©΄ --mount-proc λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒˆ 마운트 λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ ν•΄λ‹Ή λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— νŠΉμ •ν•œ ν”„λ‘œμ„ΈμŠ€ 정보에 λŒ€ν•œ μ •ν™•ν•˜κ³  격리된 λ·°λ₯Ό 갖도둝 보μž₯ν•©λ‹ˆλ‹€.

였λ₯˜: bash: fork: λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€

unshareκ°€ -f μ˜΅μ…˜ 없이 싀행될 λ•Œ, Linuxκ°€ μƒˆλ‘œμš΄ PID(ν”„λ‘œμ„ΈμŠ€ ID) λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방식 λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ£Όμš” 세뢀사항과 해결책은 μ•„λž˜μ— μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

  1. 문제 μ„€λͺ…:
  • Linux 컀널은 ν”„λ‘œμ„ΈμŠ€κ°€ unshare μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 생성할 수 μžˆλ„λ‘ ν—ˆμš©ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μƒˆλ‘œμš΄ PID λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€(이λ₯Ό β€œunshare” ν”„λ‘œμ„ΈμŠ€λΌκ³  함)λŠ” μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ“€μ–΄κ°€μ§€ μ•ŠμœΌλ©°, 였직 κ·Έ μžμ‹ ν”„λ‘œμ„ΈμŠ€λ§Œ λ“€μ–΄κ°‘λ‹ˆλ‹€.
  • %unshare -p /bin/bash%λ₯Ό μ‹€ν–‰ν•˜λ©΄ unshare와 λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ /bin/bashκ°€ μ‹œμž‘λ©λ‹ˆλ‹€. 결과적으둜 /bin/bash와 κ·Έ μžμ‹ ν”„λ‘œμ„ΈμŠ€λŠ” μ›λž˜ PID λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μžˆμŠ΅λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ /bin/bash의 첫 번째 μžμ‹ ν”„λ‘œμ„ΈμŠ€λŠ” PID 1이 λ©λ‹ˆλ‹€. 이 ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄, λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 없을 경우 λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ 정리가 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. PID 1은 κ³ μ•„ ν”„λ‘œμ„ΈμŠ€λ₯Ό μž…μ–‘ν•˜λŠ” νŠΉλ³„ν•œ 역할을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 그러면 Linux 컀널은 ν•΄λ‹Ή λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ PID 할당을 λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
  1. κ²°κ³Ό:
  • μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ PID 1의 μ’…λ£ŒλŠ” PIDNS_HASH_ADDING ν”Œλž˜κ·Έμ˜ 정리λ₯Ό μ΄ˆλž˜ν•©λ‹ˆλ‹€. 이둜 인해 μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό 생성할 λ•Œ alloc_pid ν•¨μˆ˜κ°€ μƒˆλ‘œμš΄ PIDλ₯Ό ν• λ‹Ήν•˜μ§€ λͺ»ν•˜κ²Œ λ˜μ–΄ β€œλ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€β€ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  1. ν•΄κ²°μ±…:
  • 이 λ¬Έμ œλŠ” 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
# Run ifconfig or ip -a

ν”„λ‘œμ„ΈμŠ€κ°€ μ–΄λ–€ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μžˆλŠ”μ§€ ν™•μΈν•˜κΈ°

ls -l /proc/self/ns/net
lrwxrwxrwx 1 root root 0 Apr  4 20:30 /proc/self/ns/net -> 'net:[4026531840]'

λͺ¨λ“  λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ°ΎκΈ°

sudo find /proc -maxdepth 3 -type l -name net -exec readlink {} \; 2>/dev/null | sort -u | grep "net:"
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name net -exec ls -l  {} \; 2>/dev/null | grep <ns-number>

λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‚΄λΆ€λ‘œ λ“€μ–΄κ°€κΈ°

nsenter -n TARGET_PID --pid /bin/bash

λ˜ν•œ, 루트 μ‚¬μš©μžλ§Œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ“€μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 λ””μŠ€ν¬λ¦½ν„° 없이 λ‹€λ₯Έ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ“€μ–΄κ°ˆ 수 μ—†μŠ΅λ‹ˆλ‹€ (예: /proc/self/ns/net).

References

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 μ§€μ›ν•˜κΈ°