[이스트시큐리티] 업무 협조 요청 메일을 위장하여 유포 중인 악성코드 주의!
업무협조 요청 메일을 위장해 악성코드를 유포하는 공격이 발견되었음
메일 제목: 업무 협조 문의 메일
유포 방법
- 메일 내 첨부 된 파일 확인 유도
- 7z압축포맷 파일(첨부 파일) 내에는 문의사항 내용정리.js라는 자바 스크립트 존재
- 자바 스크립트 내에 난독화 된 코드를 숨겨 둠
- 자바스크립트 실행 시 특정 URL에서 pure.txt를 받아 tmp.ps1로 내부 코드를 저장, 실행 후 삭제
- tmp.ps1파일은 특정 URL에서 pure.zip파일 다운받아 압축 해제후 내부 실행파일을 실행
- 실행된 exe파일을 통해 dll파일이 로딩되고 이를 통해 악성 dll 파일이 로딩되어 실행됨
DLL 사이드 로딩(Side-Loading) 공격기법
: 정상적인 응용프로그램과 악성 DLL 파일을 같은 폴더 경로에 저장하여 응용프로그램이 실행될 때 악성 DLL파일이 함께 동작하도록 만드는 공격기법
: 공격자가 응용 프로그램의 DLL 로드 매커니즘을 악용해 악성 코드를 실행하는 공격 기법
일반적인 공격 단계
1. 목표 애플리케이션 식별: dll로드 경로를 확인하지 않는 애플리케이션 식별
2. 악성 dll 생성: 정상적인 dll과 동일한 이름으로 악성 dll을 생성
3. 악성 dll 배치: 악성 dll을 애플리케이션이 검색하는 경로에 배치
4. 애플리케이션 실행: 사용자가 앱 실행시 애플리케이션은 악성 dll을 로드하고 악성 코드를 실행한다
주요 사례로는 APT, spear phishing 같은게 있음
위에 소개한 기사에서 나온 dll파일 동작과정은
1. 실행된 VERSION.dll 파일은 자신과 부모 파일을 %APPDATA% 경로로 복사
2. %TEMP% 폴더에 svchost.exe 생성 후 실행
3. svchost.exe는 내부 데이터를 AES256으로 복호화
4. GZIP 압축 해제 후 PE 파일 실행
5. PE 파일은 파일 생성 없이 메모리에서 동작하는 파일리스 형태
4. 최종적으로 Remcos악성코드 실행
Remcos 악성코드?
- 원격제어 악성코드로 C&C 서버와 통신
- 공격자 명령에 따라 악성행위 수행
DLL 사이드로딩 실습
위에 기사에서 exe파일에 dll 두개로 실행시켰다..
정상 dll이랑 악성 dll 만들어서 실습을 해보았다. 악성행위를 할 수는 없으니 팝업창을 띄우도록 해보았다.
exe파일 코드
#include <windows.h>
#include <iostream>
typedef void (*DLLFunction)();
int main() {
HMODULE hModule = LoadLibrary(L"legit.dll");
if (!hModule) {
std::cerr << "Failed to load legit.dll" << std::endl;
return 1;
}
DLLFunction func = (DLLFunction)GetProcAddress(hModule, "Run");
if (!func) {
std::cerr << "Failed to find function in legit.dll" << std::endl;
FreeLibrary(hModule);
return 1;
}
std::cout << "Executing function in legit.dll" << std::endl;
func();
FreeLibrary(hModule);
return 0;
}
dll1
#include <windows.h>
#include <iostream>
typedef void (*MaliciousFunction)();
extern "C" __declspec(dllexport) void Run() {
HMODULE hMalicious = LoadLibrary(L"malicious.dll");
if (!hMalicious) {
std::cerr << "Failed to load malicious.dll" << std::endl;
return;
}
MaliciousFunction maliciousFunc = (MaliciousFunction)GetProcAddress(hMalicious, "Execute");
if (!maliciousFunc) {
std::cerr << "Failed to find function in malicious.dll" << std::endl;
FreeLibrary(hMalicious);
return;
}
std::cout << "Calling malicious function..." << std::endl;
maliciousFunc();
FreeLibrary(hMalicious);
}
dll2
#include <windows.h>
#include <iostream>
extern "C" __declspec(dllexport) void Execute() {
MessageBox(NULL, L"공부해요", L"Warning", MB_OK | MB_ICONEXCLAMATION);
}
비쥬얼 스튜디오로 코드를 만들었고 만들어진 exe, dll파일을 하나의 폴도에 넣어서 실행시켰다.
글케하면 팝업창 뜸..!!