중요: 이 공격은 브라우저가 웹페이지를 렌더링하는 방식의 제한 때문에 일부 패치만으로 완전 해결되지 않을 수 있습니다. 사용자는 확장 설정과 운영 습관을 바꿔 노출 표면을 줄여야 합니다.
무엇이 문제인가
비밀번호 관리자(브라우저 확장형)는 사용자가 클릭했을 때 입력 필드에 자동으로 값을 채우는 기능(autofill)을 제공합니다. DOM 기반 클릭재킹 기법은 다음과 같은 흐름으로 작동합니다:
- 사용자가 공격자가 통제하는 페이지를 방문한다. 페이지에 정상적으로 보이는 클릭 가능한 요소(예: 쿠키 동의 배너, 팝업 닫기 버튼)가 있다.
- 악성 스크립트가 그 요소 위치에 투명한(invisible) 폼을 배치한다. CSS로
opacity:0
또는 유사 기법을 사용한다. - 사용자가 해당 요소를 클릭하면, 설치된 비밀번호 관리자 확장 프로그램이 자동으로 그 투명 폼을 채우고, 악성 스크립트는 입력된 값을 수집하여 전송한다.
이 과정은 사용자에게 거의 감지되지 않으며, 원래 보고서에서 상위 11개 비밀번호 관리자 중 다수가 영향을 받았습니다. 이후 일부 관리자는 자동완성 전 확인 프롬프트를 추가하는 등 패치를 발표했지만, 브라우저 렌더링 방식의 근본적 한계 때문에 완전한 근본적 해결은 어렵습니다.
공격 시나리오 예시
- 목표: 사용자가 방문한 쇼핑몰에서 TOTP 코드 또는 결제 카드 정보를 탈취
- 방법: 페이지 하단의 ‘닫기’ 버튼 위치에 투명 폼을 겹침 → 사용자가 버튼 클릭 → 확장 자동완성이 카드번호/만료일/보안코드를 폼에 채움 → 스크립트가 폼값을 백엔드로 전송
이 공격은 로그인 화면뿐 아니라 로그인과 관련된 모든 자동완성 가능한 폼(비밀번호, 사용자명, TOTP, 카드정보, 주소 등)에 적용될 수 있습니다.
즉시 적용 가능한 방어책
아래는 사용자가 직접 적용할 수 있는 실용적 방어 전략입니다. 여러 방법을 같이 쓰면 보안 효과가 누적됩니다.
자동완성(Autofill) 기능 비활성화
자동완성은 이 공격의 핵심 악용 지점입니다. 확장 프로그램 설정에서 자동완성(autofill)을 끄면, 입력 필드에 포커스가 있어도 자동으로 값이 채워지지 않습니다. 수동으로 값을 넣으려면 해당 확장의 수동 채우기 버튼을 클릭해야 합니다.
- 방법: 비밀번호 관리자 확장 아이콘 > 설정 > “Autofill and save” 또는 유사 메뉴에서 자동완성 옵션 끄기.
중요: 자동완성 끄기는 사용 편의성을 낮추지만, 자동 탈취를 근본적으로 차단하는 데 매우 효과적입니다.
확장 권한을 사이트별 또는 클릭 시만 허용
브라우저 확장 설정에서 확장을 “모든 사이트에서”가 아닌 “클릭할 때만(On click)” 또는 “특정 사이트에서만(On specific sites)” 작동하도록 설정합니다. 이렇게 하면 확장은 기본적으로 비활성화되어, 사용자가 확장 아이콘을 직접 클릭하거나 허용한 사이트에서만 작동합니다.
- 방법(Chrome/Edge/Firefox 공통 흐름): 브라우저 확장(Extensions) 페이지 > 비밀번호 관리자 > 사이트 액세스(Site access) > “On click” 또는 “On specific sites” 선택.
장점: 잠재적 공격자가 악성 페이지에서 확장을 유도해 자동완성을 트리거할 수 없게 됩니다. 단점: 로그인 시마다 확장 아이콘을 클릭해야 하는 추가 동작이 필요합니다.
확장 대신 데스크톱/모바일 앱 사용
확장형 자동완성보다 전용 앱(데스크톱/모바일)을 사용하면 자동완성 공격 표면을 줄일 수 있습니다. 앱은 보통 검색→복사→붙여넣기 방식으로 동작하며, 사용자가 명시적으로 값을 복사해야 하므로 투명 폼에 의한 자동 유출 위험이 작습니다.
- 팁: 로그인 화면에서 비밀번호 관리자 앱을 열고 항목을 검색한 뒤 “복사” 버튼을 눌러 수동으로 붙여넣으세요.
스크립트 차단 확장 사용
많은 클릭재킹 변형은 페이지 내 스크립트에 의존합니다. 스크립트를 차단하면 이 공격을 비롯한 여러 웹 기반 위협을 상당히 줄일 수 있습니다. 다만 정상이용이 불편해질 수 있으므로 신뢰한 도메인에 한해 허용 규칙을 설정하는 방식이 권장됩니다.
- 추천: NoScript(또는 uMatrix 스타일의 스크립트 제어 확장)
주의: 일부 사이트는 기능을 위해 스크립트를 필요로 하므로, 신뢰한 사이트만 화이트리스트에 추가하세요.
계정 보안 강화(추가 보호층)
자동완성 차단은 자격증명 탈취 위험을 낮추지만, 잃어버림에 대비한 2차 보호가 중요합니다.
- 2단계 인증(2FA): SMS는 취약하므로 권장하지 않습니다. TOTP(예: Authenticator 앱)는 기본적인 선택이며, 인증 앱은 별도 기기에 보관하세요.
- 패스키(Passkey) 또는 하드웨어 보안키(U2F/FIDO2): 계정 탈취에 대해 가장 강력한 보호를 제공합니다.
- 자동 로그인(Keep me signed in) 회피: 자동 로그인 솔루션 의존도를 낮추면 침해 시 피해를 줄일 수 있습니다.
보안 우선 원칙
- 자동완성 차단
- 확장 권한을 최소화(사이트별 또는 클릭 시)
- 데스크톱/모바일 앱으로 수동 입력
- 스크립트 차단
- 2FA/패스키 도입
이 순서로 적용하면 사용 편의성과 보안 사이에서 균형을 맞추기 쉽습니다.
조직을 위한 추가 권장사항
- 보안팀은 전사적으로 비밀번호 관리자 사용 정책을 수립하세요(어떤 확장을 허용할지, 자동완성 기본값 등).
- 내부 교육을 통해 사용자가 자동완성을 항상 켜두지 않도록 안내하세요.
- 엔드포인트 관리(EMM/MDM)에서 기업용 비밀번호 관리 솔루션의 설정을 강제(자동완성 비활성화 등)할 수 있습니다.
운영자(관리자) 체크리스트
- 정책 수립: 허용된 비밀번호 관리자 목록 작성
- 구성 강제: 기업용 확장의 자동완성 비활성화 프로필 적용
- 감사: 사용자 확장 설치 및 사이트 액세스 설정 점검
- 사고 대응: 탈취 의심 시 즉시 자격증명 회수, 비밀번호 재설정, 세션 종료
사용자 체크리스트
- 비밀번호 관리자 확장 업데이트 여부 확인
- 확장 설정에서 자동완성 끄기
- 확장 사이트 액세스를 “On click” 또는 “Specific sites”로 변경
- 신뢰할 수 없는 사이트에서 스크립트 차단 사용
- 중요한 계정에 대해 2FA 또는 패스키 활성화
사고 대응 SOP(간략 플레이북)
- 의심 징후 확인: 알 수 없는 로그인 또는 2FA 실패 알림 수신
- 연결 해제: 영향받는 계정의 모든 세션 강제 종료 및 연관 확장 일시 비활성화
- 비밀번호 변경: 즉시 비밀번호 교체(가능하면 안전한 기기에서 수행)
- 2FA 재설정: 2FA가 탈취 의심이면 즉시 재설정 및 하드웨어 키 전환
- 로그 수집: 브라우저 로그, 확장 이벤트, 네트워크 요청 등을 수집하여 공격 경로 분석
- 사용자 통지: 내부 사용자 및 이해당사자에게 상황과 권장 행동을 공지
- 추후 조치: 확장 정책 재검토, 교육, 추가 차단 규칙 적용
의사결정 흐름(간단한 다이어그램)
flowchart TD
A[의심 로그인 또는 보안 경고] --> B{확장 자동완성 사용 여부}
B -- 예 --> C[확장 비활성화 및 로그 수집]
B -- 아니오 --> D[계정 비밀번호 재설정]
C --> E[2FA 확인 및 재설정]
D --> E
E --> F[세션 강제 종료 및 감사]
F --> G[정책/설정 업데이트]
개발자/서비스 제공자용 권장 보완(운영적·기술적 고려)
- 로그인 및 민감한 입력 폼에 대해 content-security-policy(CSP)와 frame-ancestors 지시어를 검토해봅니다. (단, 이 클릭재킹은 동일 문서 내 DOM 조작에 의존하기 때문에 CSP만으로 완전 차단은 어렵습니다.)
- 중요한 입력 폼 제출 시 사용자 확인(예: 클릭 기반 확인, 재확인 모달) 요구를 검토하세요.
- 자동완성에 의존하지 않도록 설계: 민감 기능은 가능한 수동 확인 흐름을 도입합니다.
호환성 및 마이그레이션 팁
- 확장마다 동작 방식이 다르므로, 회사 표준으로 사용할 비밀번호 관리자(확장/앱)를 선정하고 테스트 계획을 마련하세요.
- 사용성을 고려해 데스크톱 앱 사용자에게는 복사-붙여넣기 단축키 안내를 제공하고, 모바일 사용자는 OS 단축 입력(예: iOS의 자동 완성 권장)을 설명하세요.
실패 사례와 한계
- 스크립트 차단은 많은 공격을 막지만, 스크립트 없는 트릭(예: CSS만으로 배치)을 완전 차단하지 못할 수 있습니다. 따라서 다층 방어(autofill 끄기 + 권한 최소화 + 2FA)가 필요합니다.
- 브라우저 자체의 보안 업데이트가 지연되면 확장 패치로 최소화한 취약점이 재발할 수 있습니다.
사실 박스 — 핵심 포인트 요약
- 공격 벡터: DOM 기반 클릭재킹으로 확장 자동완성 유도
- 노출 대상: 비밀번호, TOTP/2FA 코드, 카드 정보, 기타 자동완성 가능한 필드
- 즉시 권장 조치: 자동완성 끄기, 확장 권한을 On click/Specific sites로 변경, 데스크톱/모바일 앱 사용, 스크립트 차단
- 장기 권장 조치: 2FA(Authenticator 또는 하드웨어 키), 보안 교육, 확장 관리 정책
1줄 용어집
- 클릭재킹: 사용자가 보이는 요소를 클릭하도록 유도해 원래 의도와 다른 동작을 발생시키는 공격
- Autofill(자동완성): 비밀번호 관리자 확장이 입력 필드를 자동으로 채우는 기능
- DOM: 문서 객체 모델, 웹페이지의 구조와 요소를 기술하는 API
마무리 요약
DOM 기반 클릭재킹은 확장 프로그램의 자동완성 기능을 악용해 민감 정보를 탈취할 수 있습니다. 단일 대책만으로는 완전 방어가 어렵기 때문에 자동완성 비활성화, 확장 권한 최소화, 데스크톱/모바일 앱 사용, 스크립트 차단, 그리고 강력한 2FA 도입을 결합해 다층 방어를 구축하세요. 조직 차원에서는 정책·강제 구성·교육·사고 대응 프로세스를 마련하는 것이 중요합니다.
Important: 변경한 설정을 적용한 뒤, 신뢰하는 사이트에서 로그인 흐름을 테스트해 정상 동작을 확인하세요.