2024-05-26 09:30 (일)
[김석의 보안특강②] 솔라리스 역할기반 접근제어 활용
상태바
[김석의 보안특강②] 솔라리스 역할기반 접근제어 활용
  • 길민권
  • 승인 2014.02.26 09:05
이 기사를 공유합니다

솔라리스 RBAC, 권한 회수 및 제한 용이...최소권한의 원칙 구현
전통적인 유닉스 시스템에서 가장 강력한 권한을 가진 사용자는 단연 ‘root’다. 모든 파일을 읽거나 쓰고, 모든 프로그램을 실행할 수 있으며, 모든 프로세스를 관리 할 수 있다. root 사용자는 사용자의 생성 및 삭제, 패스워드 초기화, 시스템 및 네트워크 구성의 변경, 보안설정의 변경(시스템 방화벽 설정을 수정하고 감사 증적을 수정할 수 있으며 기밀 데이터에 접근도 가능)이 가능하다.
 
일반사용자는 매우 제한적인 권한을 가진데 비해 관리자인 root 사용자는 매우 강력한 권한을 가지고 있다. 그러나 이러한 차이 때문에 IT부서에서는 root 사용자 계정을 공유하는 일이 비일비재하다.
 
root 사용자는 매우 강력한 관리 권한을 가지고 있고 일반적인 사용자는 매우 제한적이므로 시스템의 관리를 위한 다양한 기능을 수행하는데 어려움이 있기 때문이다.
 
결국 불가피하게 IT부서 내에서는 root 사용자 패스워드를 공유하고 관리 업무를 수행하는 경우를 어렵지 않게 볼 수 있다. 게다가 유지보수를 위해 다양한 외부업체가 시스템을 관리하는 경우라면 더더욱 문제가 발생 할 수 있다.
 
그러나 이런 경우 다양한 문제점을 야기한다.
고의나 실수로 관리 업무 외에 시스템에 다양한 문제가 발생할 수 있다. 필요한 권한 이외에 너무 과도한 권한을 부여 받은 root 사용자의 권한으로 인해 고의나 실수로 잘못 명령을 수행하게 되면 시스템 및 서비스 장애로 이어진다.
 
따라서 관리자라면 누구나 한번 정도는 명령의 제한적 실행이 보안을 위해 필요하다는 생각을 가지고 있다. 일반적인 유닉스와 리눅스에서는 sudo를 이용하여 편리하게 일반사용자에서 관리적 명령을 수행할 수 있으나, sudo는 해당 사용자가 제한된 명령어를 사용할 수 있도록 사전에 등록된 파일에 사용 가능한 명령을 등록하는 형태로 사용한다. 그러나 sudo 명령의 경우 해당 명령을 수행할 때 setuid 기반으로 수행하고 무엇보다 권한의 부여 및 회수가 번거롭다.
 
솔라리스 8부터 제공된 솔라리스 RBAC(역할기반 접근제어: Role Base Access Control)을 이용하면 이러한 여러 문제를 단번에 해결 할 수 있다.
 
역할기반접근제어는 사용자와 권한, 그리고 권한프로파일, 역할이라는 개념을 도입하여 권한의 부여, 회수가 용이할 뿐 아니라 보안의 원칙이라 할 수 있는 Least Privilege(최소권한의 원칙)을 구현할 수 있는 강력한 기능이다.
 
솔라리스 11부터는 기본 시스템 보안이 RBAC이고 보다 강력하게 기능이 강화 되었으며 이를 통해 보다 강력한 보안 접근 제어가 가능하다. 또한 11은 클라우드 환경을 지원하기 때문에 ZONE에 대한 위임과 접근제어도 포함하고 있다.
 
RBAC는 root 사용자의 권한을 권한 프로파일(right profiles)로 정의하고 이 권한 프로파일을 역할(role)이라는 가상 사용자에게 연결한다. 아울러 역할(role)사용자를 일반사용자와 매핑하면 된다.

 
예를 들어, userA가 시스템 관리를 위해 사용자 보안(User Security)를 수행하고자 한다. 당연하게도 전통적인 유닉스 환경에서는 시스템 종료를 위해 root 사용자가 수행해야만 한다.
 
솔라리스 RBAC에는 root 사용자가 수행해야 할 필요가 없다. 시스템의 종료 명령을 수행할 수 있는 사용자가 해당 명령을 수행하면 그 뿐이다. 물론 sudo에서도 해당 명령을 visudo를 이용하여 추가하면 간단하게 사용할 수 있다.
 
그러나 sudo는 사용자별 접근제어, 권한 부여 및 회수가 제한적인데 반해 솔라리스 RBAC은 매우 체계적으로 부여 할 수 있을 뿐 아니라 권한의 회수 및 제한도 용이하다.
 
또한 솔라리스 RBAC에서는 사전에 정의된 권한 프로파일들을 이용하여 보다 손쉽게 사용할 수 있다.
 
솔라리스 RBAC에서는 이미 정의된 권한 프로파일인 User Security를 이용하여 일반 사용자를 역할 사용자와 매핑해주고 해당 프로파일 구성에 추가만 하면 된다.
 
일반사용자 UserA는 역할사용자 RoleA와 연결하면 되고 RoleA는 권한 프로파일과 연결된다. 일반사용자 UserA로 로그인 후 RoleA로 사용자 전환 후 관리에 필요한 명령을 수행하면 된다.
 
물론 User에 대한 제한적인 명령어만 사용이 가능하다. 시스템 종료나 장치 관리등의 기타 관리는 불가능한 것이다.
 
RBAC를 이용하면 관리자인 root 사용자 권한을 손쉽게 쪼개서 최소권한의 원칙에 따라 부여 할 수 있을 뿐 아니라, 회수 역시 UserA에게 RoleA를 매핑한 매핑 정보만 바꾸면 된다.
 
UserB가 RoleA로 전환하려면 어떻게 될까? userB는 RoleA와 연결된 사용자가 아니므로 RoleA로의 접근은 불가능하다.
 
그러면 RoleA가 해킹 당한다면?
RoleA는 일반사용자가 아닌 역할 사용자 이므로 시스템에 직접 로그인이 불가능하며, 시스템관리자인 root에 비해 제한적인 명령만 수행할 수 있으므로 해킹된다고 하더라도 피해가 제한적이다.
 
가령 roleA와 연결하는 userA가 해킹 당했고, RoleA가 Backup Operator라는 프로파일과 연결되어 있다면, userA 계정을 이용하여 해커는 해당 시스템의 backup 관련 명령만 제한적으로 수행할 수 있으며, 다른 관리적 명령어의 사용은 일체 제한된다.
 
해커는 친절하게 해당 시스템의 백업만 수행할 수 있다. 솔라리스 11부터는 root 사용자도 role(역할)사용자로 구성된다.
 
전통적인 root 사용자와 차이가 무엇이 있을까?
시스템 관리자는 root 사용자를 이용하여 시스템에 직접 로그인 하는 것이 불가능하다. 지정된 일반사용자로 로그인 후 사용자 전환을 통해 root 역할 사용자를 호출하여 관리적 업무를 수행할 수 있다.
 
솔라리스 11에서는 root 역할 사용자와 별개로 다양한 권한 프로파일을 정의하고 있다. 이를 통해 관리자의 관리적, 보안적업무의 부담을 줄일 수 있다.
 
아래는 솔라리스 11에서 기본 제공하는 권한 프로파일 중 하나인 DHCP Management 프로파일이다.
 
전통적인 유닉스 환경에서는 DCHP 서버를 관리해야 한다면 역시 root 사용자로 수행해야 하지만, 솔라리스 RBAC에서는 이 프로파일에 역할 사용자를 연결하고 일반사용자를 해당 역할 사용자와 연결하면 된다.
 
DHCP Management:RO::
Manage the DHCP service:
auths=solaris.dhcpmgr.*;
help=RtDHCPMngmnt.html

 
여기서 역할 사용자가 아닌 일반 사용자에게 왜 직접적인 권한을 부여하지 않고 역할 사용자를 사용하는가? 하는 질문에 대한 답은 명확하다.
 
해당 사용자에게 권한을 직접 부여 한다면 권한을 회수 할 때도 해당 사용자로부터 일일이 제거해야 한다.
 
DHCP 업무를 수행하는 관리자가 휴가나 출장 등의 업무로 부재중이라고 생각해보자.
DCHP 관리자의 암호를 알려줘서 구성해야 할까?
 
RBAC를 사용하는 솔라리스에서는 DHCP Management 프로파일을 부여 받은 역할 사용자를 단순히 DHCP 관리 권한이 필요한 사용자에게 매핑만 해 주면 된다.
jack을 DHCP Management 프로파일에 연결하면 된다.
 
# useradd -P "DHCP Management" -s /usr/bin/pfbash jack
 
필요에 따라 별도의 roleadd 명령어로 역할 사용자를 생성하고 매핑할 수도 있다. 그 뒤에 DCHP 관리자가 출장이나 휴가에서 돌아오면 임시로 관리 업무를 수행한 사용자와 역할사용자의 매핑만 해제하거나 역할사용자의 암호만 변경하여 간단하게 DHCP 관리 업무를 제한 할 수 있게 된다.
 
솔라리스 11에서 RBAC를 구현하기 위해서는 다양한 설정 파일과 명령어의 구성이 필요하다. 여기서는 지면의 한계상 간력하게 몇가지 중요 파일과 명령어만 정리해 두었다. 추후 관련하여 설정이나 구성이 필요한 분들은 필자의 블로그와 솔라리스 테크넷을 방문하기를 바란다.
 
<관련 파일>
/etc/security/policy.conf
/etc/security/exec_attr/core-os
/etc/security/auth_attr/core-os
/etc/security/prof_att/core-os
/usr/bin/pfsh
/usr/bin/pfksh
/usr/bin/pfbash
 
<관련 명령어>
useradd
usermod
roleadd
rolemod
profiles
ppriv
auths
roles
getent

 
[필자 소개]
김 석. 現 노브레이크 수석컨설턴트, 안산대학교 IT 응용보안과 겸임교수, 오라클 ACE Director(솔라리스). 이외 활동으로 김재벌의 IT이야기 블로그(blog.solaris.co.kr) 운영, 솔라리스 테크넷, 솔라리스 스쿨 운영자로 활동중.
-이메일: ostoneo@nobreak.co.kr

■ 보안 사건사고 제보 하기

▷ 이메일 : mkgil@dailysecu.com

▷ 제보 내용 : 보안 관련 어떤 내용이든 제보를 기다립니다!

▷ 광고문의 : jywoo@dailysecu.com

★정보보안 대표 미디어 데일리시큐 / Dailysecu, Korea's leading security media!★