클라우드 컴퓨팅이 필요하신가요? 지금 시작해보세요

Google Tag Manager로 위장한 Magecart 공격

Roman Lvovsky

에 의해 작성

Roman Lvovsky

February 15, 2023

Roman Lvovsky

에 의해 작성

Roman Lvovsky

로만 르보브스키(Roman Lvovsky)는 클라이언트측 위협, 브라우저 내부 및 JavaScript 공격 기법에 대한 폭넓은 경험을 보유한 보안 연구원입니다. Akamai 브라우저 내 보호 연구팀의 일원으로서 웹 스키밍과 Magecart 공격 같은 다양한 클라이언트 측 위협에 대한 리서치에 집중하고 있습니다. 소프트웨어 엔지니어링 분야에서 탄탄한 경력을 보유하고 있으며 전문 분야는 JavaScript 및 웹 개발입니다.

최근 공격은 체크아웃 페이지 및 양식에서 방문자로부터 민감한 정보를 훔치는 것을 노렸습니다.

새로운 정교한 Magecart 웹 스키밍 캠페인이 여러 이커머스 웹사이트에서 발견되었습니다. Magecart 공격은 온라인 리테일 기업을 노리는 사이버 범죄의 한 종류입니다. 이러한 공격에는 웹사이트의 결제 페이지에 악성 자바스크립트 코드를 주입하는 과정이 포함되며 고객이 민감한 정보를 입력하는 즉시 캡처해 공격자의 서버로 전송합니다. 이 정보에는 신용 카드 번호와 개인 정보가 포함될 수 있습니다.

최근 공격은 체크아웃 페이지 및 양식에서 방문자로부터 민감한 정보를 훔치는 것을 노렸습니다. 공격자는 취약점을 악용해 대상 웹사이트에 악성 인라인 자바스크립트 코드를 삽입할 수 있었습니다. 스키머는 Google Tag Manager 같은 정상적인 써드파티 벤더사를 가장하고 Base64 인코딩을 통해 악성 코드를 숨기는 등의 기법을 사용했습니다. 

일부 웹사이트에서 공격이 진행 중이며 캐나다 최대의 주류 리테일 기업에 대한 최근 공격과 유사합니다.

공격 개요

알려진 벤더사 코드 가장

스키머는 Google Tag Manager 코드 스니펫과 유사한 인라인 스크립트(외부 파일에서 로드되지 않고 HTML 내에 포함된 스크립트)로 악성 코드를 삽입합니다(그림 1). 따라서 공격자는 악성 코드를 알려진 벤더사 뒤에 숨겨 정상적인 스크립트로 위장할 수 있습니다. 이전에도 이러한 회피 기법을 사용해 탐지를 어렵게 만든 여러 가지 Magecart 캠페인이 발생했습니다.

또한 스키머는 Base64 인코딩을 사용해 악성 코드를 노출시킬 수 있는 모든 URL 또는 키워드를 난독 처리합니다. 이렇게 하면 스키머의 존재를 더욱 숨길 수 있습니다.

그림 1은 Google Tag Manager 스니펫 사기꾼의 예시를 보여줍니다. 그림 1: Google Tag Manager 스니펫 사기꾼

WebSockets 및 Eval 함수 사용

이 경우 인라인 스니펫은 실제 공격 코드가 아닌 로더 역할만 합니다. 로더에는 체크아웃 페이지에서만 공격을 트리거하는 조건이 포함되어 있어 스키머가 신중하게 작동해 공격과 관련된 민감한 대상 페이지에서만 전체 악성 코드를 로드할 수 있습니다.

로더 코드의 Base64 인코딩을 해독하면 드러나는 자바스크립트 코드는 두 단계만 수행하기 때문에 짧고 간단합니다. 즉 공격자의 C2(Command and Control) 서버로 새 WebSocket 연결을 만들고 "Eval" 함수로 C2에서 받은 코드를 실행할 리스너 함수를 설정합니다(그림 2).

그림 2는 그림 1과 같이 Google Tag Manager 스니펫 안에 숨겨져 있던 인코딩된 코드를 보여줍니다. 그림 2: Google Tag Manager 스니펫 안에 숨겨져 있던 인코딩된 코드.

Magecart 공격에서 WebSockets 및 "Eval" 함수를 사용하는 것은 고급 기법으로 여겨집니다. 악성 코드가 페이지 맥락 내에서 첫 번째 스크립트로 실행될 수 있으므로 대상 웹사이트에서 작동할 수 있는 연구자, 보안 서비스, 스캐너가 탐지하기 어렵기 때문입니다(그림 3). 공격자는 이 방법을 통해 활동을 은폐하고 기존 XHR 요청 또는 HTML 태그보다 탐지 가능성을 줄일 수 있습니다.

그림 3은 WebSockets을 사용하는 동일한 스키머에서 로더의 또 다른 변형을 보여줍니다. 그림 3: WebSockets을 사용하는 동일한 스키머의 또 다른 로더 변형.

코드 검사 수행

소켓 연결을 시작하면 브라우저와 C2 서버가 언제든지 데이터를 교환할 수 있습니다. 공격자의 C2 서버에서 페이지로 보내는 첫 번째 메시지(그림 4)에는 로더 코드에 지정된 리스너 함수에 의해 즉시 실행되는 자바스크립트 코드가 포함되어 있습니다.

이 코드는 두 가지 검사를 수행합니다.

  1. 로더 코드에 정의된 글로벌 변수를 통해 WebSocket 연결이 설정되었는지 확인합니다.
  2. 페이지가 제출 버튼이 포함된 체크아웃 페이지인지 결정합니다.

이러한 검사를 통과하면 공격자의 코드가 현재 페이지의 URL이 포함된 메시지를 C2 서버로 보냅니다. 이에 따라 C2 서버는 특정 표적 페이지에 맞게 조정된 적절한 악성 코드를 반환합니다.

C2 서버가 공격 코드를 반환하기 전에 페이지 URL을 기다린다는 사실은 이 캠페인이 수많은 웹사이트와 페이지를 동시에 실행하고 지원할 수 있는 동적 프레임워크를 통해 작동한다는 것을 의미합니다.

그림 4는 스키머 C2 서버와 WebSocket 연결의 예시입니다. 그림 4: 스키머 C2 서버와 WebSocket의 연결

코드 난독화

그림 5는 URL의 유효성을 검사한 후 C2 서버에서 가져온 실제 공격 코드를 보여줍니다. 코드는 난독화되어 기본 로직과 공격 진행 상황을 파악하기 어렵습니다. Magecart 스키머는 보안 전문가가 공격 코드를 해독하고 전체 흐름을 이해하기 어렵게 만들기 위해 난독화 기술을 종종 사용합니다.

그림 5는 WebSocket 연결을 통해 C2 서버에서 보낸 난독화된 공격 코드를 보여줍니다. 그림 5: WebSocket 연결을 통해 C2 서버에서 보낸 난독화된 공격 코드.

코드 지우기

난독 처리 툴을 사용하면 상황을 보다 명확하게 파악하고 공격의 의도를 드러낼 수 있습니다. 그림 6에서 볼 수 있듯이 코드에는 대상 페이지에서 중요한 필드를 식별하고 공격자가 통제할 수 있는 불법 복제 결제 양식을 만들기 위해 설계된 다양한 키워드가 포함되어 있습니다. 

공격자의 궁극적인 목표는 의심하지 않는 방문자가 감염된 페이지와 상호 작용하고 공격자의 코드에 의해 주입된 가짜 양식을 작성하게 하고 개인 정보를 훔치는 것입니다.

그림 6의 첫 번째 부분은 난독 해제 후의 공격 코드를 보여줍니다.
그림 6의 두 번째 부분은 난독 해제 후의 공격 코드입니다. 그림 6: 난독 해제 후 공격 코드

써드파티 공급업체용 가짜 양식 삽입

일부 대상 매장은 결제 프로세스를 써드파티 공급업체로 아웃소싱합니다. 고객은 개인 정보를 제공하면 써드파티 벤더사로 리디렉션되어 신용 카드 정보를 입력하고 트랜잭션을 완료합니다. 스키머는 써드파티 벤더사에 접속해 최종 사용자의 신용 카드 정보를 빼낼 수 없습니다.

대신, 페이지에서 가짜 신용 카드 양식을 만들고 이후 고객을 써드파티 벤더사로 리디렉션합니다(그림 7). 사용자가 가짜 "체크아웃" 또는 '결제 제출' 버튼을 클릭하면 스키머는 수집된 모든 데이터를 C2 서버로 전송하고 사용자가 실제 써드파티 벤더사 결제 페이지로 리디렉션해 정상적인 결제 흐름을 진행하게 할 수 있습니다.

그림 7은 스키머가 만든 가짜 양식의 예시입니다. 그림 7: 스키머가 만든 페이크 폼

대상 웹사이트가 써드파티 결제 페이지로 리디렉션하지 않으면 스키머는 새 양식을 만들지 않습니다. 대신, 체크아웃 페이지와 결제 양식의 모든 민감한 개인 입력에 자바스크립트 리스너를 추가합니다. 사용자가 정보를 제출하면 스키머는 데이터를 추출하고 WebSockets 메시지를 사용해 C2 서버로 전송합니다.

두 경우 모두 스키머는 추출된 데이터를 암호화해 연구자와 보안 서비스에서 자신이 시작한 비정상적인 네트워크 활동을 탐지하기 어렵게 만듭니다(그림 8).

 

그림 8은 WebSocket 연결을 통해 전송되는 스키머의 암호화된 메시지의 예입니다. 그림 8: WebSocket 연결을 통해 전송되는 스키머의 암호화된 메시지의 예

공격 유사성

조사 과정에서 공격 피해를 받은 여러 웹사이트가 발견됐습니다. 모두 동일한 캠페인과 관련성이 있음을 확인할 수는 없지만 사례 간 유사점에서 동일한 Magecart 프레임워크가 사용됐을 수 있다는 것을 추측할 수 있었습니다. 일부 사례에서는 공격의 인라인 로더 같은 지표가 가짜 Google Tag Manager로 위장되어 여러 피해자 웹사이트에서 발견된 스키머의 징후를 은폐하는 암호화된 매개 변수를 포함하고 있었습니다. 

공격자가 사용하는 도메인은 웹사이트마다 다양하며, 대부분의 경우 실제 공격 코드는 관련 페이지의 로더 코드에 의해 페치되어 공격을 보다 눈에 띄지 않고 탐지하기 어렵게 만듭니다.

공격자의 기술 및 기능 요약

  • Google Tag Manager 같은 알려진 벤더사 코드 스니펫을 가장합니다

  • Base64 인코딩을 사용해 URL 및 도메인 같은 공격자의 지표를 숨깁니다

  • 브라우저와 C2 사이의 모든 통신에 WebSockets을 사용해 공격 코드를 뽑고 데이터를 추출합니다 

  • 'Eval'로 공격 코드를 실행해 스크립트가 유기적인 퍼스트파티 스크립트처럼 보이도록 합니다

  • 난독화 기법을 사용해 연구자가 코드를 이해하기 어렵게 만듭니다

  • 정상적인 써드파티 결제 서비스 페이지로 리디렉션하기 전에 가짜 양식을 주입해 데이터를 수집합니다

Akamai Page Integrity Manager로 보호 강화하기

Akamai는 최근 Akamai Page Integrity Manager 에 대한 Magecart 공격 테스트에서 공격을 즉시 탐지하고 방어했으며 문제 해결을 위해 자세한 정보를 제공했습니다(그림 9). 

Page Integrity Manager는 웹 스키밍, 포밍재킹, Magecart 공격차단하기 위해 특별히 제작되었습니다. 웹 페이지의 스크립트 실행 행동에 대한 가시성을 제공하고 페이지에서 실행 중인 여러 스크립트의 동작 및 다른 스크립트와 관계를 비롯해 해당 스크립트에 대한 정보를 수집합니다. 

Page Integrity Manager는 이러한 데이터를 휴리스틱, 리스크 점수, 인공 지능, 기타 요소를 포함한 멀티레이어 탐지 접근 방식과 결합해 클라이언트측 위협을 신속하게 탐지하고 방어할 수 있습니다.

그림 9는 Akamai Page Integrity Manager의 자세한 문제 해결 정보를 보여줍니다. 그림 9: Akamai Page Integrity Manager의 자세한 문제 해결 정보

결론

Magecart 스키머는 끊임없이 진화하고 점점 정교해지고 있습니다. 이 게시물에 설명된 스키머에 의한 고급 회피 및 난독화 방법을 사용하면 이러한 종류의 공격을 탐지하는 데 어떤 어려움이 있는지 확인할 수 있습니다. 

고양이와 쥐의 끊임없는 게임에는 공격을 탐지하고 예방하기 위한 포괄적인 보안 솔루션이 필요합니다. 이러한 솔루션을 구축하지 못하면 고객의 개인 정보가 감염되고 기업 평판이 심각한 손상을 입고 상당한 벌금이 부과될 수 있습니다. 

최신 PCI DSS v4.0(Payment Card Industry Data Security Standard)에 포함된 새로운 요구사항으로 인해 온라인 결제 카드를 처리하는 모든 기업은 브라우저 내 보안을 반드시 실행해야 합니다. 

자세히 알아보기

Akamai Page Integrity Manager는 이러한 새로운 요구사항을 충족할 수 있도록 사이트에서 실행되는 모든 스크립트의 인벤토리, 스크립트 행동에 대한 가시성, 가장 정교한 스크립트 기반 공격에 대한 방어를 제공합니다.

IOC

다음 IOC(Indicator of Compromise)는 블로그에서 설명한 악성 활동 및 스키머를 탐지할 수 있도록 돕는 지표입니다.

  • yachtbars[.]fun

  • app-stat[.]com

  • Magento-cdn[.]net

  • nebiltech[.]shop

  • Rithdigit[.]cyou

  • Antohub[.]shop

  • Okqtfc1[.]org

  • jquery-node[.]com


Akamai Page Integrity Manager 를 통해 스크립트 행동에 대한 가시성을 확보하고 클라이언트측 공격을 방어하는 방법에 대해 자세히 알아보세요.



Roman Lvovsky

에 의해 작성

Roman Lvovsky

February 15, 2023

Roman Lvovsky

에 의해 작성

Roman Lvovsky

로만 르보브스키(Roman Lvovsky)는 클라이언트측 위협, 브라우저 내부 및 JavaScript 공격 기법에 대한 폭넓은 경험을 보유한 보안 연구원입니다. Akamai 브라우저 내 보호 연구팀의 일원으로서 웹 스키밍과 Magecart 공격 같은 다양한 클라이언트 측 위협에 대한 리서치에 집중하고 있습니다. 소프트웨어 엔지니어링 분야에서 탄탄한 경력을 보유하고 있으며 전문 분야는 JavaScript 및 웹 개발입니다.