중간자공격 경험
얼마전에 겪은 중간자공격의 사례를 이야기하려고 합니다. 저는 엔지니어가 아니기 때문에 기술적인 디테일에 오류가 있을 수 있습니다. 다만 이런 방식으로 공격 혹은 감시할 수 있다는 사례로 기억해두려고 합니다.
윈도우가 설치된 컴퓨터를 새로 받아 사용하기 시작했습니다. 아무런 문제도 없었습니다. 새로 크롬 브라우저를 설치하고 구글 계정에 로그인하자 사용하던 익스텐션이 자동으로 설치됐습니다. 그 외에도 몇몇 소프트웨어를 설치했는데 그 중 일부는 네트워크 정책에 의해 차단됐습니다. 가령 VPN 소프트웨어 같은 것은 페이지에 접근할 수 없었습니다. 여느 네트워크 보안정책과 다를 것이 없었습니다. 이상할 것은 없었습니다. 어지간한 사이트에는 자물쇠 아이콘이 나타났고 아무런 문제도 없었습니다.
그러다가 우연히 아무 이유 없이 주소표시줄의 자물쇠 아이콘을 누른 다음 '인증서 (유효)' 메뉴를 클릭해봤습니다. 그런데 인증서 발급자가 이상한 겁니다. 인증서 발급 대상은 딱히 이상할 것이 없었지만 인증서 발급자가 네트워크 관리주체 이름으로 표시되어 있었습니다. 인증서가 변조되어 있다고 판단했습니다. 하지만 크롬 브라우저는 이 상황을 딱히 문제라고 생각하는 것 같지 않았습니다. 이 인증서를 발인증한 루트인증서는 가끔 봐 온 익숙한 인증기관과는 상당히 달랐습니다. 그래서 certmgr.msc
를 열어보니 이 익숙하지 않은 인증기관의 인증서 여러 개가 신뢰할 수 있는 루트인증서 목록에 들어있었습니다.
대략 예상하는 시나리오는 이 네트워크와 이 컴퓨터를 사용해 특정 사이트에 접근 요청을 하면 중간에 프록시 서버가 나 대신 서버에 요청을 하고 서버와 인증서를 교환해 암호화된 통신을 시작합니다. 그리고 이 결과를 나에게 돌려주는데 여느 다운그레이드 공격과 달리 서버로부터 받은 인증서와 같은 이름으로 인증서를 만든 다음 나는 그 인증서에 근거해 프록시 서버와 암호화된 통신을 합니다. 다만 원래대로라면 이 과정에서 인증서가 변조되었으므로 브라우저에 경고가 나타나야 하지만 이 변조된 인증서를 만드는데 사용한 루트인증서를 내 컴퓨터에서 이미 신뢰하고 있으므로 브라우저에는 아무 표시도 나타나지 않았습니다. 인증서 이름을 확인해보기 전까지는 딱히 이상한 점을 눈치채긴 어려울 겁니다. 이 방법을 통해 프록시 서버 입장에서는 사실상 저는 평문으로 통신하는 것과 다름없습니다. 인증 정보를 포함한 모든 통신 내용이 노출되고 이런 일이 일어난다는 것 자체를 알 수 없습니다. 검색해보니 비슷한 사례가 있었습니다.
루트인증서를 삭제하는 식으로는 이 상황을 쉽게 벗어날 수 없습니다. 현재 네트워크를 사용하는 이상 HSTS를 사용하는 사이트에는 정보 노출을 감안하고서라도 사실상 접근할 수 없게 되기 때문입니다. 이 정책을 사용하지 않는 사이트에는 일시적으로 브라우저의 보안정책에 예외를 추가해 접근할 수는 있습니다. 전체적으로 웹 브라우징이 고통스럽게 됩니다. 인증서를 삭제하는 대신 인증서가 삭제된 상태를 미리 알아보는 방법은 파이어폭스 브라우저를 설치해 사용하는 것입니다. 정확한 동작은 모르겠지만 크롬 브라우저가 윈도우 OS에 설치된 인증서 정보를 사용하는 반면 파이어폭스 브라우저는 잔체 저장소에 있는 인증서 정보를 사용하는 것 같습니다. 때문에 OS에 네트워크 관리주체의 루트인증서가 들어있어도 이를 신뢰하지 않아 인증서가 변조되었다는 사실을 바로 알 수 있고 이들 중 HSTS를 사용하는 사이트는 아예 접근을 허용하지 않습니다.
더이상 할 수 있는 조치가 별로 없는 것 같아 몇몇 작업을 직접 통제할 수 있는 장비로 옮겼습니다. 이 장비는 최소한 인증서 신뢰여부를 통제할 수 있고 VPN을 사용할 수 있으며 VPN 차단에 대응하는 조치를 취할 수도 있습니다. 다만 이 경험에서 우울한 점은 보안 문제에 아예 신경 끄고 사는 수준은 아니라고 생각했는데 처음 사용하는 네트워크나 장비의 브라우저에 자물쇠 아이콘이 똑바로 표시되는 상황에서도 이게 정상인지 의심해봐야만 한다는 교훈을 얻은 것입니다. 그리고 직접 통제할 수 있는 장비 간수를 잘 해야겠다는 생각을 했습니다.