2049 - Pentesting NFS Service

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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

NFS๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์— ์›ํ™œํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์‹œ์Šคํ…œ์œผ๋กœ, ์ด๋Ÿฌํ•œ ํŒŒ์ผ์ด ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํฌํŠธ: 2049/TCP/UDP (๋ฒ„์ „ 4๋ฅผ ์ œ์™ธํ•˜๊ณ , TCP ๋˜๋Š” UDP๋งŒ ํ•„์š”ํ•จ).

2049/tcp open  nfs     2-3 (RPC #100003

์ธ์ฆ

์ด ํ”„๋กœํ† ์ฝœ์˜ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์ธก๋ฉด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด์žฅ๋œ ์ธ์ฆ ๋˜๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹ , ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ •๋ณด์— ์˜์กดํ•˜๋ฉฐ, ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๊ณตํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ํ˜•์‹์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ UNIX ๊ตฌ๋ฌธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ธ์ฆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ UNIX UID/GID ์‹๋ณ„์ž ๋ฐ ๊ทธ๋ฃน ๋ฉค๋ฒ„์‹ญ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ UID/GID ๋งคํ•‘์˜ ๋ถˆ์ผ์น˜๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์„œ๋ฒ„์— ์˜ํ•œ ์ถ”๊ฐ€ ๊ฒ€์ฆ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ด๋Ÿฌํ•œ ์„ธ๋ถ€ ์ •๋ณด๋Š” ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์ „์†ก๋˜๊ณ  ์„œ๋ฒ„์— ์˜ํ•ด ์‹ ๋ขฐ๋˜๋ฏ€๋กœ, ์•…์˜์ ์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋” ๋†’์€ ๊ถŒํ•œ์˜ uid ๋ฐ gid๋ฅผ ๋ณด๋‚ด์–ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ์ ์œผ๋กœ NFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UID 0(๋ฃจํŠธ)์„ ๊ฐ€์žฅํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šค์ฟผ์‹ฑ ์„น์…˜์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ

๋” ๋‚˜์€(๋˜๋Š” ์ผ๋ถ€) ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด NFS ๊ณต์œ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Linux์˜ /etc/exports ํŒŒ์ผ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

/PATH/TO/EXPORTย ย ย ย ย  CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ...
/media/disk/shareย ย  192.168.2.123(rw,sec=krb5p:krb5i)

As you can see, it allows to configure a specific IP or hostname to access the share. Only that address will be able to access the share.

Versions

  • NFSv2: ์ด ๋ฒ„์ „์€ ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ๊ณผ์˜ ๊ด‘๋ฒ”์œ„ํ•œ ํ˜ธํ™˜์„ฑ์œผ๋กœ ์ธ์‹๋˜๋ฉฐ, ์ดˆ๊ธฐ ์ž‘์—…์ด ์ฃผ๋กœ UDP๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์‹œ๋ฆฌ์ฆˆ ์ค‘ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ฒ„์ „์œผ๋กœ, ํ–ฅํ›„ ๊ฐœ๋ฐœ์˜ ๊ธฐ์ดˆ๋ฅผ ๋งˆ๋ จํ–ˆ์Šต๋‹ˆ๋‹ค.

  • NFSv3: ๋‹ค์–‘ํ•œ ๊ฐœ์„  ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ๋„์ž…๋œ NFSv3๋Š” ์ด์ „ ๋ฒ„์ „์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๊ฐ€๋ณ€ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ง€์›ํ•˜๊ณ  ๊ฐœ์„ ๋œ ์˜ค๋ฅ˜ ๋ณด๊ณ  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฐœ์ „์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  NFSv2 ํด๋ผ์ด์–ธํŠธ์™€์˜ ์™„์ „ํ•œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • NFSv4: NFS ์‹œ๋ฆฌ์ฆˆ์˜ ์ด์ •ํ‘œ ๋ฒ„์ „์ธ NFSv4๋Š” ๋„คํŠธ์›Œํฌ ๊ฐ„ ํŒŒ์ผ ๊ณต์œ ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ ๋ชจ์Œ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์œผ๋กœ๋Š” ๋†’์€ ๋ณด์•ˆ์„ ์œ„ํ•œ Kerberos ํ†ตํ•ฉ, ๋ฐฉํ™”๋ฒฝ์„ ํ†ต๊ณผํ•˜๊ณ  ํฌํŠธ ๋งคํผ ์—†์ด ์ธํ„ฐ๋„ท์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ, ์ ‘๊ทผ ์ œ์–ด ๋ชฉ๋ก(ACL) ์ง€์›, ์ƒํƒœ ๊ธฐ๋ฐ˜ ์ž‘์—…์˜ ๋„์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์˜ ์ฑ„ํƒ์€ NFSv4๋ฅผ ๋„คํŠธ์›Œํฌ ํŒŒ์ผ ๊ณต์œ  ๊ธฐ์ˆ ์˜ ์ค‘์š”ํ•œ ๋ฐœ์ „์œผ๋กœ ๊ตฌ๋ถ„ ์ง“์Šต๋‹ˆ๋‹ค.

  • Kerberos ์ธ์ฆ์„ ์ง€์›ํ•˜๋Š” Linux ํ˜ธ์ŠคํŠธ NFS๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

๊ฐ NFS ๋ฒ„์ „์€ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์˜ ์ง„ํ™”ํ•˜๋Š” ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ๋ณด์•ˆ, ํ˜ธํ™˜์„ฑ ๋ฐ ์„ฑ๋Šฅ์„ ์ ์ง„์ ์œผ๋กœ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

Squashing

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, NFS๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ uid์™€ gid๋ฅผ ์‹ ๋ขฐํ•˜์—ฌ ํŒŒ์ผ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค(kerberos๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ). ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„์—์„œ ์ด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • all_squash: ๋ชจ๋“  ์ ‘๊ทผ์„ ์••์ถ•ํ•˜์—ฌ ๋ชจ๋“  ์‚ฌ์šฉ์ž์™€ ๊ทธ๋ฃน์„ nobody (65534 unsigned / -2 signed)๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” nobody๊ฐ€ ๋˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • root_squash/no_all_squash: ์ด๋Š” Linux์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ uid 0 (root)๋กœ ์ ‘๊ทผ์„ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  UID์™€ GID๋Š” ์‹ ๋ขฐ๋˜์ง€๋งŒ 0์€ nobody๋กœ ์••์ถ•๋ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ root ๊ฐ€์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).
  • no_root_squash: ์ด ๊ตฌ์„ฑ์ด ํ™œ์„ฑํ™”๋˜๋ฉด root ์‚ฌ์šฉ์ž์กฐ์ฐจ ์••์ถ•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•˜๋ฉด root๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Subtree check

Linux์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. man(5) exports๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค: โ€œํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋‚ด๋ณด๋‚ด์ง€์ง€๋งŒ ์ „์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋‚ด๋ณด๋‚ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, NFS ์š”์ฒญ์ด ๋„์ฐฉํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋Š” ์ ‘๊ทผ๋œ ํŒŒ์ผ์ด ์ ์ ˆํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์žˆ๋Š”์ง€(์ด๋Š” ์‰ฝ์Šต๋‹ˆ๋‹ค)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‚ด๋ณด๋‚ด์ง„ ํŠธ๋ฆฌ์— ์žˆ๋Š”์ง€๋„ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค). ์ด ๊ฒ€์‚ฌ๋ฅผ subtree check๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.โ€

Linux์—์„œ๋Š” subtree_check ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Enumeration

Showmount

์ด๊ฒƒ์€ NFSv3 ์„œ๋ฒ„์—์„œ ์ •๋ณด๋ฅผ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚ด๋ณด๋‚ด๊ธฐ ๋ชฉ๋ก, ์ด ๋‚ด๋ณด๋‚ด๊ธฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ, ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์„ ๋Š์œผ๋ฉด ๋ถ€์ •ํ™•ํ•  ์ˆ˜ ์žˆ์Œ)๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. NFSv4 ํด๋ผ์ด์–ธํŠธ๋Š” ์ง์ ‘ /export์— ์ ‘๊ทผํ•˜๊ณ  ๊ฑฐ๊ธฐ์„œ ๋‚ด๋ณด๋‚ด๊ธฐ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉฐ, ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ๋“  ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

showmount ๋˜๋Š” Metasploit ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ NFS ํฌํŠธ์—์„œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์œผ๋ฉด, ์ด๋Š” ๋ฒ„์ „ 3์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” NFSv4 ์„œ๋ฒ„์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

showmount -e <IP>

์œ ์šฉํ•œ nmap ์Šคํฌ๋ฆฝํŠธ

nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share

์œ ์šฉํ•œ ๋ฉ”ํƒ€์Šคํ”Œ๋กœ์ž‡ ๋ชจ๋“ˆ

scanner/nfs/nfsmount #Scan NFS mounts and list permissions

nfs_analyze

์ด ๋„๊ตฌ๋Š” https://github.com/hvs-consulting/nfs-security-tooling์—์„œ ์ œ๊ณต๋˜๋ฉฐ, NFS ์„œ๋ฒ„์—์„œ ๋งˆ์šดํŠธ, ์ง€์›๋˜๋Š” NFS ๋ฒ„์ „, ์—ฐ๊ฒฐ๋œ IP ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋‹ค๋ฅธ ํด๋”๋กœ์˜ ํƒˆ์ถœ ๊ฐ€๋Šฅ์„ฑ ๋˜๋Š” no_root_squash๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ ๊ฐ™์€ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mounting

์„œ๋ฒ„๊ฐ€ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ํด๋”๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

showmount -e <IP>

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค:

mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock

๋ฒ„์ „ 2๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ธ์ฆ์ด๋‚˜ ๊ถŒํ•œ ๋ถ€์—ฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์˜ˆ:

mkdir /mnt/new_back
mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock

๊ณต๊ฒฉ

UID ๋ฐ GID ์‹ ๋ขฐ

๋ฌผ๋ก , ์—ฌ๊ธฐ์„œ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฃจํŠธ(UID 0)๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, no_root_squash๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ๋ฃจํŠธ๋„ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŠน์ • ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ๋˜๋Š” ํด๋”๊ฐ€ ํฌํ•จ๋œ ํด๋”๋ฅผ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒฝ์šฐ( UID์— ์˜ํ•ด). ํ•ด๋‹น UID๋ฅผ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋ฅผ ๋กœ์ปฌ์—์„œ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ/ํด๋”์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • https://github.com/hvs-consulting/nfs-security-tooling์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ **fuse_nfs**๋Š” ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ UID์™€ GID๋ฅผ ํ•ญ์ƒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

SUID ๊ถŒํ•œ ์ƒ์Šน

ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•˜์„ธ์š”:

NFS no_root_squash/no_all_squash misconfiguration PE

๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ํƒˆ์ถœ

์ด ํ›Œ๋ฅญํ•œ ๊ธฐ์‚ฌ์—์„œ๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ํƒˆ์ถœํ•˜์—ฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ํด๋”์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์ „์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํ•˜์œ„ ํด๋”๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ, **subtree_check**๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด ๋‚ด๋ณด๋‚ด๊ธฐ ์™ธ๋ถ€์˜ ํŒŒ์ผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ๋ฆฌ๋ˆ…์Šค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, NFS ์„œ๋ฒ„๊ฐ€ /srv/๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  /var/๊ฐ€ ๋™์ผํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๊ฒฝ์šฐ, /var/log/์—์„œ ๋กœ๊ทธ๋ฅผ ์ฝ๊ฑฐ๋‚˜ /var/www/์— ์›น์‰˜์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฃจํŠธ(0) ์‚ฌ์šฉ์ž๋งŒ ๊ฐ€์žฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”(์Šค์ฟผ์‹œ ์„น์…˜ ํ™•์ธ). ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ผ์ด ๋ฃจํŠธ ์†Œ์œ ์ด์ง€๋งŒ ๊ทธ๋ฃน์ด 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ /etc/shadow๋Š” ๋ฃจํŠธ ์†Œ์œ ์ด์ง€๋งŒ ๊ทธ๋ฃน์€ shadow(Debian์—์„œ gid 42)์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

https://github.com/hvs-consulting/nfs-security-tooling์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ **nfs_analyze**๋Š” ext4, xfs, btrfs ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ด ๊ณต๊ฒฉ์„ ์ง€์›ํ•˜๋„๋ก ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๋ฒ„์ „ 3์—์„œ ์ž‘๋™ํ•˜๋ฉฐ v4์—์„œ๋„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค).

NSFShell

ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด UID ๋ฐ GID๋ฅผ ์‰ฝ๊ฒŒ ๋‚˜์—ดํ•˜๊ณ  ๋งˆ์šดํŠธํ•˜๋ฉฐ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด nfsshell์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ‹์ง„ NFSShell ํŠœํ† ๋ฆฌ์–ผ.

๊ตฌ์„ฑ ํŒŒ์ผ

/etc/exports
/etc/lib/nfs/etab

์œ„ํ—˜ํ•œ ์„ค์ •

  • ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๊ถŒํ•œ (rw): ์ด ์„ค์ •์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ๋ชจ๋‘ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ด‘๋ฒ”์œ„ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํฌํŠธ ์‚ฌ์šฉ (insecure): ์ด ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜๋ฉด ์‹œ์Šคํ…œ์ด 1024 ์ด์ƒ์˜ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„ ์ด์ƒ์˜ ํฌํŠธ์˜ ๋ณด์•ˆ์€ ๋œ ์—„๊ฒฉํ•  ์ˆ˜ ์žˆ์–ด ์œ„ํ—˜์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์ค‘์ฒฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๊ฐ€์‹œ์„ฑ (nohide): ์ด ๊ตฌ์„ฑ์€ ๋‹ค๋ฅธ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋‚ด๋ณด๋‚ธ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ๋งˆ์šดํŠธ๋˜์–ด ์žˆ์–ด๋„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ ์ ˆํ•œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž์ฒด ๋‚ด๋ณด๋‚ด๊ธฐ ํ•ญ๋ชฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฃจํŠธ ํŒŒ์ผ ์†Œ์œ ๊ถŒ (no_root_squash): ์ด ์„ค์ •์—์„œ๋Š” ๋ฃจํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ํŒŒ์ผ์ด ์›๋ž˜์˜ UID/GID์ธ 0์„ ์œ ์ง€ํ•˜๋ฉฐ, ์ตœ์†Œ ๊ถŒํ•œ ์›์น™์„ ๋ฌด์‹œํ•˜๊ณ  ๊ณผ๋„ํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋น„์Šค์ฟผ์‹œ (no_all_squash): ์ด ์˜ต์…˜์€ ์‚ฌ์šฉ์ž ์‹ ์›์ด ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•˜๋ฉฐ, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ๊ถŒํ•œ ๋ฐ ์ ‘๊ทผ ์ œ์–ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NFS ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•œ ๊ถŒํ•œ ์ƒ์Šน

NFS no_root_squash ๋ฐ no_all_squash ๊ถŒํ•œ ์ƒ์Šน

HackTricks ์ž๋™ ๋ช…๋ น

Protocol_Name: NFS    #Protocol Abbreviation if there is one.
Port_Number:  2049     #Comma separated if there is more than one.
Protocol_Description: Network File System         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for NFS
Note: |
NFS is a system designed for client/server that enables users to seamlessly access files over a network as though these files were located within a local directory.

#apt install nfs-common
showmount 10.10.10.180      ~or~showmount -e 10.10.10.180
should show you available shares (example /home)

mount -t nfs -o ver=2 10.10.10.180:/home /mnt/
cd /mnt
nano into /etc/passwd and change the uid (probably 1000 or 1001) to match the owner of the files if you are not able to get in

https://book.hacktricks.wiki/en/network-services-pentesting/nfs-service-pentesting.html

Entry_2:
Name: Nmap
Description: Nmap with NFS Scripts
Command: nmap --script=nfs-ls.nse,nfs-showmount.nse,nfs-statfs.nse -p 2049 {IP}

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 ์ง€์›ํ•˜๊ธฐ