전자상거래의 위기? 문제는 웹애플리케이션 보안
1)인터넷 쇼핑몰 거래정보를 조작해 1만3천원을 44억원으로 뻥튀기해 가로챈 일당이 경찰에 붙잡혔다.
2)비트코인 거래소가 해커들의 공격으로 1억달러로 추정되는 금액에 해당하는 비트코인을 도난 당했다.
두 사건에 대한 언론의 분석은 단조롭다. 마치 전자상거래 자체의 문제 때문에 벌어진 사건인 것처럼 보도한다. 정말 전자상거래의 위기일까? 공개키기반구조, 디지털 서명, 디지털 봉투, 암호화 통신, 신용인증 등 전자상거래를 이루는 핵심 시스템들은 이론상 안전하다.
비트코인도 마찬가지. 그 자체로는 안전한 전자화폐다. 안전성을 조금이라도 의심한다면 지금 우리가 안락하게 누리고 있는 지식정보사회 유지에 결정적 조건인 정보통신기술의 밑바탕이 무너지는 셈이다. 사실이라면 이는 매우 심각한 위기일 것이다.
전자상거래를 구성하는 시스템들이 모두 안전하다면 왜 해킹 사고는 끊임없이 발생하는가? 위의 두 사건에는 공통점이 있다. 웹 해킹, 구체적으로는 웹 애플리케이션 해킹이라는 점이다.
■전자상거래의 허점 = 웹
전자상거래는 가상공간에서 벌어지는 일이지만 개인 신용을 바탕으로 상품과 재화 등 실제적 가치가 오가는 거래이므로 기밀성, 인증, 무결성, 부인방지 등 보안성을 완벽하게 갖춰야 한다. 하지만 애초에 정보의 공유와 개방을 목적으로 개발된 웹의 근본적 보안 취약성 때문에 거래내용이나 신용카드번호, 계좌번호, 비밀번호 등 개인 비밀정보가 유출될 위험성이 상존한다는 문제가 있다.
전자상거래는 어떻게 이뤄지는가? 우선 판매자와 소비자 그리고 인증국이 주체로서 참여자 삼각형을 이룬다. 거기에 TCP/IP 및 HTTP 등 웹 요소와 HTML 및 XML 등 문서 요소, 각종 네트워크 장비와 서버 컴퓨터, 그리고 판매자 기업의 데이터베이스와 웹 애플리케이션 등 기술적 요소가 결합되어 전체 전자상거래 체계가 구성된다.
웹 애플리케이션은 브라우저/엔진/데이터베이스 등 다층 구조로 이루어진다. 브라우저를 통해 입출력 정보를 전달받아 엔진의 동적 웹 콘텐츠 기술에 따르는 인터페이스를 통해 데이터베이스를 조작하는 응용 소프트웨어다.
전자상거래의 보안 취약성은 위 구성요소 중 주로 어디에서 발생할까? 1)과 2) 두 사건의 경우를 살펴보자.
1) 해당 쇼핑몰웹 애플리케이션이 주문 및 결제 데이터의 조작 여부에 대한 검증 기능이 취약한 점을 노려, 웹사이트와 통신하는 데이터를 중간에 변조하여 주문금액보다 결제금액이 적어지도록 조작하거나, 개발 단계에서 고려하지 않은 입력값(예를 들어, 음수값)을 넣어 결제금액을 조작하는 등의 수법을 사용했다.
2) 비트코인의 채광과 거래 과정은 암호화되어 있지만 주로 웹 상에 존재하는 비트코인 전자지갑은 암호화되어 있지 않다는 점을 악용해 비트코인 거래소 서버를 공격해 마비시킨 뒤 고객 전자지갑에서 비트코인을 훔치거나 거래소 DNS 서버를 장악해 정상적인 도메인 접속을 부정한 사이트로 연결한 후 로그인 세션을 통해 이동하는 메시지와 인증 쿠션 등의정보를 탈취함으로써 고객 계정을 해킹했다.
1)과 2) 모두, 웹 애플리케이션 해킹이다.
■네트워크/시스템/애플리케이션, 문제는 애플리케이션
모든 IT 시스템 구성은 네트워크/시스템/애플리케이션 3개 영역으로 나눌 수 있다. 최근 일어났던 온갖 보안 사고들은 대부분 애플리케이션 영역에서 발생했다. 보안은 쇠사슬과 같고 그 사슬은 가장 약한 고리만큼 약하다는 유명한 격언이 있다.
그 가장 약한 고리가 바로 애플리케이션이다. 하지만 대부분의 기업은 애플리케이션 보안을 가볍게 보고 등한시하는 경향이 있다. 애플리케이션 보안에 투자하는 노력과 비용은 네트워크 보안 투자의 10%도 채 되지 않는다. 가장 취약한 부분을 가장 덜 신경 쓰는 것이다.
혹자는 애플리케이션을 생산하는 개발자들이 안전한 코드를 만들기만 하면 저절로 해결되는 문제일 뿐이라고 말하기도 한다. 이론상 틀린 주장은 아니다. 그러나 현실적으로는 안전한 코드를 작성하는 개발자는 거의 찾아볼 수 없다.
그럴 수밖에 없는 까닭은 첫째, 보안의 창과 방패는 경쟁적으로 진화하는 법이라 시시각각 그 모습을 달리한다. 기업 시스템과 데이터 등 가치를 노리고 접근하는 모든 위협에 대해 개발자가 일일이 직접 대응하기란 사실상 불가능한 일이다.
위협수준이 높아짐에 따라 기술적 분업의 필요도 커져, 현재 정보보안 기술은 완전히 전문가의 영역에 속하게 되었다. 보안 관련 기술의 개발은 이제 각 기업에 속한 개발자들의 고유업무인 애플리케이션 개발과 함께 병행할 수 있는 수준의 일이 아니다.
둘째, 초인급 개발자가 있어 애플리케이션 자체의 기능성과 보안성을 모두 만족하는 완벽한 코드를 생산할 수 있다고 치더라도, 애플리케이션의 플랫폼 소프트웨어 등 전체 환경의 취약점은 어쩔 수 없다. 특히 소프트웨어 보안 관련 패치가 배포되기 전 빈틈을 노리는 제로데이 공격 등은 평소 제아무리 안전한 코드를 생산하려 애쓴다고 하더라도 피할 수 없는 불가항력이다.
셋째, 조직에 소속된 개발자는 한정된 기간 내에 임무를 완수해야 한다. 대개의 경우 주어진 기간은 그리 길지 않다. 그런데 업무 중 우선순위가 가장 높은 일은 보안성 확보가 아니라 애플리케이션 기능 구현과 로직 개발이다. 그러니 보안은 주어진 임무 중 상대적으로 중요도가 낮기 때문에 뒤로 밀려나고, 보안에 신경을 쓰고 싶어도 쓸 시간적 여유가 없는 상황이 대부분이다.
그러니 일선 개발자가 안전한 코드를 생산하게끔 교육함으로써 웹 공격을 막아내자는 주장은 사실상 지나치게 낙관적인 이상론으로 볼 수 있다. 보다 현실적이고 구체적인 다른 방법이 필요하다는 뜻이다.
■웹 애플리케이션 보안
기존 네트워크 방화벽과 IPS 및 IDS 등 네트워크 보안장비의 성능 및 효과는 충분히 믿을 만하다. 그런데도 웹이 만날 뻥뻥 뚫리는 까닭은 뭘까? 앞서 언급했듯, 기업 보안정책이 주로 네트워크 영역에 집중되어 있는데 최근 공격은 대부분 콘텐츠 레벨에서 일어나기 때문이다.
▲ 데티어의 패킷 분할과 네트워크 전송
어떤 데이터든 네트워크를 통해 공유하기 위해서는 기본 전송 단위인 ‘패킷’으로 분할해 전달한다. 패킷 앞부분에 할당된 패킷 헤더에 송신과 수신 주소와 해당 패킷을 어떻게 처리할지를 지시하는 조작 정보 등이 기록된다. 패킷이 네트워크를 통해 전달되어 수신자 컴퓨터에 도달하면 헤더에 기록된 정보에 따라 패킷들끼리 연결하고 합치하여 데이터로 복원된다.
▲ 네트워크/시스템/애플리케이션 등 IT 시스템 각 영역에서의 데이터 상태
방화벽과 IPS 및 IDS 등 네트워크 보안장비들은 네트워크 영역을 오가는 패킷 상태를 분석하여 위협을 탐지한다. 하지만 최근 문제시되고 있는 SQL 인젝션, XSS, 디렉토리 노출 등의 공격과 각종 데이터 위변조 그리고 부정 로그인 등 웹 보안 위협들은 콘텐츠, 즉 패킷이 웹 데이터로 해석되도록 모아야만 비로소 탐지 가능한 것들이 대부분이다.
게다가 이러한 콘텐츠를 웹 프로토콜 상의 묶음, 즉 웹 세션 단위로 분석해야만 정확한 검사가 가능하다. 이러한, 웹 세션을 포함하여 콘텐츠를 검사하는 기능은 기존 네트워크 보안장비만으로는 처리할 수 없는 부분이다.
▲ 지능형 웹 애플리케이션 방화벽의 룰 기반 탐지 체계
애플리케이션 계층의 콘텐츠 수준에서 위협을 탐지하는 웹 애플리케이션 보안이 중요한 시점이다. 웹사이트에 존재하는 취약점을 검색하는 웹 스캐너 등을 이용해 지속적 모니터링을 하고 동시에 웹 애플리케이션 방화벽 등의 도구로 방어해야 한다.
웹 애플리케이션 방화벽은 콘텐츠 레벨에서의 검사를 통해 공격을 탐지 및 차단하고 웹사이트 위변조를 방지하는 등,악의적 공격으로부터 웹사이트를 보호한다. 보다 진일보한지능형 웹방화벽은 공격을 분석하고, 공격별로 유형화된 룰을 도출, 모든 유형에 대응하는 룰 체계를 구성함으로써 기존에 알려진 공격뿐 아니라 아직 알려지지 않은 신종 공격까지도 탐지해 낸다.
그리고 만에 하나 침입을 막지 못해 데이터가 유출되는 경우를 대비해 암호화를 통해 탈취당한 데이터의 내용 노출만큼은 막아야 한다.
이 같은 조치만 취했더라도 위 1)과 2) 공격쯤은 가볍게 막아 낼 수 있었을 것이다. 다시 말해, 전자상거래 위기설은 사실이 아니다. 문제는 웹 애플리케이션 보안 위험이다. 그리고 그 위험은 미리 대비만 한다면 충분히 막을 수 있는 것들이다.