요약

  • 초기 SMTP는VRFY와EXPN명령을 통해 사용자 이름과 메일링 리스트를 들여다볼 수 있는 진단 창구를 제공했습니다. 성공적인 응답은 하나의 메일박스 또는 리스트의 모든 구성원을 노출할 수 있었습니다.
  • 응답 코드252는 정직한 세 번째 상태를 만들었습니다. 서버는 사용자를 검증하지 않으면서도 메시지를 수락하고 전송을 시도할 수 있었습니다. 이는 디렉터리 공개와 전송 의도를 분리하면서도 어느 쪽도 최종 전송 결과인 것처럼 가장하지 않았습니다.

메일 서버가 디렉터리처럼 답하던 시절

RFC 821은 운영자에게 매우 구체적인 디버깅 교환을 제공했습니다.VRFY Smith를 보내면, 일치하는 서버는 Fred Smith의 실명과 메일박스를 담은250응답을 줄 수 있었습니다. Smith가 이사했다는 것을 알고 있다면 전달 주소를 반환할 수 있었습니다. 문자열이 누구와도 일치하지 않으면 그렇다고 답할 수 있었습니다. 두 명의 Smith가 있어 요청이 모호하다면553 User ambiguous를 반환해야 했습니다.

짝을 이루는 명령인EXPN은 더 나아갔습니다. 메일링 리스트 이름을 주면 성공적인 여러 줄 응답이 그 리스트의 메일박스를 줄마다 하나씩 열거할 수 있었습니다. 명세는 명확했습니다. 긍정적인VRFY응답에는 메일박스가 포함되어야 하고, 긍정적인EXPN응답에는 리스트의 메일박스들이 제공되어야 했습니다. 이는 모호한 힌트가 아니었습니다. 이 명령들은 로컬 디렉터리 상태를 원격 클라이언트가 사용할 수 있는 프로토콜 증거로 변환했습니다.

그 증거에는 실제 가치가 있었습니다. 잘못 입력된 이름을 메시지를 보내기 전에 발견할 수 있었습니다. 전달 규칙을 알아낼 수 있었습니다. 리스트 루프를 여러 단계의 확장을 통해 추적할 수 있었습니다. SMTP의 초기 설계자들은 진단 기능을 전송 기능 곁에 두었습니다. 둘 다 동일한 전송 지식에 의존했기 때문입니다.

그러면서도 공개 가능성 표면을 동일한 공개 리스너 위에 놓았습니다.

유용한 답이 악용 가능한 답이 되다

RFC 1123은 1989년에 진단 기대치를 강화했습니다. 수신 SMTP 구현은VRFY를 지원해야 하며,EXPN이 권장되었고, 설치 환경이 어느 쪽 명령이든 특정 리스트든 비활성화할 수 있었습니다. 그 논의는 슬로건으로 문제를 해소하지 않으면서 긴장을 담아냈습니다. 관리자는 전송 문제 진단에 이 명령들을 정기적으로 사용했지만, 리스트 확장은 상당한 프라이버시·보안 노출이 될 수 있었습니다.

원치 않는 대량 메일이 운영 현실이 되자, 동일한 인터페이스에 다른 고객이 등장했습니다.VRFY는 원격 요청자가 이름을 시험할 수 있게 했습니다.EXPN은 알려진 리스트 식별자 하나를 여러 주소로 바꿀 수 있었습니다. 따라서 RFC 2505는 메일 전송 에이전트가 on/off 설정 또는 접근 목록을 통해 누가 명령을 발행할 수 있는지 통제할 것을 권고했습니다.VRFY가 꺼져 있거나 차단되었을 때의 기본 응답으로252를 제안하고,EXPN은 기본적으로 꺼져 있어야 한다고 권고했습니다.

이것은 나쁜 명령의 발견이 아니었습니다. 진단 권한은 누가 묻느냐에 달려 있다는 인식이었습니다. 라우팅을 감사하는 내부 운영자와 익명의 주소 수집가는 완전히 동일한 옥텟을 보낼 수 있습니다. 정당한 범위는 명령 문법이 아니라 인증과 관리 관계에서 나옵니다.

정직한 세 번째 응답

이분법적 응답은 프로토콜 함정을 만들었을 것입니다. 주소가 문법적으로 그럴듯해 보이는지만 확인하고250을 반환하는 서버는 수행하지 않은 검증을 조작하는 셈입니다. 항상550을 반환하는 서버는 존재하지 않음을 조작하는 셈입니다. RFC 5321은 두 가지 동작 모두를 규격 위반으로 거부합니다.

응답252가 탈출구를 제공합니다. "사용자를 VRFY할 수 없으나, 메시지를 수락하고 전송을 시도할 것이다." 메일박스가 존재한다고 말하지 않습니다. 향후RCPT TO명령이 모든 맥락에서 수락되어야 한다고 말하지 않습니다. 물론 메시지가 사람에게 도달했다고 말하지도 않습니다. 단지 서버가 요청된 디렉터리 단언을 할 수 없거나 하지 않겠으며, 일반적인 전송 절차는 열어둔다는 것만 말합니다.

이 구분은 다른 도메인을 대신하는 MX 서버에게 특히 중요합니다. 문법이 허용 가능하고 목적지가 자신이 처리하는 도메인 안에 있음은 알 수 있지만, 최종 메일박스 데이터베이스의 실시간 정보는 없을 수 있습니다.252는 잘못된 예나 아니오를 강요하는 대신 그 불확실성을 보존합니다.

보안 정책도 같은 의미적 도구를 사용합니다. RFC 5321은 사이트가 보안상의 이유로 명령을 비활성화할 때, 성공적 또는 실패한 검증과 혼동될 수 있는 코드 대신252를 반환해야 한다고 규정합니다. 공개를 거부하는 것은 사용자가 부재하다는 증거가 아닙니다.

수락, 검증, 전송은 서로 다른 기록

252의 역사가 중요한 이유는 이메일 시스템이 인접한 상태들을 반복적으로 합쳐버리기 때문입니다. 문법적 유효성이 "검증된 주소"가 됩니다. 한 SMTP 홉에서의250이 "전송됨"이 됩니다. 차단된 조회가 "메일박스가 존재하지 않음"이 됩니다. 이러한 지름길마다 부분 관찰의 권위가 커집니다.

SMTP에는 최소한 세 개의 별도 기록이 필요합니다. 디렉터리 검증은 서버가 실제로 주소 또는 확장을 확인했음을 말합니다. 트랜잭션 수락은 서버가 특정 단계에서 책임을 받아들였음을 말합니다. 최종 전송 증거는 이후의 라우팅, 큐잉, 전달, 수신자 처리 결과에 관한 것입니다.252는 이러한 결과 이전의 의도적으로 좁은 구간을 차지합니다.

그래서 모니터링 시스템은252를 초록색 검증 확인으로도, 확정된 무효 주소 플래그로도 재작성해서는 안 됩니다. 올바른 상태는 가용한 전송 경로가 있는 명시적 불확실성입니다. 이후의 메시지 트랜잭션이 증거를 더할 수 있지만, 조회 응답은 그것을 예측할 수 없습니다.

한 창을 닫아도 다른 창은 열려 있을 수 있다

VRFY를 비활성화하는 것이 모든 수신자 증거를 지우지는 않습니다. RFC 5321은 일부 서버가RCPT응답을 통해 유사한 정보를 노출한다고 언급합니다. 또 다른 서버들은 수신자 검증을 메시지 데이터 수신 이후로 미루기 때문에RCPT는 거의 아무것도 드러내지 않을 수 있습니다. 따라서VRFY를 숨기는 한계적 보안 효과는 전체 수락 파이프라인에 달려 있습니다.

이는 승리 선언을 제한합니다. 명령 수준 정책은 저비용·직접 디렉터리 조회를 줄일 수는 있습니다. 타이밍, 응답 코드 차이, 캐치올 도메인, 반송 동작, 하류 전송 보고서가 아무것도 노출하지 않으리라는 보장은 없습니다. 운영자는 하나의 동사가252를 반환한다는 이유로 프라이버시를 확보했다고 스스로에게 수여하는 대신, 복합적인 표면을 점검해야 합니다.

같은 주의는 반대 방향으로도 흐릅니다. 결연한 수집가가 다른 방법을 가지고 있다는 이유만으로 서버가EXPN을 공개적으로 노출해서는 안 됩니다. 가장 저렴하고 가장 권위 있는 열거 경로를 줄이는 것만으로도 비용과 신뢰도를 바꿉니다. 보안은 완전한 비밀의 달성이 아니라, 종종 증거 품질과 조회 가격의 통제입니다.

경계 뒤에 살아남은 진단 기능

RFC 5321은 두 명령 모두에 대한 근거를 유지합니다. 도메인 내부의 인증된 사용자와 관리자는 메일 라우팅을 감사하고, 무단 전달을 발견하고, 리스트 동작을 이해하는 데 사용할 수 있습니다. 조직은 명령을 인증된 요청자에게만 제공할 수 있습니다. 기능은 살아남지만, 익명의 권리는 남지 않습니다.

이는 전면 비활성화보다 더 정확한 결과입니다. 서버는 응답할 역량을 유지합니다. 정책은 요청자의 신원과 범위가 공개를 정당화하는 때를 결정합니다. 리스트 소유자는 모든 리스트의 목록을 얻지 않으면서 하나의 리스트를 점검할 수 있습니다. 메일 관리자는 관리 네트워크에서 내부 라우팅을 검증하면서 인터넷에 동일한 정보를 제공하지 않을 수 있습니다.

현재 IANA SMTP 레지스트리는 서비스 경계에서 이 구분을 유지합니다.VRFY에 대한 서버 구현 지원은 필수로 기록하되, EHLO 확장 목록에의 등장은 선택 사항입니다. 또한VRFY와EXPN모두를 메시지 제출(Message Submission) 용도로는MUST NOT으로 표시합니다. 발송 메일을 제출하기 위해 인증된 사용자가 수신 시스템의 디렉터리를 조회할 권리를 자동으로 갖는 것은 아닙니다.

SMTP는 거짓을 말하거나 침묵하는 방식으로 하나의 질문에 답하지 않는 법을 배웠습니다. 더 작은 질문에 정직하게 답하는 법을 배운 것입니다. 서버는 사람의 존재를 인증하기를 거부하면서 메일 수락 가능성을 보존하고, 더 풍부한 진단 정보는 그것을 정당화하는 관계에 한해서만 제공할 수 있었습니다. 응답으로 만들어진 프로토콜에서252는 응답이 알 수 있도록 허용된 것의 경계가 되었습니다.

출처