일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 변태는
- ue4dumper
- 네이버카페
- 취약점
- shell_gpt
- CryptoJS
- 안전결제
- 허리디스크
- CJ대한통운 #쿠팡 #통관번호오류 #통관고유번호오류 #안주원팀장 #모건인베스트
- Sequoia
- 중고나라
- ssrf
- speed-measure-webpack-plugin
- open redirect
- 척추관협착증
- MongoDB #NoSQL #CreateUser #DropUser #mongod #mognod.conf
- 보이스피싱 #대검찰청 #명의도용 #비밀번호 #계좌번호 #공공기관 #가짜검찰청
- intelmac
- Frida
- esbuild
- Malware Sample
- 채팅환전사기
- NUGU
- 모의해킹
- 거래사기
- self-signed
- XSS
- 많다..
- react
- 로맨스스캠
- Today
- Total
annyoung
기업메일로 첨부된 스피어 피싱 악성코드 분석 본문
불과 몇 시간전, 샘플을 입수해서 분석하기로 결정하고 분석해봤다.
5분? 정도 봤는데 25번 포트로 통신하는거보니 SMTP라고 생각했고 정보유출에 핵심을 두고 분석하였다.
이메일이 삭제되어 정확히 드랍된 파일인지, 숙주인지 모르겠다. 그냥 분석 해보려고 한다.
FileName |
axoleoyt.exe |
MD5 |
D555F23D6B5C902C7455A9FC9EF5FDB7 |
SHA-1 |
7D7B35177D2E9A872133247C40360FF197FF4A9C |
Packer |
X |
파일명을 보니 아마도 랜덤으로 생성 되었고, 드랍된 파일로 추정된다.
.rdata:0040DA64 00000011 C Inter your Name: .rdata:0040DA78 00000011 C Inter your mail: |
해당 바이너리의 스트링을 보면 mail이 있다. 뭔진 몰라도 증거물 획득
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { int result; // eax@2 struct tagMSG Msg; // [sp+8h] [bp-38h]@3 HANDLE v6; // [sp+28h] [bp-18h]@1 v6 = CreateMutexA(0, 1, "MTX"); LoadStringA(hInstance, 0x67u, Buffer, 100); LoadStringA(hInstance, 0x6Du, byte_411F78, 100); LoadLibraryA("riched32.dll"); loc_407F30((volatile LONG *)hInstance); if ( loc_40A550((volatile LONG *)hInstance) ) { while ( GetMessageA(&Msg, 0, 0, 0) ) { TranslateMessage(&Msg); DispatchMessageA(&Msg); } result = Msg.wParam; } else { result = 0; } return result; } |
1. WinMain부터 보면 MTX라는 뮤텍스를 생성한다.
2. GetMessageA를 지속적으로 실행시키면서 메시지를 받아오는데 SendMessage, PostMessage 이 두개를 사용하여 메시지를 보낸다. 대부분 다른 프로세스에 의해서 보내지는 경우가 많다.
이렇게 소스코드가 보이는 경우 대부분 BeginPaint, EndPaint와 같은 API를 사용하여 원격제어를 위해 사용된다.
int __usercall sub_403780<eax>(int a1<eax>, int a2<ecx>, int a3<edi>, int a4<esi>) { int v4; // ebx@1 int result; // eax@2 int v6; // [sp-4h] [bp-Ch]@1 v4 = a1; v6 = a1; do { result = *(_DWORD *)a3 ^ *(_DWORD *)a4; *(_BYTE *)a3++ = result; ++a4; --v4; if ( !v4 ) { v4 = v6; a4 -= v6; } --a2; } while ( a2 ); return result; } |
- 새로운 악성코드를 드랍하기 위한 복호화 루틴으로 추정된다. 인자 값으로 두 개의 값이 넘어온다.
인자값은 다음에 나오는 설명과 같다.
sub_403780(result, dword_410429, (int)&unk_410318, (int)word_40AE3E); |
410318과 40AE3E를 가져와 복호화 하는 것으로 추정된다.
0012F7C4 5A48A0E2 /CALL to IsDebuggerPresent from uxtheme.5A48A0DC |
- 디버거 탐지를 하는 루틴이 있어서 잘 확인하며 분석하길 바란다.
0012F498 0040853F /CALL to CreateWindowExA from axoleoyt.00408539 0012F49C 00000000 |ExtStyle = 0 0012F4A0 004109DC |Class = "static" 0012F4A4 0040DA64 |WindowName = "Inter your Name:" 0012F4A8 40000000 |Style = WS_CHILD 0012F4AC 00000004 |X = 4 0012F4B0 00000022 |Y = 22 (34.) 0012F4B4 00000122 |Width = 122 (290.) 0012F4B8 0000001E |Height = 1E (30.) 0012F4BC 004902C0 |hParent = 004902C0 ('GlobalAppl',class='MyClass') 0012F4C0 00000000 |hMenu = NULL 0012F4C4 00400000 |hInst = 00400000 0012F4C8 00000000 \lParam = NULL |
윈도우를 생성한다. 이때 생성되는 이름은 Inter your Name이다. (Inter는 죽은 사람을 매장한다는 뜻을 가지고 있는데 이름을 적으라 이건가. 뭐지 이 악성코드는 ㅎㅎㅎ 재미진다.)
0012F498 00408575 /CALL to CreateWindowExA from axoleoyt.0040856F 0012F49C 00000000 |ExtStyle = 0 0012F4A0 0040DA8C |Class = "static" 0012F4A4 0040DA78 |WindowName = "Inter your mail:" 0012F4A8 40000000 |Style = WS_CHILD 0012F4AC 00000004 |X = 4 0012F4B0 00000004 |Y = 4 0012F4B4 00000122 |Width = 122 (290.) 0012F4B8 0000001E |Height = 1E (30.) 0012F4BC 004902C0 |hParent = 004902C0 ('GlobalAppl',class='MyClass') 0012F4C0 00000000 |hMenu = NULL 0012F4C4 00400000 |hInst = 00400000 0012F4C8 00000000 \lParam = NULL |
위와 같다. 단, 윈도우 이름은 Inter your mail이다.
0012DD00 1310169A /CALL to CreateProcessA from 13101694 0012DD04 00000000 |ModuleFileName = NULL 0012DD08 13108010 |CommandLine = "C:\WINDOWS\System32\svchost.exe" 0012DD0C 00000000 |pProcessSecurity = NULL 0012DD10 00000000 |pThreadSecurity = NULL 0012DD14 00000000 |InheritHandles = FALSE 0012DD18 00000004 |CreationFlags = CREATE_SUSPENDED 0012DD1C 00000000 |pEnvironment = NULL 0012DD20 00000000 |CurrentDir = NULL 0012DD24 0012E008 |pStartupInfo = 0012E008 0012DD28 0012E05C \pProcessInfo = 0012E05C |
정상파일로 속이기 위한 목적과 파일로 남기지 않기 위함이라 생각하면 된다. 코드 인젝션을 위해 프로세스를 생성한다.
(코드 인젝션이란, 프로세스에 악성 데이터를 주입하는 방식이다.)
13103000에 있는 데이터를 svchost.exe에 주입시킨다.
svchost.exe는 C&C IP를 불러온다.
136.243.248.168:443 80.78.245.84:443 185.20.225.58:443 91.237.198.93:443 109.120.169.184:443 93.179.68.82:443 144.76.232.55:443 93.170.137.27:443 |
악성코드의 C&C는 위와 같다.
원격제어형 악성코드였다. 대략적으로 알아 들을 수 있는건 위치정보 가져오는 것(아마 GeoIP를 사용하는 것으로 보임), 아마도 루트킷 설치(?), 파일을 다운받거나, 파일을 실행시키거나, 메모리에 올리거나, 랜덤으로 명령을 실행하는 기능을 가진 것으로 보인다.
0093F9CC 0950182A /CALL to CreateProcessA from svchost.09501824 0093F9D0 00000000 |ModuleFileName = NULL 0093F9D4 09506258 |CommandLine = "C:\WINDOWS\System32\svchost.exe" 0093F9D8 00000000 |pProcessSecurity = NULL 0093F9DC 00000000 |pThreadSecurity = NULL 0093F9E0 00000000 |InheritHandles = FALSE 0093F9E4 00000004 |CreationFlags = CREATE_SUSPENDED 0093F9E8 00000000 |pEnvironment = NULL 0093F9EC 00000000 |CurrentDir = NULL 0093F9F0 0093FCD4 |pStartupInfo = 0093FCD4 0093F9F4 0093FD28 \pProcessInfo = 0093FD28 |
생성된 svchost.exe는 다시 svchost.exe라는 프로세스를 생성한다.
처음엔 무슨 이유인지 몰랐지만, C&C를 랜덤으로 연결시킨 후에 연결되면 프로세스를 생성하여 코드 인젝션을 한다.
이 코드 인젝션된 svchost.exe는 SMTP를 사용하여 정보를 유출하는 역할을 한다.
메일을 보내기 위해 구성된 문자열들이 보이며 접속되는 것을 볼 수 있다.
'분석생활' 카테고리의 다른 글
미국형 선입금 사기 (0) | 2015.06.09 |
---|---|
I am waiting for your reply (0) | 2015.06.08 |
스미싱 조직 (0) | 2015.06.04 |
민사사건 출석 명령서 스미싱 분석 (0) | 2015.06.02 |
여러 사이트를 이용한 파밍 유포 (3) | 2015.05.31 |