brunch

You can make anything
by writing

C.S.Lewis

by 테크유람 Sep 09. 2020

메이지카트(MageCart) 공격의 이해와 준비

웹 스키밍(Web Skimming), 폼재킹(Formjacking) ..

자바스크립트(JavaScript)는 웹 페이지의 로직(logic)을 담당하며 HTML, CSS, 이미지와 함께 웹 프런트 엔드 작성을 위해서는 꼭 필요한 요소입니다. (백 엔드에서도 일부 언어가 사용되지요..)


자바스크립트는 퍼스트 파티, 서드 파티, 포스 파티 스크립트 등으로 웹 페이지에 적용됩니다. 아래 이미지는 국내 금융사 메인 페이지에 포함된 스크립트를 RequestMap도구를 사용하여 파악해본 결과입니다.

<Request Map으로 살펴본 메인 페이지내 써드파티 도메인>


사용자 웹 서핑 정보 확보를 위한 구글 애널리틱스, 소셜 미디어 플러그인, 각종 광고용 도구, CDN 링크가 걸린 외부 서비스들이 도출됩니다. 아마 웹 사이트 담당자도 이렇게 많은 서비스들이 복잡하게 연결되어 운영되고 있다는 사실을 잘 모를 것입니다. 이러한 비가시성이 더욱 스크립트 공격을 예방하고 방어하기 어렵게 만듭니다.


웹 스키밍(Web Skimming), 폼재킹(Formjacking)등의 메이지카트(MageCart) 공격은 자바스크립트 코드 삽입 공격이라는 공통점이 있습니다. 해커는 악성 자바스크립트 코드를 웹 페이지 내 삽입하는 방식으로 개인 정보를 불법적으로 취득할 수 있습니다.

<메이지카트 공격 유형>


그럼 용어에 대한 의미부터 살펴보겠습니다.


웹 스키밍(Web Skimming) 공격

본래 스키밍이란 ATM 현금 인출기 카드 입구에 특수 장치를 부착하여 금융 정보를 탈취하던 기법을 의미하는 용어입니다. 웹 스키밍 혹은 웹 스키머(Web Skimmer) 공격이란 서버에 주입된 코드 혹은 온라인 결제 거래를 하는 클라이언트에 삽입한 코드를 변조하여 사용자의 신용카드 정보와 같은 금융 결제 정보를 악의적으로 탈취하는 공격을 의미합니다.


대표적으로 2019년 10월 Macy's 백화점의 온라인 몰이 겪었던 사례가 있습니다. Macy's의 온라인 몰에서 카드 세부사항과 이름, 주소, 전화번호, 이메일 주소 등의 고객 정보가 유출되었습니다. 이 공격은 온라인 몰의 체크아웃 프로세스 및 결제 관련 프로세스에 삽입된 스크립트를 사용한 공격이었습니다.


이 사례는 메이지카트 공격의 일종이기도 합니다. 메이지카트(MageCart) 는 10여 개의 공격자 그룹이 사용하는 도구이며 기법의 정교함이 각각 다릅니다. 변조된 파일은 ClientSideErrorLog.js였고, 이 스크립트는 체크아웃, 고객 지갑 페이지에 삽입되어 작동하는 스크립트였습니다.


폼재킹(Formjacking) 공격

폼재킹 공격은 개인 정보를 입력하는 웹 사이트의 입력란(Form)의 정보를 해커가 탈취하는 기법입니다. 통계에 따르면, 2018년 기준 월평균 4천800여 개의 웹 사이트가 폼재킹 공격을 받았다고 합니다. 폼재킹 해커들은 온라인 구매 사이트에 악성코드를 삽입한 뒤 고객의 카드 정보를 빼내 이를 판매하는 수법을 사용하며 신용카드 1개의 정보는 다크 웹(dark web)에서 최소 USD 10에서 최대 USD 45에 판매되는 수준입니다. 따라서 2018년 기준 수천만 달러의 개인 정보 거래가 있었을 것입니다. 어느 해커가 영국 항공사(British Airways) 폼재킹으로 거둔 수익만 USD 17,000K 정도라고 합니다. 기업은 개인 정보가 유출된 고객에게 또 다른 법적 배상을 해야 한다는 사실을 생각하면 손실 비용은 천문학적 금액입니다.


해외 직구 등이 늘면서 보안이 취약한 웹사이트에서 신용카드 결제를 할 때 폼재킹에 취약할 수 있습니다. 미국을 비롯한 해외의 온라인 쇼핑몰은 해커들이 접근하기 쉬운 자바 스크립트 기반의 외부 공격에 취약하며, 감염된 사이트에 접속한 개인에게도 자동으로 악성코드가 다운로드되어 2차 피해가 발생할 수 있습니다.


메이지카트(Magecart)

Magecart는 온라인 결제 양식을 훑어 보는 디지털 신용 카드 도난과 관련된 사이버 공격을 전문으로하는 수십 개의 하위 그룹으로 구성된 빠르게 성장하는 사이버 범죄 그룹입니다.


메이지카트는 주입한 자바스크립트를 사용한 웹 스키밍 방식의 공격으로 신용 카드 번호등의 금융 정보, 주소와 전화 번호 그리고 이메일 등의 개인 정보등을 빼가는 방식의 공격 형태를 사용합니다. 현재까지 약 5만여개의 온라인 쇼핑몰이 메이지카트 공격을 당했습니다. 이런 형태의 공격이 적어도 2015년부터 지속되고 있었고 Magento와 같이 널리 알려진 이커머스 백엔드를 사용하는 온라인 쇼핑몰을 주타켓으로 하다가 현재는 더 강화된 알고리즘을 사용하는 것으로 알려져있습니다.


메이지카트 공격의 패턴

메이지카트 공격은 크게 두 가지 형태로 나뉠 수 있습니다.


첫 번째는 전통적인 패턴으로 많은 기업의 웹 사이트가 사용하는 공통 로직을 담당하는 서드 파티(3rd party) 서비스를 해킹하여 웹 사이트에 악성코드를 심는 방식의 공격입니다. 서드 파티 스크립트가 사용하는 또 다른 스크립트는 포스 파티(Fourth Party) 스크립트이며, 이 또한 메이지카트 공격의 대상입니다. 해커는 감염된 3rd party 스크립트 코드를 조작하여 원래 페이지의 정보를 캐오는 함수를 추가합니다.

<From Akamai블로그, 감염됨 써드파티 자바스크립트>

두 번째는 아예 기업의 웹 서버에 접근 가능한 권한을 확보하여 기존의 자바스크립트 파일(1st Party 파일)을 변조하는 경우로, 웹 서버의 취약점을 발견하고 그 취약점을 공격하여 Command를 실행하고 스크립트를 바꿔치기하는 방식입니다.


메이지카트 공격이 위험한 이유

웹 사이트 관리자나 개발자라고 해도 스크립트 공격에 대한 가시성이 부족할 수밖에 없습니다. 복잡한 웹사이트에서 취약한 스크립트를 퍼스트 파티 외에 서드 파티 서비스에서까지 찾아낸다는 것은 쉽지 않습니다. 그리고 이러한 행동은 단지 일회성이 아닌, 웹 사이트의 생명주기와 맞물려 항상 작동해야 하기 때문입니다.


메이지카트 공격은 웹 서버를 공격 대상으로 하는 Web Application 공격이나 DDoS와 다르게 브라우저 단에서 사용자의 기밀한 데이터를 훔치는 방식이기 때문에 웹 사이트를 운영하는 기업의 기술 담당자가 이를 파악하는 것은 매우 어렵습니다.


메이지카트 공격은 어떻게 방어해야 하는가?

① 기술적인 작업

- 추가된 도메인 정보 확인하기

- 웹 사이트 변조 여부 확인하기: Mutation Observer API

- CSP 정책 추가하기: Content Security Policy (CSP)

- 리소스 유효성 검사하기: SubResource Integrity (SRI)


②행동 분석 자동화

일회성이 아닌 24/7 Always-On 방식의 감시를 위해 실제 사용자의 브라우저에서 작동하는 레벨의 스크립트 행동 분석을 자동화해야 합니다. 악성 행동이 탐지되면 즉시 기업의 담당자에게 알림을 보내고 유효하지 않은 곳으로 사용자의 정보를 보내는 스크립트의 행동을 차단해야 합니다. 또한 CVE(Common Vulnerabilities and Exposures)로 발표되는 취약점에 해당하는 스크립트 URL을 지속적으로 분석해야 합니다.


③ 로컬 정책관리 필요

쿠키, 로컬 스토리지, 오리진 도메인 별 데이터 입력에 대한 접속을 모니터링 및 제한하는 스크립트의 행동 정책을 생성하고 유지하여 런타임 자바스크립트 실행을 통제해야 합니다.


이러한 작업의 자동화가 기업 내에서 어렵다면, 이를 지원하는 보안 소프트웨어를 도입할 수도 있습니다.


참고:

https://www.riskiq.com/wp-content/uploads/2018/11/RiskIQ-Flashpoint-Inside-MageCart-Report.pdf

https://blogs.akamai.com/2019/09/client-side-threats-how-could-website-owners-mitigate-them.html



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari