“니가 왜 거기서 나와” Notepad++ plugin을 변조한 package 악성코드 (WikiLoader)

AhnLab SEcurity intelligence Center(ASEC)은 최근 Notepad++의 기본 plugin인 “mimeTools.dll”가 변조되어 유포된 정황을 확인했다. 해당 악성 mimeTools.dll 파일은 특정 버전의 Notepad++ package 설치 파일에 포함되어 정상적인 package 파일인 것처럼 위장하였다. mimeTools는 아래 이미지와 같이 Base64등의 인코딩 기능을 수행하는 모듈이며, 사용자가 별도로 추가하지 않아도 기본적으로 포함되어 있다.

mimeTools.dll은 notepad++의 기본plugin인 만큼, notepad++을 실행시키면 자동으로 로드된다. 공격자는 이 점을 악용하였고 일종의 DLL Hijacking 기법을 사용한 것으로 확인된다. 즉, 사용자는 단지 notepad++.exe를 실행시켰음에도 불구하고 mimeTools.dll이 자동으로 로드되어 악성코드가 동작한다.

[그림 1] Notepad++의 플러그인 MIME Tools

공격자는 mimeTools.dll에 암호화된 악성 Shell Code와 이를 복호화 및 실행하는 코드를 추가하였다. 아래 이미지는 정상적인 notepad++의 package와 악성 package내부에 포함된 파일들을 비교한 이미지다. 이어서 살펴보겠지만, 이 중 certificate.pem 파일이 악성 Shell Code를 포함하고 있는 파일이다.

[그림 2] 공식 package와 악성 package 내부 파일 비교

또한, mimeTools.dll에서 제공하는 기능(Export)들은 그대로 구현되어 있으며, DllEntryPoint 만 코드가 다르다는 특징이 있다. 즉, 악성 mimeTools.dll은 사용자가 특정한 기능을 실행하지 않아도 DLL이 로드되는 순간 악성행위를 시작한다는 것이다.

[그림 3] 정상 mimeTools.dll과 악성 mimeTools.dll의 EntryPoint 비교

해당 악성코드는 아래 도식도와 같은 실행 흐름을 가진다.

  1. 악성행위는 사용자가 notepad++을 실행함과 동시에 mimeTools.dll이 로드되면서 시작된다.
  2. mimeTools.dll에서 certificate.pem파일을 ShellCode로 복호화하여 실행한다.
  3. 이후 BingMaps.dll->GetBingMapsFactory()함수 내부 코드를 악성 ShellCode로 덮어 씌운다.
  4. 덮어 씌워진 ShellCode는 다시 explorer.exe에 Thread Injection을 수행한다.
  5. 최종적으로는 C2서버에서 추가 ShellCode를 다운로드하여 실행한다.
[그림 4] 악성코드 흐름 도식도

0. Indirect Syscall

해당 악성코드는 실행 시점에서 다수의 Indirect Syscall 기법을 사용하였다. 이는 안티바이러스 제품을 우회하기 위한 기법으로, 이전에 ASEC 블로그에서도 다룬 바[1] 있다.

[그림 5] Indirect Syscall

위 그림과 같이 jmp문을 이용해 syscall로 분기하는데, jmp문은 정확하게 syscall 부분을 가리키고 있으며 해당 syscall을 호출하기 위해 필요한 인자값을 직접 세팅한다. 이러한 방식을 이용해 ntdll을 후킹하여 Native API를 모니터링하고있는 안티바이러스 제품을 우회한다.

1. ShellCode 복호화 & 실행

복호화 된 ShellCode는 최초 실행된 notepad++ 프로세스 영역에 생성된다. 해당 영역에는 약 10분가량의 시간지연 로직이 존재하는데, RCX 값을 수정하여 간단하게 우회가 가능하며 이 글에서 따로 다루지는 않겠다.

[그림 6] certificate.pem 파일 복호화 과정
[그림 7] 복호화 된 ShellCode

certificate.pem 파일에 있는 Binary는 Crypt32.dll, BCrypt.dll 두 가지 모듈을 활용하여 ShellCode로 탈바꿈된다.

1. Base64 Decoding
2. AES Decrypt (key: wqviIfew62w0zgP97yw9G2nqlHFKkggQ)

[그림 8] ShellCode로 실행 흐름 전환

이후 ShellCode가 생성된 영역에 실행 권한을 부여하고 jmp문을 통해 실행 흐름이 전환된다.

2. BingMaps.dll 변조

BingMaps.dll의 EntryPoint를 변조하고 Export 함수인 GetBingMapsFactory()의 내부 코드를 ShellCode로 덮어씌운다.

[그림 9] BingMaps.dll->EntryPoint 변조
[그림 10] BingMaps.dll->GetBingMapsFactory() 변조

이후 아래와 같은 순서로 BingMaps.dll->GetBingMapsFactory()로 실행흐름이 전환된다.

1. NtCreateThreadEx()
2. NtGetContextThread()
3. NtSetContextThread() : Set RIP
4. ResumeThread()

Thread 생성 이후 NtGetContextThread()를 이용해 해당 Thread의 레지스터 값을 가져오며, RIP 레지스터를 GetBingMapsFactory(ShellCode로 덮어씌운 영역)으로 세팅해준다.

[그림 11] 변조된 GetBingMapsFactory()를 RIP로 세팅

3. 변조된 GetBingMapsFactory()

BingMaps.dll의 GetBingMapsFactory()함수는 이전 과정에서 ShellCode로 덮어씌워졌다. 새로운 Thread로 시작된 해당 함수에서는 VM 등의 분석환경을 인식하여 프로세스를 종료하는 과정이 존재하며, explorer.exe에 Thread를 삽입하는 역할을 수행한다.

[그림 12] 프로세스 이름에 기반한 Hash 매치

해당 코드는 런타임에 실행 중인 모든 프로세스의 이름을 대상으로, 한 글자씩 SHIFT, XOR 연산하여 간단한 Hash값을 생성한다. 생성된 Hash값은 자신이 특정한 프로세스가 존재하는지 확인하는 데 사용되고, Hash가 일치한다면 추가 악성행위를 수행하지 않고 종료한다. 종료 대상이 되는 프로세스 이름 중 확인된 목록은 아래와 같다.

  • VGAuthService.exe
  • vmtoolsd.exe
  • ProcessHacker.exe
  • x64dbg.exe
  • PE-bear.exe
  • CFF Explorer.exe
  • Autoruns.exe
  • procexp.exe
  • procexp64.exe
  • Procmon.exe
  • Procmon64.exe
  • tcpview.exe
  • Dbgview.exe
  • portmon.exe

“explorer.exe” 프로세스를 만나면 이후 악성행위에 필요한 정보(PID)를 추가로 수집하여 보관한다. 보관된 explorer의 PID는 이후 explorer.exe에 추가 ShellCode를 생성할때 사용되며, 순서는 아래와 같다.

1. NtAllocateVirtualMemory() : explorer.exe 내부에 공간을 할당
2. NtWriteVirtualMemory() : 해당 공간에 ShellCode를 삽입
3. NtCreateThreadEx() : 삽입된 ShellCode를 Thread로 실행

이후부터는 explorer.exe의 메모리 공간에서 악성코드가 실행된다.

[그림 13] explorer.exe 영역에 삽입된 ShellCode

4. Explorer.exe (Injected)

여기서 부터는 본격적으로 악성행위가 시작된다. C2에 접속하여 복호화 Key를 다운로드하고, 해당 Key로 복호화한 추가 ShellCode를 실행한다.

[그림 14] Rebuild 하기 전의 C2 문자열

C2와 통신하는 과정에서 사용되는 문자열은 특정한 함수를 거치면서 URL로 바뀌게 된다. 홀수 번째의 문자만 이어붙이는 매우 간단한 과정을 통해 C2 URL 문자열을 획득할 수 있다. 수집된 C2는 본 게시글 아래 IoC 탭에서 확인할 수 있다.

[그림 15] System 정보를 Request Header에 추가

C2에 Get Request를 보내기 전 Header에 추가되는 내용으로, 사용자 PC에서 수집한 정보들이 Base64 인코딩 되어 공격자에게 전달된다. 이 때 수집되는 정보는 아래와 같다.

  • Computer Name
  • User Name
  • Whether the current user is a member of the Administrator’s group
  • Language
  • System Time
[그림 16] response에서 ShellCode 추출

C2 통신 이후 response에서 특정한 문자열(“on><!–gmail “)의 offset을 찾는 과정이 추가로 확인되었다. 해당 Offset에서 복호화에 사용할 Key를 추출하여 추가 ShellCode를 복호화하고, 해당 ShellCode로 jmp한다. 현재 C2 URL에 접속은 가능하나 해당 Offset은 비어있는 상태이다.

[그림 17] C2의 외형과 내부 코드

접속되는 C2는 분석 시점에 WordPress 로그인 페이지로 확인되었다. 해당 악성코드가 최초로 유포될 당시에는 C2의 외형이 Wiki 사이트로 확인되어 “WikiLoader”라는 이름이 붙여졌다.

이번에는 다양한 언어 지원과 강력한 plugin 기능 등으로 유저들에게 많은 사랑을 받고있는 Notepad++에 악성코드가 삽입된 케이스를 살펴보았다. 이처럼 소프트웨어를 공식 배포 사이트에서 다운로드하는 습관은 매우 중요하며, 크랙 버전이나 기타 출처를 알 수 없는 소프트웨어를 사용할 때에는 각별한 주의가 필요하다.


파일진단
– Trojan/Win.WikiLoader.C5594131
– Trojan/Win.WikiLoader.R642896
– Trojan/Bin.ShellCode

IoC

[MD5]
– c4ac3b4ce7aa4ca1234d2d3787323de2 : package file(npp.8.6.3.portable.x64.zip)
– 6136ce65b22f59b9f8e564863820720b : mimeTools.dll
– fe4237ab7847f3c235406b9ac90ca845 : certificate.pem
– d29f25c4b162f6a19d4c6b96a540648c : package file(npp.8.6.4.portable.x64.zip)
– 8b7a358005eff6c44d66e44f5b266d33 : mimeTools.dll
– d5ea5ad8678f362bac86875cad47ba21 : certificate.pem

[C&C]
– hxxps://car***************.com/wp-content/themes/twentytwentytwo/nnzknr.php?id=1
– hxxps://pro**********.net/wp-content/themes/twentytwentythree/hyhnv3.php?id=1
– hxxps://www.era********.eu/wp-content/themes/twentytwentyfour/dqyzqp.php?id=1
– hxxps://www.mar**********.it/wp-content/themes/twentytwentyfour/c2hitq.php?id=1
– hxxps://osa*******.com/wp-content/themes/twentytwentythree/ovqugo.php?id=1
– hxxps://www.ala************.com/wp-content/themes/twentytwentyfour/34uo7s.php?id=1
– hxxps://13*******.org/wp-content/themes/twentytwentythree/t51kkf.php?id=1
– hxxps://alt**************.com/wp-content/themes/twentytwentyfour/c9wfar.php?id=1
– hxxps://www.am*******.com/wp-content/themes/twentyten/b9un4f.php?id=1
– hxxps://lu*******************.com/wp-content/themes/twentytwentytwo/pam8oa.php?id=1
– hxxps://www.yu*******.de/wp-content/themes/twentytwentytwo/n2gd2t.php?id=1

연관 IoC 및 관련 상세 분석 정보는 안랩의 차세대 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인 가능하다.

5 3 votes
별점 주기
Subscribe
Notify of
guest

10 댓글
Inline Feedbacks
View all comments
trackback

[…] investigation revealed that the file named “certificate.pem” within the altered package contains the malicious shell […]

trackback

[…] investigation revealed that the file named “certificate.pem” within the altered package contains the malicious shell […]

trackback

[…] investigation revealed that the file named “certificate.pem” within the altered package contains the malicious shell […]

trackback

[…] investigation revealed that the file named “certificate.pem” within the altered package contains the malicious shell […]

trackback

[…] that a manipulated version of Notepad++ is being employed by unidentified threat actors to propagate the WikiLoader malware (aka […]

trackback

[…] El malware multifuncional Byakugan se está propagando a través de instaladores fraudulentos de Adobe Acrobat Reader. El ataque se inicia con un archivo PDF en portugués que solicita al usuario que descargue la aplicación Reader para ver el contenido. Si se hace clic en el enlace, se descarga un instalador malicioso que activa la secuencia de infección. La cadena de ataque utiliza técnicas como DLL hijacking y bypass de Control de Acceso de Usuario de Windows (UAC) para cargar librerías maliciosas que realizan diversas funciones. […]

trackback

[…] investigation revealed that the file named “certificate.pem” within the altered package contains the malicious shell […]

trackback

[…] ASEC’s investigation highlighted a file named “certificate.pem” within the altered package as the container of the malicious shell code. […]

trackback

[…] investigation highlighted a file named “certificate.pem” within the altered package as the container of the malicious […]

Crazypedia
Crazypedia
20 days ago

The modified mimetools.dll does not appear to come from the official repository nor the repository for NotePad++ itself. Do you have any information about where these infected version of notepad++ are coming from?