자바의 보안 아키텍처

이번 달의 "Under The Hood"칼럼은 Java의 보안 모델에 대한 4 부작 시리즈 중 첫 번째입니다. 4 개의 기사는 JVM (Java Virtual Machine)과 java.lang 라이브러리에 구축 된 보안 인프라에 초점을 맞출 것입니다. 이 첫 번째 기사는 보안 모델에 대한 개요를 제공하고 JVM의 안전 기능을 설명합니다.

왜 보안인가?

Java의 보안 모델은 네트워크 환경에 적합한 기술을 만드는 언어의 주요 아키텍처 기능 중 하나입니다. 네트워크는 네트워크에 연결된 모든 컴퓨터에 잠재적 인 공격 경로를 제공하기 때문에 보안이 중요합니다. 예를 들어 Java 애플릿에서와 같이 소프트웨어가 네트워크를 통해 다운로드되고 로컬로 실행되는 환경에서 이러한 우려가 특히 커집니다. 사용자가 브라우저에서 포함하는 웹 페이지로 이동할 때 애플릿의 클래스 파일이 자동으로 다운로드되기 때문에 사용자가 신뢰할 수없는 소스의 애플릿을 보게 될 가능성이 있습니다. 보안이 없다면 이것은 바이러스를 확산시키는 편리한 방법입니다. 따라서 Java의 보안 메커니즘은 네트워크 모바일 코드의 안전에 필요한 신뢰를 구축하기 때문에 Java를 네트워크에 적합하게 만드는 데 도움이됩니다.

Java의 보안 모델은 네트워크를 통해 신뢰할 수없는 소스에서 다운로드 한 적대적인 프로그램으로부터 사용자를 보호하는 데 중점을 둡니다. 이 목표를 달성하기 위해 Java는 Java 프로그램이 실행되는 사용자 정의 가능한 "샌드 박스"를 제공합니다. Java 프로그램은 샌드 박스 내에서만 재생되어야합니다. 샌드 박스 경계 내에서 무엇이든 할 수 있지만 경계 밖에서는 어떤 조치도 취할 수 없습니다. 예를 들어, 신뢰할 수없는 Java 애플릿 용 샌드 박스는 다음과 같은 많은 활동을 금지합니다.

  • 로컬 디스크 읽기 또는 쓰기
  • 애플릿이 나온 호스트를 제외한 모든 호스트에 네트워크 연결
  • 새로운 프로세스 생성
  • 새 동적 라이브러리를로드하고 네이티브 메서드를 직접 호출

다운로드 된 코드가 특정 작업을 수행하는 것을 불가능하게함으로써 Java의 보안 모델은 악의적 인 코드의 위협으로부터 사용자를 보호합니다.

정의 된 샌드 박스

전통적으로 소프트웨어를 실행하기 전에 신뢰해야했습니다. 신뢰할 수있는 출처의 소프트웨어 만 사용하도록주의하고 바이러스를 정기적으로 검사하여 안전한지 확인함으로써 보안을 달성했습니다. 일부 소프트웨어가 시스템에 액세스하면 완전히 통제되었습니다. 악의적이라면 컴퓨터의 런타임 환경에 의해 소프트웨어에 대한 제한이 없기 때문에 시스템에 큰 피해를 줄 수 있습니다. 따라서 기존의 보안 체계에서는 처음부터 악성 코드가 컴퓨터에 액세스하는 것을 방지하려고했습니다.

샌드 박스 보안 모델을 사용하면 완전히 신뢰할 수없는 소스에서 제공되는 소프트웨어를 더 쉽게 사용할 수 있습니다. 신뢰할 수없는 코드가 컴퓨터에 침입하지 못하도록하여 보안을 설정하는 대신 샌드 박스 모델을 사용하면 모든 소스의 코드를 환영 할 수 있습니다. 그러나 실행 중 샌드 박스는 신뢰할 수없는 소스의 코드가 시스템에 손상을 줄 수있는 작업을 수행하지 못하도록 제한합니다. 장점은 신뢰할 수있는 코드와 신뢰할 수없는 코드를 파악할 필요가없고 바이러스를 검사 할 필요가 없다는 것입니다. 샌드 박스 자체는 컴퓨터에 초대 할 수있는 바이러스 또는 기타 악성 코드가 손상을 입지 않도록 방지합니다.

샌드 박스는 널리 퍼져 있습니다.

적절하게 회의적인 마음을 가지고 있다면, 샌드 박스가 당신을 보호 할 것이라고 믿기 전에 샌드 박스에 누출이 없다는 것을 확신해야합니다. 샌드 박스에 누출이 없는지 확인하기 위해 Java의 보안 모델은 아키텍처의 모든 측면을 포함합니다. Java 아키텍처에 보안이 취약한 영역이있는 경우 악의적 인 프로그래머 ( "크래커")는 잠재적으로 이러한 영역을 악용하여 샌드 박스를 "돌아갈"수 있습니다. 따라서 샌드 박스를 이해하려면 Java 아키텍처의 여러 부분을 살펴보고 이들이 함께 작동하는 방식을 이해해야합니다.

Java의 샌드 박스를 담당하는 기본 구성 요소는 다음과 같습니다.

  • Java 가상 머신 (및 언어)에 내장 된 안전 기능
  • 클래스 로더 아키텍처
  • 클래스 파일 검증 자
  • 보안 관리자 및 Java API