본문 바로가기
Computer Science/Linux

[Linux] 접근 통제 방법 DAC와 MAC

by yhames 2023. 11. 28.

접근통제(Access Control)

접근 통제란 디렉터리나 파일, 네트워크 소켓 같은 시스템 자원을 적절한 권한을 가진 사용자나 그룹이 접근하고 사용할 수 있게 통제하는 것이다. 시스템 자원은 객체(Object), 자원에 접근하는 사용자나 프로세스는 주체(Subject)라고 부른다.

DAC(Discretionary Access Control)

임의 접근 통제(DAC)는 시스템 객체에 대한 접근을 사용자나 또는 그룹의 신분을 기준으로 제한하는 방법. 즉, 자원의 소유자가 자원에 대한 다른 사람들의 권한을 직접 제어하는 방법이다.

객체에 적용된 DAC 접근 통제는 퍼미션  정보를 통해 확인할 수 있다.

 

권한을 저장하는 방법에는 대표적으로 ACL(Access Control List), CL(Capability List)가 있다.

ACL은 자원를 기준으로 접근 권한을 저장하는 방법이고, CL은 사용자를 기준으로 접근 권한을 저장하는 방식이다.

 

하지만 DAC 방식은 다음과 같은 취약점이 있다.

  • 의도치 않은 권한 취약점 발생 문제
  • root 권한 문제

의도치 않은 권한 취약점 발생 문제

read 권한만 부여한 사용자가 해당 자원을 copy한 경우, copy된 자원의 소유자는 해당 사용자가 되어 권한이 부여되지 않은 사용자도 접근이 가능하게 된다.

사용자의 실수로 인한 접근통제 취약점 발생 시나리오

위 예시에서 file의 소유자는 A 사용자이다. B 사용자에게 file에 대해 읽기 권한만 부여하고, C 사용자에는 어떠한 권한도 부여하지 않았다. 하지만 B 사용자가 file을 복사하고 수정하기위해 접근 권한을 777로 변경해버리면, C 사용자도 해당 파일에 접근이 가능해진다.

root 권한 문제

DAC 방식에서 root 계정은 모든 권한을 가지고 있기 때문에 root 권한을 탈취하게 되면 시스템 전체 권한이 탈취된다는 문제가 있다. 이는 단순히 비밀번호 방식이 위험하다는 것이 아니라, 일반 사용자가 실행할 수 있는 특정 프로그램에서 내부적으로 root 권한을 사용하는 경우 문제가 된다.

setuid/setgid 문제

예를 들어 사용자의 암호는 /etc/shadow에 저장되어 있으며 오직 root만 읽고 쓸 수 있다. 하지만 일반 사용자도 passwd 명령어를 통해 /etc/shadow를 수정하게 된다. 또한, ping 명령어는 ICMP(Internet Control Message Protocol) 패킷을 사용하므로 root 권한이 필요하지만, 일반 사용자도 ping 명령어를 사용할 수 있다.

 

이는 실행파일 속성에 setuid/setgid 비트가 설정되어 있는 경우, 해당 프로그램을 실행하면 실행 시점에 설정된 사용자 혹은 그룹 권한으로 동작하기 때문이다.

 

만약 passwd나 ping 같이 setuid/setgid가 붙은 프로그램이 취약점이 있으면, root 권한이 탈취될 수 있다.

 

시스템에 있는 setuid 비트가 붙은 프로그램은 다음 명령어로 찾을 수 있다.

find /bin /usr/bin /sbin -perm -4000 -exec ls -ldb {} \;

 

잘 알려진 포트 daemon 문제

http(80), ftp(20, 21)과 같은 잘 알려진 포트(well-known port)는 IANA에서 할당한 TCP 및 UDP 포트 번호의 일부이며, 오직 root 만이 사용할 수 있다. 따라서 해당 포트를 사용하는 daemon 서비스는 모두 root 권한으로 실행된다.

 

해당 포트를 사용하는 daemon 서비스에 취약점이 있거나 설정이 잘못되었을 경우 daemon 서비스를 통해 root 권한이 탈취될 수 있다.

MAC(Mandatory Access Control)

강제적 접근 통제(MAC)는 미리 정해진 정책과 보안 등급에 의거하여 주체에게 허용된 접근 권한과 객체에게 부여된 허용 등급을 비교하여 접근을 통제하는 방식이다.

 

MAC에서 접근 권한은 주체의 비밀 취급 인가 레이블(Clearance Label)객체의 민감도 레이블(Sensitivity Label)을 비교하여 지정된다.

네이버 카페에서 회원 등급에 따라 접근할 수 있는 게시판을 결정하는 것과 같다.

 

DAC 방식의 취약점을 보완하기 위해 RedHat 계열에서는 SELinuxDebian 계열에서는 AppArmor를 통해 MAC 방식을 지원한다.


 

'Computer Science > Linux' 카테고리의 다른 글

[Linux] Flex와 Bison  (0) 2024.02.28
[Linux] 쉘 변수와 환경변수  (0) 2024.02.27
[Linux] SSH가 무엇인가요?  (0) 2023.11.28
[Linux] Debian과 Rocky Linux  (0) 2023.11.28