막장 SW 리뷰: 삼성 SDS의 인캅스

삼성 SDS에서 개발한 인캅스(INCOPS)라는 툴이 있다.[^1] 사내 보안용 솔루션의 탈을 쓰고 있지만 설명하는 기능 중 대부분(그것도 가장 중요한 것들)은 사실 상 의미가 없다. 그리고 시스템 사용자에겐 성능, 시스템 관리, 프로그램 개발 차원에서 여러가지 불이익을 안겨주는 프로그램이다. 그런 차원에서 간단히(?) 리뷰를 진행해보겠다.

문제점

많은 수의 개발툴들이 인캅스와 충돌한다. 주위에 이 솔루션(인캅스)를 도입한 회사에 다니는 사람이 있다면 좀 물어봐라. 내가 경험한, 혹은 알고 있는 것들은 이런 것들이다 (그렇지만 아직 해당 회사에 남아있거나 하는 사람이 있으니 직접적인 출처는 여기엔 안 쓰겠다)

  • 64bit Windows는 지원되지 않는다. ((대용량 서버용 SW를 개발해야하는 곳에선 64bit 서버가 개발용으로 쓰이는데 어쩌자는건지. 문서화되지 않은 기능으로 땜빵 구현한 냄새가 여기에서도 난다. 내가 있는 회사에 64bit 서버가 쓰이기 시작한지 4년은 되었다. 개발에 쓴 것부터하면 5년도 넘을지도)) 심지어 도입 초기엔 32bit Vista도 지원안되서 말이 많았다.
  • IncrediBuild ((대규모 컴파일작업을 위한 분산 컴파일 도구이다. 대형 SW의 경우 최신의 CPU를 가진 머신에서 30분의 컴파일시간도 우스운 경우가 종종 나온다. 이런 경우에도 극적인 컴파일 시간 감소(심하면 1/10이하로 줄어든다)를 경험하게 해주는 빌드 툴이다. 상용이긴 하지만 적용하는 회사는 좀 많이 알려져있다))와 충돌한다. 지금은 해결되었는지 모르겠지만 IncrediBuild를 통한 빌드 작업 자체가 진행이 되지 않는 문제를 들었다.
  • 빌드 자체가 깨지는 문제가 있다. S 모 전자 — SDS의 최대 고객(?)인 — 를 이미 퇴사한 l모씨(l은 이름 가운데 글자다 :p)의 설명에 따르면 전날 멀쩡히 빌드되던게 다음날 출근해보니 (인캅스가 조용히 업데이트 되어있고) 빌드가 깨지는 현상을 목격. …이런 경우의 디버깅은 말 그대로 공포다.
  • USB 암호화 기능을 사용하는데 ((모든 USB 쓰기 작업이 불가능하다. Exploer(파일 탐색기)를 통한 복사만 가능하고, 이 복사되는 파일들이 암호화된다. 그리고 인캅스가 깔려있는 다른 컴퓨터에서 복사해올 때 복호화 작업을 한다)) 이게 웃기는게 붓팅된 후에 한 번도 암호화를 해본적이 없으면 복호화도 안된다(…). 조엘의 표현을 빌자면 “코드 한 줄만 수정하면 고쳐지는 버그” 일 것이다.
  • 모든 프로세스에 특정 DLL들을 로드해서 붙여놓는다. 무슨 일이 생기냐고? 부하 테스트 용 머신에 프로세스를 3000개 정도 띄울 수 있었는데, 인캅스가 적용되고 나니 1200개 정도가 뜨더라. ((물론 이건 극단에 있는 경우긴 하다. 부하 테스트 용 프로세스는 메모리를 최소한으로 쓰게 설계되어있는데 여기에 DLL을 열심히 링크하는 인캅스 덕에 메모리 사용량이 3배정도로 뛰었다)) 당연히 모든 윈도우 서비스들에도 잘 붙어있기 때문에, 시스템이 기본적으로 사용하는 메모리도 늘어나고, 전체적으로 성능도 떨어지게 된다.

이게 “간단한” 문제들이다. 더 무서운 것은 다음 단락.

지원한다는 기능의 허점

삼성 SDS에서 강조하는 기능들은 크게,

  • 등록된 IP를 통해 ((등록 안하면 네턱 연결이 안된다)) 외부 접속을 로깅한다
  • USB 를 통한 파일 쓰기/읽기를 통제한다
  • 프린트 서버를 통제해서 ((가상 프린터 서버같은게 동작한다)) 인쇄되는 모든 문서에 워터마크를 추가한다

인데, 이 중 마지막 기능을 빼고는 모두 아주 간단한 방법으로 뚫을 수 있다.

우선 IP 통제 자체는 간단한 기능이다. 그렇지만 IP 통신을 로깅하는 것은 현실적으론 불가능하다. 패킷량같은 문제냐고? 아니다. 외부에 SSH1 서버만 한 대 있으면 모든 통신을 암호화하고, 어디와 통신하는지 알 수 없게 만들 수 있다.

SSH는 “터널링"이라는 흥미로운 기능을 제공하는데 이 기능을 통해서 이런 연결이 가능하다.

컴퓨터 A (인캅스깔린 녀석) –(C1)– SSH 서버 –(C2)– 어딘가에 있는 다른 컴퓨터 B

여기에서 연결 C1이 암호화되어 있어서 인캅스에서 로그를 남겨봤자고, 다른 컴퓨터 B와의 실제적인 연결인 C2는 아예 로깅조차 할 수가 없다 — 연결이 존재하는지조차 알 수 가 없으니.

이런 방식을 통해 네트웍 로깅 기능은 의미없는 무언가로 전락한다.

USB 파일 암호화가 그나마 의미있는 기능이라고 생각했는데, 어제 점심먹고 소화되는 동안(대략 30분?) 몇 가지 테스트를 해봤더니 단번에 깨지더라. 물론 깨진다는 사실을 발견하고는 팀장님을 통해서 보안팀에는 보고했고 이 자리에선 일단은 밝히지 않겠다. ((당장 밝히면 문제가 될 소지가 있으니… 그렇지만 차후에도 안 밝힐거라고 생각하는 것은 아니겠지? 이거 술안주로 아주 좋아 뵌다. )) 그렇지만 윈도우 프로그래밍 경력 1년짜리 프로그래머한테 30분만에 깨질정도면, 경력 10년차가 충분히 존재하는 IT업계에서는 몇 명이나 이 사실을 알고 있을꺼라고 생각하나? 인캅스 도입한 업체가 100개라 치면 50개 이상은 내부적으로라도 알고 있을걸?

참고로 모든 종류의 파일을 USB파일에 쓰기 위해 내가 작성한 것은 5줄 짜리 python 코드다. 그 중 2줄은 파일 헤딩과 import다(…). 읽기 위해선 달랑 4줄이면 족했다.

결론

득보다 실이 절대로 많다. 프로그램 개발의 편의성을 생각했을 때는 정말로 _최악에 가까운 무언가_일 것이고, 제공한다는 보안 기능에는 모두 허점이 있다.

도입을 생각하고 있는 IT 담당자가 있다면 절대로 도입하지 않는 쪽을 추천한다.

보안이 정말로 필요한 것인지 생각해보고 필요하다면 이렇게 허술한 툴로 막을 생각은 하지 말아라. 이런 툴을 쓰는 수준에서 보안을 유지한다고 생각하면 차라리 각 구성원의 도덕성을 믿어라.

그리고 이런 xxx같은 프로그램을 돈 받고 팔고있다는 사실에 대해서도 한국 IT 업계에 경종을 울려줄 필요가 있다. 품질이 우수한 — 그리고 사용자가 원하는 기능을 제공하는 — 프로그램들은 삶의 빛이 된다. 그렇지만 제공하는 기능없이 페널티만을 강요하는 프로그램은 그 자체가 악에 가깝다. 그런 이유에서라도 이 프로그램을 도입하지 말아줬으면 하는 소망이 있다.

[^]1: 대기업에서 개발한 SW 제품 중에 의미있는(물론 SW를 기반으로 성장한 대기업이면 얘기가 다르지만) 제품을 생산하는 곳이 어디가 있을까마는.


  1. Secure Shell의 약자. 두 개의 컴퓨터 간에 _강력한 암호화 통신_을 가능케 해주는 프로토콜. ‘*nix’ 계열의 많은 기능들이 이 프로토콜을 이용해서 안전한 통신을 한다. ↩︎