본문 바로가기

IT 살이/03. 관리 - 보안 관리

[연재] 1. CAS(Code Access Security)란?

1. CAS(Code Access Security)란?

스마트클라이언트 애플리케이션에서는 배포와 함께 가장 이슈로 떠오르는 문제가 바로 보안의 문제이다. 어셈블리가 외부로부터 다운되기 때문에 어떻게 외부 코드로부터 로컬 PC의 자원을 보호하느냐가 문제가 되는 것이다. 기존의 사용자 중심의 보안체계로는 이 경우를 대처할 수 없게 된다.

사용자 중심의 보안 체계라는 것은 사용자별로 계정이 있고 그 계정에 권한을 부여하는 방식이었다. 따라서 윈도우상에서 보안을 판단할때는 이 사용자(즉 이 계정)를 기반으로해서 현재의 프로세스를 실행시킬 수 있느냐 없느냐를 체크했다.

사용자 계정 중심의 보안 체계에서는 인터넷에서 프로그램을 다운, 설치를 사용자가 한번만 승인하게 되면 이 코드는 현재 로그인된 사용자의 계정 권한을 이어 받게 된다. 만약 로그인된 사용자 계정이 관리자 그룹에 속하는 계정이라면 이 프로그램은 무소불위의 권력을 갖게 된다. 중요 파일을 삭제하거나 중요 정보를 외부로 유출시킬 수도 있다. ( 이런 이유들 때문에 아무리 PC의 주인일지라도 사용자 계정을 하나 만들어서 관리자 계정이 아니라 사용자 계정으로 로그온해서 작업을 하도록 보안 전문가들은 권장하고 있는 것이다.)

그러나 .NET 프레임워크에서는 어셈블리 중심의 새로운 보안 체계가 도입된다. 이름하여 CAS(Code Access Security. 흔히 ‘카스’라 발음한다.)라고 한다. .NET의 CAS에서는 현재 로그온된 계정이 누구인지도 중요하지만, 이 코드가 어디에서 왔고 누가 만들었는지도 체크를 한다. 이런 정보들을 바탕으로 해서 CLR은 어셈블리의 권한을 결정하게 되고 그 어셈블리의 권한에 따라 어셈블리의 로딩여부 또는 실행여부가 결정된다. 동일한 어셈블리라 하더라도 이것이 어느 곳에서부터 왔느냐에 따라 그 권한이 달라질 수 있다. 예를 들어 인터넷에서 다운받아서 실행시키는 경우는 보안 에러가 발생하더라도 동일한 어셈블리를 로컬 PC로 복사해서 실행시키면 아무 문제없이 실행된다는 것이다. 요즘 같은 분산환경의 컴퓨팅 시기에는 애플리케이션에서 실행되는 코드가 어디로부터 어떻게 들어올지 미리 예측하기가 힘들다. 이러한 환경에서 CAS는 합리적인 보안체계라 아니 할 수 없다.