엊그제 지금 쓰는 핸드폰의 마음에 안 드는 점을 아주 찐하게 까봤습니다. 카메라 버튼이 이상한데 달려있어서 아무 때나 켜진다든지, 트랙볼에 먼지가 들어가 안 돌아가기 일쑤라든지, 배터리 커버 완성도가 엉망진창이라 삐걱거린다든지 하는 문제는 말하지도 않았고 마음에 안 드는 OS나 운영환경에 대한 이야기만 했지만 비교 상대를 WM으로 골라서 그런지 제가 핸드폰을 까댄 만큼 야기 저기서 신나게 까였습니다. 그럴걸 예상했으니 뭐 그렇다 치고,
그 글을 써놓고 보니 리퍼러에 신기한 곳이 여럿 찍혔습니다. 원래 가끔가다가 잘 나가는 거대 회사 그룹웨어 리퍼러가 찍히는 일이 있었습니다. ‘그런가보다’ 하기도 하고, 그 회사에 아는 사람을 동원해 어떤 페이지에 링크됐는지를 알아보기도 하고 그랬지만 오늘은 잘 나가는 커다란 회사 리퍼러가 줄줄이 올라오더군요. 기계회사 두어 곳, 전깃줄회사 하나, 프로그램회사 두어 곳이 올라오자 ‘얘들 다 뭐하는거야’ 하는 생각이 들어 리퍼러를 좀 더 자세히 들여다봤습니다.
그런데 기계회사 하나의 리퍼러가 정말 신기하게 생겼더군요. 주소를 잘 보니 그룹웨어 이메일 주소인 모양인데 주소에 RFC1738로 인코딩된 문자열로 추정되는 문자가 잔뜩 적혀있었습니다. 트위터에서 어느 분이 그 회사는 이전에 메일 주소에 별의별 정보가 다 적혀있었다는 말씀을 하시길래 혹시나 해서 위에 인코딩 되어 있는 것처럼 보이는 문자를 디코딩 해봤습니다. 그리고 결과에 충격 먹었습니다. :(
메일을 보여주는 웹페이지 주소를 구성한 쿼리스트링에는 메일 보낸 사람 이름, 소속, 직급, 메일주소, 메일제목, 보낸 시간 따위가 주욱 늘어서 있었습니다. 사실 이 상태로는 큰 문제는 없었습니다. 아마도 프레임 같은 것 안에서 돌아갈 거고, 프레임 안에 있다면 실제 페이지 주소야 어찌됐든 상관 없으니까요. 하지만 이 메일을 보여주는 웹페이지 안에 그룹웨어 밖으로 나가는 링크가 들어있다면 이야기는 달라집니다.
이 블로그 도구도 그렇고, 대부분의 웹서버에서는 헤더에 들어있는 리퍼러를 기록합니다. 리퍼러 데이터는 웹페이지 주소를 바꾸지 않고도 내용만 바꾸는 페이지가 늘고 있어 점점 사용 용도가 불분명해지고 있지만 직접 걸려있는 링크를 판단하기에는 좋습니다. 그리고 위에서 이야기한 메일 내용을 제외한 모든 내용이 주소에 들어있는 페이지에서 밖으로 나가는 링크를 누르는 건 정말 위험한 일입니다. 덕분에 저는 리퍼러만 보고도 메일을 보낸 사람 이름, 메일주소, 소속, 직급, 메일 제목, 메일 제목에 포함된 받는 사람 이름, 소속, 직급, 약속 시간을 알 수 있었습니다.
사실 이 정보는 회사 전체 입장에서 보면 아무것도 아닐 겁니다. 고작 직원 이름 하나가 유출됐을 뿐이고 이 사람의 직급이나 소속은 명함에 공개된 정보일 테니까요. 받는 사람이나 점심 시간을 좀 알아낸다고 해서 거기서 테러를 할 것도 아니고 별 문제가 없다고 생각할 수도 있습니다. 하지만 조금만 달리 생각한다면 아이폰이라도 만들 작정으로 만든 사내 비밀 조직에 속한 사람이 메일을 보냈다면 문제는 달라질 겁니다. 어떤 게임회사에서는 스튜디오 내 팀의 용도나 존재를 타 본부에 감추기 위해 그룹웨어에서 조직 검색을 없애기도 했습니다. 이런 시각에서 본다면 황당할 정도로 위험한 상황인 거죠.
별로 새로운 문제도 아닌 것 같았지만 그 회사 직원에게 알려줬습니다. 메일에 포함된 링크 함부로 누르면 곤란하다고요. 이 의견은 그 회사의 정보보안 관련 그룹을 거쳐 그룹웨어 혁신 그룹으로 넘어간 모양입니다. 하지만 저는 이런 상황이 별로 고쳐지리라 생각되지 않습니다. 메일을 보여주는 주소를 고치기보다는 메일에 포함된 링크를 누르지 못하게 하거나, 리퍼러를 남기지 않는 식으로는 수정될 수 있겠지요.
어쩌다 저 지경이 되었을까요. 분명 그룹웨어를 처음 만든 사람들은 이 지경으로 만들고 싶지 않았을 겁니다. 웹페이지 주소에 보낸사람의 모든 정보와 메일 제목까지 포함할 이유도 없었을 겁니다. 하지만 시간이 지나면서 그렇게 해야만 했을 거고, 아마 이런 이유였을 거라고 짐작하고 있습니다.
많은 게임을 서비스하는 어떤 회사에는 회사 전체 공용의 인증시스템이 있습니다. 회사에서 운영하는 아무 게임사이트에나 로그인하면 이 회사에서 서비스하는 나머지 게임에 다시 로그인하지 않고서도 게임을 할 수 있습니다. 이 회사 사이트 전체에 가입하려면 처음에 주민등록번호와 실명을 남겨야 하는데 개인정보보호 관련 법률상 이 개인정보를 회사 고유 인증시스템은 가지고 있어도 되지만 각각의 게임은 이 정보를 가질 수 없도록 되어 있고 물리적으로 얻을 방법도 없습니다. 하지만 시간이 지나면서 각각의 게임이 개인정보를 필요로 할 상황이 생겼지요.
이를테면 캐릭터를 삭제한다든지, 캐릭터의 연령이나 성별에 따라 다른 서비스를 제공해야 하는 경우입니다. 캐릭터를 삭제할 경우 보안상 주민등록번호를 입력하도록 하는 경우가 있습니다. 하지만 이 회사 게임은 개인의 주민등록번호를 알 수 없지요. 연령이나 성별도 마찬가지입니다. 그래서 궁여지책으로 각 게임은 최초 게임에 등록할 때 단 한번 넘어오는 개인정보를 쌓아놓고 활용합니다. 개인정보 보호 관련으로 회사에 시찰 따위가 나오지만 공식적으로 개인정보는 회사 고유의 서버에 보관되며 다른 게임으로 넘어가지 않기 때문에 안전하다고 생각하지만 사실은 편의상 상당수 개인정보를 여러 게임이 따로 보유하고 있습니다. 게임 서버 하나가 털리면 아주 골 때리는 상황이 되겠지요.
네. 이런 상황일 거라고 생각합니다. 그룹웨어 내의 메일시스템을 유지 보수하다 보니 누군가 보낸 사람 이름과 소속, 직급을 알아야 할 일이 생겼습니다. 하지만 이걸 알도록 해주기에는 시스템을 많이 고쳐야 할 것 같으니 그냥 메일 보는 웹페이지 쿼리트스링에 추가해 버린 겁니다. 여기에 보낸 시간도 추가로 필요하고 메일 제목도 필요해지니 지금과 같은 지경이 되었겠지요.
이 상황을 해결하기 위해서는 메일 웹페이지 주소에 써있는 정보를 사용하는 모든 서비스를 수정해야만 합니다. 다행스럽게도 사내에 그룹웨어 혁신그룹 같은 신기한 조직도 있는 것으로 보아 이미 문제를 인지하고 해결하려고 시도하는 모양이라 다행입니다. 하지만 개선 후에 유지보수에 위에서 이야기한 대로 대처한다면 결국 다시 지금과 같은 상황이 되고 말 겁니다.
이 상황은 굉장히 여러 가지 문제가 겹쳐 일어났습니다. 부서간 커뮤니케이션이 안 됐을 테고, 원칙과 절차를 지키기 위해 부자연스러운 정보전달과정이 당연시 되었을 것입니다. 마치 위에서 주민등록번호를 비공식적으로 기록하는 게임들처럼 말입니다. 글쎄요. 이 문제를 해결하기 위해 어떻게 행동해야 하는지는 모릅니다. 다만 원칙과 실천 사이의 갭을 인정하고 부서간 커뮤니케이션을 당연하게 만드는 것에서 문제 해결의 실마리를 찾을 수 있을지도 모릅니다.
기업 내부에 바깥(블로고 스피어, 웹)을 모니터링 하는 도구를 사용해 블로그를 체킹하는 곳이 몇몇 있더군요(저도 04년부터 지금까지 여러 번 리퍼러를 목격했습니다).
말씀하신 것 처럼 잘못된 보안 정책이나 인증 프로세스는 정말 위험한 요소로 작용하는 것 같습니다. 보안을 위해서는 정말 소소한 면까지 고려해야 한다는 말이 다시 떠오릅니다.