지난 번 OWASP 창시자 중 한 명인 Dennis Groves와 오랫동안 IT 보안 관련 대화를 나눈 적이 있었다. 결론은 굳이 복잡하게 위험/위협/취약성/자산이니 공격자/방어자/조사자니 또는 기술/사람/장비로 나누지 않더라도 IT 보안을 조금 더 철학적(?)인 면에서 보면, 결국 내(주체)가 무엇을(대상) 믿을 수 있는지 또는 누구(상대)를 믿을 수 있는지에 관한 신뢰 연결고리(trust of chain)으로 집약할 수 있다는 점이다.

그럼 한 번 생각해 보자. 정보기술 측면에서 내가(자아가) 어떤 행위를 한다는 건 IT 기술을 사용하는 기기를 이용해 원하고자 하는 바를 성취하는 건데, 정말 내가 하는 것이 맞는가? 결코 그렇지 않다. 기계를 사용할 수 있도록 제공하는 IT 기술의 도움을 받아 대신 행하는 것이다. 페이스북에 글을 작성하려면 그 글을 입력할 수 있도록 하는 키보드를 통해 운영체제에 신호를 전달하는 과정부터 시작해 안전하게 서버로 전달하고 적절히 처리된 후 지정한 사람에게 보이게끔 하는 모든 동작을 수반한다. 이는 그 과정 중에 이용하는 기법과 개념, 그리고 구현방식이 - 버퍼/API/커널/모듈/메모리/프로세스/쓰레드/레지스터/하드디스크/페이징/네트워크전송(라우팅/스위칭 등)/압축/암호화/데이터베이스/인증/인가/서버시스템/웹애플리케이션/분산병렬처리 등 - 각기 설계한 방식대로 또는 예상대로 모두 제 역할을 하여 상호 신뢰 연결고리에 문제가 없었을 때 가능한 일이다.

중요한 점은 페이스북에 간단한 글을 작성할 때조차 수없이 많은 IT 대행자(기법/개념/구현방식 등)의 힘을 빌리고 있다는 사실이며, 그 중 하나의 신뢰 연결고리에만 문제가 생겨도 IT 보안 목표를 달성할 수 없을 수 있다. 이는 간단히 내가 행하는 것 같이 보이는 일이 실제는 보이지 않는 수많은 이진수(0과 1)로 변환되고 매우 정교하게 통제되어 아주 짧은 시간에 발생한다.

인터넷 뱅킹을 통해 전자서명한 후 상대에게 입금하는 행위도 따지고 보면 어마어마하게 복잡하고 많은 메커니즘을 포함하고 있다. 모든 개별 요소들을 서로 신뢰할 수 있는가 만일 그렇다면 얼마만큼 신뢰할 수 있는가의 문제로 압축해 본다면 오히려 IT 보안 상 문제가 이 정도 밖에 생기지 않는다는 점이 오히려 놀라운 사실일 지도 모른다. 또한 크게 의존하는 수많은 기술과 메커니즘, 인프라 구조와 구현형태는 태초부터 완벽하지 않은 인간이 만들어 냈거나 특정 시점에 선택한 최선 또는 완벽하다고 믿었던 이론에 기반해 생성한 산유물이다. 그리고 또한 상당히 상호 의존적이다. 예를 들어 웹 애플리케이션 구동은 시스템 측면에서 운영체제와 상호작용하고 전송 데이터는 네트워크 프로토콜에 의존하고, 암호화 기법은 SSL/TLS라는 표준에 의존하며, 그 내부에는 더 근본적인 수학 알고리즘에 기반한 diffie-hellman 키 교환, 대칭/비대칭키 암호화 기술에 의존한다. 반대로 이런 기술은 또한 구현방식이나 프로그래밍 형태에 의존한다. 각종 데이터가 한 곳에서 다른 곳으로 송수신할 때마다 중간에 거치는 수많은 네트워크 장비와 서버 시스템에 도착한 후 애플리케이션이 처리하는 모든 과정이 상호연동한다. 이를 한 사람이 만들었을리 만무하고 누군가 중간에 한 명이 개발 도중 실수할 수도 있고, 소프트웨어 테스터가 기분좋게 그냥 넘겼을 수도 있다. 돈의 논리에 의해 월 천만원을 받고 일해야 할 엔지니어를 고용하지 못하거나 갑을병정 중간 유통 과정 때문에 월 백만원짜리 검증 못한 코드를 썼거나 값싼 인프라 구축을 했을지도 모르는 일이다.

철학까지 논하지 않아도 신뢰라는 측면에서 IT 보안을 생각하면, 지금과 같이 다소 우스꽝스러운 과정(사실 결론을 내려고 하는 것도 우습다)이나 결론을 피할 수 있지 않을까. 말로만 IT 보안을 외치지 말고 부디 본질을 봤으면 하는 바램이다. =)