본문으로 바로가기

Docker Image를 사용할 떄, 누군가가 해당 이미지를 가로채 악성 코드를 심거나 위/변조를 할 가능성이 있다.

이에 Docker에서는 Notary라는 Tool을 만들얶고, 신뢰할 수 있는 이미지를 보증하기 위해 서비스하고 있다.


Notary는 이미지에 서명을 하고, 위변조 여부를 검증하기 위한 서비스라고 할 수 있고, 이를 사용하기 위한 것이 Docker Contents Trust, DCT라고 하는 기능이다.

DCT는 Docker에 내장되어 있는 기능이며, 이 기능에 대해서는 다음번에 포스팅 하도록 하고, 우선 Notary에 대해 알아보도록 하자. 


Notary는 오픈소스로 소스 전체를 깃헙에서 받을 수 있다. 별도로 docker 진영에서 서비스하고 있는 notary 서버의 주소는 https://notary.docker.io 이다.

 


1. Notary란?


Notary의 사전적 정의는,


어떤 행위나 문서의 진실성을 확인, 증명해 그 법적 진정(眞正)성을 책임지는 역할을 하는 사람법정에서 공증인이 서명한 증명은 불변의 법적 효력을 가진다.


Docker Image에 적용해 보면, 해당 이미지의 "진실성"을 보증해주는 "공증 서비스"라고 할 수 있다.

Docker Notary는 다음과 같은 특징이 있다.


Security framework TUF (The Update Framework)를 사용
Go Language를 사용하여 개발
Docker Image 무결성, freshness를 보장하는 메타 데이터를 생성, 관리, 배포.

서명된 컬렉션을 만들고 키 관리 및 서명 인터페이스를 제공



2. TUF Key에 대해


Notary 서비스에 대해 이해하기 위해서는 TUF Key에 대해 대략적이나마 파악하고 있어야 한다.

 

 


TUF Key는 Root Key를 최상위로하는 계층 구조로 되어 있다.

Root Key를 사용해서 Timestamp key와 Snapshot Key, Target Key를 만들고, Target Key로 Delegation Key들을 만든다.

각각의 Key들이 하는 역할은 다음과 같다.

 

> Root Key : 모든 Trust에 대하 Root가 되는 Key이다. 다른 Key들에 대한 정보를 담고 있는 "Root metadata file" 을 서명한다.

 

> Target Key : 해당 타겟(Docker 에서는 이미지)의 정보를 담고 있는 "Target metadata file" 을 서명한다. 이 Target metadata file에는 이미지의 filename list나 size에 대한 hash 정보를 담고 있다.

> Timestamp Key : 새션을 가로채 해킹을 하는 Replay Attack을 방지하기 위해 각 메타데이터들은 timestamp로 관리가 된다. 각 메타데이터들에 대한 단기 expiry time이 기록되어 있는 "Timestamp metadata file"을 서명한다.

 

> Snapshot key : 모든 메타데이터 파일 자체들에 대한 snapshot 정보가 담겨있는 "Snapshot metadata file"을 서명한다.

 

아직 읽어봐도 무슨 말인지 감이 잘 안잡힐 것이다.

이 구조는 Notary에서 정해진 구조라기 보다는 Notary에서 사용하는 TUF라는 키 관리 프레임워크에서 사용하는 구조이다. 우리가 Notary를 사용하며 실제로 사용하고, 잘 알고 있어야 하는 Key는 Root Key와 Target Key이다.

우선 이런 것들이 있구나.. 하고 넘어가고, 나중에 Notary의 동작 원리를 이해하고 난 뒤 다시 보면 조금 더 이해가 쉬울 것이다.

 

 

3. Notary Service 아키텍처

 


 

Notary는 Notary-Server와 Notary-Signer 두 개의 모듈이 있고, 각 모듈이 DB가 하나씩 붙어있다.

Notary-Server에서는 클라이언트에서 요청한 이미지를 메타데이터 파일과 비교해서 이 이미지가 실제로 위변조 되었는지를 판단한다. Server DB에는 메타데이터 정보들이 저장된다.

Notary-Signer에서 이미지와 메타데이터 파일들을 각각의 Key로 서명하고, Signer DB에 이 Key들이 보관된다.

 

 

4. Docker Notary 활용

 

Docker Notary는 다음과 같이 활용된다.

 

 

Publisher와 Subscriber 사이에 주고받는 컨텐츠(Image) 에 대해 위변조 여부를 '인증' 해 준다.

 

 

누군가가 악의적인 목적으로 컨텐츠를 변조 했는지를 검증해주고, Subscriber가 이를 사용하려 했을 때 알려준다.

 

 

Tagging Key가 유출될 경우, 해당 Tagging Key를 생성한 Root Key를 사용해 Key를 재배치 할 수 있다.

다만, Root Key를 분실할 경우 이를 복구할 방법은 없다.

 

Timestamp값을 활용하기 때문에, Reply Attack을 사용한 공격에도 위변조 여부를 알 수 있다.



 

여기까지 Notary에 대한 간략한 정리를 마쳤다. 사실 실제로 이를 Docker Image에 사용하기 위해서는 Docker에서 지원하는 DCT(Docker Content Trust)에 대해 알고 있어야 한다.

다음 포스팅에 이어서 DCT에 대한 내용을 알아보도록 하자.

 Other Contents 

댓글을 달아 주세요

티스토리 툴바