본문 바로가기
IT 정보/용어

CAS(Code Access Security)란? .NET 보안을 책임지는 핵심 기술 이해하기

by 희품 2025. 6. 1.
반응형

CAS(Code Access Security)란? .NET 보안을 책임지는 핵심 기술 이해하기 썸네일 이미지

소프트웨어의 보안은 단순히 네트워크 차원에서 끝나지 않는다. 코드 자체의 실행 권한을 관리하는 것도 매우 중요하다. .NET 프레임워크에서는 이런 역할을 담당하는 중요한 기능으로 CAS(Code Access Security)가 있다.

특히 기업 환경이나 민감한 데이터를 다루는 애플리케이션에서는 CAS의 이해와 활용이 필수적이다.
CAS의 개념, 작동 방식, 구조, 실무 적용 방안까지 살펴보자.

 

CAS란?

Code Access Security에 대한 시각화 이미지

CAS는 .NET 프레임워크에서 제공하는 보안 메커니즘으로, 실행되는 코드가 수행할 수 있는 작업을 제어한다. 즉, 코드의 신뢰 수준에 따라 파일 접근, 레지스트리 수정, 네트워크 사용 등 다양한 권한을 제한하거나 허용할 수 있다.

 

이는 사용자의 신원을 기준으로 보안을 설정하는 전통적인 방식과는 달리, 코드 자체의 출처나 서명, 위치 등을 기준으로 권한을 부여한다는 점이 핵심이다.

 

CAS의 주요 구성요소

CAS는 크게 증명서, 권한 집합, 정책 레벨, 보안 스택 검증으로 구성된다.

각 구성 요소의 세부사항을 살펴보자.

Policy Level에 대한 시각적 이미지. Low, Middle, High로 권한 레벨을 확인할 수 있음.

  1. 증명서(Evidence) : 코드가 어디서 왔는지, 어떤 서명이 되었는지를 나타낸다. 예를 들어, URL, 디지털 서명, 영역(Zone) 등이 증명서의 역할을 한다.
  2. 권한 집합(Permission Set) : 특정 증명서에 대해 허용되는 권한 목록이다. 예를 들어, 파일 읽기, 쓰기, 실행 등의 권한이 설정될 수 있다.
  3. 정책 레벨(Policy Level) : CAS는 여러 계층의 정책을 통해 보안을 설정한다. 대표적으로는 엔터프라이즈 정책, 머신 정책, 사용자 정책 등이 있으며, 이들은 계층적으로 적용된다.
  4. 보안 스택 검증(Stack Walk) : 코드가 특정 작업을 요청할 때, 호출 스택을 따라 각 프레임의 권한을 검증한다. 중간에 하나라도 권한이 부족한 코드가 있다면 작업이 거부된다.

 

CAS의 적용 방식

CAS는 주로 다음 두 가지 방식으로 동작한다.

CAS를 적용하면서 보안과 권한을 제어할 수 있는 모습을 연상하는 손과 자물쇠 사진

  • 선언적 보안(Declarative Security): 코드에 특성(Attribute)을 부여하여 필요한 권한을 선언한다.
  • 명령적 보안(Imperative Security): 런타임 시 코드에서 직접 권한을 요청하거나 거부한다.
// 코드를 통해 권한을 제어하는 예시
[FileIOPermission(SecurityAction.Demand, Read = "C:\\data.txt")]
public void ReadFile() {
    // 파일 읽기 로직
}

 

CAS와 .NET Core

.NET이라는 글자 안에 코드가 들어있는 시각적 글자 이미지

.NET Framework에서 핵심적인 기능이었던 CAS는 .NET Core 및 .NET 5 이상에서는 제거되었다.

이는 크로스 플랫폼을 지향하고, 보안 모델을 단순화하기 위한 결정이었다.

그 대신 샌드박스 실행, OS 보안, 컨테이너 기반 격리 등 다른 보안 모델이 주류로 대체되고 있다.

 

그러나 여전히 .NET Framework를 사용하는 기존 시스템에서는 CAS가 적용되어 있기 때문에, 유지보수나 레거시 시스템 관리 시 반드시 이해해야 하는 개념이다.

 

 

실무에서의 CAS

실무에서 CAS를 사용하는 경우는 .NET Framework 구버전을 사용할 때 주로 이해하고 이용하게 될 것이다. 너무나 옛날 버전이라 생각할지 모르겠지만, 생각보다 .NET 4.x 버전을 사용하는 환경은 매우 많다. 실무에서 옛날 프레임워크를 사용하는 것은 매우 흔한 일이기 때문이다. (환경 특성상 바꾸기 어려운 경우가 많다.)

.NET Foundation에 대한 로고 이미지. 닷넷 코어와 닷넷 프레임워크를 연상할 수 있는 로고

  • 민감한 기능은 명시적 권한 요구: 파일, 레지스트리, 네트워크 접근에는 반드시 권한 요구 코드를 명시하자.
  • 신뢰 구역 설정 주의: 로컬 영역(Local Zone)과 인터넷 영역(Internet Zone)의 차이를 명확히 이해하고 권한을 분리하자.
  • 정기적 감사 및 검토: 어셈블리의 권한 설정은 정기적으로 검토해 과도한 권한이 부여되지 않도록 한다.

CAS는 .NET의 전통적인 보안 체계 중 하나로, 코드의 실행 권한을 세밀하게 제어할 수 있게 해 준다.

특히 보안이 중요한 애플리케이션에서는 코드 접근 제어를 통해 잠재적 위협을 미연에 방지할 수 있다. 비록 최신 .NET에서는 사라졌지만, .NET Framework 기반의 시스템을 유지보수하거나 보안 아키텍처를 설계할 때 CAS에 대한 이해는 여전히 유효하다.

궁금하신 내용이 있으면 댓글 남겨주세요. 꼬리말 이미지.

#CAS #CodeAccessSecurity #닷넷보안 #NETFramework #보안프로그래밍 #보안정책 #스택검증 #레거시시스템 #IT보안 #개발자팁

 

 

반응형