웹쉘 스캔 (WebShell Scan)
서버를 가지고 서비스 하는 입장에서는 어디서나 웹쉘에 대한 골치거리를 생각해 본 적이
있을 것이다. 웹쉘이 재수없게 서버에 하나 올라오고 그 페이지에 접근이 된다면 게임은
끝난 것이다. 따라서 서버에 웹쉘이 함부로 올라오지 않도록 업데이트 되는 파일에 대한
검증은 필수 불가결의 요소이며, 이미 보안이 허술한 공공기관 사이트나 학생 웹 개발자도
그런 코딩은 다 알고있다. 하지만 중국 해커들은 여전히 무슨 개구멍을 타고 드나드는지
모르겠지만 웹쉘을 심심하게 올려대고 있고, 그런 출처를 알 수 없는 웹쉘 때문에
서버에서는 아주 골칫거리다.
서버 백신의 경우 서버에서 돌아가는 만큼 퍼포먼스가 머 일단은 가장 중요한
사항이라고 생각되긴 하지만 내 개인적인 생각으로는 웹쉘 스캐닝 능력도 반드시 필요한
요소라고 본다. 웹쉘은 서버에 올려지는 것이다. 따라서 클라이언트 백신 보다는 서버
백신에서 그만한 차별성을 갖고 있어야 한다고 생각되며 더욱 효과를 발휘해야 한다.
하지만 생각 외로 서버백신들이 웹쉘에 대한 대응책이 미비하다는 것을 알 수 있다. 이번에
서버 백신에 대한 BMT가 이루어지면서 여러 서버 백신을 맛보았는데, 일부러 BMT항목에
웹쉘 체크 항목도 넣었었다. 여러 종의 웹쉘을 테스트 해보면서 간단하게나마 진단율을
확인해 보는 것이 일차적인 평가 대상이었다.
이때 웹쉘 샘플을 인터넷 어디서나 구할 수 있는 흔한 것들과 우리 쪽에만 유입된 특수한
웹쉘 샘플 이런식으로 분류해서 테스트를 하였는데, 어이없게도 백신들은 인터넷에 마구
굴러다니는 샘플도 캐취하지 못하였다. 물론 이 기능 하나만으로 백신을 평가한다는 얘기는
아니지만, 난 꽤 큰 실망을 한 편이었다. 왜냐하면 인터넷에서 어디나 구할 수 있는 샘플은
사실 맘만 먹으면 오늘이라도 채취할 수 있는 것이고, 그 패턴을 삽입하는 것은 어려운
작업이 아니기 때문이다. 즉 내가 생각하기로는 샘플을 최대한 긁어올 그런 시도조차 혹은
개념조차 미비했다고 볼 수밖에 없었다.
어쨌든 웹쉘에 대한 평가 부분은 5개 백신 모두 좋은 편이 아니었다. 이것으로 보아 현재 백신의
풍토가 웹쉘에 대한 대책은 앞서나가는 쪽은 아니라고 생각할 수 있다. 웹쉘 해킹의 역사는 오래된
편인데 백신에서 아직도 지지부진한 모습은 결코 기분 좋은 모습은 아니었다.
물론 웹쉘을 백신에서만 처리하겠다는 얘기가 아니다.
단지 분야가 다르다고 생각만 하지 말구 새로운 아이디어를 창출해 냈으면 좋겠다는 얘기이다.
하지만 기존에 할 수 있는 것조차 제대로 해 놓지 않고 새로운 아이디어를 바란다는 것은
당연히 무리한 바램인 것인데, 그런 인식이 커지며 무리한 바램을 하지 말자 라는 풍토가
확산되지 않기를 바라는 마음이다.
어쨌든 아쉬운 대로 우리 나름대로 웹쉘은 찾아야 하고 백신사에서 해주기까지는 시간이 걸리니
웹쉘 체크를 위한 간단한 스캐너를 하나 만들었다.
웹 소스 파일에 대한 스캔 기능을 갖춘 웹쉘 스캔 엔진이다. 사실 막무가내로 스캐닝을
구현하기에는 일단 패턴 적출이 가장 기본적인 테마다. 따라서 접근방식에 대한 힌트를 얻기 위해
그나마 웹쉘을 많이 캐취해내는 카스퍼스키로 테스트 해 보았다.
일단 내가 가지고 있는 win31_Shell.asp로 테스트 해본 결과,
바로 진단이 되는 모습을 볼 수 있었다.
그렇다면 카스퍼스키는 어떤 부분을 감안하여 이넘을 웹쉘이라고 간주한 것일까,
소스 파일을 계속 지워가며 테스트 해 보았다. 그 결과 XpCmdShell() 이라는 함수를 거덜내 보니
더이상 진단되지 않는 것을 알 수 있었다. 이곳이 카스퍼스키가 보유하고 있는 패턴이다.
WinHex를 이용하여 그 부분을 패턴으로 뽑아왔다.
그리고 BinaryMatching 함수를 만든후 그 패턴을 검사하도록 구현했다.
스캐닝 후 진단 결과,
이런식으로 두어개를 더 테스트 해 보니, 웹쉘의 패턴이 될만한 것들이 눈에 들어왔다.
아 이런 패턴을 찾아서 웹쉘로 진단하는 것이구나. 하는 감을 충분히 느낀 후
내가 갖고 있는 모든 웹쉘의 패턴을 공통이 될만한 것으로 추출하여 모조리 삽입했다.
이제 웬만한 백신들이 잡지 못하는 웹쉘도 내가 만든 스캐너에는 다 포착이 된다.
패턴을 다 적출하고 나서 한국정보보호진흥원에서 다음과 같은 자료를 발견했다. 이런
미리 찾아볼걸 ㅠㅠ (참고로 난 절대 저거 보고 패턴 뽑은게 아니다 !)
백신들도 웹쉘에 대한 좀더 적극적인 대처를 바라며 한번 글을 써봤다. 백신사에서
근무하시는 분들 중에 이 글을 보실 분이 계실지 모르겠지만, 보신다면 혹시 참고가 되었으면
하는 바램이 있다.
window31. 2007년 10월.
ps 참고로 백신의 패턴을 확인하는 방법은, 저런 무식한 방법보다 더 고급스런 기법이 있지만
그 방법은 법률에 위반될 소지가 있는 부분이라 따로 기재하지는 않습니다(백신 개발해보신
분들은 이미 다 알고 계시죠? ㅋㅋ)
이올린에 북마크하기
