Refunded but Rewarded: The Double Dip Attack on Cashback Reward Engines
이 논문은 환불 처리 시 보상 시스템의 논리적 결함을 악용하여 발생하는 '이중 수취' 공격을 분석하고, 실제 카드사 6 개사를 대상으로 한 실험을 통해 취약점을 규명하며, 이를 해결하기 위한 상태 머신 기반의 형식적 모델과 방어 알고리즘을 제시합니다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
🍎 핵심 비유: "사과를 사서 돈을 받고, 사과를 반품하면 돈은 그대로?"
상상해 보세요. 당신이 슈퍼마켓에서 1 만 원짜리 사과를 샀습니다.
그런데 이 슈퍼마켓은 **"사과를 사면 10% (1,000 원) 를 현금으로 돌려준다"**는 이벤트를 하고 있습니다.
- 정상적인 상황: 사과를 사고, 1,000 원의 포인트를 받습니다. 나중에 사과를 반품하면, 1 만 원은 돌려받고 포인트도 1,000 원이 사라져야 합니다. (당신은 0 원의 손실과 0 원의 이득입니다.)
- 이 논문이 발견한 치명적 버그 (공격):
- 당신은 사과를 사고 1,000 원 포인트를 받습니다.
- 그 포인트를 바로 현금으로 바꿔서 주머니에 넣습니다.
- 그리고 사과를 반품합니다. 슈퍼마켓은 1 만 원을 돌려줍니다.
- 하지만! 슈퍼마켓 시스템이 "아, 사과가 반품됐구나"라고 생각해서 이미 줬던 1,000 원 포인트를 다시 빼앗지 않습니다.
- 결과: 당신은 사과를 한 번도 먹지 않았는데 (순 지출 0 원), 1,000 원의 현금을 챙겼습니다.
이 논문은 **"현금 환급 (Cashback) 시스템이 이 '반품' 상황을 제대로 처리하지 못해, 사람들이 이 loopholes(구멍) 를 이용해 돈을 벌 수 있다"**는 사실을 증명했습니다.
🔍 연구가 발견한 3 가지 '시스템 구멍'
연구진은 실제 은행과 카드사 6 곳의 시스템을 테스트해 보았고, 시스템이 어떻게 작동하는지에 따라 3 가지 유형으로 나뉜다는 것을 발견했습니다.
1. "아무도 돌아보지 않는 시스템" (가장 위험함)
- 상황: 사과를 반품해도, 시스템은 "아, 반품이 왔네?"라고 생각조차 안 합니다.
- 결과: 포인트는 영원히 남습니다.
- 비유: 식당에서 음식을 시켰는데, "음식을 다 먹었으니 10% 할인해 드릴게요"라고 하고, 나중에 "아니요, 안 먹었어요"라고 반품해도 할인된 돈은 그대로 주머니에 남는 꼴입니다.
- 이론적 이름: V1 (환급 무감응)
2. "시간을 노리는 시스템" (약간의 구멍)
- 상황: 시스템은 "이번 달 계산이 끝났으니 포인트를 줘요"라고 합니다. 하지만 가게의 반품 기간은 30 일인데, 카드사의 계산 주기는 30 일입니다.
- 공격법: 1 월 30 일에 사서 1 월 31 일 포인트를 받습니다. 2 월 10 일에 반품합니다.
- 결과: 카드사는 "1 월 계산은 끝났으니 포인트는 줬다"고 하고, 2 월에 반품이 들어와도 "이미 1 월 계산은 끝났으니 포인트를 뺄 수 없어"라고 합니다.
- 비유: "이번 달 세일 마감일 전에 사면 10% 쿠폰을 드립니다"라고 해서 쿠폰을 받았는데, 다음 달에 물건을 반품해도 쿠폰은 이미 사용된 것으로 간주되어 사라지지 않는 상황입니다.
- 이론적 이름: V2 (시간 범위 제한)
3. "점점 갚아야 하는 시스템" (안전하지만 약간의 틈)
- 상황: 반품하면 포인트를 뺍니다. 하지만 만약 포인트를 이미 현금으로 다 써버렸다면?
- 결과: 당신의 포인트 잔고가 마이너스 (-) 가 됩니다. 나중에 다시 쇼핑을 하면 그 마이너스 잔고를 먼저 갚아야 합니다.
- 공격법: 포인트를 현금으로 다 쓰고, 반품해서 마이너스가 된 뒤, 카드 사용을 멈추고 카드를 폐기해 버립니다.
- 결과: 은행은 "아, 이 사람은 카드를 안 쓰네"라고 생각할 뿐, 이미 줬던 현금을 돌려받지 못합니다.
- 비유: "빌린 돈을 갚아야 한다"는 규칙은 있지만, 돈을 빌린 사람이 집을 팔고 사라지면 (카드 사용 중단), 빌린 돈을 못 받는 상황입니다.
- 이론적 이름: V3 (불일치 음수 처리)
🛡️ 해결책: 어떻게 막을 것인가?
이 논문은 단순히 문제를 지적하는 것에서 그치지 않고, 안전한 시스템을 만드는 방법을 제안합니다.
- 하나의 장부 (Transaction Tracking): 각 구매와 포인트를 1 대 1 로 연결해야 합니다. "이 1,000 원 포인트는 이 사과 구매에서 나온 거야"라고 정확히 기록해야 합니다.
- 반품 시 즉시 차감 (Proportional Clawback): 반품이 들어오면, 시스템은 즉시 해당 포인트를 빼앗아야 합니다. 이미 쓴 돈이라도 잔고를 마이너스로 만들어서, 다음에 쓸 때 그 돈을 먼저 갚게 해야 합니다.
- 음수 잔고 허용 (Negative Balance): 포인트가 마이너스가 되는 것을 두려워하지 마세요. 마이너스 상태에서는 포인트를 쓸 수 없게 막아두면 됩니다.
💡 이 연구가 중요한 이유
- 누구나 할 수 있는 사기: 해킹이나 복잡한 기술이 필요 없습니다. 일반인이 "구매 -> 포인트 받기 -> 현금화 -> 반품" 순서대로 행동하기만 하면 됩니다.
- 엄청난 손실: 만약 이 구멍이 있는 시스템이 100 만 명의 사용자를 가진다면, 매년 수백억 원의 손실이 발생할 수 있습니다.
- 보안의 새로운 영역: 과거에는 카드 사기나 해킹만 중요하게 여겼지만, 이제는 "비즈니스 로직 (시스템의 규칙)" 자체가 보안의 핵심이 되어야 한다는 것을 보여줍니다.
📝 결론
이 논문은 **"현금 환급 시스템이 '반품'이라는 상황을 제대로 처리하지 못하면, 사람들이 무료로 현금을 뜯어낼 수 있다"**는 사실을 밝히고, 이를 막기 위해 구매와 포인트를 1 대 1 로 연결하고, 반품 시 즉시 차감하는 시스템이 필요하다고 경고합니다.
마치 **"사과를 반품하면 할인받은 돈도 함께 돌려받아야 한다"**는 상식이 시스템에 적용되어야 한다는, 매우 당연하지만 중요한 사실을 다시 한번 일깨워주는 연구입니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.