학회_공부해요/기술_스터디

[이스트시큐리티] 업무 협조 요청 메일을 위장하여 유포 중인 악성코드 주의!

yenas0 2025. 1. 21. 22:42
반응형

https://blog.alyac.co.kr/5511

 

업무 협조 요청 메일을 위장하여 유포 중인 악성코드 주의!

안녕하세요? 이스트시큐리티 시큐리티대응센터(이하 ESRC)입니다.업무협조 요청 메일을 위장하여 악성코드를 유포하는 공격이 발견되어 사용자분들의 각별한 주의가 필요합니다.  해당 메일

blog.alyac.co.kr


 

업무협조 요청 메일을 위장해 악성코드를 유포하는 공격이 발견되었음

메일 제목: 업무 협조 문의 메일

유포 방법

- 메일 내 첨부 된 파일 확인 유도

- 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파일을 하나의 폴도에 넣어서 실행시켰다.

글케하면 팝업창 뜸..!!

 

반응형