WordPress 플러그인 공급망 공격과 EtherHiding 백도어 분석

Essential Plugin 공급망 공격의 PHP 역직렬화 백도어, EtherHiding C&C 은닉 방식과 WordPress 방어 전략을 분석한다.

2026-08-14 · 최초 발행 2026-04-19

2026년 4월 초, 전 세계 20만 개 이상의 WordPress 사이트에서 악성코드가 동시에 활성화됐다. 공격 코드는 8개월 전에 배포된 플러그인 업데이트에 이미 포함돼 있었고, C&C 주소는 Ethereum 스마트 컨트랙트에 숨겨져 있었다.

플러그인 소유권 인수에서 시작된 침해

공격자는 Flippa에서 WP Online Support가 운영하던 Essential Plugin 포트폴리오를 6자리(달러) 금액에 인수했다. 포트폴리오에는 WordPress.org에서 수년간 검증된 30개 이상의 플러그인이 있었고, 누적 설치 수는 수십만에 달했다.

소유권이 넘어가자 공격자는 플러그인 SVN 커밋 권한도 확보했다. 첫 악성 커밋은 2025년 8월 8일 버전 2.6.7에서 이뤄졌다. 체인지로그는 "WordPress 6.8.2 호환성 확인"만을 알렸지만, 실제 변경에는 기존 analytics 모듈 안에 삽입된 191줄의 악성 코드가 포함돼 있었다.

Flippa에서 플러그인포트폴리오 인수(2025년 초, 6자리 달러)SVN 커밋 권한 획득버전 2.6.7 악성 업데이트 배포(2025년 8월 8일)191줄 백도어 코드 삽입wpos-analytics 모듈 내부8개월 잠복(무해한 동작 유지)C&C 활성화(2026년 4월 5~6일)analytics.essentialplugin.com페이로드 배포 시작20만+ 사이트 감염SEO 스팸 주입WordPress.org 31개 플러그인폐쇄(2026년 4월 7일)

외부 응답을 코드 실행으로 연결한 PHP 역직렬화

PHP의 unserialize()는 직렬화된 객체 문자열을 PHP 객체로 되돌린다. 이 변환 과정에서는 PHP 매직 메서드가 자동으로 호출될 수 있다.

공격자가 제어하는 직렬화 페이로드가 unserialize()로 전달되면 애플리케이션에 존재하는 클래스의 __wakeup, __destruct, __toString 같은 매직 메서드가 연쇄 실행될 수 있다. 이런 연결을 **가젯 체인(Gadget Chain)**이라 부른다. 각각은 무해해 보일 수 있지만, 조합 결과는 원격 코드 실행(RCE)에 이를 수 있다.

OWASP는 이를 PHP Object Injection으로 분류하며, 코드 인젝션, SQL 인젝션, 경로 탐색, 서비스 거부 등으로 발전할 수 있다고 경고한다.

악성 로직은 합법적인 analytics opt-in 모듈인 wpos-analytics에 숨겨져 있었다. 취약 함수와 REST API 엔드포인트의 구조는 다음과 같았다.

fetch_ver_info():
  (1) file_get_contents()로 공격자 서버(analytics.essentialplugin.com)에 접속
  (2) 서버 응답을 @unserialize()로 역직렬화
  (3) version_info_clean()으로 임의 함수 실행

REST API 엔드포인트:
  permission_callback: __return_true  ← 인증 없이 누구나 호출 가능

@unserialize() 앞의 @ 연산자는 오류를 억제한다. 역직렬화에 실패해도 경고 메시지가 출력되지 않으므로, 이 경로는 탐지하기 더 어려워진다.

GooglebotEthereum 스마트 컨트랙트analytics.essentialplugin.com (C&C)감염된 WordPress 사이트GooglebotEthereum 스마트 컨트랙트analytics.essentialplugin.com (C&C)감염된 WordPress 사이트(1) 현재 C&C 도메인 조회(2) C&C 주소 반환 (암호화됨)(3) fetch_ver_info() 호출(4) 직렬화된 악성 페이로드(5) unserialize() → 가젯 체인 실행(6) wp-comments-posts.php 생성wp-config.php에 SEO 스팸 코드 주입(7) 크롤링 요청(8) 스팸 콘텐츠 응답(일반 사용자에게는 정상 노출)

최종 페이로드는 루트 디렉터리에 wp-comments-posts.php라는 위장 파일을 만들고, wp-config.php에 SEO 스팸 코드를 주입했다. Googlebot에는 스팸 콘텐츠를 노출하면서 실제 사이트 관리자가 볼 때는 정상 페이지처럼 보이게 하는 방식이다.

스마트 컨트랙트에 숨긴 C&C 주소

EtherHiding은 블록체인 스마트 컨트랙트를 분산형 C&C 서버처럼 사용하는 기법이다. 이 WordPress 공격의 악성 코드는 공개 Ethereum RPC 엔드포인트를 통해 스마트 컨트랙트를 조회하고, 그 결과에서 현재 C&C 도메인 주소를 얻었다.

악성 플러그인 코드공개 Ethereum RPC엔드포인트(infura, alchemy 등)스마트 컨트랙트 상태 조회Base64+XOR 암호화된C&C 도메인 주소복호화C&C 서버 접속페이로드 수신 실행방어 팀의 C&C 차단 시도기존 도메인 폐쇄공격자: 스마트 컨트랙트업데이트 (수 달러 비용) C&C 도메인자동 적용

스마트 컨트랙트 데이터에는 Base64 인코딩과 XOR 암호화가 적용돼 있어, 온체인 데이터만 분석해서 C&C 주소를 즉시 확인하기 어렵다.

속성 전통적 C&C 블록체인 C&C
인프라 위치 단일 서버/도메인 전 세계 분산 노드
차단 방법 도메인/IP 블랙리스트 불가능 (블록체인 자체를 차단해야)
업데이트 비용 새 도메인 등록 필요 컨트랙트 호출 ~$1 (MATIC 기준)
추적 가능성 서버 압수, 도메인 등록자 조회 익명 지갑 주소만 존재
가동률 서버 다운 가능 블록체인 네트워크 유지되는 한 100%

Endor Labs의 분석에 따르면 이 기법은 Ethereum뿐 아니라 BNB Smart Chain, Polygon, Solana 등으로 확산되고 있다. 일반 사이버 범죄 조직부터 북한 UNC5342와 같은 국가 지원 위협 행위자까지 폭넓게 활용하고 있다.

잠복 기간이 만든 대규모 배포 기반

공격은 백도어를 심은 즉시 실행하지 않았다. 8개월 동안 정상 업데이트를 계속 배포하며 설치 기반과 신뢰 기록을 쌓은 뒤 활성화했다.

준비 단계2025년 초Flippa에서 EssentialPlugin 포트폴리오인수<br/>(수십만 달러규모)침투 단계2025년 8월 8일버전 2.6.7배포<br/>191줄백도어 코드삽입<br/>변경 로그'버전 호환성 확인'잠복 단계2025년 8월~2026년3월8개월간 완전잠복<br/>정상적인업데이트지속<br/>보안 스캐너탐지 회피활성화 단계2026년 4월 5~6일C&C 서버 페이로드배포 시작<br/>20만+사이트 동시 감염2026년 4월 7일WordPress.org 31개플러그인폐쇄<br/>Patchstack공개 분석 발표WordPress 공급망 공격 타임라인 (2025~2026)

잠복의 목적은 탐지 회피에만 있지 않았다. 이 기간에 악성 버전은 자동 업데이트를 통해 더 많은 사이트로 배포됐고, WordPress.org의 업데이트 검토 기록도 축적됐다. 최신 버전을 적용한다고 믿었던 사용자는 백도어가 포함된 버전을 설치하게 됐다.

Patchstack은 WordPress.org 통계를 기준으로 감염 사이트가 20만 개를 넘었다고 분석했고, Rescana는 40만 개 이상으로 추산했다.

오픈소스 신뢰 경로를 노리는 공급망 공격

이 사건은 오픈소스 공급망 공격의 여러 진입점 가운데 소유권 인수가 어떻게 악용될 수 있는지 보여준다. Sonatype의 2025년 보고서에 따르면 한 해에만 45만 개 이상의 악성 패키지가 발견됐다.

오픈소스 공급망 공격 벡터계정 탈취기존 관리자 자격증명 탈취소유권 인수M&A / 포트폴리오 매입의존성 혼돈유사 이름 패키지 게시빌드 파이프라인 침해CI/CD 시스템 공격내부자 위협기여자 매수 또는 강압이번 WordPress 사건(Essential Plugin 포트폴리오)신뢰 기반 자동 업데이트메커니즘 악용수십만 사이트 동시 감염

The Next Web과 Open Source For You의 분석은 WordPress.org 마켓플레이스의 구조적 문제를 지적한다. 플러그인 소유자가 바뀌어도 코드 서명이나 추가 검토 없이 기존 신뢰 수준이 유지되고, 이전 이후 업데이트를 더 엄격히 살피는 신뢰 초기화 정책도 없다. 자동 업데이트가 켜진 환경에서는 악성 버전이 즉시 적용될 수 있으며, 변경 로그와 실제 코드 변경의 불일치를 자동으로 찾는 SVN 커밋 감사 체계도 없다.

소유권 변화를 운영 신호로 다루기

플러그인 소유권 변경은 공급망 침해를 의심해야 하는 신호다. Patchstack, WPScan, Wordfence 같은 취약점 피드에서 플러그인 폐쇄나 권고 등의 상태 변경 알림을 구독하고, 사용 중인 플러그인 목록을 기준으로 필터링하면 대응 시간을 줄일 수 있다.

WordPress 플러그인은 SVN 저장소로 관리된다. 플러그인별 SVN 피드를 구독하거나 WordPress.org API로 버전 변경 이력과 마지막 업데이트 날짜를 정기적으로 확인할 수 있다.

https://api.wordpress.org/plugins/info/1.0/<plugin-slug>.json
→ last_updated, author, versions 필드 모니터링

소유권 변경이 확인된 플러그인은 자동 업데이트를 일시 비활성화하고, 코드를 수동 검토한 뒤 적용하는 정책이 필요하다. WordPress.org 플러그인 페이지의 author, author_profile 값이 이전 스냅샷과 달라졌는지도 함께 비교해야 한다. 이 정보를 주기적으로 저장해 비교하는 자동화는 조기 탐지에 활용할 수 있다.

파일과 네트워크에서 확인하는 무결성 징후

소프트웨어 공급망 무결성 검증에는 Google이 주도하는 SLSA(Supply-chain Levels for Software Artifacts) 프레임워크와 Sigstore가 있다. SLSA는 소스 무결성, 빌드 출처(provenance), 의존성 관리를 위한 단계적 성숙도 모델을 제공한다. Sigstore의 cosign, Fulcio 인증기관, Rekor 투명성 로그를 결합하면 소스 코드부터 배포 아티팩트까지 신뢰 체인을 구성할 수 있다.

WordPress 생태계에 이를 직접 적용하기는 어렵다. 대신 운영 환경에서는 파일 무결성, 소스 비교, 아웃바운드 연결, 위험한 함수 조합을 함께 점검할 수 있다.

WordPress 코어와 플러그인 파일의 해시를 기록하고 변경 시 알림을 받는 파일 무결성 모니터링(FIM)이 기본 방어선이 된다. Wordfence와 iThemes Security는 관련 기능을 제공하며, 서버 레벨에서는 OSSEC와 Tripwire를 활용할 수 있다. 이 사건에서 생성된 wp-comments-posts.php와 변조된 wp-config.php는 FIM으로 즉시 탐지 가능했다.

설치된 플러그인 소스는 WordPress.org SVN 원본과 정기적으로 비교할 수 있다. diff 또는 git 기반 비교 도구로 예상하지 못한 변경을 식별한다. 또한 file_get_contents()curl이 알 수 없는 도메인에 연결하는 패턴을 감시해야 한다. Ethereum RPC 엔드포인트인 infura.io, alchemy.com 등으로의 비정상 연결도 탐지 규칙에 포함해야 한다.

unserialize()file_get_contents()가 함께 사용되는 플러그인 코드는 별도로 스캔한다.

grep -r "unserialize" /var/www/html/wp-content/plugins/ | grep -v ".git"
grep -r "file_get_contents" /var/www/html/wp-content/plugins/ | grep "unserialize"

이 조합이 사용자 입력이나 외부 HTTP 응답과 연결된다면 즉시 상세 검토가 필요하다.

PHP 실행 환경에서 allow_url_fopenallow_url_include를 비활성화하면 file_get_contents()를 통한 원격 데이터 패치 자체를 막을 수 있다. 이번 공격의 fetch_ver_info() 함수는 이 설정만으로도 무력화됐을 것이다.

; php.ini
allow_url_fopen = Off
allow_url_include = Off

이 사례에서 방어의 초점은 C&C 도메인 추적만으로 충분하지 않다. 블록체인 기반 C&C는 도메인 차단, 서버 압수, IP 블랙리스트 같은 기존 수단을 우회한다. 파일 생성, 코드 변조, 비정상 아웃바운드 연결처럼 호스트에서 남는 행위를 함께 분석해야 한다.

오픈소스 생태계는 기여자 평판과 소유권의 연속성을 신뢰 기반으로 삼는다. 소유권 변경 시 신뢰 리셋, 코드 서명 의무화, 자동 업데이트의 단계적 배포 같은 구조적 보완이 필요하다. 운영자는 사용 중인 플러그인의 소유자 변경 이력을 확인하고, allow_url_fopen 설정과 파일 무결성 모니터링을 점검할 수 있다.

Sources

WordPress 보안공급망 공격PHP 역직렬화EtherHidingDevSecOps