STARTTLS는 TLS / SSL보다 안전하지 않습니까?


45

Thunderbird (및 다른 많은 클라이언트에서도 가정)에는 "SSL / TLS"와 "STARTTLS"중에서 선택할 수있는 옵션이 있습니다.

내가 이해하는 한 "STARTTLS"는 간단한 말로 "양쪽 끝이 TLS를 지원하면 암호화하고 그렇지 않으면 전송을 암호화하지 않음"을 의미 합니다. "SSL / TLS"는 간단한 말로 "항상 암호화하거나 전혀 연결하지 않음"을 의미 합니다. 이 올바른지?

또는 다른 말로하면 :

STARTTLS는 SSL / TLS보다 안전하지 않습니다. 알림없이 일반 텍스트로 대체 될 수 있습니까?

답변:


46

SMTP 용 STARTTLS RFC ( RFC 3207 ) 에 따른 답변 은 다음과 같습니다.

STARTTLS는 TLS보다 안전하지 않습니다.

직접 대화하는 대신 BOLD 에서 강조 표시된 4 개의 관련 비트를 사용하여 RFC가 스스로 대화 할 수 있도록합니다 .

서버에서 "250 STARTTLS"응답을 삭제하여 MITM (Man-in-the-Middle) 공격을 시작할 수 있습니다. 이로 인해 클라이언트는 TLS 세션을 시작하지 않습니다. 또 다른 중간자 공격은 서버가 STARTTLS 기능을 발표 할 수 있도록 허용하지만 클라이언트의 TLS 시작 요청 및 서버 응답을 변경하는 것입니다. 두 클라이언트와 서버가 반드시 같은 공격을 방어하기 위해 할 수 메시지가 성공적으로 전송하기 전에 선택한 호스트에 대한 적절한 암호화 제품군의 성공적인 TLS 협상을 요구하도록 구성된다. 가능한 경우 TLS를 사용 하는 추가 옵션 도 제공해야합니다. 구현 TLS가 주어진 피어와 통신하고 이후 세션에서 사용되지 않을 경우 경고를 생성하는 데 사용되었음을 기록하는 기능을 제공합니다.

TLS 협상이 실패하거나 클라이언트가 454 응답을 수신하면 클라이언트는 다음에 수행 할 작업을 결정해야합니다. 세 가지 주요 선택 사항이 있습니다. SMTP 세션의 나머지 부분으로 진행하십시오 . [...]

보시다시피 RFC 자체는 클라이언트가 보안 연결을 설정하고 보안 연결이 실패한 경우 사용자에게 알리지 않아도된다고 말합니다. 그것은 명시 적으로 고객에게 자동으로 설정할 수있는 옵션이 제공 일반 텍스트 연결을.


5
요점은 확실히 유효하지만 SMTPS에 대한 RFC 또는 공식 사양이 없기 때문에 (예 : SSL + TLS가 먼저 설정된 SMTP + "암시 적 SSL / TLS") SMTP / SMTPS 클라이언트도 일반 연결로 대체 할 수 있습니다. 포트 465에서 SSL / TLS 연결을 시작할 수없는 경우 여전히 구현 선택입니다.
Bruno

2
TLS 연결을 설정하기위한 많은 RFC가 있습니다. RFC를 준수하기위한 옵션으로 "일반 텍스트 연결 허용"이 존재하지 않습니다 (적어도 많은 사람들에게 뉴스 일 것입니다). 따라서 SMTPS는 STARTTLS보다 안전한 별도의 RFC가 필요하지 않습니다.
Greg

1
TLS (RFC 5246 및 선행 작업), PKI (RFC 5280), 이름 확인 (RFC 6125)에 대한 RFC가 있지만 SMTPS 공식적으로 AFAIK에서 SMTP와 SSL / TLS 간의 상호 작용을 설명 할 수있는 것은 없습니다. HTTPS에 대한 사양 : RFC 2818. "명확합니다. SSL / TLS 연결을 먼저 설정하십시오"라고 말할 수 있지만 그에 관한 모든 것은 명백하지 않습니다 (특히 신원 확인 측면, RFC 6125에서 매우 최근에 공식화 됨).
Bruno

23

두 옵션 사이의 보안에는 차이가 없습니다.

  • SSL / TLS는 먼저 SSL / TLS 연결을 연 다음 SMTP 트랜잭션을 시작합니다. SSL / TLS 이외의 SMTP 서버가 이미 실행되고 있지 않은 포트에서 발생해야합니다. 프로토콜의 특성으로 인해 일반 텍스트와 암호화 된 연결을 모두 처리하도록 단일 포트를 구성 할 수 없습니다.

  • STARTTLS는 SMTP 트랜잭션을 시작하고 EHLO에 대한 응답으로 다른 쪽 끝에서 TLS에 대한 지원을 찾습니다. 클라이언트가 지원되는 명령 목록에서 STARTTLS를 발견하면 STARTTLS를 전송하고 암호화 협상을 시작합니다. 이 모든 것은 표준 SMTP 포트 25에서 발생하며, 부분적으로 이전 버전과의 호환성을 위해 지원하지만 엔드 포인트간에이를 지원하지만 반드시 요구하지는 않는 기회 주의적 암호화를 허용합니다.

일반적으로 SSL / TLS는 최종 클라이언트와 서버간에 만 사용됩니다. STARTTLS는 서버 간 전송을 보호하기 위해 MTA간에 더 일반적으로 사용됩니다.

이러한 두 가지 구현을 고려할 때 사용자 또는 관리자가 연결이 암호화되었다고 가정하지만 실제로 암호화를 요구하도록 구성하지 않은 경우 STARTTLS는 안전하지 않은 것으로 해석 될 수 있습니다. 그러나 사용 된 암호화는 SSL / TLS와 정확히 동일하므로 이러한 유형의 구성 오류를 넘어 중간자 (Man-in-the-Middle) 공격에 다소 취약하지 않습니다.


2
연결이 암호화되면 SSL / TLS와 STARTTLS가 동일합니다. 그러나 그것은 내가 요구 한 것이 아닙니다. 의미 : STARTTLS를 사용하는 경우 (사용자로서) 내 연결이 실제로 안전한지 어떻게 알 수 있습니까? SSL / TLS를 사용하려고하면 서버가 지원하지 않으면 연결할 수 없지만 최소한 일반 텍스트로 아무것도 보내지 않습니다. 그러나 STARTTLS가 일반 텍스트로 돌아 가면 메일이 일반 텍스트로 전송되었음을 알지 못하고 일반 텍스트로 전송됩니다 (실제로 안전하지 않을 때 안전하다고 생각합니다).
Foo Bar

6
이 답변이 왜 올바른 것으로 선택되었는지 모르겠습니다. 잘못 됐어 Christopher가 지적한 것처럼 STARTTLS는 클라이언트에게 잘못된 보안 감각을 제공하기 때문에 TLS보다 덜 안전합니다.
Greg

4
@greg 프로토콜에는 아무런 문제가 없습니다. 결함은 rfc를 따르지 않고 연결이 암호화되지 않은 경우 사용자에게 경고하지 않는 클라이언트입니다.
longneck

1
@longneck 그래서 ... 어쩌면 이것은 의미 론적 일이지만 클라이언트는 TLS 프로토콜을 "따를 수 없으며"전자 메일을 통해 기간을 가질 수 없습니다. 이는 의미있는 차이입니다.
그렉

2
@Bruno "클라이언트가 제대로 구현되지 않으면 보안 수준이 떨어집니다." 작동하는 연결을 설정하는 동안 클라이언트가 연결을 안전하지 않게하기 위해 수행 할 수있는 작업이있는 경우 STARTTLS는 명시적인 TLS (가능하지 않은 경우)보다 안전하지 않습니다.
그렉

8

특히 이메일의 경우 2018 년 1 월 RFC 8314 가 릴리스되었으며, 이는 IMAP, POP3 및 SMTP 제출을위한 STARTTLS 메커니즘보다 "암시 적 TLS"를 우선적으로 사용하도록 권장합니다.

간단히 말해이 메모는 다음을 권장합니다.

  • TUA 버전 1.2 이상은 MUA와 메일 전송 서버 사이, 그리고 MUA와 메일 액세스 서버 사이의 모든 트래픽에 사용됩니다.
  • MUA 및 MSP (Mail Service Provider)는 (a) 메일 액세스 및 메일 제출에 일반 텍스트 프로토콜 사용을 권장하지 않으며 (b) 가능한 빨리 이러한 목적으로 일반 텍스트 프로토콜을 사용하지 않습니다.
  • 메일 전송 서버 및 메일 액세스 서버 연결하려면 "일반 텍스트"포트에 연결하고 STARTTLS 명령 또는 유사한 명령을 사용하여 TLS를 협상 하는 것 보다 "암시 적 TLS"(아래 정의 참조)를 사용하십시오 .

(강조 추가)


4

대답은 "안전한"의 의미에 어느 정도 달려 있습니다.

먼저 요약에서 SSL / TLS와 STARTTLS의 차이점을 파악하지 못합니다.

  • SSL / TLS를 사용하면 클라이언트는 사용하려는 응용 프로그램 프로토콜에 할당 된 "SSL 포트"에 대한 TCP 연결을 열고 즉시 TLS 말하기를 시작합니다.
  • STARTTLS를 사용하면 클라이언트는 사용하려는 응용 프로그램 프로토콜과 관련된 "일반 텍스트 포트"에 대한 TCP 연결을 연 다음 서버에 "어떤 프로토콜 확장을 지원합니까?" 그런 다음 서버는 확장명 목록으로 응답합니다. 이러한 확장 중 하나가 "STARTTLS"인 경우 클라이언트는 "알겠습니다. TLS를 사용하겠습니다"라고 말하고 두 개는 TLS를 말하기 시작합니다.

클라이언트가 TLS를 요구하도록 구성된 경우, 두 가지 접근 방식은 다소 안전합니다. 그러나 안전을 위해 STARTTLS를 어떻게 사용해야하는지에 대한 미묘한 점이 있으며 STARTTLS 구현에서 이러한 세부 정보를 올바르게 얻는 것이 조금 더 어렵습니다.

반면에 클라이언트가 TLS를 사용할 수있는 경우에만 TLS를 사용하도록 구성되고 TLS를 사용할 수없는 경우 일반 텍스트를 사용하는 경우 클라이언트가 먼저 수행 할 수있는 작업은 프로토콜이 사용하는 SSL 포트에 연결을 시도하는 것입니다. 실패한 다음 일반 텍스트 포트에 연결하고 STARTTLS를 사용 해보고 TLS를 사용할 수없는 경우 일반 텍스트로 돌아갑니다. 공격자가 SSL 포트 연결을 실패시키는 것은 상당히 쉽습니다 (시간이 걸리는 TCP RST 패킷 또는 SSL 포트 차단 만 있으면됩니다). 공격자가 STARTTLS 협상을 물리 치고 트래픽을 일반 텍스트로 유지하는 것은 조금 어렵지만 조금만 어렵습니다. 그런 다음 공격자는 전자 메일을 읽을뿐만 아니라 나중에 사용할 수 있도록 사용자 이름 / 암호를 캡처합니다.

따라서 간단한 대답은 이미 이메일을 보내거나 읽을 때와 같이 TLS를 지원하는 서버에 연결하는 경우 SSL / TLS를 사용해야한다는 것입니다. 연결이 공격을 받으면 연결 시도는 실패하지만 암호와 이메일은 손상되지 않습니다.

반면, TLS를 지원하는지 여부를 모르는 일부 서비스에 연결하는 경우 STARTTLS가 약간 더 나을 수 있습니다.

STARTTLS가 발명되었을 때, "수동적"청취 전용 공격은 매우 일반적이며 공격자가 보안을 낮추기 위해 트래픽을 주입하는 "활성"공격은 덜 일반적이었습니다. 그 이후로 20여 년 동안 활발한 공격이 더욱 실현 가능해졌으며보다 일반적이되었습니다.

예를 들어, 공항이나 다른 공공 장소에서 랩톱을 사용하려고 시도하고 제공된 Wi-Fi를 통해 메일을 읽으려고 시도하는 경우 해당 Wi-Fi 네트워크가 트래픽에 어떤 영향을 미치는지 알 수 없습니다. Wi-Fi 네트워크가 특정 종류의 트래픽을 "프록시"로 라우팅하여 클라이언트 응용 프로그램과 통신하려는 서버 사이에 자신을 배치하는 것이 일반적입니다. 이러한 프록시가 클라이언트가 일반 텍스트로 돌아가도록 시도하기 위해 STARTTLS를 비활성화하고 "한 포트를 다른 포트로 시도"하는 것은 쉽지 않습니다. 예, 이런 일이 발생하며 이는 네트워크에서 트래픽을 감시하는 방법의 한 예일뿐입니다. 그리고 그러한 공격은 3 글자 국가 지원 기관으로 제한되지 않습니다.


1

네, 기본이 맞습니다. 그리고 예, STARTTLS는 확실히 덜 안전합니다. 통지없이 일반 텍스트로 장애 복구 할 수있을뿐만 아니라 중간자 공격의 대상이되기 때문입니다. 연결이 깨끗하게 시작되기 때문에 MitM은 STARTTLS 명령을 제거하고 암호화가 발생하지 않도록 할 수 있습니다. 그러나 메일 서버는 암호화 된 터널이 설정된 후에 만 ​​전송이 이루어 지도록 지정할 수 있다고 생각합니다. 따라서이 문제를 해결할 수 있습니다.

그렇다면 왜 그런 것이 존재합니까? 호환성을 위해. 어느 쪽이 암호화를 지원하지 않는 경우에도 연결이 제대로 완료되기를 원할 수 있습니다.


따라서 STARTTLS가 가능한 서버도 항상 SSL / TLS가 가능합니까? 따라서 항상 SSL / TLS를 먼저 시도하고 작동하는지 확인하는 것이 좋습니다.
Foo Bar

2
@FooBar 아니오, 하나는 다른 하나를 사용할 수 있음을 의미하지 않습니다. 실제로 완전히 다른 인증 도메인으로 구성 할 수 있습니다.
longneck

3
인증서를 확인하지 않거나 약한 인증서를 사용하지 않으면 STARTTLS는 MitM에 취약하지 않습니다. 인증서는 여전히 항상 동일하게 제공되며 클라이언트는 계속하기 전에 TLS 업그레이드가 성공하도록 요구할 수 있습니다. 이것이 SSL / TLS와 정확히 동일한 상황이라는 점은 주목할 가치가 있습니다.
Falcon Momot

1
사람들이 왜 귀하를 다운 피팅하는지 모릅니다. 정답이며 STARTTLS는 TLS보다 안전하지 않으며 잘못된 보안 감각을 제공합니다. ISP는 그것을 막을
Greg Greg

1
프로토콜 자체가 진행되는 한 STARTTLS는 사용자에게 경고하지 않고 일반 텍스트 통신을 명시 적으로 허용하므로 TLS보다 안전하지 않습니다. serverfault.com/a/648282/207987
Greg

1

@Greg에 동의하십시오. 이러한 공격이 가능합니다. 그러나 MTA는 "기회 TLS"가 아닌 "필수 TLS"를 사용하도록 구성 할 수 있습니다 (MTA에 따라 다름). 이것은 전자 메일 트랜잭션에 TLS와 TLS 만 사용됨 (STARTTLS도 포함)을 의미합니다. 원격 MTA가 STARTTLS를 지원하지 않으면 전자 메일이 반송됩니다.


0

아니요, 응용 프로그램이 올바르게 처리 할 때 덜 안전 하지는 않습니다 .

TLS를 처리하기위한 4 가지 방법이 있으며 많은 프로그램에서 선택할 수 있습니다.

  • TLS 없음
  • 전용 포트의 TLS (TLS 만 시도)
  • 사용 가능한 경우 TLS 사용 (Tries starttls, 실패하면 암호화되지 않은 연결 사용)
  • 항상 TLS 사용 ( starttls작동하지 않으면 사용 및 실패)

전용 포트에서 TLS의 장점은 아직 모르는 프로그램을 사용하거나 첫 번째 시작 마법사에서 오류 처리를위한 세부 설정을 표시하지 않는 폴 백이 없다는 것을 확신 할 수 있다는 것입니다.

그러나 일반적으로 보안은 보안 오류 처리에 달려 있습니다. TLS 포트의 TLS도 실패하면 프로그램이 일반 텍스트 포트로 전환하도록 결정할 수 있습니다. 수행 할 작업을 알고 안전한 설정을 선택해야합니다. 그리고 프로그램은 안전한 기본값을 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.