숨고, 우회하고, 다시 나타나는 '회피형' 악성코드 공격 수법
처음에는 별문제 없어 보이다가도 관계가 깊어지거나 갈등이 생기면 슬쩍 피해버리고, 압박을 받으면 모습을 감추는 사람을 흔히 ‘회피형’이라고 한다. 멀어진 듯싶다가도 다시 나타나는 행동을 반복하며 상대의 감정과 에너지를 소모시키고, 결국 관계를 피폐하게 만든다.
최근 확인된 백도어 ‘MoiClient’의 공격 양상도 이와 비슷한 모습을 보인다. 대금 청구서로 위장해 사용자의 경계를 낮추고, 정상 프로그램에 숨어 실행된 뒤, 보안 통제에 부딪힐 때마다 다른 길을 찾아 움직인다. 권한 제어를 우회하고 취약한 드라이버를 악용해 자신을 막는 보안 제품까지 무력화하며, 작업 스케줄러를 통해 반복 실행된다. 막히면 우회하고, 잡으려 하면 다시 숨어드는 MoiClient의 공격 방식을 자세히 살펴보자.

대금 청구서 가면을 쓴 회피형 백도어
최근 안랩은 BYOVD(Bring Your Own Vulnerable Driver)와 RPC 기반 UAC Bypass 기법을 사용하는 백도어 유포 사례를 확인했다. BYOVD는 취약점이 존재하는 정상 드라이버를 공격에 가져와 악용하는 방식이다. 안랩은 해당 백도어가 BYOVD 기법을 수행할 때 사용하는 ‘moimoi’ 문자열을 바탕으로 이를 ‘MoiClient’라고 명명했다.
공격은 이메일로 전달되는 대금 청구서에서 시작된다. MoiClient는 대금 청구서로 위장한 .vhdx 파일 형태로 유포되며, 내부에는 PDF 문서처럼 보이는 Invoice.pdf.exe와 uxtheme.dll이 포함돼 있다. 여기서 uxtheme.dll이 MoiClient 악성 DLL이다. Invoice.pdf.exe는 정상 PDF 뷰어인 SumatraPDF이며, 이를 제외한 나머지 파일에는 시스템 숨김 속성이 적용돼 있어 일반 사용자는 uxtheme.dll과 같은 관련 파일의 존재를 알아차리기 어렵다.
사용자가 Invoice.pdf.exe를 PDF 문서인 줄 알고 실행하면 같은 경로에 있는 uxtheme.dll이 DLL 사이드 로딩(DLL Side-Loading) 방식으로 함께 로드되면서 MoiClient가 실행된다. 이후 MoiClient는 공격자의 C2 서버에서 추가 페이로드를 전달받아 메모리에서 실행한다. 분석 시점을 기준으로 해당 페이로드는 브라우저 정보를 탈취하는 ‘MoiXD Stealer’로 확인됐다.

[그림 1] .vhdx 파일 내용
정상 프로세스로 숨어든 MoiClient
MoiClient는 처음 실행된 뒤 다음과 같이 여러 단계의 인젝션 과정을 거쳐 최종 악성 페이로드를 실행한다.
일시정지(Suspended) 상태의 explorer.exe 프로세스 생성
↓
explorer.exe 프로세스의 Entry Point(EP)에 동일 경로의 data.dat 파일에 들어 있는 쉘코드 삽입
↓
삽입된 쉘코드는 추가적인 인젝션 루틴 수행
↓
최종 페이로드를 메모리에 로드ž실행
즉, 사용자에게 익숙한 정상 프로그램을 이용해 처음 실행된 뒤 윈도우의 정상 프로세스 안으로 실행 영역을 옮기며 다음 공격 단계로 이어가는 방식이다.

[그림 2] EP Overwrite & 실행 루틴

[그림 3] Shellcode Injection 결과
정면 승부 없는 권한 상승
MoiClient는 보안 제품을 무력화하는 등 높은 권한이 필요한 작업을 수행하기 위해 RPC 기반 UAC Bypass 기법도 사용한다. 이 방식은 Google Project Zero에서 소개한 AppInfo 로컬 RPC 인터페이스 악용 방식과 유사하다.
MoiClient는 ncalrpc 프로토콜 시퀀스를 사용해 AppInfo 서비스의 RPC 인터페이스에 연결한 뒤 winver.exe를 디버그 대상으로 실행하고 디버그 객체 핸들을 획득한다. 이후 동일한 AppInfo RPC 경로를 통해 자동으로 권한이 상승되는 시스템 바이너리인 ComputerDefaults.exe를 실행하고 관련 디버그 이벤트를 수신한다. 이 과정에서 ComputerDefaults.exe의 프로세스 핸들을 확보해 복제한다.

[그림 4] AppInfo RPC 인터페이스 연결

[그림 5] 디버그 객체 획득 루틴

[그림 6] ComputerDefaults.exe 프로세스 핸들 획득 루틴
복제된 핸들은 sc.exe와 PowerShell 프로세스의 부모 프로세스로 지정된다. 이에 따라 해당 프로세스가 이미 높은 권한으로 실행된 ComputerDefaults.exe의 권한을 상속받으면서 UAC를 우회할 수 있게 된다.

[그림 7] UAC Bypass 프로세스 실행
자신을 막는 보안 제품까지 무력화
권한을 확보한 MoiClient는 자신을 탐지하거나 차단할 수 있는 보안 제품을 무력화하기 위해 BYOVD 기법을 사용한다.
이번 공격에서는 Lenovo PC Manager의 취약한 드라이버인 BootRepair.sys 2.5.30.11281 버전이 악용됐다. MoiClient는 해당 드라이버를 %Public% 경로에 moimoi.sys라는 이름으로 생성한 뒤, 앞서 수행한 UAC Bypass를 이용해 커널 드라이버 서비스를 등록하고 실행한다.

[그림 8] BootRepair.sys 파일 드랍

[그림 9] 커널 드라이버 서비스 등록 및 실행
이후 실행 중인 프로세스 목록을 확인해 보안 제품 관련 프로세스가 발견되면 해당 PID를 \\.\BootRepair 장치에 전달해 종료한다. 종료 대상에는 Windows Defender 계열을 비롯해 Malwarebytes, Bitdefender, Kaspersky, Avast·AVG, McAfee 등 다양한 보안 제품의 프로세스가 포함돼 있다.

[그림 10] BootRepoair.sys dispatch 루틴 일부
Windows Defender를 대상으로는 별도의 방식도 사용한다. MoiClient는 C2 서버에서 defendnot.dll과 defendnot-loader.exe를 내려받은 뒤, UAC Bypass를 통해 확보한 권한으로 이를 PowerShell에서 실행해 Windows Defender 무력화를 시도한다.

[그림 11] Defendnot 프로그램 다운로드 및 실행

[그림 12] 무력화된 Windows Defender
사라지는가 싶더니 30분마다 다시 등장
MoiClient는 한 번 실행된 이후에도 공격을 이어가기 위해 작업 스케줄러를 등록한다.
먼저 기존에 등록된 작업 스케줄러 목록을 조회한다. 기존 작업이 없다면 MicrosoftWindowsUpdateTask 뒤에 임의의 네 자리 숫자를 붙여 작업명을 생성하고, 기존 작업이 존재하면 해당 작업명 뒤에 마침표(.)를 붙여 이름을 정한다.
- 기존 작업이 없는 경우: MicrosoftWindowsUpdateTask1234
- 기존 작업이 있는 경우: Task Name.
등록된 작업은 30분마다 실행된다. 이때 demo.exe라는 이름의 SumatraPDF가 실행되고, 같은 경로에 있는 uxtheme.dll, 즉 MoiClient가 다시 로드된다. 결과적으로 최초 실행 단계에서 사용된 DLL 사이드 로딩 과정이 작업 스케줄러를 통해 반복된다.

[그림 13] 생성된 작업 스케줄러
우회의 끝은 브라우저 정보 탈취
보안 제품을 무력화하고 지속성까지 확보한 MoiClient는 C2 서버에서 c.txt라는 이름의 추가 페이로드를 다운로드한다.

[그림 14] 추가 C2 페이로드 다운로드
다운로드한 페이로드는 CreateThread()를 이용해 메모리에서 실행된다. 분석 시점을 기준으로 c.txt는 ‘MoiXD Stealer’로 확인됐으며, ChromeElevator를 이용해 브라우저에 저장된 패스워드 등의 정보를 탈취한다.

[그림 15] 추가 C2 페이로드 인메모리 실행
결국 이번 공격은 단순한 이메일 첨부파일 실행에서 끝나지 않는다. 대금 청구서로 사용자의 실행을 유도한 뒤 정상 프로그램과 프로세스를 이용하고, 권한 제어를 우회하며 취약한 드라이버로 보안 제품까지 무력화한다. 이후 작업 스케줄러를 통해 반복 실행되면서 추가 악성코드를 내려받아 브라우저 정보 탈취로 공격을 이어간다.
지독한 회피형 MoiClient 감염이 의심된다면
MoiClient 감염이 의심된다면 다음 항목을 순서대로 점검해야 한다.
- 의도하지 않은 explorer.exe 프로세스 확인
의도하지 않은 explorer.exe 프로세스가 실행 중인지 확인하고, 발견될 경우 즉시 종료한다. - 작업 스케줄러 점검
의심스러운 작업이 등록돼 있는지 확인하고, 발견될 경우 삭제한다. 특히 아래와 같이 demo.exe가 실행되도록 설정된 항목이 있는지 확인할 필요가 있다.
- LocalAppData%\demo.exe -print-to-default -silent file.pdf - 관련 파일 존재 여부 확인
아래 파일이 시스템에 존재하는지 확인한다. 해당 파일이 확인되면 이번 공격에 사용된 악성 파일일 가능성이 있으므로 즉시 삭제해야 한다.
- %Public%\moimoi.sys
- %LocalAppData%\uxtheme.dll
- %LocalAppData%\data.dat
- %LocalAppData%\defendnot-loader.exe
- %LocalAppData%\defendnot.dll
공유 등급: TLP:GREEN
본 콘텐츠는 AhnLab TIP에 게시된 위협 정보를 바탕으로, 독자가 쉽게 이해할 수 있도록 주요 내용을 요약·재구성한 자료입니다. 위협 관련 상세 정보는 AhnLab TIP에서 확인할 수 있습니다.
- AhnLab콘텐츠마케팅팀
