격리된 μ»¨ν…Œμ΄λ„ˆμ—μ„œ νƒˆμΆœμ„ ν—ˆμš©ν•˜λŠ” cgroups v1의 취약점

μ»€λ„μ˜ cgroups v1 λ¦¬μ†ŒμŠ€ μ œν•œ λ©”μ»€λ‹ˆμ¦˜ κ΅¬ν˜„μ—μ„œ 발견된 취약점(CVE-2022-0492)에 λŒ€ν•œ μ„ΈλΆ€ 정보가 κ³΅κ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. Linuxμ΄λŠ” 격리된 μ»¨ν…Œμ΄λ„ˆμ—μ„œ νƒˆμΆœν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” 컀널뢀터 λ‚˜νƒ€λ‚˜κΈ° μ‹œμž‘ν•©λ‹ˆλ‹€. Linux 2.6.24 λ²„μ „μ—μ„œ λ°œμƒν–ˆλ˜ λ¬Έμ œκ°€ 컀널 릴리슀 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 및 4.9.301μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 각 배포판의 νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ λ¦΄λ¦¬μŠ€λŠ” λ‹€μŒ νŽ˜μ΄μ§€μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. Debian, μˆ˜μ„Έ, UbuntuRHEL, Fedora, Gentoo, Arch Linux.

이 취약점은 전체 κΆŒν•œμœΌλ‘œ ν•Έλ“€λŸ¬λ₯Ό μ‹€ν–‰ν•  λ•Œ μ μ ˆν•œ 검사λ₯Ό μˆ˜ν–‰ν•˜μ§€ λͺ»ν•˜λŠ” release_agent 파일 ν•Έλ“€λŸ¬μ˜ 논리 였λ₯˜λ‘œ 인해 λ°œμƒν•©λ‹ˆλ‹€. release_agent νŒŒμΌμ€ cgroup의 ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•Œ 컀널이 μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ„ μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 이 ν”„λ‘œκ·Έλž¨μ€ 루트 이름 κ³΅κ°„μ˜ λͺ¨λ“  "κΈ°λŠ₯"을 μ‚¬μš©ν•˜μ—¬ 루트둜 μ‹€ν–‰λ©λ‹ˆλ‹€. release_agent 섀정은 κ΄€λ¦¬μžλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€κ³  κ°€μ •ν–ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” 루트 μ‚¬μš©μžμ—κ²Œ μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” κ²ƒμœΌλ‘œ μ œν•œλ˜μ–΄ μžˆμ–΄ μ»¨ν…Œμ΄λ„ˆμ—μ„œ 섀정이 λ³€κ²½λ˜κ±°λ‚˜ κ΄€λ¦¬μž κΆŒν•œμ΄ μ—†λŠ” 루트 μ‚¬μš©μž(CAP_SYS_ADMIN)κ°€ 섀정을 λ³€κ²½ν•˜λŠ” κ²½μš°λ„ μ œμ™Έλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ).

μ΄μ „μ—λŠ” μ΄λŸ¬ν•œ κΈ°λŠ₯이 μ·¨μ•½μ μœΌλ‘œ μΈμ‹λ˜μ§€ μ•Šμ•˜μœΌλ‚˜, μ»¨ν…Œμ΄λ„ˆμ˜ 루트 μ‚¬μš©μžμ™€ κ²ΉμΉ˜μ§€ μ•ŠλŠ” λ³„λ„μ˜ 루트 μ‚¬μš©μžλ₯Ό μ»¨ν…Œμ΄λ„ˆμ— 생성할 수 μžˆλŠ” μ‚¬μš©μž λ„€μž„μŠ€νŽ˜μ΄μŠ€(μ‚¬μš©μž λ„€μž„μŠ€νŽ˜μ΄μŠ€)의 μΆœν˜„μœΌλ‘œ 상황이 λ°”λ€Œμ—ˆμŠ΅λ‹ˆλ‹€. μ£Όμš” ν™˜κ²½. λ”°λΌμ„œ 곡격의 경우 λ³„λ„μ˜ μ‚¬μš©μž ID 곡간에 자체 루트 μ‚¬μš©μžκ°€ μžˆλŠ” μ»¨ν…Œμ΄λ„ˆμ— release_agent ν•Έλ“€λŸ¬λ₯Ό μ—°κ²°ν•˜λŠ” κ²ƒμœΌλ‘œ μΆ©λΆ„ν•˜λ©°, ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ£Œλœ ν›„ κΈ°λ³Έ ν™˜κ²½μ˜ 전체 κΆŒν•œμœΌλ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.

기본적으둜 cgroupfsλŠ” 읽기 μ „μš© λͺ¨λ“œλ‘œ μ»¨ν…Œμ΄λ„ˆμ— λ§ˆμš΄νŠΈλ˜μ§€λ§Œ, CAP_SYS_ADMIN κΆŒν•œμ΄ μžˆκ±°λ‚˜ unshare μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜μ—¬ λ³„λ„μ˜ μ‚¬μš©μž λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μžˆλŠ” 쀑첩 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜λ©΄ μ“°κΈ° λͺ¨λ“œμ—μ„œ 이 pseudofsλ₯Ό λ‹€μ‹œ λ§ˆμš΄νŠΈν•˜λŠ” 데 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. μƒμ„±λœ μ»¨ν…Œμ΄λ„ˆμ— λŒ€ν•΄ CAP_SYS_ADMIN κΆŒν•œμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

격리된 μ»¨ν…Œμ΄λ„ˆμ—μ„œ νƒˆμΆœμ„ ν—ˆμš©ν•˜λŠ” cgroups v1의 취약점

이 곡격은 격리된 μ»¨ν…Œμ΄λ„ˆμ—μ„œ 루트 κΆŒν•œμœΌλ‘œ μˆ˜ν–‰ν•˜κ±°λ‚˜, μΆ”κ°€ κΆŒν•œ λΆ€μ—¬λ₯Ό λ°©μ§€ν•˜λŠ” no_new_privs ν”Œλž˜κ·Έ 없이 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©μž λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€(기본적으둜 ν™œμ„±ν™”λ¨). Ubuntu Fedoraμ—μ„œλ„ μ‚¬μš© κ°€λŠ₯ν•˜μ§€λ§Œ ν™œμ„±ν™”λ˜μ–΄ μžˆμ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. Debian RHEL을 ν¬ν•¨ν•œ λ‹€μ–‘ν•œ μš΄μ˜μ²΄μ œμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ 루트 cgroup v1에 λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€(예: DockerλŠ” 루트 RDMA cgroupμ—μ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€). CAP_SYS_ADMIN κΆŒν•œμ„ μ‚¬μš©ν•΄λ„ 곡격이 κ°€λŠ₯ν•˜λ©°, 이 κ²½μš°μ—λŠ” μ‚¬μš©μž λ„€μž„μŠ€νŽ˜μ΄μŠ€ 지원 및 루트 cgroup v1 계측 ꡬ쑰에 λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ΄ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

격리된 μ»¨ν…Œμ΄λ„ˆμ—μ„œ νƒˆμΆœν•˜λŠ” 것 외에도 취약점은 "κΈ°λŠ₯"이 μ—†λŠ” 루트 μ‚¬μš©μž λ˜λŠ” CAP_DAC_OVERRIDE κΆŒν•œμ΄ μžˆλŠ” μ‚¬μš©μžκ°€ μ‹œμž‘ν•œ ν”„λ‘œμ„ΈμŠ€λ„ ν—ˆμš©ν•©λ‹ˆλ‹€(곡격을 μœ„ν•΄μ„œλŠ” /sys/fs/cgroup/*/release_agent νŒŒμΌμ— λŒ€ν•œ μ•‘μ„ΈμŠ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€. 루트 μ†Œμœ ) λͺ¨λ“  μ‹œμŠ€ν…œμ  "κΈ°λŠ₯"에 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

참고둜, Seccomp, AppArmor λ˜λŠ” SE 보호 λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” ν•΄λ‹Ή 취약점을 μ•…μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.Linux μ»¨ν…Œμ΄λ„ˆμ˜ 좔가적인 격리λ₯Ό μœ„ν•΄ SeccompλŠ” unshare() μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ°¨λ‹¨ν•˜κ³  AppArmor 및 SE도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.Linux cgroupfsλ₯Ό μ“°κΈ° λͺ¨λ“œλ‘œ λ§ˆμš΄νŠΈν•˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

좜처 : opennet.ru

DDoS 보호, VPS VDS μ„œλ²„κ°€ μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό μœ„ν•œ μ•ˆμ •μ μΈ ν˜ΈμŠ€νŒ… κ΅¬μž… πŸ”₯ DDoS 곡격 λ°©μ§€ κΈ°λŠ₯이 νƒ‘μž¬λœ μ•ˆμ •μ μΈ μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ…, VPS 및 VDS μ„œλ²„λ₯Ό κ΅¬λ§€ν•˜μ„Έμš” | ProHoster