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 이 코드의 시작 지점인 것을 확인할 수 있다.

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

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

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

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

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

MoveNext() 메서드