2FA: SMS는 왜 좋은 것들 중 최악인가

게시일 글쓴이 David Carrero

SMS로 2차 인증을 켜는 것은 오늘 당신이 내릴 수 있는 가장 좋은 결정 중 하나다. 그리고 가장 먼저 다시 검토해야 할 결정이기도 하다.

두 문장은 동시에 참이고, 이 주제의 어려움은 전부 거기서 나온다. 논쟁은 보통 똑같이 틀린 두 진영으로 갈라진다. SMS를 진짜 보안으로 취급하는 쪽과, 보안 연극으로 취급하는 쪽이다. SMS는 아무것도 없는 것보다 압도적으로 낫고, 동시에 흔히 쓰이는 2차 인증 수단 중 가장 약하다. 모순이 아니다. 계단이 있고, SMS는 첫 번째 칸일 뿐이다. 바닥보다는 한참 위에 있는 칸.

SMS가 잘하는 일

2차 인증이 없으면 당신의 계정은 비밀번호 하나에 매달린다. 그 비밀번호는 이미 몇 년째 남의 유출 목록 안을 돌아다니고 있을지도 모른다. 당신은 모르는 채로. 누군가 그 목록을 들고 이 서비스 저 서비스에 차례로 넣어보고, 비밀번호를 재사용했다면 그대로 들어온다. 당신을 노린 게 아니다. 스프레드시트에서 그냥 당신 줄 차례가 온 것뿐이다.

SMS는 이 구조를 뿌리에서 끊는다. 2차 인증이 걸리는 순간, 당신을 터는 일은 자동으로 돌아가는 절차에서 당신만을 겨냥한 수작업으로 바뀐다. 당신이 누구인지, 어떤 번호를 쓰는지, 그 번호를 어느 통신사가 주는지 알아야 한다. 대부분의 공격자에게는 수지가 맞지 않는다. 더 쉬운 계정이 널려 있으니까. 그래서 어떤 서비스가 SMS만 제공한다면 답은 그냥 예스다. 단서는 없다. 단서는 그다음에 붙는다.

문제는 당신 휴대폰에 있지 않다

SMS를 뚫는다고 하면 전파를 가로채거나, 유심을 복제하거나, 휴대폰을 감염시키는 장면을 떠올리게 된다. 그런 건 하나도 필요 없다. 실제로 계정을 날려버리는 공격, 그리고 공개된 사건마다 반복해서 등장하는 공격은 SIM 스와핑이고, 방식은 훨씬 심심하다. 누가 당신 통신사에 전화를 걸어 유심을 잃어버렸다고 말하고, 확인 질문 몇 개에 답하고, 재발급을 요청한다. 그 순간부터 당신의 SMS는 그 사람에게 간다.

여기서 무슨 일이 일어나지 않았는지 보자. 깨진 암호는 하나도 없다. 당신 휴대폰은 건드리지도 않았다. 당신이 잘못한 것도 없다. 알아차리지도 못한다. 회선이 갑자기 먹통이 되는 것 말고는 신호가 없고, 그것마저 자고 있으면 한참 뒤에나 눈에 들어온다. SIM 스와핑은 당신을 향한 기술적 공격이 아니라 당신 통신사를 향한 사회공학이다. 끊어지는 고리는, 민원을 빨리 처리하라고 돈을 받는 상담원이다. 그 사람은 방금 완벽하게 그럴듯한 이야기를 들었다. 유심을 잃어버리는 일은 매일 누군가에게 실제로 일어나는 일이니까. 사례는 충분히 기록되어 있고, 패턴은 이제 놀랍지도 않을 만큼 단조롭게 반복된다.

불편한 지점은 여기서 당신이 낄 자리가 없다는 것이다. 당신의 보안이, 그런 이유로 고른 적 없는 회사의 본인확인 절차에 달려 있다. 그리고 더 조용한 두 번째 결함이 있다. 당신의 전화번호는 비밀이 아니다. 치과에도 줬고, 택배 기사에게도 줬고, 배달 주문할 때도 줬고, 회원가입 창마다 적어 넣었다. 아무렇지 않게 뿌리고 다니는 식별자가 여기서는 자격증명 노릇을 하고 있다.

두 번째 칸: 앱

다음 칸은 TOTP다. Google, Aegis, 1Password, Bitwarden 같은 앱에서 30초마다 바뀌는 여섯 자리 코드.

원리는 우아하다. 서비스와 당신의 앱이 처음 설정할 때 딱 한 번 비밀값을 나눠 갖고, 그다음부터는 양쪽이 그 비밀값과 시각으로 같은 코드를 각자 계산한다. 아무것도 전송되지 않는다. 차이는 전부 거기서 갈린다. 아무것도 오가지 않으면 가로챌 것도 없다. 통신사도 없고, 번호도 없고, 전화를 걸어 재발급을 요청할 상대도 없다. SIM 스와핑은 들어올 문 자체가 없다.

큰 도약이고, 5분이면 된다. 하지만 끝은 아니다. TOTP에는 아주 인간적인 사각지대가 남아 있다. 그 코드는 결국 달라는 사람에게 당신이 직접 쳐서 넘긴다. 은행처럼 생겼지만 은행이 아닌 페이지에 코드를 입력하고 있다면, 공격자는 그것을 주워서 남은 몇 초 안에 진짜 사이트에 그대로 넣는다. 앱은 숫자를 만들 뿐, 당신이 그걸 어디에 붙여넣는지는 모른다.

속지 않는 칸

물리 보안 키, 즉 FIDO/U2F 표준을 따르는 USB나 NFC 키, 또는 인증기 역할을 하는 휴대폰 자체가 바로 그 문제를 해결한다. 등록할 때 오리진에, 그러니까 그 서비스의 특정 도메인에 묶인 키 쌍을 만든다. 로그인할 때 브라우저가 어느 도메인을 위한 서명인지 알려주고, 키는 그 도메인이 안에 들어 있는 챌린지에 서명한다. 다른 곳에 올라간 복제 페이지라면 도메인이 맞지 않고, 진짜 서비스가 받아들일 서명은 나오지 않는다.

달리 말하면 이렇다. 보안 키는 당신보다 똑똑한 게 아니라, 당신의 판단을 아예 믿지 않는 것이다. 자물쇠 아이콘을 보지 않고, URL을 읽지 않고, 그 메일이 정상처럼 보였는지 따지지 않는다. 문자열 하나를 다른 문자열과 비교할 뿐이다. 그럴듯한 이야기로 설득되지 않는 유일한 고리다. 그리고 여기까지 왔으면 눈치챘겠지만, 그럴듯한 이야기가 바로 이 모든 문제의 핵심이다.

“제한”은 “금지”가 아니다

NISTSP 800-63B에서 전화망을 통한 대역 외 인증, 그러니까 SMS를 제한적(restricted)으로 분류한다. 이 단어에서 잠깐 멈출 가치가 있다. 그 뉘앙스가 이 글 전체이기 때문이다. 제한은 금지가 아니다. 의도적으로 만들어 둔 중간 범주다. 계속 써도 되지만, 쓰는 쪽은 의무를 진다. 위험을 평가하고, 그 채널에 알려진 약점이 있다는 사실을 사용자에게 고지하고, 더 나은 방식으로 옮겨갈 계획을 갖고 있어야 한다.

금지보다 영리한 태도이고, SMS가 아직 살아 있는 이유를 설명해 준다. 사람들이 실제로 쓰는 그저 그런 수단이, 아무도 켜지 않는 훌륭한 수단보다 더 많이 지킨다. 내일부터 SMS가 전면 금지된다면 그 계정들 상당수는 한 칸 올라가지 않는다. 비밀번호 하나만 남는다. 그게 바닥이다.

무엇을, 어떤 순서로

  • 서비스가 SMS만 제공한다면 켜라. 오늘. 높이를 가장 많이 버는 건 첫 번째 칸이다.
  • TOTP를 제공한다면 TOTP로 바꾸고, 가능하다면 백업용 SMS는 빼라. 당신의 보안 수준은 당신이 허용한 가장 약한 방식의 수준이다. 어디로 들어올지는 공격자가 고르니까.
  • 정말 중요한 것에는, 그러니까 메일과 은행과 비밀번호 관리자에는 물리 보안 키를 걸어라. 인생 전체의 “비밀번호를 잊었어요”가 메일 계정에 매달려 있다.
  • 통신사가 PIN이나 번호이동 잠금을 제공한다면 걸어라. 근본을 고치지는 못하지만, 전화 거는 쪽의 재발급을 성가시게 만든다.
  • 그리고 첫 번째 요소를 잊지 마라. 2FA는 두 번째 자물쇠지, 첫 번째 자물쇠에 대한 사면이 아니다. 길고, 유일하고, 생성기에서 나온 비밀번호를 쓰고, 이미 쓰고 있는 것 중 미심쩍은 게 있다면 검사기에 넣어 보라.

결론은 지루하고, 그래서 아무도 말하지 않는다. SMS는 나쁘고, 다른 게 없다면 써야 한다. 진짜 보안은 완벽한 선택지를 고르는 일인 경우가 거의 없다. 좋은 것들 중 최악이 무엇인지 알고, 필요한 동안 그걸 쓰되, 그것을 다 끝냈다는 뜻으로는 절대 착각하지 않는 일이다.


출처: NIST SP 800-63B — 공중전화망을 통한 대역 외 인증(SMS 또는 음성)을 제한적 방식으로 분류하며, 그 범주가 수반하는 위험 평가, 사용자 고지, 마이그레이션 계획 의무를 규정한다 · FIDO/U2F 및 WebAuthn 명세와 서명 시점의 오리진(도메인) 검증 · RFC 6238 (TOTP) · 언론과 사법 절차에서 광범위하게 기록된 SIM 스와핑 공개 사례.

← 블로그로 돌아가기