목차
mTLS란?
mTLS (Mutual Transport Layer Security)는 양방향 TLS(Transport Layer Security)를 의미합니다. TLS는 일반적으로 서버와 클라이언트 간의 통신을 암호화하여 보호하는 데 사용되지만, mTLS는 양쪽 모두가 상호적으로 인증되는 보안 계층을 제공합니다.
한마디로 TLS가 클라이언트만 인증서를 확인했다면 mTLS는 서버 및 클라이언트 둘다 인증한다고 보시면 됩니다.
특징
- 서버 간의 상호 인증:
- mTLS를 사용하면 클라이언트와 서버 간의 양방향 인증이 이루어지므로 서버 간의 통신에도 상호 인증이 가능합니다. 이는 서버끼리 안전한 통신을 수행하고 각 서버의 신원을 확인할 수 있도록 합니다. TLS에서는 클라이언트와 서버 간의 상호 인증만이 주로 이루어집니다.
- 세분화된 권한 관리:
- mTLS를 사용하면 클라이언트와 서버 각각이 자체 인증서를 가지게 되므로, 각각에게 특정 권한을 부여하거나 특정 서버에 대한 접근을 제한할 수 있습니다. 이는 클라이언트가 특정 서버에만 접근할 수 있도록 하거나, 각 클라이언트에게 서로 다른 권한을 부여하는 데 유용합니다.
- 중앙 집중식 키 및 인증서 관리:
- mTLS에서는 각 클라이언트 및 서버가 자체 인증서를 가지며, 중앙 집중식으로 키 및 인증서를 관리할 수 있습니다. TLS에서는 주로 서버 측에서의 중앙 집중식 관리가 이루어지지만, 클라이언트에 대한 관리가 더 어렵습니다.
- 다중 계층 보안:
- mTLS를 사용하면 보안 계층을 여러 겹으로 쌓아 올릴 수 있습니다. 예를 들어, TLS로 암호화된 통신이 먼저 이루어진 후, 그 위에 API 토큰 또는 다른 보안 메커니즘을 추가할 수 있습니다. 이렇게 다중 계층의 보안을 적용하여 전체적인 시스템의 안전성을 높일 수 있습니다.
mTLS 동작
1단계: 클라이언트가 핸드셰이크를 시작합니다.
클라이언트는 'Client Hello'로 핸드셰이크를 시작합니다. 이는 다음을 포함한 여러 정보로 구성됩니다.
- 버전: 클라이언트가 지원하는 TLS/SSL의 가장 높은 버전의 16진수 코드입니다.
- 세션 ID: 8바이트 값(처음에는 모두 0임)이 세션에 레이블을 지정하는 데 사용됩니다.
- 암호화 슈트(Cipher Suits): 클라이언트가 지원하는 암호화 스위트(알고리즘) 목록으로, RSA, Diffi Hellmen 등과 같은 암호화 알고리즘 세트에 지나지 않습니다.
2단계: 서버 응답
서버는 이를 수신하면 서버에 대한 동일한 5가지 정보로 구성된 'Server Hello'로 응답하며 이번에는 세션 ID를 사용합니다.
3단계: 서버가 인증서를 보냅니다.
다음으로, 서버는 인증서 체인 및 공개 키와 함께 인증서를 보냅니다.
4단계: 클라이언트 확인
이제 클라이언트는 인증서에서 두 가지 사항을 확인해야 합니다.
- 인증서가 유효한가요? 이는 CA의 공개 키를 사용하여 인증서의 서명을 확인함으로써 수행됩니다(실제로 CA가 개인 키를 사용하여 서명했음).
- 의도한 서버에 속합니까?
5단계: 서버가 인증서를 확인합니다.
인증서가 의도한 서버에 속하는지 확인하기 위해 클라이언트는 임의의 비밀 키를 생성하고 서버의 공개 키를 사용하여 암호화한 후 서버로 보냅니다.
6단계: 서버가 무작위 비밀 키를 해독합니다.
이제 서버는 개인 키를 사용하여 임의의 비밀 키를 해독합니다.
7단계: 클라이언트가 인증서를 보냅니다.
다음으로 클라이언트는 인증서 체인 및 공개 키와 함께 인증서를 보냅니다.
8단계: 클라이언트가 인증서를 확인합니다.
이제 클라이언트는 인증서에서 두 가지 사항을 확인해야 합니다.
- 인증서가 유효한가요? 이는 CA의 공개 키를 사용하여 인증서의 서명을 확인하거나, 실제로 개인 키를 사용하여 CA에서 서명했는지 또는 서버가 키 저장소를 유지하는지 확인함으로써 수행됩니다. 구현은 서버마다 다릅니다.
- 의도한 클라이언트에 속합니까?
9단계: 인증서가 클라이언트에 속하는지 확인
인증서가 클라이언트에 속하는지 확인하기 위해 서버는 임의의 비밀 키를 생성하고 클라이언트의 공개 키를 사용하여 암호화하여 서버로 보냅니다.
상호 TLS의 장점
TLS에 비해 mTLS에는 몇 가지 장점이 있습니다.
- 서버의 인증서뿐만 아니라 클라이언트의 인증서도 검증하므로 TLS보다 더 안전합니다.
- 보안을 위해 비밀번호에 대한 의존도를 줄입니다. 비밀번호는 상대적으로 안전하지 않으며 무차별 대입 공격에 취약합니다.
상호 TLS의 단점
mTLS가 TLS보다 더 안전하다면, 분명한 질문은 왜 mTLS가 더 인기가 없느냐는 것입니다. 그리고 전체 인터넷에서 TLS를 mTLS로 대체하지 않은 이유는 무엇입니까? 그러나 mTLS에는 몇 가지 단점이 있습니다.
- 구현하는 것이 더 복잡합니다. 클라이언트/서버의 수는 엄청나며, 서버가 모든 클라이언트에 대한 인증서를 유지하고 각 세션에 대해 각 클라이언트의 유효성을 검사하고 확인하는 것은 어렵고 비용이 많이 듭니다. 이 규모로 인증서를 관리하고 확인하는 것은 실용적이지 않습니다.
- 상호 TLS는 계산 비용이 많이 들고 TLS보다 느립니다. M-TLS 핸드셰이크에는 더 많은 단계/왕복이 포함됩니다. 이는 TLS보다 훨씬 느리므로 제로 트러스트 보안보다 낮은 대기 시간이 더 중요한 시나리오에는 유용하지 않습니다.
- 클라이언트를 제어할 수 있는 환경에서만 구현할 수 있으며, 서버에 연결하기 위해 각 클라이언트가 가져야 하는 보안 유형을 지정할 수 있습니다.
자주 사용되지 않는 이유
일상적인 용도에서는 단방향 인증으로 충분한 보호를 제공합니다. 공용 인터넷에서 TLS의 목표는 1) 사람들이 [스푸핑된 웹사이트를 방문하지 않도록 하고, 2) 개인 데이터가](https://www.cloudflare.com/learning/ssl/what-is-domain-spoofing/)[인터넷을 구성하는](https://www.cloudflare.com/learning/network-layer/how-does-the-internet-work/)다양한 네트워크를 통과할 때 [개인 데이터를](https://www.cloudflare.com/learning/privacy/what-is-data-privacy/)안전하게 암호화하고 유지하며 , 3) 데이터가 운송 중에 변경되지 않았습니다. 클라이언트가 서버의 신원만 확인하는 단방향 TLS는 이러한 목표를 달성합니다.
또한 모든 최종 사용자 장치에 TLS 인증서를 배포하는 것은 매우 어렵습니다. 이에 필요한 수십억 개의 인증서를 생성, 관리, 검증하는 것은 거의 불가능한 작업입니다.
그러나 작은 규모에서 mTLS는 개별 조직, 특히 해당 조직이 네트워크 보안에 대해 제로 트러스트 접근 방식을 채택하는 경우 매우 유용하고 실용적입니다. 제로 트러스트 접근 방식은 기본적으로 어떠한 사용자, 장치 또는 요청도 신뢰하지 않기 때문에 조직은 네트워크의 어느 지점에든 액세스하려고 할 때마다 모든 사용자, 장치 및 요청을 인증할 수 있어야 합니다. mTLS는 사용자를 인증하고 장치를 확인하여 이를 가능하게 합니다.
방어되는 공격
- 경로 공격: 경로 공격자는 클라이언트와 서버 사이에 위치하여 둘 사이의 통신을 가로채거나 수정합니다. mTLS를 사용하면 경로상의 공격자가 클라이언트나 서버에 인증할 수 없으므로 이 공격을 수행하는 것이 거의 불가능합니다.
스푸핑 공격: 공격자는 웹 서버를 사용자에게 "스푸핑"(모방)하거나 그 반대로 시도할 수 있습니다. 스푸핑 공격은 양측이 TLS 인증서로 인증해야 할 때 훨씬 더 어렵습니다. - 자격 증명 스터핑: 공격자는 데이터 침해로 인해 유출된 자격 증명 세트를 사용하여 합법적인 사용자로 로그인을 시도합니다. 합법적으로 발급된 TLS 인증서가 없으면 mTLS를 사용하는 조직에 대한 크리덴셜 스터핑 공격이 성공할 수 없습니다.
무차별 대입 공격: 일반적으로 봇을 사용하여 수행되는 무차별 대입 공격은 공격자가 빠른 시행착오를 통해 사용자의 비밀번호를 추측하는 것입니다. mTLS는 비밀번호만으로는 조직의 네트워크에 액세스할 수 없도록 보장합니다. ( 속도 제한은 이러한 유형의 봇 공격을 처리하는 또 다른 방법입니다.) - 피싱 공격: 피싱 공격 의 목적은 사용자 자격 증명을 훔친 다음 해당 자격 증명을 사용하여 네트워크나 애플리케이션을 손상시키는 것입니다. 사용자가 이러한 공격을 당하더라도 공격자는 해당 자격 증명을 사용하기 위해 TLS 인증서와 해당 개인 키가 필요합니다.
- 악성 API 요청: API 보안 에 사용되는 경우 mTLS는 API 요청이 합법적이고 인증된 사용자에게서만 오는지 확인합니다. 이를 통해 공격자가 취약점을 악용하거나 API 작동 방식을 파괴하려는 악의적인 API 요청을 보내는 것을 방지합니다.
Reference
https://builtin.com/software-engineering-perspectives/mutual-tls-tutorial
https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/
끝
'Security' 카테고리의 다른 글
윈도우WSL에서 chmod 안될때 (0) | 2022.08.31 |
---|---|
윈도우 cmd 에서 pem 파일 ssh 접속편하게 관리 (aws ec2) (0) | 2022.08.31 |
윈도우 ssh 연결 에러(permissions ... too open등) (0) | 2022.08.31 |
댓글