악성코드 분석가를 위한 ASP 분석환경 구성
최근 웹서버에 업로드된 악성 ASP 웹쉘파일을 분석할 일이 있었습니다. 다행히 윈도우 분석환경은 마련되 있었기에 ASP 분석을 위한 설정만 추가하면 되어 쉽게 해결할 수 있었습니다. 악성 웹쉘은 보통 PHP나 ASP로 많이 작성돼있습니다. 이번 기회에 ASP를 위한 분석환경 구성법을 문서화하면 좋겠다 싶어 이 글을 작성합니다.
환경구성은 앞으로 아래와 같은 순서로 진행될 것입니다. 이 글에선 ASP 가 실행되는 디버기PC(감염서버) 와 디버그PC(IDE가 있는 분석용 PC)를 따로 구성했습니다.
– IIS 기능추가
– ASP 디버깅 설정
– Visual Studio 설치
– 원격 디버거 설치 및 설정
– 디버기PC 연결
ASP
ASP는 PHP와 같은 서버사이드 스크립트입니다. 클라이언트 사이드에선 서버사이드 스크립트를 확인할 방법이 없기에 자바스크립트 분석에 사용되는 크롬 등을 이용한 디버깅 방법을 ASP분석에 적용할 수는 없습니다. 그럼 어떻게 서버에 디버거를 물릴까요? 일단 ASP를 실행할 수 있는 IIS 서버구성부터 시작합니다.
IIS 기능 추가
ASP는 주 사용 OS가 윈도우라면 더욱 쉽게 접근할 수 있습니다. 윈 7이상이라면 Windows 기능 사용/사용 안 함을 통해 쉽게 웹서버를 구성할 수 있기 때문입니다. IIS 서버 구성에는 자세한 설명을 생략합니다. 구글링으로 매우 자세한 자료들을 많이 찾을 수 있습니다.
다만 주의할 점은 IIS 기능 추가 시 응용 프로그램 개발 기능 에서 ASP 관련 설정을 꼭 체크해줘야 한다는 점입니다. 이 부분이 빠질 경우 웹 서버가 ASP파일을 실행할 수 없습니다. 기본설정은 체크해제 되어있습니다.
ASP 디버깅 설정
IIS 기능추가가 끝났다면 디버그 기능을 활성화 해야 합니다. IIS(인터넷 정보 서비스) 관리자를 열어 관련 설정을 진행합니다.
여기서 부모 경로 사용, 브라우저에 오류 전송, 서버 쪽 디버깅 사용, 클라이언트 쪽 디버깅 사용 을 True로 바꿔줍니다. 이 항목을 모두 바꿀 필요는 없으나 우리의 목적은 빠른 분석환경 구성이기에 엄밀한 보안설정은 차치하고 진행하겠습니다. 실 사용 PC라면 본인이 무슨 설정을 하는지 정확히 이해하고 진행하시길 바랍니다.
여기까지 진행했다면 웹 루트 폴더에 ASP 를 올렸을 때 정상적으로 확인할 수 있을 것입니다. 기본경로는 C:\inetpub\wwwroot
입니다. 아직 디버기PC 에서 설정할 것이 좀 더 남았지만, 잠시 디버거PC 를 설정하고 오겠습니다.
Visual Studio 설치
디버깅을 위한 IDE로 Visual Studio를 선택했습니다. 어떤 버전을 사용해도 상관 없지만, 현재 설치된 버전에 맞게 디버기PC에 설치할 원격 디버거의 버전을 맞춰줘 야합니다. 여기서는 MS 공식 홈페이지에서 무료로 받을 수 있는 Visual Studio Community 2015 버전을 사용했습니다.
공식 다운로드 링크
원격 디버거 설치 및 설정
아직 조금 더 남았습니다. 디버기PC 를 디버깅 할 수 있도록 디버기PC에 원격 디버거를 설치해줘야 합니다. 감염서버와 분석PC가 같다면 이런 불필요한 과정을 단축시킬 수 있습니다.
VS2015 원격 디버거
여기서 받은 설치파일을 디버기PC에 설치해줍니다. 위 링크를 따라가시거나 공식 홈페이지에서 다운로드센터에서 remote tool 키워드로 검색 및 다운받길 바랍니다. 좀더 자세한 설명을 원하시면 여길 참고하세요
설치를 마치면 Remote Debugger 를 실행합니다. 반드시 관리자 권한으로 실행합니다.
실행하면 위와 같은 화면을 확인할 수 있습니다. 도구 -> 옵션
에서 추가적인 설정을 진행합니다. 기본설정은 Windows 인증(W) 에 체크되어 있습니다. 인증된 원격 디버깅 환경의 경우 사용자 계정 설정이라던가, 그 계정의 로컬권한이라던가 신경 써야 할 부분이 좀 많아집니다. 다시 한번 언급하지만, 우리의 목적은 빠른 분석환경 구성으로, 별도의 보안설정을 하지 않습니다.
디버기PC 연결
이제 마무리단계입니다. 다시 디버거PC로 돌아와 Visual Studio를 실행하고 디버그(D) -> 프로세스에 연결(P)… 을 클릭해 앞서 설정한 디버기PC 로 접속할 준비를 합니다.
한정자에 디버기PC의 주소와 원격 디버거의 포트번호를 입력합니다. 주소를 입력하고 모든 사용자의 프로세스 표시(U) 를 클릭하면 디버기PC에서 실행중인 모든 프로세스 목록이 출력돼야 합니다. 오류가 발생하거나 w3wp.exe 가 보이지 않는다면 아래의 내용을 다시 한번 체크해보시길 바랍니다.
– 방화벽 설정
– 원격 디버거의 관리자권한 실행
– 디버기PC 접근 가능한 네트워크 위치
– 디버기PC 의 IIS 실행여부 (웹 페이지 새로고침)
분석
먼 길 돌아오셨습니다. 드디어 Visual Studio에서 우리가 구축한 감염서버를 디버깅을 할 수 있게 되었습니다. 이제 솔루션 탐색기에서 디버기PC의 웹 루트 폴더를 열어 원하는 파일을 선택하고 디버깅 하면 되겠습니다.
이 글을 쓰게 된 계기는 된 샘플은 고객사에서 문의로 온 악성 ASP파일입니다. 웹쉘로 의심은 되는데 난독화로 인해 비밀번호를 알 수 없어 증거를 찾지 못하는 상황이었습니다.
하지만 앞서 설명한 방법을 통해 환경을 구축하고 분석한 결과 아래와 같은 화면을 확인할 수 있었습니다. 미리 공격자가 설정해둔 암호를 저장한 userpass 변수와 사용자가 웹 폼을 통해 입력한 값을 검증하는 코드입니다.
이후 알아낸 비밀번호로 웹쉘 화면에 접근할 수 있었습니다.
마치며
말로 하면 별거 아닌 일인데 막상 직접 하자니 길고 복잡한 과정으로 느껴집니다. 정작 샘플은 엄청나게 취약한 비밀번호를 쓰고 있어서 대입공격을 했더라면 채 2초가 걸리지 않았겠지만 스냅샷 잘 찍어뒀으니 앞으로 잘 써먹어야겠죠. 이 글을 보시는 악성코드 분석가 여러분도 ASP 샘플 원할히 분석하셨으면 좋겠습니다.