블라인드 허위 계정을 만들 수 있던 방법

By | 2023-09-06
현재 아래 서술하는 내용은 저의 추론이며, 정확한 사실과 다를 수 있습니다. 또한 블라인드쪽의 발표에 따르면 "우회 접속 경로는 모두 막았다"고 하니 아래 내용에 따라 시도하신다고 해도 성공할 가능성은 거의 0%에 수렴하니 혹여나 시도하지 마시기 바랍니다.

오늘(2023년 9월 6일) 오후에 블라인드 허위 계정을 구매하여 게시글을 작성한 사용자, 그리고 그 허위 계정을 생성한 사람이 모두 검거되어 사법 절차를 밟고 있다는 경찰청 사이버수사국의 발표가 있었습니다.

블라인드 ‘경찰 계정’ 판 30대…삼성·SK·교육부 계정도 만들어 5만원에 거래
n.news.naver.com

일반적으로 블라인드 가입시에는 자신이 재직중인 회사의 메일로 인증 메일을 수신하도록 하고 있는데, 블라인드 메일을 차단하거나 스팸 필터링 등으로 인해 수신하지 못할 경우 보조적인 인증 절차를 수행하도록 하고 있습니다. 특별한 절차는 아니고, 블라인드 회사에서 Gmail에 개설한 메일 주소에 일정한 양식의 메일을 보내면 인증이 처리되도록 하고 있지요. 몇몇 금융 앱에서 사용자 인증 문자를 보내는 대신 사용자가 인증 문자를 보내도록 하는 절차와 유사합니다.

기본적으로 공공기관이나 회사 메일 같은 것은 외부에서 임의로 생성할 수 없습니다. 제한된 사용자를 대상으로 제한적으로 발급해주는 메일 주소를 외부인이 임의로 사용할 수 있도록 할 수도, 해서도 안됩니다. 따라서, 위 기사에서 언급된 경찰 계정 @police.go.kr 등의 도메인을 가지는 메일 주소는 경찰 아닌 사람이 소유해서도, 소유할 수도, 사칭해서도 안됩니다.

메일을 발송하는데 사용하는 SMTP는 인터넷이라는 글로벌 네트워크를 구성하는 수많은 프로토콜 중에서도 역사가 오랜 편으로, 역사가 오래된 만큼 취약점이 너무나 많습니다. 이름부터가 Simple Mail Transfer Protocol로써, 간단한 메일 전송 규약이며, 초기 구조부터가 굉장히 심플합니다. 그러다보니 발신자 메일 주소 변조, 간단히 말해 발송자 스푸핑(spoofing)이 매우 쉽습니다.

물론 그렇다고 그동안의 선각자들이 이를 보완하기 위한 노력을 하지 않은 것은 아닙니다. SMTP의 RFC가 개정될때마다 조금씩 보완하였고, Extended SMTP라는 확장 프로토콜을 정의하기도 하였으며, SPF(Sender Policy Framework), DKIM(DomainKeys Identified Mail), DMARC(Domain-based Message Authentication, Reporting and Conformance) 등 발송자 메일 주소 변조를 막기 위한 수많은 노력들을 하고 있었고, 수년간의 피땀눈물과 삽질을 거쳐 어느 정도 정착이 되고 있습니다. 그동안 상대적으로 이런 발신자 인증에 소홀하였던 공공기관 및 정부기관 메일들도 현재 이런 발송자 인증 시스템에 대한 이해도를 높이면서 느릿느릿 적용을 하고 있었습니다…. 만.

이번 사례는 사실 메일 도메인이 사칭당한 공공/정부기관 또는 사기업은 억울한 상태입니다. 사실 허위 계정을 생성하신 피의자 양반은 그들 시스템에 전혀 접근하지 않았거든요. 결론을 미리 말하자면 블라인드쪽의 책임이 더 큽니다.

블라인드의 실책

위에서 블라인드가 Gmail에 개설한 메일 주소로 일정한 양식의 메일을 수신함으로써 보조 인증 절차를 수행한다고 언급하였습니다. 단순히 Gmail로 수신한다고 인증 절차가 자동 완료된다는 건 얼핏 보면 그럴 수 있지만 시스템 상으로는 좀 더 처리해야할 상황이 있습니다.

블라인드의 보조 인증은 앱 실행된 상태에서 자동으로 처리됩니다. 그리고 보조 인증을 위해 메일로 보내야하는 양식은 수신자 메일 주소(블라인드의 Gmail 주소), 제목은 (없음), 내용에 임의 코드를 넣도록 되어있습니다.

이 내용을 담은 메일을 전송하면, Gmail에서 메일을 수신하고…. 몇분내로 인증 처리가 됩니다. 그걸 사람이 할까요? 아니겠죠. 수신된 메일 내용을 파싱해서 입력된 메일 주소와 수신된 인증 코드를 매칭되면 인증 처리가 되도록 시스템을 구성해야하는 것이 기본입니다. 그리고 블라인드는 그렇게 구성을 했을 겁니다(다른 신묘한 방법이 있는지는 모르겠군요).

그러면 여기서 뭐가 문제냐.. Gmail은 스팸 필터링이 완벽하진 않더라도 적어도 발신자 인증 기술 – 위에 언급한 SPF, DKIM, DMARC 에 대해서는 잘 처리하고 있습니다. 즉, 어줍잖게 발신자 메일 주소를 위조해서 보낸다 하더라도 이게 Gmail의 스팸 필터를 뚫고 Inbox로 무사히 도착할 가능성은 매우 낮습니다. 이게 일반적인 상담 메일 같은 것이면 뭐 스팸편지함에 수신되어도 나중에 확인해서 Not spam 처리를 해주면 되니까 괜찮은데.. 문제는 블라인드가 수신해야하는 메일은 그렇게 여유있게 확인할 성격이 아니라는데 있습니다.

블라인드의 보조 인증 절차는 메일 보낸 후 앱으로 돌아오면 가입 절차를 계속 하도록 하고 있습니다. 그렇다는 것은 메일 보내놓고 바로 처리가 되지 않으면 가입 절차를 중단하는 비율이 높아진다는 의미도 되지요. 스스로도 “몇분이 소요될 수 있습니다”라고 명시해놨고요. 그렇다면 한가하게 스팸편지함의 메일을 확인해서 처리할 여유가 없습니다.

더군다나 웹UI로 들어가서 확인하도록 구성할리도 만무합니다. 수신된 메일을 시스템에 연동하려면 POP3 같은 프로토콜을 통하거나, 요즘 유행하는 zapier 등의 워크플로 자동화 도구를 사용할텐데 얘들은 Inbox 외의 다른 편지함을 액세스하는게 좀 그렇습니다. POP3는 명실상부 INBOX만 액세스하고, zapier는 다른 편지함을 액세스하도록 구성할 수는 있는데 그러면 job을 몇개로 나눠서 처리해야 합니다. 거기에 워크플로 자동화 도구들은 일반 Gmail(@gmail.com)은 지원하지 않고 Google Workspace에서 커스텀 도메인을 사용하는 경우에만 사용할 수 있습니다.

그렇다면 방법이 한가지 있습니다. Gmail에서 스팸 필터링을 하지 않도록 하면 됩니다. Gmail은 스팸 필터링을 완전 해제할 수 있는 명시적인 방법을 제공하지 않지만, 세상은 넓고 Gmail 사용자는 많고 방법은 분명히 있습니다(굳이 명시하진 않겠습니다).

스팸 필터링을 해제하면 모든 메일이 Inbox로 들어오고, POP3가 되었던 zapier가 되었던 수신된 메일을 인증 처리 시스템으로 넘겨주기만 하면 됩니다. 멀쩡한 메일인데 False-positive가 발생하여 스팸처리된 인증 요청 메일도 처리할 수 있어 민원 요소가 줄어들지만, 이 과정에서 스팸 필터링이 활성화된 Gmail이라면 철저하게 필터링했을 발신자 메일 주소 변조 메일도 멀쩡하게 Inbox로 들어갑니다.

그렇다면 피의자는 어떻게 했을까?

메일 서버를 사용한다고 생각하면 우선적으로 포털 메일을 떠올리게 됩니다. 가입도 간편하고 비용이 들지도 않으며, SMTP 서버도 제공됩니다. 하지만 기사에서도 언급된 바와 같이 네이버와 다음 같은 포털 메일에서는 이미 SMTP 서버 접속을 통해 메일 전송시 헤더 영역에 기록되는 발신자 메일 주소(envelope from 또는 mail from)이 포털 메일의 제공 도메인이 아닌 경우 아예 발신을 차단하거나, 포털 메일의 제공 도메인으로 강제 변경하고 있습니다. 그래서 포털 메일에서는 이미 차단되어있다고 언급이 나와있는 것이죠.

그러면 메일 서버를 구축해야 하는데, 일단 메일 송수신량이 많지 않으니 PC나 NAS에 작은 메일 서버를 하나 구축하는 방법이 있지만, 유동 IP 대역에서 메일 서버를 구축하는 건 “난 메일을 보낼 생각이 없다”라고 여겨질 정도로 발송이 거의 불가능에 가까우니 논외로 하고, 적당한 메일 호스팅 서비스를 이용했을 수 있습니다. 뭐 AWS SES 같은 것을 이용했을 수 있죠. 이런 호스팅 서비스들은 이미 IP 대역이 고정되어있어서 왠만한 메일 서비스로는 메일 전송이 가능하거든요. 계정당 4~5만원 받고 팔았다 하니 아마 저렴이 메일 호스팅 서비스를 하나 썼을 것 같습니다.

보통 이런 메일 호스팅 서비스를 개인이 쓰는 경우는 거의 없고 기업이나 단체를 대상으로 하기 때문에 상대적으로 발신자 메일 주소 변조 차단 같은, 포털 메일에 적용되어있는 보안 정책들이 적용되지 않는 경우가 있습니다. 뭐 대량 발송 차단 같은 기본적인 정책 정도는 적용되긴 하지만요.

이런 식으로 확보한 메일 서버에서 메일을 보내는데, 발신자를 @police.go.kr 같은 공공기관 혹은 기업 메일로 변경한 다음 메일을 발송하는 겁니다. 위에서 언급했던 것처럼 블라인드 서비스쪽에서 수신된 메일 내 인증 코드와 발신자 메일 주소만 매칭하여 인증 처리를 했다면 그대로 통과되어 인증이 완료되었을테고, 그러면 실제로 @police.go.kr 도메인을 사칭한 메일 주소는 이세상에 존재하지 않지만 사칭 메일 주소를 기반으로 한 블라인드 계정은 하나 생성되는 겁니다. 그리고 그걸 당근이나 번장에서 판매하면 돈 벌고 해피~ 하려다가 덜미를 잡힌 것으로 보입니다. 블라인드에서 계정 생성자의 신원 정보를 직접 주지는 않았겠지만 여튼 계정 거래를 했으니 거래 플랫폼을 뒤지면 그쪽은 데이터 잘 주거든요. IP고 뭐고 싹 받아냈을테니 위치 확인도 쉽고요.

앞으로는

블라인드도 이런 식의 헛점이 노출되었으니 대응은 할 겁니다. 뭐 방법은 차단했다고 하는데 그거야 아닌 말로 Gmail 스팸 필터링만 다시 활성화시켜두면 바로 해결되긴 할테고요, 대신 새로운 로직을 개발하기 전까지는 False-positive 스팸 필터링에 기인한 민원에 좀 시달리긴 하시겠죠.

새로운 로직을 개발하려면 가급적 외부 무료 자원에 의존하는 건 좀 피하셔야하지 않을까 싶습니다. 엄밀히 말해 Gmail 개인 계정을 사용한다는 건 내 상업 서비스 운영에 남의 무료 계정을 쓴다는 뜻인데, 무료 서비스의 제약은 있지만 돈 들이기 싫어서 우회 방안을 찾다보면 이번 같은 일이 벌어지기 쉽습니다.

저도 나름 서비스 운영 오래해본 입장에서, 서비스 구축, 그리고 운영에 들어가는 비용과 자원 줄이겠다고 안일하게 생각했다면 서비스 운영사의 자세가 잘못되었다고 볼 수 밖에 없습니다. 이런 점을 블라인드가 유념하길 바랍니다. ⓣ

Author: Taeyeon Kim

2004년부터 모 포털 사이트 알바로 시작한, 취미로 하던 웹질을 직업으로 만든 일을 굉장히 후회하고 있는 이메일 서비스 운영-기획자 출신 앱 PM(?)-SI 사업PM. 메일쟁이로 지낸 15년에 치여 여전히 이메일이라면 일단 관심이 갑니다. 버팔로이자 소원이자 드팩민이고, 혼자 여행 좋아하는 방랑자. 개발자 아님, 절대 아님, 아니라고!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다