존알람, 존알람, 존알람, …

@codemaru · November 03, 2010 · 6 min read

제가 보안 업계 경력을 초기에 쌓았던 잉카인터넷이란 회사에는 아주 뛰어난 팀장님이 한 분 계셨습니다. 제가 입사했을 때 직속 팀장님이셨는데, 방화벽 드라이버 개발의 전문가셨죠. 지금 제가 알고 있는 지식의 상당수는 그 팀장님께서 친히 가르쳐 주신 것들입니다. 그 때는 별 것 아니라고 생각했던 것도 지금 돌이켜보면 정말 뼈저리게 중요한 사실이었다는 것을 느낄 때가 종종 있는데 그 때마다 업력, 내공의 차이를 느끼곤 합니다. 참 웃긴 이야긴데 제가 좋아하는 하이네켄 다크나 조니워커 블루, 또는 드라이버 개발 때 사용하는 소스 인사이트 등을 저에게 전수해 주신 분도 그 분이십니다. 그런걸 보면 새삼 누굴 만나는지가 정말 중요하다는 생각이 절로 듭니다. 어쨌든 그 때 저희는 방화벽을 개발했었고 뻔질나게 존알람을 벤치마킹 했었습니다. 그 시절 존알람은 개인 PC 방화벽의 선구자적인 제품이었죠. 그 팀장님은 존알람 개발자들을 존경했었고, 저도 제품에서 뿜어나오는 장인 정신에 놀라곤 했었습니다.

사설이 길었군요. 어쨌든 그랬던 존알람이 최근 저희 제품과 크래시 문제가 있었습니다. 저는 초기에 이걸 QA팀에서 잘못 보고 받아서 오진 문제로 판단을 하고 계속 요청하라고 했었는데, 그 쪽 개발팀에서 온 메일을 봤더니 크래시가 발생하는 거더군요. 그래서 좀 디버깅을 해봤는데 예전 존알람의 장인 정신을 찾기가 초큼 애매한 부분이 많았습니다. 물론 예전 방화벽도 다소 어그레시브한 형태였긴 했지만 지금 제품은 훨씬 더 어그레시브하게 프로세스를 조작하더군요.

일단 존알람은 엔트리 포인트 후킹이란걸 합니다. 새로 생성되는 프로세스의 엔트리 포인트에 자신으로 이동 시키는 점프 코드를 박는 거죠. 그런데 애석하게도 저희가 만든 그 조그마한 프로세스는 엔트리 포인트는 실행 시점에 변경되도록 되어있었습니다. 당연히 존알람은 쓰레기 더미 코드를 자신의 프록시 프로시저로 복사해간 후에 점프 코드를 삽입했고, 거기를 또 우리는 신나게 원본 엔트리로 덮어 썼던 겁니다. 크래시는 당연지사죠. 엔트리에 버젓이 있는 점프 코드를 보면서 제가 한 생각은… 이건 우리껀데.. ㅋㅋ~ 어쨌든 이 문제를 해결하기 위해서 저는 존알람의 엔트리 포인트 후킹을 위한 6바이트의 nop 코드를 진입 함수 앞에 추가시켜 줬습니다.

이걸로 끝이었을까요? 아닙니다. 저희가 만든 프로세스의 진입 함수가 실행 시간에 변형된다고 했는데 아마도 존알람이 그 코드를 에뮬레이팅을 하는 것 같아 보였습니다. 처음에 존재했던 쓰레기 코드를 존알람이 에뮬레이팅을 하면서 다시 크래시가 발생하는 것 같더군요. 그래서 이제는 존알람 에뮬레이터가 깔끔하게 알아볼 수 있도록 nop 코드 뒤에 바로 리턴하는 곳으로 점프하는 코드를 추가시켜 줬습니다. 그랬더니 크래시가 발생하지 않더군요.

디버깅을 끝내고 커피를 마시면서 그런 생각이 들었습니다. 보안 프로그램 최고의 기술은 다른 보안 프로그램과의 충돌을 피하는게 아닐까? 요즘 정말 많은 보안 프로그램이 무분별하게 후킹을 하는 것을 보게 됩니다. 그런 것들을 보고 있자면 참 묘한 생각이 듭니다. 특히 코모도는 짱인것 같아요. 몇 개를 후킹하는지 헐킈. 문지방은 하난데 전부 거기 서서 드나드는 사람들을 감시하려고 하니 충돌을 피할 수가 없는건 어쩌면 당연한 건지도 모르겠습니다. 누군가(매트 피에트릭?) 발견한 조그만 틈 사이로 너무 많은 것들이 쏟아져 나온 게 아닐까하는 생각이 드네요. 이쯤되면 누군가가 문지방에 서지 않고도 그들을 감시할 수 있는 방법을 만들어 줄 때도 된 것 같죠? ㅎㅎ~

 0  0

 

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중