소개
QBot 또는 Pinkslipbot으로도 알려진 Qakbot은 10년 넘게 존재해 온 뱅킹 트로이 목마입니다.2007년에 야생에서 발견되었으며 그 이후로 지속적으로 유지 및 개발되고 있습니다.
Qakbot은 전 세계 최고의 뱅킹 트로이 목마 중 하나가 되었습니다.주요 목적은 은행 자격 증명 (예: 로그인, 암호 등) 을 훔치는 것이지만 금융 운영을 감시하고, 자신을 유포하고, 랜섬웨어를 설치하여 손상된 조직의 수익을 극대화할 수 있는 기능도 확보했습니다.
Qakbot의 배송 수단은 일반적으로 피해자에게 보내는 이메일입니다.이메일 첨부 파일일 수도 있고 이메일에 있는 링크일 수도 있습니다.이메일 첨부 파일에는 일반적으로 Qakbot 페이로드를 다운로드하는 문서가 포함됩니다.Menlo Labs는 최근 이러한 유형의 Qakbot 캠페인을 몇 가지 목격하고 있습니다.
이 블로그에서는 다양한 것을 사용하는 다양한 Qakbot 캠페인에 대해 논의할 것입니다. 고도로 회피적인 적응형 위협 (HEAT) 테크닉과 Qakbot 페이로드의 작동 방식에 대해서도 설명하겠습니다.
Qakbot에서 사용하는 HEAT 기법
Menlo Labs에서 식별한 Qakbot 캠페인에 사용된 다양한 HEAT 기법은 다음과 같습니다.
- 하이퍼링크가 있는 이메일 루어
- 엑셀 4.0 매크로
- 폴리나 익스플로잇 (CVE-2022-30190)
- HTML 스머글링
이러한 각 기법의 예를 제공하겠습니다.
하이퍼링크가 있는 이메일 루어
이 캠페인에서는 악성 페이로드를 호스팅하기 위해 양성 도메인이 손상되고 페이로드에 대한 링크가 이메일을 통해 전송됩니다.Qakbot은 기존 방어 체계를 우회하기 위해 암호로 보호된 ZIP 파일인 a를 사용했습니다. 알려진 HEAT 기술.아래는 VT에서 암호로 보호되는 이러한 페이로드가 제대로 감지되지 않는 것을 보여주는 스크린샷입니다.

아래 스크린샷은 Qakbot이 기존 방어를 회피하기 위해 사용하는 초기 액세스 방법을 보여줍니다.

공격 킬 체인은 다음과 같습니다.
- 악성 ZIP 파일을 가리키는 URL이 포함된 이메일이 피해자에게 전송됩니다 (hxxp [://] zigmaTraveles [.] LK/INMO/Main3173988897 [.] zip).
- ZIP 파일은 비밀번호로 보호됩니다 (pwd - U523 md5 - afd1d504d88971e6f09d89e9dde8aeb8).
- ZIP 파일 안에는 실행할 PowerShell 명령 또는 JS를 쉽게 제공할 수 있는 기능이 있는 링크 파일이 있습니다.
- 링크 (md5 - 622D21C40A25F9834A03BFD5FF4710C1) 파일을 열면 JS (md5 — 76cd1dfafc4d0fd89e228fe82ea721f6) 파일이 다운로드됩니다.그러면 JS 파일이 Qakbot 페이로드를 다운로드합니다.
아래 스크린샷은 악의적인.lnk 다운로드 JS 파일 중 하나를 보여줍니다.

난독화된 JS 파일은 아래와 같이 런타임 중에 암호를 해독하여 C2에서 페이로드를 다운로드하고 실행합니다.

엑셀 4.0 매크로
이 캠페인에서는 Excel 4.0 매크로를 사용하여 스프레드시트 셀에 명령을 추가하고 이메일 첨부 파일을 의도한 대상으로 보냈습니다.
다음은 Qakbot을 제공하기 위해 Excel 4.0 매크로를 사용하는 첨부 파일이 포함된 이메일의 몇 가지 예입니다.

Excel 파일의 첨부 파일을 보여주는 이메일입니다.

XLS 문서를 열면 Excel 4.0 매크로를 실행할 매크로를 활성화하라는 메시지가 사용자에게 표시됩니다.

XLS 파일에 있는 이러한 명령은 C2에서 페이로드를 다운로드하고 실행합니다.

CVE-2022-30190
이 캠페인에서는 CVE-2022-30190 취약점 (폴리나라고도 함) 을 활용하여 Qakbot을 제공했습니다.익스플로잇이 포함된 문서를 실행하면 ms-msdt URL 프로토콜을 사용하여 PowerShell 코드를 실행하는 외부 HTML 파일이 호출됩니다.
다음은 Qakbot을 제공하기 위해 CVE-2022-30190 를 사용하여 첨부 파일이 포함된 이메일의 몇 가지 예입니다.

다음은 Qakbot을 배송하기 위해 CVE-2022-30190 (md5 - 7a91b01a01a037ccbfe658916161643d0a65a) 를 사용하는 문서의 몇 가지 예입니다.

문서를 열면 HTML 파일 다운로드를 시도하고 Qakbot 페이로드를 추가로 다운로드합니다.

HTML (md5 - ea48f95ab4f3ca3b0c687a7a726cb00c49)

HTML 스머글링
이 캠페인에서는 특별히 제작된 HTML 첨부 파일 또는 웹 페이지를 사용하여 방화벽 뒤에서 로컬로 멀웨어를 구축했습니다.
다음은 HTML Smuggling 첨부 파일이 포함된 이메일의 몇 가지 예입니다.

이 캠페인에서 스팸 이메일에는 그림과 같이 Base64로 인코딩된 HTML 파일 (md5- 2881945BDF1DB34216CC565FEF4501D4) 이 포함되어 있습니다.

“var text” 함수는 아래와 같이 Adobe 이미지와 실행 시 생성되는 암호로 보호된 ZIP 파일 “Report Jul 14 71645.zip” (md5- 5F57C9BF0923DE15046CCB14E41CE0A6 pwd - abc444) 로 Base64로 인코딩되었습니다.

공격의 감염 사슬은 다음 이미지에 나와 있습니다.

HTML 스머글링 기법을 사용한 Qakbot 공격의 감염 사슬은 다음과 같습니다.
- 피해자가 HTML 이메일 첨부 파일을 엽니다.
- HTML 파일은 Base64 형식을 디코딩하여 페이로드를 구성하고 Adobe 이미지와 암호로 보호된 ZIP 파일을 표시합니다.
- 암호로 ZIP 파일을 추출하면 피해자의 컴퓨터에 ISO 파일 “Report Jul 14 71645.iso”가 삭제됩니다.
- Qakbot 페이로드가 포함된 ISO 파일은 피해자의 컴퓨터에 전달됩니다.
Qakbot 페이로드 분석
다음으로 Qakbot 페이로드의 작동에 대해 설명하겠습니다. Qakbot 페이로드는 ISO 파일과 Qakbot 실행을 담당하는 내부 구성 요소를 사용합니다.
7월 14일 신고 71645.iso
아카이브에서 다운로드한 ISO 파일에는 7533.dll, calc.exe, 보고서 7월 14일 71645.lnk 및 파일이 포함되어 있습니다. WindowsCodecs.dll

파일의 기능 및 세부 사항은 다음과 같습니다.
- 보고서 7월 14일 71645.lnk (md5 - 622D21C40A25F9834A03BFD5FF4710C1)
- 페이로드를 실행하는 데 사용되는 단축키 파일
- Calc.exe (md5 - 60B7C0FEAD45F2066E5B805A91F4F0FC)
- 합법적인 윈도우 7 계산기 응용 프로그램
- 윈도우 Codecs.dll (md5 - 21930ABBBB06588EDF0240CC60302143)
- calc.exe 파일을 실행하고 7533.dll 파일을 로드하기 위해 에서 DLL 사이드로드로 사용되는 악성 .dll regsrv.exe
- 7533.dll (md5 - 1FFFB3FDB0A4B780385CC5963FD4D40C)
- 칵봇 페이로드
ISO 파일을 실행하면.lnk 파일은 calc.exe 파일을 실행하고 .dll 사이드로딩을 사용하여 WindowsCodecs.dll 를 로드합니다. 그런 다음 7533.dll regsrv32.exe 를 사용하여 (Qakbot) 를 로드합니다.
Qakbot 페이로드를 폭파시키려면 DLL 사이드로딩 공격 회피 기술이 사용됩니다.이 기법을 사용하면 아래와 같이 calc.exe 는 가장한 WindowsCodecs.dll 파일을 로드하여 7533.dll regsv32.exe 명령을 사용하여 파일을 로드합니다.

이 최종 페이로드는 마침내 wermgr.exe 에 악성 코드를 주입합니다.

regsrv32.exe 파일을 사용하여 .dll 파일을 로드하는 Qakbot 페이로드는 런타임 패커를 사용하여 패킹됩니다.패커에는 아래와 같이 Qakbot의 압축을 푼 버전을 가져오기 위한 XOR 암호 해독이 포함됩니다.

압축을 푼 페이로드는 2022년 6월 21일에 컴파일된 32비트.dll 파일입니다.

압축을 푼 이 바이너리는 리소스 섹션 RCDATA (3C91E639 - C2, 89210AF9- 봇넷 ID) 에 C2와 봇넷 ID를 저장합니다.

아래와 같이 RC4를 사용하여 리소스 섹션에 있는 C2 및 봇넷 ID를 해독합니다.

RC4를 사용하여 봇넷 ID와 C2의 암호를 해독하는 Python 스크립트 (부록 참조) 를 만들었습니다.우리가 분석한 바이너리는 봇넷 ID 오바마 201을 사용한 것이었습니다.

아크봇에 대한 멘로 보호
Menlo를 사용하는 고객은 초기 액세스로부터 보호되므로 엔드포인트 감염을 방지할 수 있습니다.
멘로 플랫폼은 Qakbot 멀웨어가 사용하는 다음과 같은 HEAT 기술로부터 보호합니다.
암호로 보호된 ZIP 파일
Menlo 플랫폼은 인터넷에서 다운로드한 모든 문서와 아카이브를 사용자의 엔드포인트 장치에서 멀리 떨어진 Isolation Core™ 에서 엽니다.멀웨어 공격자는 일반적으로 보안 방어를 회피하기 위해 악성 페이로드를 암호로 보호합니다.다운로드가 암호로 보호된 경우 Menlo Platform은 사용자에게 암호를 입력하라는 메시지를 표시합니다.암호가 제공되면 플랫폼은 파일을 검사하여 다운로드해도 안전한지 확인합니다.
엑셀 4.0 매크로
Menlo 이메일 제품은 조직 외부에서 받은 모든 첨부 파일을 래핑합니다.그런 다음 래핑된 첨부 파일이 Isolation Core™ 에서 열립니다. 그러면 문서가 사용자가 볼 수 있는 안전한 버전으로 변환되고 검사 엔진은 파일이 양호한지 불량인지 판단합니다.인터넷에서 다운로드한 모든 문서를 항상 보거나 문서의 SAFE 버전이 엔드포인트에 다운로드되도록 정책을 구성할 수도 있습니다.Menlo의 Safedoc 기능은 모든 활성 콘텐츠를 제거하므로 악의적인 부분이 모두 제거됩니다.
폴리나 익스플로잇
Follina는 Microsoft 진단 도구를 활용하여 원격 코드를 가져오고 실행하는 익스플로잇에 부여된 이름입니다.멘로 플랫폼은 인터넷에서 다운로드한 모든 문서와 아카이브를 사용자의 엔드포인트가 아닌 Isolation Core™ 에서 엽니다.검사 엔진이 파일의 양호 여부를 판단하는 동안 문서는 사용자가 볼 수 있는 안전한 버전으로 변환됩니다.인터넷에서 다운로드한 모든 문서를 항상 보거나 문서의 SAFE 버전이 엔드포인트에 다운로드되도록 정책을 구성할 수도 있습니다.Menlo의 Safedoc 기능은 활성 콘텐츠를 모두 제거하여 악의적인 부분을 제거합니다.
HTML 스머글링
HTML 스머글링의 목표는 HTML5/JavaScript 기능을 사용하여 파일 다운로드를 제공하는 것이며, 일반적으로 두 가지 유형으로 제공됩니다.
Qakbot은 이메일 첨부 파일을 통해 HTML 스머글링을 사용하지만 Menlo Security는 많은 것을 확인했습니다. 악성 캠페인 HTML 밀수를 위한 웹 벡터 사용.HTML Smuggling을 통해 엔드포인트에 다운로드되는 악성 페이로드는 브라우저에서 생성되기 때문에 모든 네트워크 검사를 회피합니다.Menlo Isolation Core™ 는 브라우저에 구성된 모든 유형의 JS 및 페이로드에 대한 가시성을 제공하므로 웹 벡터를 통해 전달될 때 이러한 종류의 공격을 탐지하고 차단합니다.
결론
이 게시물에서는 분석한 Qakbot 캠페인에서 사용한 다양한 HEAT 기술을 선보였습니다.Menlo Isolation 플랫폼을 사용하는 고객은 보호됩니다.
IOC
마이터 어트&CK 테크닉
충수
Qakbot 구성 암호 해독 코드
—----------------------Config Decrptor—-----------------------------------
import hashlib
from arc4 import ARC4
import struct
import socket, sys
key = b"\\System32\\WindowsPowerShel1\\v1.0\\powershel1.exe"
key = hashlib.sha1(key).digest()
print(key.hex())
file_res = open(sys.argv[1],"rb+") # c2 data from resource section
file_data = file_res.read()
file_res.close()
rc4 = ARC4(key)
data = rc4.decrypt(file_data)
print(data)
if len(data) > 70:
data = data[20:]
out = ""
while data:
flag, ip, port = struct.unpack(">BLH",data[:7])
ip = socket.inet_ntoa(struct.pack('!L', ip))
data = data[7:]
out += "{}:{}\n".format(ip,port)
print(out)
출력 이미지
