[Malware analysis] Netwalker 랜섬웨어, 코로나 바이러스 피싱 분석 참조 - Netwalker 랜섬웨어, 코로나 바이러스 피싱 통해 사용자 감염시켜 > https://blog.alyac.co.kr/2851?category=750247 - 샘플 파일 다운로드 > https://app.any.run/tasks/f9fbd0e2-f8eb-4a42-accb-8494b9f50dce/ 코로나 바이러스(COVID-19) 피싱 이메일 "CORONAVIRUS_COVID-19.vbs"라는 첨부파일로 (그림 1)와 같이 난독화된 코드를 확인 할 수 있다.[그림 1 - 난독화된 .vbs] 해당 난독화된 코드를 디코딩 시 (그림 2)와 같은 걸 확인 할 수 있다. 디코딩된 코드를 살펴보면 임시디렉토리에 Ne..
[Reversing] 전역 변수 지역 변수_어셈블리어 전역 변수는 모든 함수가 접근하고 사용할 수 있다.지역 변수는 정의된 함수에서만 접근이 가능하다. 어셈블리어로는 어떻게 다르게 보이는지 확인해 본다.전역 변수는 메모리 주소에 의해 참조되며,지역 변수는 스택 주소에 의해 참조 된다.즉, 전역 변수는 아래와 같으며mov eax, dword_[주소]mov dword_[주소], eaxmov ecx, dword_[주소]push ecxds : [주소] > 전역변수 지역변수는 다음과 같다.([ebp-4]는 지역 변수 int x 가정)mov dword ptr [ebp-4], 0mov eax, [ebp-4]mov [ebp-4], eaxmov ecx, [ebp-4]push ecxss : [주소] > 지역변수
[Reversing] CreateProcessInternalW() Process Hollowing 기법을 이용하는 Lokibot 분석 시 궁금하여 CreateProcessInternalW()에 대해 메모해본다. 아래 표는 CreateProcess()의 내부함수를 나열하였으며, 후킹하거나 행위를 숨기기 위해 내부 함수를 사용하는 경우가 있다. kernel32.CreateProcessW kernel32.CreateProcessInternalW ntdll.ZwCreateUserProcess //프로세스 생성됨(Suspend 상태) ntdll.ZwResumeThread //메인 스레드 Resume(프로세스가 실행) (표 - 1) CreateProcessInternalW()의 내부 함수를 들어가본다.(그림 - 1..
[Reversing] PEB, Anti-Debugging PEB란? Process Environment Block로 프로세스의 정보를 담고있는 구조체로 FS 레지스터를 통해 얻을 수 있다. 각 프로세스들 마다 PEB를 가지고 있으며, 스레드로는 TEB를 가지고 있다.FS:[18] = TEB 주소 또한 PEB를 이용하여 dll과 api 주소를 얻을 수 있으며, 프로세스의 디버깅 유무도 함께 알 수 있다. 0x002 BYTE BeingDebugged; 0x008 void* ImageBaseAddress; 0x00C _PEB_LDR_DATA* Ldr; 0x018 void* ProcessHeap 0x064 DWORD NumberOfProcessors; 0x068 DWORD NtGlobalFlag; PEB의 안티..
[Reversing] ZwSetInformationThread, Anti-Debugging 참고> https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ps/psquery/class.htm> http://www.openrce.org/reference_library/anti_reversing ZwSetInformationThread의 두 번째 인자 값을 확인하여 안티디버깅 유무를 확인 할 수 있다. 두 번째 인자 값에 0x11(ThreadHideFromDebugger)를 전달할 경우 디버깅을 체크 확인하여, 우회를 원하면 해당 값을 0으로 수정하면 된다. typedef DWORD (WINAPI *PFZWSETINFORMATIONTHREAD) ( HA..
[Reversing] ZwContinue 언패킹 시 ZwContinue()을 자주 보게 되어 살펴보았다.먼저 ZwContinue()의 정보를 확인 할 수 있다.ZwContinue( IN PCONTEXT ContextRecord, //Pointer to CONTEXT structure for current thread IN BOOLEAN TestAlert ); 첫번째 인자의 CONTEXT구조체 포인터로 아래와 같은 구조체 정보를 확인 할 수 있다. typedef struct _CONTEXT { DWORD ContextFlags; DWORD Dr0; DWORD Dr1; DWORD Dr2; DWORD Dr3; DWORD Dr6; DWORD Dr7; FLOATING_SAVE_AREA FloatSave; DWOR..
[Reversing] DLL Injection - 샘플 파일 다운로드> 첨부파일 Dll 인젝션은 대상 프로세스가 스스로 LoadLibrary() 함수를 호출하게 만들어서 원하는 DLL을 로드하게 하는 것으로 먼저 LoadLibrary()는 GetModuleHandle()을 이용하여 kernel32.dll을 넣어 핸들을 구하고 GetProcAddress()을 이용하여 얻은 핸들과 "LoadLibrary" 문자열을 넣어서 함수 주소를 찾는다이후 CreateRemoteThread() 함수를 이용하여 원래 목표인 스레드를 생성하는 것이 아니고 LoadLibrary() 함수를 실행시켜 함수의 인자에 인젝션을 원하는 dll 파일의 경로를 적어 로드하는 것이다.. CreateRemoteThread() API을 이용한..
[Malware analysis] Anti-VM(Ursnif) Ursnif 분석 시 Anti-VM 우회 부분을 정리한 내용이다. > 이전 Unpacking 내용> Anti-Reversing 참고 - 샘플 파일 다운로드> 첨부파일 Payload(decoding) 상세 분석 Ursnif 디버깅 진행 시 해당 시스템 정보를 얻는 것을 확인 할 수 있었으며, 해당 정보을 이용하여 Anti-Vm과 CPU 사이클 횟수 차를 이용하여 Rdtsc 안티 디버깅이 있는 걸 확인 할 수 있다. 즉, 해당 기법을 통하여 디버깅 유무를 확인하는 사실을 확인 할 수 있다. 그림 1 – Anti_VM, Rdtsc 안티 디버깅 먼저 Anti-Vm을 우회하기 위해 해당 “vbox”, “qemu”, “vmware”, “virtual h..
- Total
- Today