본문 바로가기

4학년 1학기/네트워크 보안

13. Authentication

개요

보안에서 인증이란 부분에 대해 간단하게 알아보고 이를 위한 솔루션에 대해 학습한다.

인증

보안에서 인증이란 자신에 대한 증명으로 특정 ID를 통해 이를 증명한다. 여기서 첫번째 문제는 이 인증 ID를 어떻게 보관하냐는 것인데 사용자는 여러명이고 서비스도 매우 많다. 따라서 이를 일일히 저장하는 것은 매우 비효율적으로 적절한 방법을 찾아야 한다. 그렇다고 하나의 계정정보로 전부 통일할 경우 하나의 서비스에서 취약점으로 데이터가 leak되면 모든 서비스에 대한 보안이 뚫릴 수 있다.

Threat model

1. 공격자는 workstation에 계정을 탈취하여 다른 사용자인 척 하고 접근할 수 있다. 

2. 공격자는 IP를 변조하여(spoofing) 다른 사용자인 척 하고 특정 workstation에 요청을 보낼 수 있다.

3. 공격자는 사용자와 workstation server와 통신하는 패킷을 중간자공격을 통해 도청, 감청 할 수 있고 이를 통해 replay attack을 할 수 있다.

Solution

위 공격에 대한 대책으로 신뢰할 수 있는 인증 서버를 두는 것이 있고 이를 구현한 것이 KERVEROS이다.

Kerveros

해당 솔루션에서 중요한 부분은 ticket으로 이는 session key와 같은 역할을 하여 연결을 유지하고 access 권한을 부여한다.

Kerberos 공식 이미지
이건 공식 이미지는 아닙니다...

Ticket

일종의 token이며 이는 server에서만 복호화 할 수 있는 암호화된 정보로써 전달된다. 따라서 사용자 및 중간자는 해당 ticket을 복호화하여 볼 수 없다. 이는 대칭키를 이용하여 암호화한다.

이러한 ticket에는 인증 정보가 있는데 다음과 같다.

1. User ID

2. Server ID

3. Address of user's workstation

4. Ticket lifetime (Replay 공격 방어)

5. A few other things (session key, etc ...)

여기서 1, 2번 ID 정보는 정보를 주고받는 객체 (server, client)에 대한 무결성을 보장하기 위한 정보로 사용자 별 Access control(권한) 등에 대한 정보로도 사용된다.

Password 기반 인증의 문제

password는 기본적을 plain text로 전송된다. 따라서 이를 중간에서 sniffing하거나 leak할 수 있다. 게다가 ticket을 요청할 때 마다 password를 통해 인증하는 것은 불편하다. 따라서 이를 해결하기 위해 2단계 인증을 도입한다.

Two-Step Authentication

사용자는 티켓을 요청할 때 지속적으로 password를 이용하는 것이 아닌 최초 한번 인증을 하면 TGS(Ticket Granting Service)를 발급받고 이를 통해서 Ticket을 요청한다. 이를 이용하면 어떤 네트워크에 있더라도 티켓을 요청하여 받을 수 있다.

위와 같은 동작인데 Ticket을 바로 요청하는 것이 아닌 KDS(Key Distribution Center)에 먼저 TGT를 요청한다. 여기서 TGT는 Ticket-Granting Ticket으로 이를 이용하여 TGS에 요청을 보내 Ticket을 생성할 수 있다. 이 방식이 유용한 이유는 다른 서비스에 접속할 때마다 매번 티켓을 요청하기 위해 로그인 할 필요 없이 발급받은 TGT를 이용하여 티켓을 요청하면 되기 때문이다. 물론 해당 TGT는 암호화해서 전송하고, 유효시간이 있기에 탈취당하더라도 지속적으로 침해당하지는 않는다. 따라서 TGT가 유효한 시점이면 위 그림에서 보이는 Resource Server 뿐만 아니라 다른 서비스라도 자유롭게 티켓을 발급받아 접근이 가능하다.

Session Key

먼저 key의 종류들을 정리하고 넘어가겠다.

Long term key

사용자 또는 서버의 비밀키를 말하며 사용자 계정이나 서비스 계정 등에서 사용되는 고정된 키이다. 특징으로는 고정적으로 빠르게 변하는 값이 아니고 따라서 외부에 공개되어서는 안되는 값들이다. Kerberos에서의 역할은 사용자가 KDC에 처음 인증 요청을 할 때나 각 정보를 암호화 하여 전달할 때 사용된다. 따라서 password나 KDC와 TGS끼리의 인증 값, TGS와 특정 서비스끼리의 인증 값등이 여기에 해당한다. 이는 초기 인증이나 암호화에 사용되고 그 뒤로는 지속적으로 인증하지 않는다.

Short term key

특정 세션에서만 사용되는 키로 일시적으로만 사용된다. 특징으로는 제한된 기간이 짧다는 점이고 세션이 종료되거나 그 시간이 지나면 바로 만료된다. 따라서 생성 주기가 동적으로 변경될 수 있다. 그리고 이렇게 자주 바뀌기 때문에 유출이 되더라도 비교적으로 문제가 크지 않다. 따라서 서비스 접근에 사용되는 Ticket이나 TGT가 여기에 해당하며 이는 주기적으로 발급받아서 사용해야 한다는 특징이 있다.

위 내용을 잘 보면 결과적으로 Long term key는 Short term key를 생성하는데만 사용되고 특정 서비스에 접근하려면 결국 Short term key가 필요하다. 

 

Session key는 여기서 같은 Client와 Server라면 세션이 여러개라도 하나의 키로만 통신을 하는 key로 매번 인증을 할 필요 없게 하는 장점이 있는데 아무래도 Short term key이기 때문에 빠른 시간에 만료가 되는 key이다.

 

Attack

Kerberos가 좋긴 한데 공격을 다 막을 수 있는건 당연히 아니다. 따라서 어떤 공격 유형이 있는지 간단하게 알아본다.

Ticket Hijecking

공격자는 서버로부터 전송된 Ticket을 중간에서 가로챌 수 있다. 티켓만 가지고 있으면 이외 인증 절차가 없기 때문에 이를 가로챌 수만 있다면 공격자는 사용자의 서비스에 자유롭게 접근할 수 있게 된다.

No Server Authentication

공격자가 네트워크에 대한 설정을 임의로 공격하여(DNS Spoofing, Poisoning etc) Ticket 요청을 자신에게 오도록 설정할 수 있다. 이를 통해 Password를 유출한다거나 잘못된 Ticket을 제공하여 DoS 공격을 시도할 수 있다. 

Issue

Kerberos를 사용하는데 있어 문제점도 분명히 있다. 

큰 네트워크에서는 하나의 KDC만으로 서비스를 운영하기는 어렵다. 따라서 realm 단위로 나누어 각 realm에 KDC, TGS를 두는 것이 서비스 관점에서는 용이하다. 여기서 realm이란 하나의 논리적인 도메인으로 각 realm은 자체적인 사용자 및 서비스 데이터베이스와 KDC를 보유한다. 그리고 각 realm은 독립적인 보안 정책을 유지할 수 있으며 다른 realm 간의 상호작용 즉 하나의 realm 에서 인증을 받으면 다른 realm에서는 별도로 또 인증을 받지 않아도 되게끔 하는 Cross-Realm Trust를 지원하기도 한다. 

이렇게 할 시 Local realm에서 인증을 한번 받으면 Remote realm에서는 해당 TGT로 바로 Ticket을 요청할 수 있다. 

 

'4학년 1학기 > 네트워크 보안' 카테고리의 다른 글

15. Browser Security  (0) 2024.06.01
14. SSL/TLS  (0) 2024.05.27
11. IPSec  (0) 2024.04.20
8. DoS Defense  (1) 2024.04.19
7. Intrusion Detection  (0) 2024.04.19