보안과 관련하여 스터디를 하던중 샌드박스라는 말을 처음 접하게 되었습니다.

샌드박스에 데이터를 저장한데는데 좀처럼 와닿지 않더군요. 

그래서 정리해본 샌드박스(Sandbox) 입니다.


샌드박스는 미국의 가정집 뒤뜰에서 어린이가 다치는 것을 방지하기 위해 만든 모래통(Sandbox)에서 유래하였습니다.


실제 샌드박스는 이렇게 생겼습니다.

나무 틀을 박스처럼 만들어 모래를 집어 넣고 아이들이 그 안에서 안전하게 놀수 있게끔 만들어준 것이죠.

마치 작은 놀이터 같습니다. 한국에서는 놀이터가 따로 존재하기에 샌드박스를 좀처럼 보기 힘듭니다.

그래서 처음보고 이런게 있었다니!! 매우 기발하다라고 생각했습니다.


이제 본론으로 넘어와서 이러한 샌드박스가 어떻게 프로그래밍 기술에 도입이 되었을까요 ?

또한 이것이 보안과 어떠한 연관이 있을까요 ?


이 질문에 대한 답은 Sandboxie(http://www.sandboxie.com/)에서 찾을 수 있었습니다.

먼저 Sandboxie 사이트에서 나타나는 이미지를 보겠습니다.


이 이미지는 샌드박스의 개념을 잘 설명해 주고 있습니다.

빨간색 화살표가 움직이면서 하드디스크안에 리소스들을 채우게(저장) 됩니다.

이를테면 인터넷 익스플로러의 경우 웹페이지 접속에 의해 해당 페이지를 받아오는 과정이라 할 수 있습니다.


일반적으로 리소스를 채우게 되는 과정에서 하드디스크에 직접적인 접근이 가능해 

Hard disk (no sandbox) 그림과 같이 될수있는데 여기서 바로 보안 이슈가 발생합니다. 

악의적으로 OS 일부분을 홰손시킬 수도 있고, 다른 어플리케이션의 정보를 홰손시킬수 있는 문제가 발생합니다.


따라서, 이러한 문제를 해결하는 방안으로 샌드박스가 등장합니다.

Hard disk (with sandbox) 그림과 같이 하드디스크에 특정 영역을 샌드박스로 지정하고 

이 영역에 대해서만 리소스를 사용하고 접근하도록 합니다. 

즉, 샌드박스는 OS와 같은 중요한 영역에는 영향을 주지 않도록 각자의 박스(영역)에서만 리소스를 사용하도록 한 것입니다.


또한 반대의 개념으로도 사용가능해, 샌드박스 안에 있는 리소스에 외부 접근을 거부하여 보호할 수도 있습니다.

마치 아이들을 주변의 위험으로부터 보호하듯이 말이죠.