인터넷 결제 시스템을 언제까지 익스플로러에 가둬놓을 셈인가?

며칠 전 모 사이트를 통해 뭔가를 지르기 위해 인터넷 카드 결제를 시도했다. XecureWeb, nProtect, Ahnlab V3, … 등등 뭐가 뭔지 알 수도 없는 ActiveX들을 설치하기 위해 UAC가 작동했고, ActiveX 하나하나 단계적으로 설치될 때마다 카드 번호, 유효기간, 윈도우 관리자 비밀번호를 입력해야 했다. XecureWeb 등에서 키가 로딩된 상태를 유지하기 위해 프레임을 사용하고 있으며, 이 때문에 페이지가 리프래쉬 되면(ActiveX 설치를 위해 창 위 쪽 경고 메시지에서 ‘차단된 프로그램 설치’를 선택하게 되면) 결제를 시작하는 단계로 이동하며, 폼에 입력했던 정보는 모두 리셋된다.

결국 카드 번호, 유효기간, 윈도우 관리자 비밀번호를 15번이나 입력한 끝에 모든 ActiveX 설치를 끝낼 수 있었지만 난 더이상 결제를 진행할 수가 없었다. nProtect가 64bit 윈도우7에 설치된 인터넷 익스플로러 8을 죽여버렸기 때문이다.

그날 난 보안의 끝을 보았다.

결제를 아예 진행할 수가 없는데, 어떻게 사고가 일어날 수 있단 말인가! 머리가 아프면 머리를 없애면 된다. 손이 아프면 손을 잘라버리면 된다. 세상에 이렇게 간단한 일을 왜 우린 그렇게 고민해왔던 것일까?

어쨌든 결제를 위해 난 Mac OS X에 설치된 Parallel(가상 PC 프로그램)을 실행시켰고, 그 안에 설치된 윈도우 XP를 통해 결제를 진행해야했다. 윈도우가 설치된 PC가 있었음에도 윈도우에서 결제를 진행하지 못해 Mac OS X를 켰고, Mac OS X 안의 Parallel을 실행시킨 뒤, Mac OS X 안의 Parallel 안의 윈도우 XP를 이용해서 결제를 해야했던 것이다.

이런 짜증나는 상황에 대해 tweeter에서 한 마디를 던졌고, 그 tweet에 대해 친구가 내게 물었다.

‘미쿡 쇼핑몰의 카드 결제는 어떻게 생각해? 안전해?’

국내 사이트의 결제 시스템과 해외 사이트의 결제 시스템 어떻게 다를까?

난 ebay.com, radtech.us, …, panic.com 등등 다양한 해외 사이트를 통해 물건/소프트웨어를 구입한 경험이 있다. 이런 사이트들에서 사용하는 결제 시스템은 쉽고 가볍고 간단했으며, 나에게 인터넷 익스플로러 사용을 강요하지도 않았다.

도대체 뭐가 어떻게 다른건지를 비교해보기 위해 국내 사이트의 결제 시스템과 해외 사이트의 결제 시스템에서 요구하는 정보를 비교해보자.

국내외 카드 결제시 필요한 정보
구분 결제 방식 필요한 정보 비고
국내 VISA 안심 클릭 카드번호, 유효기간, 안심클릭 비밀번호 안심클릭 비밀번호 최초 등록시 카드 정보(카드번호, 유효기간, CVC, 비밀번호), 주민등록번호가 필요
BC ISP 결제 ISP, ISP 비밀번호 ISP 발급/재발급 시 카드 정보(카드번호, 유효기간, CVC, 비밀번호) 필요
휴대폰 결제 휴대폰 번호 / 통신망 사업자(KT, SKT, LGT) 휴대폰에 문자 메시지로 전송된 임의의 문자열을 요구
국외 Paypal Paypal ID, Paypal Password 고액 거래를 위해선 카드를 거래내역에서 확인해야하는 임의의 문자열을 요구 (첫 고액 거래시 한 번)
일반 카드 결제 이름, 카드 정보(카드번호, 유효기간, CVC)

VISA 안심클릭과 해외 일반 카드 결제 시스템을 비교해보면 CVC 비밀번호를 사용하느냐 아니면 VISA 안심 클릭 비밀번호를 사용하느냐 정도의 차이 밖엔 없다.

그렇다고 VISA 안심클릭 비밀번호를 등록하는데 대단한 정보가 필요한 것도 아니다. 해외 일반 카드 결제 시스템에 필요한 정보 외에 주민등록번호 정도가 필요하다.

ISP 결제에 요구되는 것들도 그리 대단한건 없다. 공인인증서와 비슷하다고 볼 수 있는 ISP와 이 ISP 안에 저장된 비밀키를 끄집어내기 위한 비밀번호만 있으면 된다. 카드번호는 ISP 발급시만 입력해주면 된다.카드 정보를 알고 있으면 ISP를 재발급 받는 건 일도 아니고, 카드 정보를 모르더라도 시스템이 장악됐다면 ISP를 빼내는건 문제도 아닐텐데, 이게 왜 안전한건지 난 모르겠다. 오히려 입력할 정보가 적으니 더 위험할 것 같은데…

ISP 발급/재발급도 마찬가지로 크게 대단한 정보가 필요하진 않다. 그냥 카드 정보 정도만 알고 있으면 된다.

휴대폰 결제는 더 간단하다. 휴대폰 번호와 자신이 어떤 사업자로부터 서비스를 받고 있는지에 대한 정보를 알고 있으면 된다.

Paypal 같은 경우는 Paypal account에 등록된 카드 혹은 은행 계좌(Bank account)를 통해 결제하는 시스템이므로 자신의 Paypal ID, Password만을 요구한다.

자 정리해보자.

일반 카드 결제는 카드 정보만을, VISA 안심클릭은 카드 정보 외에 CVC 번호 대신 안심 클릭 비밀번호를 요구한다. 그리고 ISP와 Paypal은 ISP/Paypal ID + Password를 요구한다.

사실 위에 정리된 내용을 바탕으로 봤을 때 ISP를 제외하고는 인터넷 익스플로러 외에서도 결제를 진행하는데 문제가 없어야 한다.Visa 안심클릭(3D secure)의 경우는 해외에서도 사용되는 방식으로 해외에서는 크로스 브라우징이 지원된다.

그럼 도대체 어떤 차이가 있길래 국내 사이트의 결제 시스템은 인터넷 익스플로러에서만 동작하는걸까?

자 지금까지 읽은 내용 만을 생각한다면 VISA 카드를 통해서는 어떤 사이트에서든지 결제를 쉽게 진행할 수 있어야 한다. 하지만 슬프게도 현실은 그렇지 못하다.

자 국내 사이트와 해외 사이트의 결제 시스템이 어떤 식으로 다른지 살펴보자.paygate의 결제 모듈은 (인터넷 익스플로러를 사용하지 않을 경우) 해외 결제 시스템과 동일한 특징을 가지고 있으며, 인터넷 익스플로러 외에서도 문제 없이 결제가 진행된다.

그 외 국내 외 결제 시스템의 특징
구분 국내 국외
보안 채널 Plugin(ActiveX) 기반 브라우저 내장 SSL 기반
결제 창 새 창으로 띄움, 프레임 사용 사이트 내에 임베딩, 프레임 사용 안함
기타 고액 거래시 공인인증서 요구
키보드 보안, 안티 바이러스, 피싱 방지 등을 목적으로 다양한 ActiveX를 필수적으로 설치함
사이트에 따라 결제 주소(Billing address)로만 배송해주는 경우가 있음

자 우선 암호화 통신과 관련해선 무슨 차이가 있을까?

자 우선 암호화 통신을 위해 사용되는 보안 채널 부분을 살펴보면, 국내 사이트는 XecureWeb, iniSafeWeb 등의 Plugin 기술이 사용되고, 해외 사이트는 브라우져에 구현되어 있는 SSL 프로토콜을 사용한다. (ActiveXActiveX는 단순화된 버젼의 OLE(Object Linking and Embedding) 2.0, COM(Component Object Model) 인터페이스를 만족시키는 native windows application이다. 라고 표현하지 않은 이유는 XecureWeb이 firefox/safari 등의 플러그인으로 제공되기도 하기 때문이다.)

간혹 인터넷 익스플로러 외의 브라우져를 위한 암호화 통신 플러그인을 제공하기도 하지만 뒤에서 얘기하게 될 기타 보안용 ActiveX 때문에 국내 결제 시스템에서는 인터넷 익스플로러에서 밖에 결제를 진행할 수 있다.

간단히 이 둘의 차이를 살펴보면, SSL은 브라우져와 서버 사이에 보안 채널이 형성되어 암호화된 통신을 한다는 것이고, XecureWeb/iniSafeWeb 등은 브라우져와 서버 사이에는 plain text 채널이 형성되고, 플러그인을 통해 암호화된 데이터를 이 plain text 채널을 통해 전송한다는 것이다.

물론 둘 다 암호화된 데이터를 주고 받는다는 것은 동일하다. 하지만 SSL을 사용할 경우 브라우져의 주소 창 등을 통해 암호화된 통신을 한다는 것을 확인할 수 있는 반면 플러그인을 사용할 경우 암호화된 통신을 하는지 안하는지를 확인할 수가 없다.국내 보안 프로그램, 국내 결제 시스템은 언제나 이런 식이다. 자신들을 무조건적으로 믿으라고 강요한다. 자신들의 ActiveX가 시스템을 지켜줄 것이라고 속여, 보안 등급을 낮추게 만들고 관리자 권한으로 브라우져를 띄울 것을 요구한다.

플러그인을 사용할 경우 암호화된 통신을 하는지 안하는지를 확인할 수 없다는 점 때문에 사용자들은 피싱과 MITM 공격에 무방비가 될 수 밖에 없다.

하지만 SSL을 사용하는 경우 주소창의 색이 노란색으로 변한다거나 주소창에 인증서의 소유자 이름이 크게 표시되므로 현재 보안 채널을 사용한다는 것을 명확히 확인할 수 있다. 이런 표식이 없다면 피싱 혹은 MITM 공격을 당하고 있는 것으로 간주할 수 있으므로 조금만 조심한다면 이런 공격들로 인한 피해를 피해갈 수 있게 된다.

게다가 SSL 프로토콜은 이미 대부분의 브라우져에 구현되어 있으므로 추가로 플러그인을 설치할 필요 없이 결제를 진행할 수 있다는 장점이 있다.

그럼 결제 창을 표시하는 방법은 뭐가 문제지?

자 다음으로 결제 창을 표시하는 방법을 살펴보면, 국내 결제 시스템의 경우 대게 새 창으로 결제 창을 띄우고 있지만, 해외 결제 시스템의 경우 대체로 사이트 내에 결제 폼을 표시하곤 한다.

사이트 내에서 결제 폼을 표시할 경우 이 결제가 이 사이트 내에서 이루어진다는 것을 명확히 확인할 수 있다는 장점과 함께 앞에서 얘기했던 암호화된 통신을 사용하는지를 확인할 수 있다는 장점이 있다.

하지만 새 창으로 결제 창을 띄울 경우 어떤 사이트에서 띄운 결제창인지를 쉽게 알 수 없는 문제와, 구 버젼의 브라우져에서 피싱에 무방비로 노출되는 문제가 있다.구버젼의 브라우져에서는 주소창을 숨기는 것이 가능하다. 그렇기 때문에 결제 창을 어떤 사이트에서 띄운 것인지 알 수 없고, 결제 정보가 어디로 전송될지를 예측하기도 쉽지 않다. 게다가 MITM 등으로 가짜 사이트가 보여지고 있다고 하더라도 암호화된 통신을 하는지 안하는지를 알 수 없기 때문에 공격을 당하고 있다는 사실을 알아채기가 쉽지 않다.

프레임을 사용하는 것은 위에서 얘기한 것보다 더 위험하다. 프레임을 사용하면 새 버젼의 브라우져에서도 주소를 확인할 수 없게 된다. 이 페이지가 내가 원했던 사이트에서 제공하는 것인지 피싱 사이트에서 제공하는 것인지, 암호화된 통신을 사용하는지 사용하지 않는 것인지 아무 것도 알 수가 없다.

프레임을 사용하게 되면 보안 문제 외에도 사용성을 떨어뜨린 다는 단점이 있다. 플러그인 설치를 위해 익스플로러의 경고창에서 ‘설치가 차단된 객체 설치’를 선택한 경우를 생각해보자. 이렇게 하면 페이지가 갱신되게 되고, 프레임에서 선언되어 있는 첫 페이지로 이동되게 된다.

이렇게 되면 그 객체 설치 전까지 진행됐던 과정을 다시 반복해야하는 문제가 생길 수 있다.사실 이건 xecureWeb/iniSafeWeb의 동작 방식 때문에 frame을 사용해야 하는 것인데, 그것 때문에 이런 사용성 저하까지 덩달아 나타나고 있다. SSL이라는 아주 훌륭한 대안이 있는데, 이렇게하면서 까지 이런 플러그인을 사용해야하는 이유를 난 도무지 상상할 수가 없다.

그 외엔 어떤 차이가 있는거야? 해외 사이트는 무조건 안전한가?

그런데 지금까지 알아본 내용들만 바탕으로 생각해보면, 카드 정보나 개인정보가 유출될 경우 얼마든지 피해를 입힐 수가 있다는 결론이 나온다. 그럼 이런 피해를 막기 위해 어떤 장치들을 제공하고 있을까?

우선 국내 사이트에서 제공하고 있는 해법으로는 30만원 이상 결제시 공인인증서 사용 의무화가 있고, 이게 참 뜨거운 감자인데, 관련해선 오픈웹에 있는 포스트들을 읽어보면 좋을 것 같다. 해외 사이트에서 간간히 사용하는 해법으로는 카드의 결제 주소(Billing address)와 배송지가 다를 경우 거래를 거부하는 것이 있다. (모든 사이트에서 거부하는 건 아니지만 고액 거래시 꽤 안전한 해법이 될 순 있을 것 같다.)

그리고 paypal 같은 경우 이상 징후가 느껴진다고 하면 paypal account를 잠궈버리기도 한다. 사용자를 불편하게 만들기(시스템에 뭔가를 설치하는 것)보다는 사용자의 이상 행동을 분석하는 것이 답이라고 판단한 것 같다.

여기까지만 봐도 실제 거래의 대부분을 차지하는 소액 결제에서는 별 차이가 없는 것으로 보인다.

이제 국내 결제 시스템에서 가장 문제점인 보안 모듈들을 얘기해야할 것 같다. 이 보안 모듈들은 마이크로소프트 윈도우에 설치된 인터넷 익스플로러에서 말고는 결제를 진행할 수 없게 만드는 주범으로 다음과 같은 것들로 구성된다.이런 보안 모듈들을 통해 시스템이 엉망 진창으로 뚤려있다고 하더라도 결제를 안전하게 진행할 수 있게 하겠다는 의도인데, 얼마나 효율적인지에 대해선 난 할 말이 없다.

  • nProtect: 키 입력을 가로채는 것을 방지
  • anti-virus: spyware, virus, 웜 등에 감염되었는지를 검사하고, 이런 것들로 부터 추가적으로 공격당하는 것을 (잠시동안) 최소화하도록 방화벽을 띄움
  • 피싱 방지

이런 모듈들과 관련해서 가장 큰 문제는 맥이나 리눅스 등을 위한 보안 모듈은 제공하지 않고 있으면서 이런 보안 모듈의 설치를 거부(혹은 설치가 불가)한 경우 서비스를 제공하지 않는다는 점이다.

이를 보면 자신들에 대한 맹목적인 믿음은 기대하면서도 사용자는 절대 믿지 않는다는 것을 알 수 있다.

시스템을 아무리 잘 관리해도 소용없다. 자신이 관리하는 방화벽/안티 바이러스 프로그램이 있어도 상관없다. 자신들의 솔루션을 꼭 설치해야만 그 결제 시스템을 이용할 수 있도록 만든다.

(우리는 결제시스템을 이용할 때마다, 인터넷 뱅킹을 이용할 때마다 이런 보안 모듈의 광고(로고?)를 봐야하므로 광고를 봐주는 돈을 받아야할 것 같기도 하다.)

그럼 대안은 무엇이 될 수 있을까?

매번 하는 얘기지만 자신들에 대해 맹목적인 믿음을 기대하는 마음의 반 만큼이라도 사용자를 좀 믿어줬음 좋겠다.

물론 해외 결제 시스템이 무조건 편리하고 안전하다는 이야기는 아니다. 하지만 관리자 잘 되고 있는 시스템에도 구지 보안 프로그램을 설치할 것을 강요하고, 보안 프로그램이 설치될 필요가 없는 맥/리눅스에서는 보안 프로그램이 제공되지 않는다는 이유로 서비스 제공을 거부하는 것은 분명 문제라고 생각한다.

내가 생각하는 해법은 다음과 같다.

  1. 정말 무지한 사용자를 위해 보안 프로그램을 제공하는 것은 좋다. 대신 충분히 판단이 가능한 사용자들을 위해선 이런 보안 프로그램을 사용할 필요 없이 거래가 가능할 수 있게 해줬음 좋겠다.
  2. 그동안 큰 이유없이 사용되어온 XecureWeb/iniSafeWeb 등을 걷어내고, 국제 표준으로 사용되고 있는, 게다가 대부분의 브라우져에 기본으로 구현되어 있기까지한 SSL 프로토콜을 사용해서 서비스를 제공해줬음 좋겠다.
  3. 그리고 공인 인증서를 통한 인증만이 아니라 휴대폰 인증 등 플러그인을 사용하지 않아도 되면서 거래를 하는 것이 본인 임을 증명할 수 있는 다양한 방법을 검토해줬음 좋겠다.

누군가에게 맥을 추천했을 때, 누군가에게 리눅스를 추천했을 때, ‘뭐야 그걸론 인터넷 쇼핑도 할 수 없고, 인터넷 뱅킹도 사용할 수 없자나’ 같은 소리를 더 이상 듣지 않는 그런 날이 왔음 좋겠다.

인터넷 쇼핑에 굶주려 있는 내 맥이 굶주림을 채울 수 있는 그 날이 왔음 좋겠다.