보통은 은행 웹사이트를 접속할 때 다른 웹사이트가 은행을 사칭하는 위협을 별로 걱정할 필요는 없다. 웹 브라우저에서 진짜 은행 웹사이트에 접속했고 연결이 안전하게 암호화 되고 있는지 확인하기 때문이다. 주소창에 보이는 자물쇠 아이콘으로 안전한지 알 수 있다.
그래서 (개방된 와이파이 같이) 신뢰할 수 없는 네트워크에 연결된 경우라도 문제가 되지 않는다. 어떤 웹사이트가 은행을 사칭해도 브라우저에서 인지하고 연결을 거부할 것이다.
이것은 Transport Layer Security (TLS) 라는 보안 프로토콜의 사용을 통해 이루어진다. 이 프로토콜은 소수의 신뢰할 만한 (trusted) 인증 기관(CA; Certification Authority)에서 발행하는 웹사이트의 인증서(certificate)를 통해 해당 웹사이트가 맞다는 신분을 증명한다.
한국의 소위 보안 애플리케이션이란 것을 조사하면서 살펴본 모든 애플리케이션이 브라우저가 신뢰해야만 하는 자체 인증 기관을 추가하는 것을 확인하였다. 이것은 TLS가 제공하는 보호를 약화하며, 이 인증 기관을 악용할 경우 많은 한국의 사용자를 대상으로 웹사이트를 사칭할 수도 있다. 애플리케이션에서 보호해야 할 은행 거래를 오히려 위험에 빠뜨린다.
목차
어떤 인증기관이 추가되나?
인증기관 몇 개 더 추가하는 것이 과연 해가 될까?
이 문제의 해결책은?
어떤 인증기관이 추가되나?
한국에서 온라인 뱅킹을 사용한 후 컴퓨터에 저장된 신뢰할 수 있는 인증 기관(trusted certification authorities)을 확인해 볼 가치는 충분히 있다. 대부분 여기에 있어서는 안 될 이름들을 발견할 것이다. 예를 들면, 이니라인(iniLINE), 인터리젠(Interezen) 또는 위즈베라(Wizvera) 등이 있다.
이 인증 기관들은 일반적으로 신뢰할 수 있는 기관이 아니다. 이것은 각 애플리케이션이 운영 체제의 저장 장치에 직접 추가한 것이다. 이 애플리케이션들은 구글 크롬이나 마이크로소프트 에지와 달리 운영체제의 설정을 사용하지 않는 파이어폭스에도 별도로 자체 인증 기관을 추가한다.
현재까지 한국의 애플리케이션에 의해 다음 인증 기관이 설치되는 것을 발견했다:
그리고 이 인증 기관들은 수동으로 삭제 전까지는 계속 남아있다. 애플리케이션을 삭제할 시에도 제거되지 않는다.
그리고 이들은 모든 목적으로 사용 가능하도록 설정되어 있다. 그래서 인증서 중 하나가 악용될 경우,웹 서버의 인증 뿐만이 아니라 애플리케이션이나 이메일의 서명 등에도 영향을 미친다.
그리고 이 인증 기관들은 수동으로 삭제 전까지는 계속 남아있다. 애플리케이션을 삭제할 시에도 제거되지 않는다.
그리고 이들은 모든 목적으로 사용 가능하도록 설정되어 있다. 그래서 인증서 중 하나가 악용될 경우,웹 서버의 인증 뿐만이 아니라 애플리케이션이나 이메일의 서명 등에도 영향을 미친다.
인증기관 몇 개 더 추가하는 것이 과연 해가 될까?
신뢰할 만한 인증 기관 목록에는 이미 50개 넘는 기관이 등록되어 있다. 몇 개 더 추가 된다고 문제가 될까?
인증 기관을 운영하는 데는 매우 큰 책임이 따른다. 신뢰할 만한 인증 기관의 비밀키에 접근할 수 있다면 어떤 웹사이트이든 사칭할 수 있다. 세계 곳곳의 범죄자나 여러 정부의 경우 이러한 막강한 힘을 갖고 싶어할 것이다. 전자가 당신의 은행을 사칭하려 한다면, 후자는 감지되지 않고 당신을 감시하길 원할 것이다.
그렇기 때문에 인증 기관에 관해서는 매우 엄격한 규칙을 두어, 인증 기관의 비밀키의 접근이 제한되고 적절히 보호될 수 있도록 강제한다. 인증 기관을 운영하기 위해서는 정기적으로 외부 감찰을 받아 보안 정책이 전부 지켜지고 있는지 확인을 받는 것도 필요하게 된다.
한국의 애플리케이션이 자체 인증 기관을 수 많은 컴퓨터에 설치를 함으로 해커와 정부의 큰 표적이 될 수 있다. 만약 이 인증기관 중 하나의 비밀키라도 누출이 된다면 한국에서 TLS를 통한 보호는 거의 무용지물이 될 것이다.
안랩, 라온시큐어, 인터리젠, 위즈베라는 어떻게 이런 책임을 감당하고 있을까? 비밀키를 하드웨어 보안 모듈 (HSM; Hardware Security Module)에 보관할까? 안전한 장소에 보관하고 있을까? 누구에게 접근 권한이 있을까? 어떤 인증서들이 이미 발급된 것일까? 여기에 대한 답변은 알지 못한다. 그들이 받아야 할 외부 감찰, 그들이 지켜야 하는 보안 정책 같은 것도 없다.
사용자들은 이 회사들이 비밀키를 안전히 보관할 것이라 믿는 수 밖에 없다. 하지만 내가 이전에 쓴 글에서 밝혔듯이, 이들은 보안 방면에서 전문성이 떨어진다
이 문제의 해결책은?
이런 인증 기관을 사용하는 이유는 로컬 서버에서 TLS를 사용하기 위해서이다. 하지만 제대로 된 인증 기관에서 127.0.0.1 주소로 인증서를 발급할 리가 없으니 자체 인증기관을 추가한다.
만약 단순히 127.0.0.1을 사용하는 인증서가 필요하면 더 단순한 해결책이 있다. 동일한 인증기관을 모든 컴퓨터에 설치하는 대신, 컴퓨터마다 다른 인증기관을 설치하는 것이다.
그래서 애플리케이션 설치 시 다음 절차를 밟으면 된다:
새 인증 기관 및 대응되는 비밀키를 (무작위로) 생성한다.
컴퓨터의 신뢰할 만한 인증 기관 목록에 이것을 가져온다.
127.0.0.1을 위한 인증서를 만들고 위 인증 기관의 비밀 키로 서명한다. 이제 애플리케이션이 로컬 웹 서버를 위해 인증서를 사용할 수 있다.
인증 기관의 비밀키를 파기한다.
실제로 Initech CrossWeb Ex V3의 경우 정확히 위처럼 동작하는 것으로 보인다. 이것은 유효기간 시작일이 설치 날짜와 동일한지 보면 쉽게 알 수 있다. 자체 인증 기관을 설치하지만 한 컴퓨터에서만 유효하고 거기에서만 실행되기 때문에 별 문제가 안된다.
아, 마지막으로 한 가지 해야 할 것이 있다: 추가된 인증 기관은 애플리케이션 삭제 시 같이 제거해 줘야 한다. 현재 이 처리를 하는 애플리케이션은 없어 보인다.
-----------