abox.tools

언어: 한국어

QR코드를 스캔해도 안전할까?

스캔 자체는 안전합니다. QR코드는 한 조각의 텍스트이고, 카메라를 갖다 대는 일은 그 텍스트를 읽는 것 말고는 아무것도 하지 않습니다. 잘못될 수 있는 모든 일은 한 번의 탭 뒤에, 읽힌 것을 무언가가 열 때 일어납니다 — 그리고 그 탭은 누르지 않고 참을 수 있습니다.

Markdown으로 보기

짧은 답

스캔하는 일은 안전합니다. QR코드는 네모 칸으로 그려 놓은 짧은 텍스트 조각이고, 카메라를 갖다 대면 정확히 한 가지 일이 일어납니다. 그 텍스트를 도로 읽어 내는 것입니다. 그 읽기는 아무것도 설치하지 못하고, 어디에도 방문하지 못하고, 휴대폰의 무엇도 건드리지 못합니다. 적어 놓은 주소를 바라본다고 그곳으로 옮겨지지 않는 것과 같은 이유입니다.

위험은 그다음 한 걸음에서 시작됩니다. 읽힌 것을 무언가가 열 때입니다 — 그리고 모든 QR 사기의 수법 전부는, 당신이 어디로 가고 있는지 보기 전에 그 걸음이 일어나게 만드는 데 있습니다. 코드 속 텍스트는 누구도 눈으로 읽을 수 없는 주소이고, 대부분의 휴대폰은 조급한 탭 한 번으로 그 주소에 응답해 버립니다. 읽기와 열기를 떼어 놓으면, 사기에게는 부릴 재료가 남지 않습니다.

QR코드의 정체

네모 칸 아래에 있는 것은 문자열 하나뿐입니다. 많아야 몇천 자, 대개는 그보다 훨씬 적습니다. 웹 주소, 와이파이 네트워크 이름과 비밀번호, 연락처 카드, 평범한 텍스트 한 줄. 이 형식은 1994년에 도요타 공장에서 자동차 부품을 추적하려고 설계되었고, 어떤 종류의 명령도 담고 있지 않습니다. QR코드는 길 안내판이 그럴 수 없는 것과 마찬가지로 “바이러스를 담을” 수 없습니다.

담을 수 있는 것은 휴대폰에게 무언가를 부탁하는 텍스트입니다. 이 주소를 열어 달라, 이 네트워크에 붙어 달라, 이 연락처를 저장해 달라. 하나같이 부탁이지 명령이 아닙니다. 코드는 제안하고, 스캔한 쪽이 결정합니다. 텍스트를 보여 주고 기다리는 스캐너는 완전히 안전합니다. 텍스트에 제멋대로 반응하는 스캐너는 결정권을 코드를 인쇄한 사람에게 넘겨준 것입니다 — 안전한 스캔과 위험한 스캔의 차이는 그것이 전부입니다.

정직을 위한 각주 하나. 코드를 해독하는 프로그램에는 입력을 해석하는 모든 프로그램이 그렇듯 결함이 있을 수 있고, 실제로 여러 해에 걸쳐 스캐너들에서 그런 결함이 발견되기도 했습니다. 그러나 그 위험은 스캐너의 것이지 코드의 것이 아니고, 사기가 기대는 것도 그것이 아닙니다. 사기가 기대는 것은 탭입니다.

스티커 수법

이름이 붙을 만큼 흔해진 사기 — 퀴싱(quishing) — 은 민망할 만큼 단순합니다. 자기 코드를 인쇄해서, 진짜 위에 붙이고, 기다립니다. 주차 요금기에서는 가짜가 구청 것을 닮은 결제 페이지로 이끕니다. 식당 테이블에서는 메뉴판 위에. 문틈으로 들어온 택배 부재 안내문에서는 “찾아뵙지 못했습니다”라는 문구 옆에.

무엇이 이 수법을 굴러가게 하는지 보십시오. 기술적 정교함이 아닙니다 — 그런 것은 아예 없습니다. QR코드가, 사람이 따라가기 전에 읽을 수 없는 유일한 종류의 주소라는 사실입니다. 글자로 적힌 수상한 웹 주소는 들여다보는 누구에게나 스스로 정체를 드러냅니다. 같은 주소도 네모 칸으로 그려 놓으면 정직한 주소와 똑같아 보입니다. 코드가 어디로 갔는지 볼 수 있게 되었을 때, 당신은 이미 그곳에 있습니다. 기대했던 페이지를 닮게 지어 놓고 카드 번호를 묻는 페이지에 말입니다.

방어는 스캔을 그만두는 것이 아닙니다. 스캔과 방문 사이에 주소를 들여다보는 것입니다. 2초쯤 드는 그 일이 이 수법을 완전히 무너뜨립니다.

주소가 거짓말하는 세 가지 방식

2초의 눈길이면 충분하지만, 어디를 봐야 하는지 알 때만 그렇습니다. 수상한 주소가 걸치는 정직해 보이는 겉모습은 세 가지이고, 셋 다 얼굴을 익혀 둘 가치가 있습니다.

1. @ 앞의 이름

웹 주소는 @ 기호 앞에 사용자 이름을 붙일 수 있습니다. @까지의 모든 것은 장식이고, 진짜 목적지는 그 뒤에서 시작됩니다. [email protected]은 당신의 은행으로 가지 않습니다. evil.example로 가면서 “mybank.co.kr”를 아무 의미 없는 로그인 이름으로 데려갈 뿐입니다. 눈은 주소의 앞부분을 읽지만, 브라우저는 끝부분을 읽습니다.

2. 보이는 그 글자가 아닌 글자

알파벳들은 서로 겹칩니다. 키릴 문자 а는 라틴 문자 a와 똑같은 모양으로 그려지고, 그 글자로 적은 주소는 화면 위에서는 똑같아 보이는 다른 주소입니다. 이 수법에는 이름이 있습니다 — 동형문자 공격 — 그리고 어떤 목적지가 당신이 믿는 곳과 글자 하나까지 일치해 보이면서도 다른 곳일 수 있는 이유가 바로 이것입니다.

3. 정직한 첫 기착지

코드 속 주소는 진짜로 점잖은 곳일 수 있습니다 — 링크 단축 서비스, 마케팅 리디렉션, 검색 엔진 자체의 클릭 집계 — 그러면서 당신을 점잖지 못한 곳으로 넘겨주기만 할 수도 있습니다. 첫 주소는 검사를 통과하지만, 목적지는 당신이 이미 출발한 뒤에 서버가 정합니다. 인쇄된 코드 속의 단축 주소가 나쁜 일의 증거는 아니지만, 확인할 수 있는 주소가 도착할 주소가 아니라는 뜻인 것은 분명합니다.

안전하게 스캔하는 법

규칙은 한 문장입니다. 먼저 읽고, 그다음에 열고, 하나의 동작이 둘을 다 하게 두지 말 것. 실제로는:

여기 있는 리더의 행동 방식

이 사이트에는 QR·바코드 리더가 있고, 이 페이지가 내내 옹호해 온 규칙 위에 지어져 있습니다. 절대로 아무것도 열지 않습니다. 해독된 텍스트는 전부 표시되고, 주소가 실제로 닿을 호스트는 제 줄로 따로 뽑혀 나오고, 위의 세 가지 변장은 검사되어 나타나는 순간 이름이 불립니다. 링크를 여는 것은 별도의 버튼이고, 읽은 다음에 누릅니다 — 또는 끝내 누르지 않습니다.

읽기 자체는 당신의 기계 위에서 일어납니다. 스캔한 그림은 브라우저 안에서 해독되고 어디로도 보내지지 않으므로, 미심쩍은 코드를 아무도 — 이 사이트를 포함해서 — 그 내용을 알지 못하는 채로 살펴볼 수 있습니다. 와이파이를 꺼도 페이지는 계속 돌아가고, 그것이 이 주장을 확인하는 가장 쉬운 방법입니다. 그리고 여는 쪽에서 코드를 실행해 버릴 javascript: 주소처럼 드러내 놓고 적대적인 내용물은 링크를 아예 받지 못하고, 그 정체 그대로 이름이 불립니다.

나머지 반쪽도 있습니다. 코드를 당신의 기계에서 그려 주는 QR코드 생성기, 그리고 인쇄에 넘기기 전에 코드를 만들고 스캔되는지 증명하는 동반 가이드입니다. 그리고 당신의 질문 뒤에 더 넓은 질문이 있었다면 — 웹사이트에 무엇이든 넘겨준다는 것이 실제로 무슨 일인가 — 그 질문에는 제 페이지가 따로 있습니다.