FTC가 악성 QR 코드에 대해 경고했습니다. 2026년 9월 3일, 미국 연방거래위원회(FTC)는 사기범들이 주차 미터기 등에 부착된 정품 QR 코드 위에 가짜 스티커를 덧붙여 결제 사기 사이트로 유도하고 있다는 소비자 경보를 발표했습니다. 엔터프라이즈 보안 아키텍트, 성장 엔지니어, 디지털 마케팅 리더에게 있어 '안전한 오프라인 추천 추적(Secure Offline Referral Tracking)'은 시급한 아키텍처적 과제가 되었습니다. 대중적인 업계 용어인 '퀴싱(QR-code phishing)'은 주로 소비자 대상 결제 사기를 의미하지만, 이 물리적 공격 방식은 실제 소프트웨어 배포 경로에도 직접적인 영향을 미칩니다. 소매점 POS 디스플레이, 이벤트 배너, 파트너 추천 전단지와 같은 물리적 자산이 라벨 교체나 쿼리 변조에 노출될 경우, 오프라인 사용자 유입과 디지털 기여 분석을 연결하는 데이터 파이프라인이 붕괴됩니다. 마케팅 성과를 보호하고 고객 신뢰를 유지하기 위해, 엔지니어링 팀은 물리적 라벨 보안, 암호화된 페이로드 검증, 그리고 설치 후 라우팅 단계를 분리하여 오프라인 추천 아키텍처를 재검토해야 합니다.

FTC 경고와 물리적 공격 벡터
FTC의 소비자 경보 “주차장에서 QR 코드를 보셨나요? 아직 스캔하지 마세요!”는 비대면 물리적 상호작용에서 발생하는 취약점을 지적합니다. 보고에 따르면 사기범들은 공영 주차 미터기, 요금소, 공공 주차 안내판의 정품 바코드 위에 가짜 QR 코드 스티커를 부착하고 있습니다. 운전자가 주차 요금을 결제하려고 코드를 스캔하면, 결제 카드 정보, 사용자 자격 증명, 개인 식별 정보를 탈취하도록 설계된 가짜 웹사이트로 연결됩니다.
핵심 요약
- 물리적 스티커 대체: 공격자가 합법적인 공공 바코드 위에 가짜 QR 라벨을 덧씌웁니다. 인간의 눈으로는 스캔 전까지 해당 코드가 정상인지 식별할 수 없다는 점을 악용합니다.
- 자격 증명 및 결제 정보 탈취: 피해자는 민감한 결제 및 계정 정보를 탈취당하며, 실제 주차 관리 기관에는 요금이 미납 처리됩니다.
- 오프라인 유입 경로의 위협: FTC가 강조한 물리적 대체 방식은 보호되지 않는 정적 QR 코드를 사용하는 오프라인 기업 추천 프로그램과 리테일 캠페인에도 광범위한 위험을 시사합니다.

WUSA9의 보도에 따르면, QR 코드 사기는 광학 인식 전까지는 목적지 서버를 알 수 없다는 편리함의 이면을 악용합니다. 모바일 카메라 미리보기 화면에서 URL이 표시되더라도, 유사한 유니코드 문자를 사용하는 '홈글리프(homoglyph)' 도메인 조작이나 잘린 화면 프롬프트는 빠르게 QR 코드를 스캔하는 환경에서 식별하기 어렵습니다.
물리적 사기 위험은 다양한 상업 공간으로 확대되고 있습니다. AP 통신의 사이버 보안 분석에 따르면, 레스토랑이나 카페의 테이블 결제 코드가 가짜로 교체되는 사례가 보고되었습니다. 또한 FTC 통계에 따르면 사기 피해로 소비자들이 수십억 달러의 손실을 입었으며, 이는 신뢰할 수 없는 오프라인 접점이 사용자 신뢰를 어떻게 훼손할 수 있는지를 잘 보여줍니다.
+-------------------------------------------------------------------------+ | FTC 주차 미터기 퀴싱(Quishing) 공격 벡터 | +-------------------------------------------------------------------------+ | | | [ 합법적 자산: 주차 미터기 / 시청 요금 납부 안내판 ] | | | | | |-- (공격자가 표면 위에 가짜 QR 스티커 부착) | | v | | [ 대중에 노출된 변조된 물리적 표면 ] | | | | | |-- (운전자가 카메라로 스티커 스캔) | | v | | [ 모바일 브라우저가 공격자 제어 URL을 실행 ] | | | | | v | | [ 가짜 주차 요금 결제 포털 ] | | | | | +---------------------------------------+ | | | | | | v v | | [ 카드 정보 및 자격 증명 탈취 ] [ 주차 요금 미납 처리 ] | | | | | | v v | | [ 재산 피해 / 명의 도용 ] [ 위반 딱지 발부 ] | | | +-------------------------------------------------------------------------+
이 공격 패턴은 일반적인 인쇄된 QR 표면이 물리적 라벨이나 발행자를 인증하지 않는다는 운영적 한계를 드러냅니다. 종이, 아크릴, 금속 디스플레이는 자체적인 구조적 무결성을 검증할 수 없으므로, 현실 세계에서 디지털로의 연결을 안전하게 확보하려면 물리적 계층, 전송 계층, 애플리케이션 계층 전반에 걸친 방어 체계가 필요합니다.
유사한 위험: 오프라인 추천 추적 및 기여 분석 변조
주차 요금 사기가 결제 정보 탈취에 초점을 맞추는 반면, 동일한 물리적 대체 수법은 오프라인 마케팅과 파트너 추천 프로그램에도 영향을 미칠 수 있습니다. 기업은 고객 확보를 위해 소매점 카운터, 프로모션 포장재, 컨퍼런스 디스플레이 등에 수백만 개의 물리적 QR 코드를 배치합니다.

기존의 성장 캠페인에서 오프라인 추천 코드는 종종 정적 일반 텍스트 추적 링크를 포함합니다:
https://promo.example.com/join?channel_id=store_108&promoter_id=rep_4401
오프라인 추천 추적이 보호되지 않는 정적 문자열에 의존할 경우, 성장 시스템은 두 가지 보안 과제에 직면합니다:
- 물리적 라벨 대체: 비인가자가 소매점이나 파트너 포스터 위에 접착 라벨을 덧붙일 수 있습니다. 대체된 코드가 경쟁사 제휴 계정이나 사기 사이트로 연결되면, 잠재 고객은 가짜 코드를 스캔하게 되어 광고주가 기여 분석 데이터를 잃거나 사용자가 피싱에 노출될 수 있습니다.
- 쿼리 파라미터 조작: 사용자가 검증되지 않은 웹 중개자를 거치는 인쇄된 코드를 스캔할 경우, 보호되지 않는 쿼리 문자열이 브라우저 확장 프로그램이나 중간 리다이렉트 스크립트에 의해 제거, 재작성, 또는 추가되어 추천 데이터 집계에 오류가 발생할 수 있습니다.
+-------------------------------------------------------------------------+ | 오프라인 추천 위협 분류 | +-------------------------------------------------------------------------+ | | | [ 물리적 홍보물 (예: 매장 내 파트너 포스터) ] | | | | | +---------------------------------------+ | | | | | | v v | | (공격 1: 물리적 대체) (공격 2: 파라미터 변조) | | 공격자가 기존 포스터 위에 클라이언트 사이드 리다이렉션 중 | | 가짜 라벨을 덧붙임 일반 텍스트 쿼리 문자열 수정 | | | | | | v v | | [ 공격자 도메인 / 채널로 연결 ] [ 추천자 ID 재작성 ] | | | | | | v v | | [ 추천 기여도 탈취 / 손실 ] [ 채널 성과 오기입 ] | | | +-------------------------------------------------------------------------+
검증 가능한 추천 맥락을 유지하기 위해 보안 설계자는 물리적 및 디지털 위협을 적절하게 분류해야 합니다:
| 공격 벡터 | 메커니즘 | 주요 비즈니스 영향 | 아키텍처적 대응책 |
|---|---|---|---|
| 물리적 라벨 덧씌우기 | 합법적인 포스터 QR 위에 가짜 라벨 부착 | 공격자 도메인이나 경쟁사 제휴 채널로 트래픽 유도 | 훼손 방지 소재 사용, 정기 감사, 앱 링크 검증 |
| 파라미터 조작 | 일반 텍스트 promoter_id 또는 channel_id 수정 |
잘못된 수수료 지급 및 채널 성과 분석 오차 | 서버 사이드 암호화 토큰 서명 (HMAC-SHA256) |
| 코드 스크래핑 및 리플레이 | 정적 캠페인 토큰을 복사하여 쿠폰 커뮤니티에 게시 | 지역 외, 비증분적 디지털 신청 발생 | 토큰 수명 주기 관리, 리플레이 방지, 서버 사이드 규칙 |
| 자동화된 클릭 유입 | 스크립트 봇이 웹 리다이렉트 엔드포인트 트리거 | 퍼널 상단 전환 지표 왜곡 | 웹 티어 레이트 제한 및 이상 징후 원격 측정 |
3계층 아키텍처: 물리적, 전송, 페이로드 방어
모바일 엔지니어링에서 흔히 하는 오해는 암호화된 URL 서명이 물리적 QR 코드 대체를 막을 수 있다고 생각하는 것입니다. 하지만 현실적으로 공격자가 자신의 도메인으로 연결되는 가짜 스티커를 부착하면, 피해자의 기기는 합법적인 브랜드 인프라를 전혀 거치지 않게 됩니다. 따라서 포괄적인 방어를 위해서는 세 가지 조정된 계층이 필요합니다:
+-------------------------------------------------------------------------+ | 3계층 오프라인 추천 방어 모델 | +-------------------------------------------------------------------------+ | | | 계층 1: 물리적 무결성 | | - 훼손 방지 소재 (파괴 가능한 비닐, 보이드 테이프) | | - 보호용 인클로저 (아크릴 프레임, 유리 뒤 배치) | | - 대중 노출 자산에 대한 정기 물리적 검사 프로토콜 | | | | | v | | 계층 2: 도메인-앱 연동 및 라우팅 신뢰 | | - 공식 HTTPS 도메인을 표시하는 명확한 브랜딩 | | - 검증된 Apple 유니버설 링크 / Android 앱 링크 | | - 조작된 타사 도메인이 네이티브 앱을 호출하지 못하도록 제한 | | | | | v | | 계층 3: 페이로드 및 토큰 무결성 | | - 서버 생성 암호화 토큰 (HMAC-SHA256 서명) | | - 수신 시 서버 사이드 서명 및 타임스탬프 검증 | | - 비인가 토큰 재사용을 방지하는 캠페인 수명 주기 제어 | | | +-------------------------------------------------------------------------+
계층 1: 물리적 무결성 및 검사
물리적 제어는 라벨 덧씌우기 공격을 완화합니다. 가치 있는 소매 홍보물에는 제거 시 파손되는 비닐 라벨과 같은 훼손 방지 소재를 사용하거나, 보호 유리 및 디지털 디스플레이 단말기 내부 바코드를 배치해야 합니다. 매장 직원은 프로모션 디스플레이가 변경되지 않았는지 정기적으로 육안 검사를 수행해야 합니다.
계층 2: 검증된 앱 링크를 통한 도메인-앱 연동 및 라우팅 신뢰
사용자가 정상적인 물리적 바코드를 스캔하면, Apple 유니버설 링크 및 Android 앱 링크와 같은 검증된 앱 연동 메커니즘이 도메인과 앱 간의 신뢰 연결을 형성합니다. HTTPS를 통해 검증된 도메인에서 제공하는 OS 검증 연결 파일(apple-app-site-association 및 assetlinks.json)을 사용하면, 운영 체제는 검증되지 않은 중간 브라우저 리다이렉트 없이 사용자를 네이티브 앱으로 바로 안내합니다. 만약 인증되지 않은 타사 도메인으로 연결되는 가짜 스티커를 스캔하면, 브랜드의 네이티브 앱이 링크를 가로채지 않아 보안 의식이 있는 사용자가 브라우저 주소 표시줄에서 도메인 불일치를 인지할 수 있습니다.
계층 3: 서버 사이드 서명 검증을 통한 페이로드 무결성
중개자가 쿼리 파라미터를 수정하는 것을 방지하기 위해, 추천 링크는 일반 텍스트 대신 서명된 토큰을 인코딩해야 합니다. 안전한 기여 분석 서비스는 서버 사이드 비밀 키를 사용하여 채널 식별자, 캠페인 파라미터, 발행 타임스탬프를 바인딩하는 HMAC-SHA256 서명을 생성합니다:
링크가 열리면 수신 웹 서버는 서버 사이드 비밀 키를 사용하여 서명을 검증합니다. 공격자가 pid=rep_4401을 수정하여 다른 제휴 계정을 넣으려 하면 서명 검증 단계에서 실패하여 기여도가 인정되지 않습니다. 동적 스크린 디스플레이의 경우 토큰에 짧은 TTL(Time-to-Live)을 포함할 수 있으며, 영구적인 매장 포스터와 같은 정적 자료의 경우 캠페인 수준의 유효성 윈도우와 상태 검사를 강화합니다.
// 암호화 서명된 오프라인 추천 토큰을 검증하기 위한 서버 사이드 구현 예시.
// 프로덕션 환경에서는 대칭 비밀 키의 노출을 방지하기 위해 인증된 백엔드 서비스나 게이트웨이에서 로직이 실행됩니다.
import Foundation
import CryptoKit
struct SignedReferralPayload {
let channelId: String
let promoterId: String
let timestamp: TimeInterval
let signatureHex: String
}
enum TokenValidationError: Error {
case invalidURLStructure
case missingRequiredClaims
case tokenExpired(age: TimeInterval)
case signatureInvalid
}
final class ReferralTokenVerifier {
private let serverSecretKey: SymmetricKey
/// 안전하게 저장된 서버 사이드 마스터 키로 검증자 초기화
init(secretKeyData: Data) {
self.serverSecretKey = SymmetricKey(data: secretKeyData)
}
/// 들어오는 추천 요청의 HMAC-SHA256 서명 및 유효 기간 검증
func verifyToken(from url: URL, maxAgeSeconds: TimeInterval = 86400) throws -> SignedReferralPayload {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true),
let queryItems = components.queryItems else {
throw TokenValidationError.invalidURLStructure
}
// 정식 기여 분석 클레임 추출
guard let channelId = queryItems.first(where: { $0.name == "cid" })?.value,
let promoterId = queryItems.first(where: { $0.name == "pid" })?.value,
let timestampStr = queryItems.first(where: { $0.name == "ts" })?.value,
let timestamp = TimeInterval(timestampStr),
let providedSignatureHex = queryItems.first(where: { $0.name == "sig" })?.value else {
throw TokenValidationError.missingRequiredClaims
}
// 1. 만료 기간이 설정된 경우 토큰 최신성 확인
let currentTimestamp = Date().timeIntervalSince1970
let tokenAge = currentTimestamp - timestamp
if tokenAge > maxAgeSeconds || tokenAge < -60 { // 만료되거나 미래 날짜 토큰 거부
throw TokenValidationError.tokenExpired(age: tokenAge)
}
// 2. 표준 메시지 문자열 재구성: "cid={cid}&pid={pid}&ts={ts}"
let canonicalMessage = "cid=\(channelId)&pid=\(promoterId)&ts=\(timestampStr)"
guard let messageData = canonicalMessage.data(using: .utf8),
let providedSignatureData = Data(hexString: providedSignatureHex) else {
throw TokenValidationError.invalidURLStructure
}
// 3. CryptoKit을 사용한 암호화 방식의 상수 시간 검증
guard HMAC<SHA256>.isValidAuthenticationCode(providedSignatureData,
authenticating: messageData,
using: self.serverSecretKey) else {
throw TokenValidationError.signatureInvalid
}
return SignedReferralPayload(
channelId: channelId,
promoterId: promoterId,
timestamp: timestamp,
signatureHex: providedSignatureHex
)
}
}
private extension Data {
/// 16진수 표현을 원시 데이터 바이트로 변환하는 도구
init?(hexString: String) {
let len = hexString.count / 2
var data = Data(capacity: len)
var index = hexString.startIndex
for _ in 0..<len {
let nextIndex = hexString.index(index, offsetBy: 2)
if let byte = UInt8(hexString[index..<nextIndex], radix: 16) {
data.append(byte)
} else {
return nil
}
index = nextIndex
}
self = data
}
}
다운스트림 모바일 확보 및 설치 경계 맥락
서버 사이드 파라미터 서명이 유입된 추천 링크의 무결성을 검증하는 동안, 모바일 사용자 확보는 잠재 고객이 네이티브 앱을 설치하지 않았을 때 오프라인 기여 분석을 관리해야 하는 별도의 아키텍처적 과제를 제시합니다.
오프라인 확보 퍼널에서 매장 홍보물을 접하는 고객은 대개 신규 방문자입니다. 사용자가 앱을 설치하지 않은 상태에서 검증된 추천 QR 코드를 스캔하면, 운영 체제는 모바일 웹 대체 경로로 요청을 보냅니다.
+-------------------------------------------------------------------------+ | 개별 오프라인 확보 및 설치 여정 | +-------------------------------------------------------------------------+ | | | [ 물리적 리테일 접점: 매장 내 QR 코드 ] | | | | | |-- (고객이 모바일 카메라로 코드 스캔) | | v | | [ 합법적인 HTTPS 웹 랜딩 페이지 ] | | | | | |-- (서버가 토큰 서명 및 상태 유효성 검증) | | v | | [ 다운로드 CTA를 통해 앱 스토어 / Google Play로 안내 ] | | | | | v | | [ 앱 스토어 설치 장벽: 기본 스토어 플로우는 첫 실행 시 | | 웹 맥락을 자동으로 복원하지 않음 ] | | | | | v | | [ 앱 콜드 부팅: 첫 실행 수행 ] | | | | | v | | [ 지연 딥링크(DDL) 엔진: 서버 지원 신호 매칭 ] | | | | | v | | [ 유효 맥락 복원: 앱이 기여 분석 및 라우팅 로직 적용 ] | | | +-------------------------------------------------------------------------+
사용자가 모바일 웹 랜딩 페이지에서 Apple App Store나 Google Play Store로 이동할 때, 표준 스토어 설치 플로우는 최초 실행 시 원래 웹 URL 및 캠페인 맥락을 자동으로 재구성하지 않습니다. 플랫폼별 레퍼러 메커니즘은 제한적인 설치 메타데이터만을 노출할 수 있습니다.
고객에게 수동으로 추천 코드를 입력하게 하지 않으면서 설치 경계를 넘어 기여도를 연결하기 위해, 엔지니어링 팀은 지연 딥링크(Deferred Deep Linking, DDL) 아키텍처를 도입합니다. Branch, AppsFlyer, Adjust, 또는 Opoinstall과 같은 플랫폼은 서버 지원 매칭을 통해 설치 전 웹 클릭 메타데이터와 첫 실행 애플리케이션 프로필을 연결합니다.
공급자에 따라 오프라인 기여 분석 아키텍처는 다음과 같은 기능을 포함할 수 있습니다:
- 채널 및 소스 검증: 기여 분석 플랫폼은 웹 계층에서 검증된 프로모션 파라미터를 수집하고, 스토어 리다이렉트 전에 캠페인 메타데이터를 캐싱합니다.
- 콜드 부팅 파라미터 복원: 첫 실행 시 모바일 클라이언트 SDK는 기여 분석 백엔드에 쿼리하여 캐시된 추천 페이로드를 검색하며, 이를 통해 앱이 오프라인 매장 채널을 식별하고 적절한 온보딩 프로모션을 표시할 수 있습니다.
- 공급자별 이상 징후 원격 측정: 일부 기여 분석 및 측정 플랫폼은 비정상적인 트래픽 패턴이나 타이밍 오차를 감지하기 위한 전문 모니터링 기능을 제공하며, 이는 각 벤더의 구현 방식에 따라 구체적인 탐지 규칙이 달라집니다.
Opoinstall 홈페이지의 문서에 따르면, 이 지연 파라미터 복원 프레임워크는 최대 98%의 사례에서 설치 전 클릭 메타데이터를 초기 콜드 부팅과 매칭할 수 있어, 수동 홍보 코드 입력 대신 자동화된 대안을 제공합니다.
물리적 디스플레이 예방 조치와 서버 사이드 URL 서명 검증 및 안정적인 지연 파라미터 복원을 결합함으로써, 조직은 오프라인에서의 발견을 보다 안전하고 신뢰성 있게 디지털 애플리케이션 수명 주기와 연결할 수 있습니다.
자주 묻는 질문 (FAQ)
FTC가 QR 코드와 관련하여 강조한 위협은 무엇인가요?
암호화 서명이 물리적인 QR 코드 교체를 방지할 수 있나요?
모바일 앱은 어떻게 앱 스토어 설치 전후로 추천 맥락을 유지하나요?
보안 및 성장 아키텍트를 위한 핵심 시사점
공공 주차 미터기 QR 코드 사기에 대한 FTC의 경고는 물리적 공공 표면이 신뢰할 수 없는 환경이라는 필수적인 보안 현실을 강조합니다. 조직이 리테일 공간과 공공 이벤트 전반으로 오프라인 마케팅 및 추천 캠페인을 확대함에 따라, 보호되지 않는 정적 링크는 취약점을 초래합니다.
소프트웨어 아키텍트와 성장 리더에게 오프라인 기여 분석 확보는 통합된 다계층 전략을 요구합니다. 물리적 자산에는 훼손 방지 설계를 도입하고, 모바일 링크에는 도메인 신뢰를 유지하기 위한 검증된 앱 링크 프로토콜을 활용하며, 서버 사이드 암호화 서명을 통해 파라미터 무결성을 지켜야 합니다. 이러한 방어 체계와 강력한 지연 딥링크 및 트래픽 모니터링을 결합하면, 엔지니어링 팀은 실질적인 위협에 대응할 수 있는 복원력 있는 오프라인 고객 확보 파이프라인을 구축할 수 있습니다.
참고 문헌
-
Federal Trade Commission. (2026). Consumer Alert: See a QR code parked somewhere? Don’t scan it…yet!. FTC Consumer Advice. https://consumer.ftc.gov/consumer-alerts/2026/09/see-qr-code-parked-somewhere-dont-scan-ityet
-
WUSA9. (2026). QR code scams are back. Here’s how to stay safe. https://www.wusa9.com/article/money/wheres-the-money/qr-code-scam-quishing-warning/65-e546dc12-65f8-4ffd-a6f2-3658d2e437a0
-
Associated Press. (2026). Travel scams are getting harder to spot. Here’s how to stay safe. https://apnews.com/article/travel-scams-financial-wellness-safety-1d69aaa34876cf4bd0821da6aeb0f9d6
-
Apple Developer. (2026). Supporting Universal Links in your app. Apple Documentation. https://developer.apple.com/documentation/xcode/supporting-universal-links-in-your-app
-
Android Developers. (2026). Verify Android App Links. Android Documentation. https://developer.android.com/training/app-links/verify-applinks
-
Opoinstall. (2026). Deferred Deep Linking and Parameterized App Installation Overview. https://www.opoinstall.com/
Share this article



