하우리 로고 이미지

전체메뉴 열기

Security issues analysis

주의해야 할 보안위협요소에 대한 분석자료 제공

보안이슈 분석

.NET Framework Security And Virus (2)
등록일 :
2002.12.05

.NET Framework 보안



오늘날 사람들의 최대 관심사 중의 하나는 다름아닌 "보안"이다.

.NET Framework 역시 보안에 있어서 다양한 신 기능들을 선보이고 있는데, 시스템 보안을 응용하기 위해서는 관리자뿐만 아니라 소프트웨어
개발자 까지도 이에 대한 전반적인 원리를 이해할 필요가 있다.




보안 정책 소개


.NET Framework은 기존 운영체제의 시스템 보안을 향상 시키고 어플리케이션 보안을 위해 CLR(Common Language Runtime)을
통해 적용되는 보안이란 개념으로 전개되고 있다. .NET에서의 어셈블리 코드는 CPU와 같은 하드웨어에서 실행되는 것이 아니고 CLR에
의해 실행되고 관리된다. CLR에 의해 관리되는 코드를 '관리되는 코드(Managed Code)'라 부른다. 대부분의 관리되는 코드는 형식의
안전성 여부뿐만 아니라, 다른 속성의 동작이 잘 정의되었는지 까지 확인하는 프로세스를 거치게 되어있다. 이와는 반대로 관리되지 않는 코드는
특정 하드웨어 플랫폼에서 실행되도록 컴파일 되어 CLR을 직접 사용할 수 없는 코드를 말한다. 관리되지 않는 코드를 관리되는 코드로 마이그레이션
하면, 허가 되지 않은 코드가 사용자의 컴퓨터에서 실행되어 시스템 자원을 낭비 하는 등의 여타의 불필요한 행위를 막을 수 있다.

.NET Framework 보안은 기존 운영체제 보안과 유사하거나 향상된 기능을 가지고 있다. 이와 관련된 전반적인 사항이나 이미 알려진
내용은 건너 뛰기로 하고, 여기서는 어셈블리를 보호하기 위한 코드 액세스 보안 정책(Code Access Security Policy)에
대해 살펴 보겠다.



증거 기반의 보안

.NET Framework이 가지고 있는 다양한 보안 정책 중 증거 기반 보안이라는 개념이 최초로 사용되고 있다. 이는 "응용
프로그램이 실행 되기 위해서 어떠한 정보들을 가지고 있는가?" 라는 정보들이 어셈블리를 실행할 때 올바르게 실행 되도록 하는데
이용된다. 즉, 이러한 정보들이 어셈블리가 실행될 때 보안 정책을 만들 수 있도록 정보를 제공한다고 보면 된다.

증거의 표준 형식으로는 다음과 같은 종류가 사용된다.































영역(Zone) 인터넷, 인트라넷, 로컬 컴퓨터 등과 같이 코드 위치를 구분하는 보안조건이다.
URL 어셈블리를 다운로드한 특정 주소이다.
예) http://www.hauri.co.kr/virus 와 같이 특정 URL이나 파일 위치이다.
사이트(Site) 코드가 유입된 사이트이다.
예) http://www.hauri.co.kr/
해시(Hash) SHA1과 같이 해시 알고리즘으로 생성된 어셈블리 해시 값이다.
강력한 이름(Strong Name) 어셈블리의 강력한 이름 서명이다. 강력한 이름은 일반 서명 부분의 어셈블리를 참조하고 확인하는 버전화 되고 암호화된 강력한 방법을 나타낸다.
응용 프로그램 디렉터리(Application Directory) 코드가 실행된 곳의 디렉터리를 구분한다.
게시자 인증 어셈블리의 인증 코드 디지털 서명이다.


코드 액세스 보안

코드 액세스 보안은 "증거들을 기반으로 해서 어떻게 프로그램을 실행 시킬 것인가?"라는 개념이다. 본질적으로 코드 액세스
보안은 어셈블리 증거(evidence)를 기반으로 어셈블리들에 권한을 할당하는데, CLR의 코드 액세스 보안 시스템은 이러한 증거를 권한
집합에 적용시키고, 이들 권한들은 이 코드가 레지스트리나 파일 시스템 같은 수많은 리소스에 대해 어떤 액세스 권한을 가져야 할지 결정하게
되며, 이는 관리 가능한 보안 정책을 기반으로 이루어지게 된다.

기본 코드 액세스 보안 정책은 대부분의 응용 프로그램이 장상적으로 작동되도록 관리 코드에 의해 안정성과 적정성을 고려하여 설계되어 있다.
그러므로 인터넷이나 로컬 인트라넷과 같은 신뢰할 수 없는 환경의 코드가 로컬 컴퓨터에서 실행될 때 할 수 있는 행위를 강력히 제한한다.
따라서 응용프로그램이 실행될 때 불필요하게 잘못된 동작을 하거나 허가 되지 않은 작업이 이루어지지 않도록 막을 수 있다.


악성 코드로부터의 어셈블리 보호

코드 액세스 보안의 스택 확인(Stack Walking)이라는 이 프로세스에서는 스택에 있는 모든 어셈블리의 사용 권한 부여를 검사하여
보안 검사가 요구하는 사용 권한이 사용 권한 부여 집합에 포함되어 있는지 확인한다. 보안 검사가 요구하는 사용 권한이 스택에 있는 각 어셈블리마다
부여된 경우에는 호출이 성공하지만, 보안 검사가 요구하는 사용 권한이 스택에 있는 어셈블리 중 하나라도 부여되지 않으면 스택 확인 프로세스가
실패하고 보안 예외가 발생한다.

코드 액세스 보안 스택 확인은 악의적인 공격으로부터 어셈블리 코드를 보호한다. 이러한 일반적인 공격에서 악의적인 코드는 신뢰할 수 있는
코드가 독자적으로 수행할 수 없는 작업을 수행하게 하여 좋은 코드의 사용 권한을 나쁜 용도로 사용하기 위해 이용될 수 있다. 이러한 종류의
공격을 개발자가 방어하기에는 어려움이 따른다. 하지만 스택 확인은 신뢰도가 낮은 코드가 포함되어 있으면 사용 가능한 사용 권한을 신뢰도가
가장 낮은 코드의 권한으로 축소시킨다. 따라서 신뢰도가 다른 여러 소스에서 코드를 얻은 다음 해당 코드의 특정 실행 상황에 맞는 제한 사항을
지정하여 실행할 수 있다. 이런 과정을 거치면 예전의 스택 Overflow 같은 공격으로부터 어셈블리 코드를 보호하는 것이 가능하다.


.NET과 미래의 바이러스 ?

.NET Frame의 새로운 서버로 사용될 서버의 정식 명칭은 Windows .NET Server 2003으로 명명되어있다. RC버전이
나와 있는 현재까지는 많은 문제점들이 발생하여 Microsoft는 문제점 해결을 위해 많은 시간을 투자하고 보안과 안정성을 높이기 위한
새로운 패치 파일을 내놓고 있다.

아무리 안전한 시스템이라 할지라도 우리들을 괴롭히는 헛점은 계속해서 나타난다. 어느 해커는 "해킹에 성공하지 못한다면, 그 대신
바이러스를 침투 시킬 것이다." 라는 말을 한적이 있다. 이처럼 꾸준히 사용자를 괴롭히는 골칫거리 중 하나가 바로 컴퓨터 바이러스이다.


새롭게 등장한 .NET Framework을 노리는 바이러스는 과연 어떤 종류가 있을까? 아직까지 .NET Framework에 나타난 바이러스는
일반적인 바이러스와 같이 보편적인 특징을 가지고 있지만, 컴퓨터의 발전과 더불어 새로운 기술들을 기반으로 언젠가는 이러한 원리를 뛰어 넘는
가공할만한 위력의 바이러스가 발생할 것을 믿어 의심치 않는다.



.NET Framework Virus ...

  • - 본 정보의 저작권은 (주)하우리에 있으므로 허가없이 전체 또는 일부를 사용 시 저작권 침해로 간주될 수 있습니다.
  • - 상업적인 목적이나 단체에서 사용할 경우, 별도로 허가를 받으셔야 합니다. (정보 이용 문의 skim@hauri.co.kr)

Top