구글 광고 스크립트 삽입 공격 사례: 당신의 웹 사이트, 누군가 돈을 버는 수단으로 활용하고 있다면?

1. 개요

웹 페이지 변조 공격은 공격자가 웹 서비스의 취약점을 악용해 웹 페이지의 정상적인 내용을 변조하거나 악성 코드를 삽입하는 행위이다. 해당 공격은 단순한 변조부터 사용자를 악성 사이트로 리디렉션하거나, 스크립트를 통해 개인정보를 탈취하는 형태까지 다양하게 나타나고 있다.

한국인터넷진흥원(KISA)에서 발표한 '2024년 침해사고 유형 TOP5'를 보면, 랜섬웨어보다 적지만 정보 유출과 비슷한 비율로 웹 페이지 변조 공격이 발생하고 있다.

[그림 1] 2024년 침해사고 유형 TOP5 (통계출처: https://kisa-irteam.notion.site/2024-4-162e4aca026f80488c21cfeb85018666)

특히, Windows 기반 웹 서비스 환경에서는 공격자가 취약점이나 웹 관리자 크리덴셜 탈취, 악성 파일 업로드 등을 통해 웹 서비스 접근 권한을 획득한 뒤, 외부 광고 스크립트나 악성코드를 삽입하는 사례가 발견되고 있다. 무단으로 삽입된 스크립트는 광고 수익을 위한 외부 광고 노출, 가상화폐 마이닝, 피싱 페이지 리디렉션 등의 다양한 공격으로 이어질 수 있다.

광고 스크립트 삽입 공격은 2019년부터 현재까지 지속적으로 발생하고 있으며, 주로 취약한 Windows 기반 웹 서버를 대상으로 웹셸을 업로드해 공격이 수행된다.

공격에서 주로 많이 활용되는 구글 광고(AdSense) 스크립트는 아래와 같은 형식을 가지고 있다. 만약 기존에 광고를 출력하지 않는 웹 페이지에서 광고를 출력한다면, 해당 형식의 스크립트 구문이 삽입되어 있는지 확인이 필요하다.

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=%AdSense ID%" crossorigin="anonymous"></script>

최근 PLAINBIT에서 식별한 광고 스크립트 삽입 공격에서 사용된 악성코드는 이전 공격들과 동일한 구조의 악성코드를 사용하고, 특정 경로(%ALLUSERPROFILE%\Microsoft\DeviceSync)에 악성 파일들을 생성한다는 공통점이 있다. 하지만, 분석에 활용되는 도구(Wireshark, Sysmon, Procmon 등) 비활성화, 보안 설정(UAC, 스크립트 실행 정책 등) 우회, 악성 파일 시간(생성/수정) 변조 등 방어 회피를 위한 기능이 추가되어 더욱 고도화한 것으로 확인된다.

따라서, 본 글에서는 최근 식별된 구글 광고 및 악성 스크립트를 삽입하는 악성코드의 기능 및 동작에 대해 분석하고, 웹 페이지 변조 공격에 대응하는 방안을 제시하고자 한다.


2. 악성코드 동작 개요도

웹 페이지 변조 공격은 화면에 직접적으로 출력되는 경우가 많아 시스템 관리자에게 쉽게 조치될 수 있다. 따라서, 공격자는 작업 스케줄러 등을 활용해 악성코드가 주기적으로 실행되도록 설정함으로써, 웹 페이지가 지속적으로 변조되도록 만든다. 이를 통해 변조된 파일이 복원되더라도 악성코드가 재실행되면서 변조 상태가 유지되도록 한다.

최근 공격에서는 작업 스케줄러를 통해 설정된 주기마다 악성 압축파일에서 악성 파일을 추출한 뒤 방어 회피를 위한 보안 설정(UAC, 스크립트 실행 정책 등)을 우회하도록 레지스트리를 수정했다. 또한, 특정 파일(cmd.exe, wevtutil.exe)을 시스템 관리자가 실행하기 어렵도록 접근 권한을 수정한다.

[그림 2] 악성 압축파일 내 파일 구조 및 설명

악성 압축파일 내 존재하는 악성 스크립트(winrmr.cmd)가 실행되면서 분석가가 많이 사용하는 도구(Wireshark.exe 등 17개)를 비활성화해 무력화시키고, 스크립트 동작 권한(파일 조작, 시스템 명령 실행)을 설정한다.

이후, 또 다른 악성 압축파일(winrnr.cmd) 내 존재하는 악성 스크립트(winrmr.vbs)가 실행되면서, 'SCFConfig.dat' 파일에 작성되어 있는 정상 웹 소스코드 파일이 악성 스크립트가 삽입된 파일로 변경된다.

아래 그림은 작업 스케줄러를 통해 실행되는 악성코드의 동작 개요도이다.

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

3. 악성코드 주요 기능

다음은 작업 스케줄러를 통해 실행되는 악성코드의 주요 기능을 분석해, 웹 페이지 변조(웹셸 및 구글 광고 스크립트 삽입)가 수행되는 동작 방식에 대해 설명한다.

1) 분석 도구 무력화

모든 사용자의 레지스트리 프로필에서 'Process Monitor'의 필터 규칙(FilterRules) 값을 00(비활성화)으로 설정하고, 'Process Explorer'의 창 투명도(Opacity) 값을 0으로 설정해 해당 도구의 실행을 방해한다.

또한, 분석에 많이 활용되는 도구들(Wireshark.exe 등)이 실행될 때 전혀 다른 프로그램(cscript.exe)이 동작되도록 레지스트리를 설정해 해당 도구들의 실행을 방해한다.

[그림 4] winrmr.cmd 내 분석 도구 무력화 부분

2) 스크립트 동작 권한 설정

스크립트(VBScript, JScript)에서 파일을 조작하고, 시스템 명령을 실행할 수 있도록 동작 권한을 설정한다.

이후, 레지스트리 키의 소유자를 'TrustedInstaller'로 변경하고, 'SYSTEM' 계정에 읽기 권한만 부여해 시스템 관리자가 쉽게 수정할 수 없도록 제한한다.

[그림 5] winrmr.cmd 내 스크립트 동작 권한 설정 부분

3) 악성 압축파일 해제

코드 내 'Extractfile' 함수를 호출해 악성 압축파일(winrnr.cmd)의 'SCFConfig.dat' 파일을 압축 해제한다.

이후, 'SCFConfig.dat' 파일을 읽어 각 줄의 '|'로 구분된 3개의 값을 변수에 할당하고 'CheckFile' 함수를 호출한다.

[그림 6] winrmr.cmd 내 악성 압축파일 해제 함수 호출 부분
[그림 7] winrmr.cmd 내 압축파일 해제 함수 부분

악성 압축파일(winrnr.cmd)에는 세가지 종류의 파일(SCFConfig.dat, SCFNum.dat, SCF%N%.dat)로 구성되어 있다.

'SCFNum.dat' 파일은 숫자만 기록되어 있는 텍스트 파일로 'SCF%N%.dat' 파일의 총 개수를 나타낸다.

[그림 8] SCFNum.dat 파일 내용 예시

'SCFConfig.dat' 파일은 '|'로 구분된 3개의 값으로 구성되어 있는 텍스트 파일로 첫 번째 필드는 'SCF%N%.dat' 형태로 기록된다. 두 번째 필드는 정상 웹 페이지의 전체 경로(경로와 파일 명)가 기록되어 있으며, 세 번째 필드는 'SCF%N%.dat' 파일의 해시 값이 기록되어 있다.

[그림 9] SCFConfig.dat 파일 내용 예시

'SCF%N%.dat' 파일은 웹셸 또는 광고 스크립트가 삽입되어 있는 변조된 웹 소스코드가 저장되어 있다.

'SCF1.dat' 파일은 정상 웹 페이지를 변조한 웹셸 스크립트가 저장되어 있으며, 공격자는 지속적으로 서버에 접근할 수 있도록 백도어 역할로 웹셸을 생성한 것으로 확인된다.

[그림 10] 웹셸 스크립트가 저장되어 있는 SCF1.dat 파일 내용 예시

'SCF2.dat' 파일 이후부터는 정상 웹 소스코드 내 구글 광고 스크립트가 삽입된 소스코드가 저장되어 있다.

[그림 11] 구글 광고 스크립트가 삽입된 웹 소스코드가 저장되어 있는 SCF2.dat 파일 내용 예시

4) 파일 해시 값 비교 후 웹 페이지 변조

'SCFConfig.dat' 파일에서 두 번째 필드 값(정상 웹 소스코드 파일의 전체 경로)의 해시 값을 계산해 세 번째 필드 값(변조된 파일의 해시 값)과 비교해 다르면, 변조된 파일(SCF%N%.dat)을 두 번째 필드 값으로 복사해 변조시킨다.

[그림 12] winrmr.cmd 내 ‘CheckFile’ 함수 중 일부
[그림 13] winrmr.vbs 내 해시 값 계산 부분
[그림 14] winrmr.cmd 내 웹 페이지 변조 부분

5) 악성코드 종료

악성코드가 종료될 때 악성코드가 동작되면서 생긴 흔적들을 없애고, 조치가 어렵도록 시스템 설정을 수정한다.

  • 권한 수정, 파일 및 디렉토리 복사, PowerShell 프로세스를 실행하지 못하도록 무력화
  • PowerShell 스크립트를 실행할 수 없도록 PowerShell 실행 정책 수정
  • 악성코드가 동작하면서 실행된 프로세스 종료
  • 공격 행위를 식별하기 어렵도록 이벤트 로그(Security.evtx 등) 삭제
  • 악성 압축파일을 해제하며 생긴 악성코드 삭제
[그림 15] winrmr.cmd 내 악성코드 종료 부분 중 일부

6) 시간 변조

공격자는 분석가가 악성코드를 식별하기 어렵도록 파일 및 디렉토리의 시간(생성/수정)을 변조하는 악성코드를 사용한다.

악성코드를 실행하면 NirSoft의 'NirCmd'를 이용해 입력 받은 파일 또는 디렉토리의 시간을 정상적인 파일의 시간과 동일하게 변경한다.

[그림 16] time.bat 내 시간 변조 부분

7) 변조 파일 복원

악성 압축파일 내 'winrmr.cmd'와 유사한 'winrsr.cmd' 파일이 존재하는데, 해당 파일은 변조된 파일을 기존의 파일로 복원할 때 사용된다.

'winrsr.cmd'에서 사용하는 악성 압축파일(winsrs.cmd)에 존재하는 'SCF%N%.dat' 파일은 공격자가 소스코드를 변조하기 전의 정상 웹 소스코드의 내용이 존재한다.

공격자의 작업 스케줄러 설정에 따라 관리자가 서버에 접근하는 경우 변조된 웹 페이지를 정상 웹 페이지로 복원하는 기능을 수행한다.

[그림 17] winrnr.cmd에 저장되어 있는 변조된 웹 소스코드(상)와 winsrs.cmd에 저장되어 있는 정상 웹 소스코드(하) 예시

4. 대응 방안

웹 페이지 변조 공격은 고객의 신뢰를 무너뜨리고, 악성코드 유포 등 추가적인 피해로 이어질 수 있다. 이러한 공격은 단순히 '페이지가 바뀌었다'는 수준을 넘어, 공격자의 지속적인 시스템 장악 의도를 포함하기 때문에 조기에 탐지하고 사전 대응하는 것이 매우 중요하다.

1) 웹 서비스 보안 강화

웹 페이지 변조 공격과 같이 웹 서비스를 대상으로 하는 공격은 대부분 웹 서버 또는 서비스 취약점을 통해 발생된다. 따라서, 다음과 같은 웹 서비스의 보안을 강화할 수 있는 방안을 참고해 추가 피해가 발생하지 않도록 조치해야 한다.

  • 파일 업로드 취약점 대응
    • 파일 업로드 기능을 사용할 경우 용도에 맞는 확장자만 업로드할 수 있도록 제한하고, MIME-TYPE을 확인해 확장자 제한을 우회할 수 없도록 수정해야 한다.
  • 업로드 폴더 권한 제어
    • 파일이 업로드되는 폴더는 파일 저장 용도로 사용되기 때문에, 업로드된 파일이 서버에서 실행되지 않도록 업로드 폴더 내 실행 권한을 제거해야 한다.
  • 서비스 동작 계정 권한 점검
    • 웹 서비스가 관리자 권한으로 동작 중인 경우, 공격자가 해당 서비스를 통해 명령 및 악성 파일을 실행하면 서비스 권한으로 동작하게 된다.
    • 따라서, 서비스 동작 시 관리자 계정이나 최상위 권한(SYSTEM) 사용을 지양하고, 서비스 수행에 적합한 최소한의 권한의 계정으로 분리해 운영해야한다.

2) 주기적인 소스코드 무결성 검사

공격자는 정상 소스코드 내 웹셸 및 광고 스크립트를 삽입하는 방식을 사용하기 때문에 탐지하기 어렵다. 특히 웹 사이트를 구성하고 있는 웹 소스코드는 수백 ~ 수천 개의 파일로 이루어져 있어, 관리자가 소스코드 변조를 수동으로 확인하기에는 어려움이 존재한다.

따라서, 형상 관리 도구(Git, SVN 등)를 활용해 운영 중인 소스코드가 무단으로 변조되지 않았는지 주기적으로 무결성 검사를 수행하고, 무단 변조 여부를 신속히 파악할 수 있는 체계를 갖추는 것이 중요하다.

3) 주기적인 위협 모니터링

공격자가 광고 스크립트 삽입 공격을 수행하기 위해서는 웹셸 업로드, 악성 파일 생성, 악성 작업 스케줄러 생성, 지속적인 악성코드 실행 등의 행위가 시스템에서 수행된다. 이러한 공격자가 자주 악용하는 행위를 사전에 식별하면 사고(랜섬웨어, 정보 유출 등)가 발생하는 것을 방지할 수 있다.

따라서, 위협을 주기적으로 식별하고 위협이 사고로 이어지지 않도록 대응하는 위협 모니터링 방안을 마련하는 것이 중요하다. 내부적으로 보안 조직 및 인력이 확보되지 않은 경우, 실제 침해사고 분석이 가능하고 전문적인 경험을 가진 외부 업체의 위협 모니터링 서비스를 통해 주기적인 모니터링 방안을 마련할 수 있다.