Formbook에 대한 리버스 엔지니어링 분석으로, .NET 어셈블리 조작과 XOR 복호화를 사용하는 정보 탈취 프로그램입니다. XOR 복호화 루프, CLR 초기화, SQLExpress 미끼, 키로거/클립보드 API를 포함하여 x32dbg를 통해 전체 페이로드를 추출했습니다.
x32dbg 메모리 덤프는 Formbook이 구성 데이터를 복호화하고 NtAllocateVirtualMemory를 사용하여 해당 데이터를 위한 메모리를 할당한다는 것을 보여줍니다.
NtAllocateVirtualMemory – 복호화된 페이로드를 위한 메모리를 할당합니다.mov edx, dword ptr ds:[esi+1C] – ESI 레지스터에서 암호화된 데이터의 크기를 가져옵니다.push 0x1000 – MEM_COMMIT을 사용하여 메모리를 할당합니다.push 0 – 할당 유형 또는 보호 플래그를 지정합니다.mov edx, dword ptr ds:[esi+4] – 또 다른 구성 값을 가져옵니다.lea ecx, [ebp-4] – 지역 변수에 대한 포인터를 로드합니다.test ecx, ecx – 포인터가 유효한지 확인합니다.mov ecx, [esi+1C] – 암호화된 데이터 크기를 다시 가져옵니다.push 0x1000 – MEM_COMMIT 플래그를 반복합니다.push 0 – 할당 플래그를 반복합니다.ConnectionStrings – C2 주소를 위한 .NET 구성 키입니다.system.data, DbProviderFactories – .NET 구성 섹션 (미끼일 가능성).system.serviceModel – .NET 서비스 모델 섹션.<DbProviderFactories /> – 빈 XML 요소 (미끼).ConnectionStrings에 C2 URL이 포함되어 있을 가능성이 높습니다.
NtAllocateVirtualMemory와 ConnectionStrings 복호화를 보여주는 x32dbg 화면.
이 x32dbg 화면은 Formbook이 .NET 어셈블리 조작, XOR 기반 복호화, 그리고 CLR (Common Language Runtime) 초기화를 사용하여 페이로드를 실행한다는 것을 보여줍니다.
xor eax, eax – EAX를 초기화하여 XOR 기반 복호화를 나타냅니다.call 0x6C6E7F60 – 복호화 또는 처리 함수를 호출합니다.call 0x6C6EE8B0 – 또 다른 처리 함수를 호출합니다.DllCanUnloadNowInternal – .NET 어셈블리 로드/언로드를 관리합니다.PublicKeyToken=31bf3856ad364e35 – Microsoft 어셈블리를 사칭합니다.system.serviceModel – .NET 서비스 모델 구성 (C2 통신).System.Web – .NET 웹 구성 (HTTP 기반 C2).clr.NGenCreateNGenWorker – .NET Native Image Generator 워커를 생성합니다.clr.GetCLRFunction – CLR 함수를 가져옵니다.return to clr.Initialize – .NET 런타임을 초기화합니다.xor eax, eax와 이후의 call 함수들은 XOR 기반 복호화를 확인시켜 줍니다.PublicKeyToken은 Microsoft 어셈블리처럼 보이게 만듭니다.system.serviceModel과 System.Web에 C2 설정이 저장됩니다.
XOR 복호화, DllCanUnloadNowInternal, CLR 초기화를 보여주는 x32dbg 화면.
이 x32dbg 화면은 Formbook이 SQLExpress 관련 문자열을 미끼로 사용하고 .NET CLR을 초기화하여 페이로드를 실행한다는 것을 보여줍니다.
L"ce=..\SQLEXPR" – SQL 데이터 탈취와 관련 없는 미끼 문자열입니다. 악성코드를 합법적인 SQL Server Express 구성 요소처럼 보이게 하는 데 사용됩니다clr.InitializeFusion – .NET Fusion 어셈블리 로더를 초기화하며, 이는 .NET 페이로드를 메모리에 로드하는 데 사용됩니다.clr.GetCLRFunction – 관리 코드를 실행하기 위한 CLR 함수를 가져옵니다.clr.NGenCreateNGenWorker – .NET Native Image Generator 워커를 생성하여 페이로드가 JIT 컴파일 없이 실행될 수 있게 합니다.return to clr.InitializeFusion+1751 – CLR 초기화 루틴으로 돌아갑니다.SQLEXPR 문자열은 보안 도구의 탐지를 피하기 위한 미끼입니다.
L"ce=..\SQLEXPR", clr.InitializeFusion, CLR 함수들을 보여주는 x32dbg 화면.
이 x32dbg 화면은 표준 PE DOS 스텁 메시지 이후에 위치한 Formbook 페이로드의 시작을 보여줍니다. 악성코드는 XOR 복호화 루프를 사용하여 메모리에서 페이로드를 복호화합니다.
This program cannot be run in DOS mode – 표준 PE DOS 스텁 메시지.xor dword ptr ds:[edi], eax – EDI의 데이터를 EAX와 XOR합니다 (복호화).mov al, byte ptr ds:[edi+1] – EDI+1에서 AL로 바이트를 로드합니다.xor al, byte ptr ds:[edx+1] – AL을 EDX+1의 바이트와 XOR합니다 (복호화 키).mov byte ptr ds:[edi], al – 복호화된 바이트를 EDI에 다시 씁니다.call ntdll.77DDE45C – RtlIsCurrentThreadAttachExempt를 호출합니다 (안티 디버그).cmp dword ptr ds:[esi+4], 0 – 카운터 (ESI+4)가 0인지 확인합니다.sub dword ptr ds:[esi+4], eax – 카운터를 감소시킵니다.test edx, edx – EDX가 0인지 테스트합니다.jne ntdll.77DDF9F4 – 0이 아니면 루프백합니다 (복호화 루프).RtlIsCurrentThreadAttachExempt를 호출합니다.
표준 PE DOS 스텁 메시지 이후의 XOR 복호화 루프를 보여주는 x32dbg 화면.
추출된 페이로드에 대한 Binary Ninja 분석은 Formbook이 키로깅, 클립보드 하이재킹, 권한 상승에 사용하는 포괄적인 API 목록을 보여줍니다.
SetClipboardData, GetClipboardData – 클립보드 데이터를 탈취하고 교체합니다.SetWindowsHookExW, SetWindowsHookExA – 키보드 훅을 설치합니다.NtSetInformationProcess, NtCreateThreadEx, NtTerminateProcess.NtAdjustPrivilegesToken – 토큰 권한을 조정합니다.NtShutdownSystem, SystemParametersInfoA/W.MsInstallProductW/A – 지속성을 위해 제품을 설치합니다.CreateProcessInternalW – 새 프로세스를 생성합니다.MsInstallProductW/A는 악성코드가 시작 시 실행되도록 보장합니다.
키로거, 클립보드, 권한 상승 API를 보여주는 Binary Ninja 화면.
이 분석은 암호화된 구성, .NET 어셈블리 조작, XOR 복호화, 키로깅/클립보드 하이재킹을 사용하는 정교한 정보 탈취 악성코드인 Formbook을 밝혀냈습니다.
NtAllocateVirtualMemory를 사용하여 메모리에서 구성을 복호화합니다.DllCanUnloadNowInternal과 PublicKeyToken을 사용하여 Microsoft 어셈블리를 사칭합니다.clr.InitializeFusion과 clr.NGenCreateNGenWorker를 사용하여 .NET 페이로드를 실행합니다.L"ce=..\SQLEXPR"를 미끼로 사용합니다.SetWindowsHookExW, SetClipboardData, GetClipboardData를 사용합니다.NtAdjustPrivilegesToken을 사용합니다.NtAllocateVirtualMemory와 ConnectionStrings를 모니터링합니다.DllCanUnloadNowInternal과 CLR 초기화를 탐지합니다.SetWindowsHookExW와 SetClipboardData 호출을 모니터링합니다.NtAdjustPrivilegesToken과 NtCreateThreadEx 사용을 확인합니다.분석된 Formbook 샘플은 직접 분석을 수행하고자 하는 분들을 위해 MalwareBazaar에서 이용할 수 있습니다:
🔗 Formbook Sample on MalwareBazaar
사용된 도구: x64dbg, Binary Ninja