3 Nov
2010
Posted in: 코드
By    4 Comments

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


존알람, 존알람, 존알람, …
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net

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

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

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

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

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

Browser does not supports flash movie

  • 트랙백 주소: http://www.jiniya.net/wp/archives/3292/trackback

관련 글

    None Found
  • Z

    그 방화벽 유지보수의 50% 이상이 존알람과 같은 구조를 가지기 때문에 발생하는 케이스 들이라

    는것도 알아주기 바랍니다~ ^^ (IM 으로 진작에 넘어갔어야 했는데 시기를 놓침)

    그 때에는 그랬던거 같아요. 유명제품에서 구현했던 기술이 마치 전부인 것처럼 느꼈던…

    국내 유명 방화벽 제품들이 구현한 기술이 하나같이 똑같았죠.

    Hook 은 이제 지양되어야 할 기술이며 MS 에서도 권장하지 않는다고 할 정도 임에도

    아직도 상용제품에 가장 많이 사용되는 기술인것도 맞는것 같아요~…

    hook을 거는게 쉽다보니 개발자들이 쉽게 유혹에 빠지게 되고 남발하게 되는것도 맞구요~…

    그러나 hook 이 풀리는 지점, rehook 이 필요한 상황이 오게 되면 지옥이 되리라는 것도 더불

    어 유념하고 있어야 겠지요.

  • codewiz

    Z // 형이 요즘 고생이 많으시군요. ㅎㅎ^^;;

  • http://@EvilWinFe 철이

    후킹……….요즘에는 강의를 안쓰고 계시네요. 빨리 보고 싶어요 ㅋ

  • codewiz

    철이 // 네. 요즘 마음의 여유가 좀 없는것 같네요. 조만간 재미난 주제를 가지고 다시 쓰도록 하겠습니다. 일단 자이언트, PlanB가 끝나야 ㅎㅎ~ ^^;;