IAsyncStateMachine 를 사용하는 .NET 멀웨어 분석

IAsyncStateMachine 를 사용하는 .NET 멀웨어 분석

최근 .NET 프레임워크로 작성된 멀웨어를 분석하는 도중 IAsyncStateMachine 인터페이스를 사용하는 샘플이 발견되어 이에 대한 분석 방법을 설명하고자 글을 작성한다. 크게 어려운 내용은 없지만 자칫 잘못하면 분석해야 할 코드를 찾지 못한 채 필자처럼 무의미하게 시간을 낭비하는 일이 발생할 수 있어 정리한다.

1. FileInfo

  • MD5 : 25596412BE7A34C82C30F4652AE38CF3
  • SHA256 : 7D7789F9E30220D886BF7C37F3DBC7BE0ADC361A451FFAD333E087EE72D92ECE
  • FileType : exe (.NET)
  • 비고 : PhatomStealer

예제 샘플은 MalwareBazaar 에서 다운로드할 수 있다.

해당 파일은 정보 탈취 기능을 가진 멀웨어이므로 반드시 격리된 환경에서만 테스트하기를 권고한다.

2. 분석

필자를 포함한 대부분의 분석가가 그러하겠지만, .NET 프레임워크로 빌드된 exe 파일은 dnspy 라는 툴을 이용해 C#의 중간 코드를 분석한다.

dnspy에 예제 샘플을 로딩, 우클릭하고 Go to Entry Point 버튼을 클릭하면 Program 클래스의 Main 이 코드의 시작 지점인 것을 확인할 수 있다.

예제 샘플 EntryPoint 코드

Task 를 생성하고, 시작하고, 반환하는 코드라는 사실을 금방 알 수 있다. 문제는 Main 의 Task 가 어떤 작업을 하는지 알 수 없다는 점이다. IAsyncStateMachine 인터페이스에 대해 조사해본 결과 MoveNext() 메서드에 Task 의 구체적인 동작이 구현되었을 거라 추측할 수 있었다.

IAsyncStateMachine 인터페이스 문서

하지만 <Main>에서 MoveNext() 메서드를 찾아보았지만 보이질 않는다.

MoveNext() 메서드 코드가 없는 모습

보이지 않는 MoveNext() 메서드는 설정을 변경하여 확인할 수 있다. 상단 탭에서 View - Options 를 선택하면 옵션 창이 팝업된다.

View - Options

옵션 창의 좌측에서 Decompiler 를 선택, 우측에서 Show hidden compiler generated types and methods 옵션을 체크하면 숨겨진 메서드를 확인할 수 있다.

Options 창의 Show hidden compiler generated types and methods 옵션

옵션을 체크하면 <Main> 의 숨겨진 MoveNext() 메서드를 볼 수 있다. Task 의 구체적인 동작은 MoveNext() 에 구현되어 있으니 여길 분석하면 된다.

옵션 설정 후 드러난 MoveNext() 메서드