웹기술은 열려있다. 그래서 계속 뚫린다. 결국엔 '보안'이다. 유남세잉?
앞으로 IT 보안 있어서 핵심은 두 가지다. '웹 보안'과 '암호화'이다. 혹자는 암호화를 계정 비밀번호의 암호와 혼동하는 경우가 있는데(그 혹자는 IT 기사를 쓰는 기자가 이 둘의 개념에 대해서 혼동하여 관련 기사를 냈었다), 암호화는 당신의 비밀번호를 웹상에서 노출되지 않도록 하기 위해 불규칙한 문자열로 치환시키는 것(암호학(Cryptography)에서는 이것을 인코딩(Encoding)이라고 하며, 보통 'hashing' 한다라고 호칭한다. 이 해시(hash)의 의미는 생선을 뜻하는 해시가 맞으며, 고기와 감자를 '잘게 다져 섞어' 요리하여 따뜻하게 차려 낸다는 뜻과 동일한 맥락이 '암호화'이다).
여하튼 암호학은 수학자들의 텃밭이라 일개 해커 지망생이 깊게 파기에는 수학적 이론을 한 다발 들추어야 하는 분야이고, 웹에서의 보안은 데이터와 애플리케이션을 보호하는 영역으로 앞으로 이쪽으로 블록체인과 함께 보안의 핵심 분야가 이동 중이다. 왜냐하면 진짜 지켜야 할 것은 네트워크 상의 방화벽 장비(IT 인프라)가 아닌 '데이터'이기 때문이다. 그리고 이 데이터를 가장 안전하게 지키는 방법이 앞서 말한 '암호화'이다.
데이터는 애플리케이션(DB 서버를 포함하여)을 통해 흐르고 현재 애플리케이션의 주요 환경은 '웹(web)'이다. 모든 app.(모바일 앱)이 웹 환경에서 개발되고 운용될 것이기 때문에 이 웹으로 통합되는 혹은 블록체인으로 통합되는 환경의 변화는 더 널리 연결되고 더 많이 공유하는 열린 사회(Social Web Connected Society), 즉 지금의 IT 시장이다.
그런데 개발자의 우선순위는 한정된 프로젝트 기간 내에 임무(제품 출시)를 완수해야 한다. 또한 대개의 경우 주어진 기간은 그리 길지 않다. 그래서 업무 중 우선순위가 가장 높은 일은 '보안성 확보'가 아니라, 애플리케이션 기능 구현과 로직 개발이다. 보안은 주어진 임무 중 상대적으로 중요도가 낮기 때문에 뒤로 밀려나고, 보안에 신경을 쓰고 싶어도 쓸 시간적 여유가 없는 상황이 대부분이다. 더군다나 최근 공격은 대부분 '콘텐츠(비밀정보를 포함한 html 웹페이지) 레벨'에서 일어나기 때문에 이 웹상에서 보안 취약점이 지속적으로 업데이트되고 있다. 이것을 카테고리별로 분류해서 웹과 모바일앱 파트로 나눠 취약점을 정리한 프로젝트명이 OWASP(Open Web Application Security Project)이다.
웹의 많은 취약점은 그저 편리하다는 이유로 자신이 적용해야 할 통제를 클라이언트(웹 브라우저)에 넘기는 데 있다(2016, 양대일). 이 시리즈 섹션 #8에서 언급했듯이 그래서 공격자는 세션(브라우저 화면) 인증값(쿠키)을 쉽게 오용할 수 있다. 이 말은 사용자가 어떤 웹이나 앱 서비스로 로그온 하면서 받은 인증값(Session ID이며 이것을 Cookie라고 함)을 공격자가 그대로 가로채서 다른 계정으로 로그인한 것처럼 웹서비스를 이용할 수 있다는 말이다. 한번 더 말하지만, 이러한 문제점은 기본적으로 일반 사용자가 최초 로그온(인증) 과정을 거친 후에 인증과 자신의 신분(identity)을 밝히는 주체를 클라이언트에게 넘겼기 때문이다. 이처럼 인증에서뿐만 아니라 데이터의 신뢰도에 대한 증명의 권한을 클라이언트에게 넘기면 클라이언트는 얼마든지 그것을 악용할 수 있다(2016, 양대일).
그래서 웹 해킹은 웹사이트의 구조와 동작 원리를 이해하는 것이 중요하므로 개발자가 필수적으로 알아야 할 이 선행지식이 필요한 것이다. 실제로 웹 모의해킹 과정 간에 초기의 며칠간은 해당 사이트를 만든 개발자의 코딩 스타일에서부터 인수(앞선 프런트엔드 개발 실습 섹션들에서 인자(argument)로 통칭한 파라마터의 전달값) 전달 방식('Message Passing' 개념으로 callback을 통한 인수 전달) 등을 파악한다(2016, 양대일). 버그 바운티(Bug Bounty)라는 KISA(한국인터넷 진흥원)나 외국 회사(유나이티드, 페이스북)에서 상금이나 항공 마일리지를 상품으로 내걸고 자사의 사이트에서 취약점을 찾아내는 것도 이 웹 해킹이다. 이 버그 바운티를 목적으로 건전한 해킹을 하는 그레이햇 해커(회색 모자를 쓰고 있다는 해커의 별칭으로 악의적인 목적은 아니지만 돈을 벌기 위한 수단으로 해킹을 이용하는 해커로서 말이다)가 되기 위해서는 많은 시간을 들여 웹서버와 클라이언트(웹브라우저) 사이를 오고 가는 패킷(인코딩된 데이터)을 디코딩(decoding, 암호화된 데이터를 원복하는 복호화 과정)해서 분석함으로써 전송되고 전송되는 데이터들이 어떤 의미를 가지는지, 그리고 어떤 역할을 하는지 생각해봐야 한다(이것을 하고 공격 여부를 판별해야 하는 곳이 각 공공기관과 사기업체의 관제센터 혹은 침해대응팀(CISRT, 컴퓨터 비상 대응팀)이다).
그만큼 웹 해커의 능력이 웹 프락시(Burf Suite 등)를 통해 웹서버의 서비스 구조를 이해하는 데 있다고 할 수 있다(2016, 양대일).
이번 섹션은 웹 보안에 대한 이론과 필요성에 대해 이 시리즈 섹션 #1, #2에 이어서 한 번 더 환기했고, 다음 섹션부터 다시 프런트엔드 웹 개발 과정을 이어가면서 공격이 가능한 자바스크립트의 취약점들을 가이드하겠다.
참조
1) 양대일. (2013). 정보 보안 개론: 한 권으로 배우는 핵심 보안 이론, 서울: 한빛 아카데미.