Akamai Diversity

Akamai 블로그

클라이언트측 위협과 웹사이트 운영자가 위협을 차단하는 방법

데이터가 보호되고 있다고 전적으로 확신하면서 웹사이트를 브라우징한 적이 있으십니까? 우리는 개인 정보나 신용카드 데이터와 같은 가장 중요한 자산이 있는 웹사이트를 신뢰하는 경향이 있습니다. 웹사이트 소유자들이 데이터 보호를 최우선과제로 여기고 있음에도 불구하고 정보 유출과 데이터 침해는 지속적으로 발생합니다. 이런 상황 때문에 Akamai의 클라우드측 솔루션을 찾는 웹사이트 소유자들이 점차 증가하고 있습니다.

이 블로그 게시물에서는 다양한 클라이언트측 위협과 이러한 위협이 웹사이트 소유자에게 어떤 영향을 미치는지, 해결 방법은 무엇인지 알아봅니다.


클라이언트측 위협이란?

'클라이언트측'이라는 용어에는 다양한 의미가 있지만 이 게시물에서는 웹 브라우저를 의미합니다.

대부분의 클라이언트측 공격은 보다 정교한 공격 체인의 결과인데 이런 공격 체인은 웹사이트 방문자에게 영향을 끼칩니다.

Magecart를 비롯하여 최근 발생한 클라이언트측 공격은 British Airways, NewEgg, Ticketmaster 등 인터넷에서 가장 큰 몇 개의 웹사이트를 겨냥했습니다. 모든 공격의 목표는 단 한 가지, 바로 개인의 금융 및 식별 정보입니다.

이러한 공격은 클라이언트측 위협으로 간주되는데, 주로 웹서버가 진입 지점이라 하더라도 공격자의 궁극적인 목표는 개인 데이터이기 때문입니다. 이런 공격은 지속적으로 발생하고 있는데 클라이언트측 영역을 이해하면 신속하게 방어가 가능합니다. Akamai가 관측한 가장 일반적인 공격 시나리오 몇 가지를 자세히 살펴보겠습니다.


일반적인 공격 시나리오

클라이언트측 공격마다 서로 상이하지만 공격자들이 웹사이트 방문자의 브라우저에 일부 접속 권한이 있어야 한다는 공통점이 있습니다. 이러한 권한을 확보하기 위해 공격자들은 서버를 해킹하고 프론트 엔드 코드를 변경하며 써드파티를 감염(공급망 공격)시키기도 합니다.


서버 유출

첫 번째 시나리오에서는 감염된 서버 애플리케이션(예: example.com)을 살펴보겠습니다. 애플리케이션이 어떻게 감염되었는지에 대한 자세한 내용은 건너뛰고 공격자가 서버에 침투한 직후 상황부터 알아보도록 하겠습니다. 일단 애플리케이션이 감염되면 공격자는 웹페이지에 퍼스트파티 콘텐츠로 인라인 스크립트(또는 다른 원격/로컬 리소스에 대한 참조) 형식의 악성 코드를 주입할 수 있게 됩니다.

clientsideone.png


써드파티 감염

두 번째 시나리오에서는 이전과 동일하게 웹페이지를 다루지만 아직 해당 웹페이지가 손상되지 않은 상태입니다. 여기서 문제는 웹사이트가 써드파티 리소스(jQuery, bootstrap 등)에 의존한다는 점입니다. 이로 인해 일방적인 신뢰가 구축되면 웹사이트가 써드파티 콘텐츠를 맹목적으로 신뢰하게 됩니다.

client side two.png


써드파티 서버가 감염되는 시나리오에서는 공격자가 악성 코드를 사용하여 합법적인 코드의 콘텐츠를 수정할 수 있습니다. 그러면서 기존 웹페이지가 악성 코드에 노출됩니다.

clientsidethree.png


악의적 확장

마지막 시나리오에서는 웹사이트나 써드파티에 의존하는 것 때문에 해킹이 된 것이 아니라 브라우저 자체가 해킹된 상황을 다룹니다. 브라우저를 확장하면 여러 가지 장점이 있습니다. 비밀번호와 개인 정보를 관리하고 광고를 차단할 수 있습니다. 하지만 동시에 리스크를 동반합니다. 공식적인 확장 리포지토리에 악성 코드가 포함되어 있는 경우가 있었습니다.

이 시나리오에서는 현재 브라우저에 있는 악의적 브라우저 확장에 관해 다룹니다.

clientsidefour.png

모든 공격의 공통점은 공격으로부터 이득을 얻으려면 피해를 입은 브라우저에서 실행되고 있는 주입된 코드가 일부 데이터(신용카드, CVV 등 민감한 정보)를 공격자의 서버로 유출시켜야 한다는 점입니다. 브라우저에만 있으면 공격으로 얻을 수 있는 이득이 크지 않습니다. 그렇다면 이런 공격을 어떻게 탐지하고 차단할 수 있을까요?


탐지 및 방어 방법

시간이 지나면서 웹 브라우저가 할 수 있는 게 많아졌고 보다 강력해졌습니다. 예를 들어 브라우저에서 비동기식 작업을 수행한다는 것은 인터넷 초창기에는 꿈같은 일로 여겨졌습니다. 이제 최신 API 중 일부를 활용하여 이러한 위협으로부터 클라이언트를 보호할 수 있습니다.


웹사이트 변화 관측

방문자를 보호하는 한 가지 방법은 Mutation Observer API를 사용하는 것입니다. 이 최신 웹 API를 통해 웹페이지의 변경 사항을 확인할 수 있습니다. 웹사이트 소유자는 웹사이트에서 이미 시행되고 있는 허용된 변경사항에 대한 목록을 생성할 수 있습니다. 허용되지 않은 모든 변경사항은 차단됩니다. 차단된 변경사항은 스크립트 태그 또는 이미지 추가(흔한 유출 기법)일 수 있습니다. 프로젝트에 이미 존재하는 이러한 아이디어에 대한 구현을 `DOMTEGRITY`라고 합니다.


리소스 검증

하위리소스 무결성(SRI)이라고 불리는 기능입니다. 이 기능을 통해 브라우저는 (써드파티 또는 퍼스트파티로부터) 가져온 리소스가 예상치 못한 조작 없이 전송되었는지 여부를 확인할 수 있습니다. 이 기능은 선험적으로 계산할 수 있는 리소스에 암호화 해시를 제공하는 방식으로 작동됩니다. 클라이언트가 페이지를 처음으로 렌더링하고 가져온 리소스를 로딩하기 전에 계산된 해시와 제공된 해시를 비교하여 콘텐츠를 검증합니다.

clientsidefive.png


CSP 정책

수년에 걸쳐 주목을 받고 있는 주요 웹 기능 한 가지는 콘텐츠 보안 정책(CSP)입니다. CSP를 사용하면 웹사이트 소유자가 콘텐츠 보안 정책을 정의할 수 있어 다른 오리진에서 특정 리소스 종류를 가져올 수 있도록 허용하거나 허용하지 않을 수 있습니다. 정책은 "Content-Security-Policy"라는 특수 헤더를 통해 클라이언트로 전송됩니다.

CSP는 이미지, 연결, 프레임 등의 소스 종류 리스트(지침이라고도 함)와 리소스를 로딩할 수 있는 오리진을 정의하는 방식으로 작동합니다. 이러한 지침이 잘 정의되어 있기 때문에 웹사이트에서 소스를 로딩할 수 있는 위치를 제어할 수 있습니다. CSP의 또 다른 유용한 기능은 브라우저에서 발생한 공격으로 인한 유출 요청을 차단하는 데 사용될 수도 있다는 것입니다.

최근 Forbes 매거진을 대상으로 한 Magecart 캠페인에서 공격자들은 데이터를 빼내기 위해 일반적인 방법이 아닌 웹 소켓을 사용하는 독특한 접근 방식을 선택했습니다.  CSP 정책은 "connect-src" 지침을 사용하여 웹 소켓 연결을 차단할 수 있습니다

clientsidesix.png


도메인 이름 조사

웹 API는 아니지만 한 가지 재미있는 방법도 있습니다. 공격자는 유출된 데이터를 전송할 위치를 감염된 브라우저 내에서 결정해야 합니다. IP 주소로 해당 데이터를 보내는 방법(매우 의심스러워 보임)이나 도메인 이름을 사용하는 방법 중 하나를 선택할 수 있습니다.

도메인 이름이 의심스러워 보이는지 판단할 수 있는 방법은 여러 가지입니다. 첫째, 악성 활동과 관련된 도메인을 주로 포함하는 도메인 블랙리스트 피드를 사용하는 것입니다. 둘째, 웹사이트 도메인 이름 자체와 유사한 도메인을 살펴볼 수 있습니다.

좋은 예를 하나 들어보자면, NewEgg 공격 당시 유출된 도메인 이름은 웹사이트 자체 도메인인 "newegg.com"과 유사하다는 것을 쉽게 파악할 수 있는 "neweggstats[.]com"이었습니다.


결론

대형 웹사이트와 써드파티가 지속적으로 감염되고 있고 클라이언트측 위협은 증가 추세에 있습니다. 이러한 위협은 보통 웹사이트 방문자를 목표로 삼지만 웹사이트 소유자도 간접적으로 피해를 입는다는 사실은 명백합니다.

웹사이트 자체가 해킹되지 않았더라도 결국 웹사이트 방문자에게 영향을 미치게 됩니다. 이러한 상황이 발생하면 웹사이트 소유자는 금전적인 피해를 입거나 이미지가 실추될 수 있습니다. 위에 언급한 방법 중 일부만 실행해도 비즈니스에 심각한 피해를 줄 수 있는 공격을 사전에 탐지하고 방어할 수 있습니다.