PrestaShop은 전 세계적으로 널리 사용되는 전자상거래 플랫폼인 만큼 해커들에게 매우 매력적인 공격 표적입니다. 해커들은 인기 있는 CMS의 사각지대에 숨어 있는 취약점을 끊임없이 탐색하며, ARP 스푸핑(ARP Poisoning)을 이용해 오픈 Wi-Fi 트래픽에 악성코드를 주입하는 것처럼 새로운 공격 기법도 끊임없이 고안해 내고 있습니다. 여기서 말하는 PrestaShop 악성코드(Malware)란, 해커가 스토어의 취약점을 악용해 배포하는 모든 형태의 악성 코드를 의미합니다.
PrestaShop 악성코드에는 어떤 종류가 있고, 그로부터 어떻게 스스로를 보호해야 할지 궁금하셨다면 이 글이 바로 그 해답이 되어줄 것입니다.
관련 글 – PrestaShop 보안 모범 사례 및 악성코드 제거 완벽 가이드
PrestaShop 악성코드 유입 경로
PrestaShop 악성코드는 다음과 같은 경로를 통해 주입될 수 있습니다.
코드 취약점(Code Vulnerabilities)
PrestaShop 악성코드 감염은 대부분 버그가 포함된 코드에서 비롯됩니다. 이는 코어 파일뿐만 아니라 플러그인에도 동일하게 적용됩니다. 대표적인 취약점들이 어떻게 악성코드 주입에 악용되는지 살펴보겠습니다.
PrestaShop SQL 인젝션(SQL Injection)
SQL 취약점을 이용하면 PrestaShop 스토어의 데이터베이스 테이블에 악성 코드를 삽입할 수 있습니다. 경우에 따라서는 서버로 파일을 업로드하는 데에도 악용될 수 있어, 공격자가 스토어의 웹 서버에 악성 스크립트를 올리는 일도 가능합니다. 실제로 PrestaShop은 CVE-2018-8824로 명명된 SQLi 취약점에 노출된 바 있습니다.
관련 글 – PHP 웹사이트와 CMS에서 SQL 인젝션이 초래하는 결과
PrestaShop 크로스 사이트 스크립팅(XSS)
스토어가 XSS 취약점을 가지고 있다면 공격자는 악성코드를 직접 주입할 수 있습니다. 저장형(Stored) XSS라면 악성코드가 곧바로 삽입되며, 반사형(Reflected) XSS라면 공격자가 특수하게 조작한 URL을 스토어 관리자에게 보내 관리자가 이를 클릭하도록 유도합니다. 이렇게 하면 공격자가 제어하는 서버에서 악성 스크립트가 로딩되면서 PrestaShop 악성코드가 주입됩니다. PrestaShop 1.7.2.4는 CVE-2018-5681로 알려진 XSS 취약점에 노출된 것으로 확인되었습니다.
PrestaShop 원격 코드 실행(RCE)
원격 코드 실행(Remote Code Execution) 취약점이 있다면 공격자는 스토어 서버와 직접 상호작용할 수 있습니다. 따라서 RCE에 노출된 스토어의 경우 공격자가 합법적인 웹 페이지 안에 직접 악성코드를 삽입할 수 있습니다. 코드가 난독화되어 있다면 이런 유형의 악성코드는 탐지하기가 무척 까다롭습니다. 최근 PrestaShop 1.5~1.7 버전이 CVE-2018-19355로 명명된 RCE 취약점에 노출된 것이 발견되었습니다.
소셜 엔지니어링과 드라이브바이 다운로드
소셜 엔지니어링 공격은 오늘날에도 악성코드를 유포하는 데 널리 쓰이는 수단입니다. 공격자는 '고객 지원'을 제공한다는 핑계로 PrestaShop 스토어에 악성코드를 주입하기도 합니다. 또한 스토어 웹 관리자의 이메일이 드라이브바이 다운로드(Drive-by Download) 공격의 주요 표적이 되곤 하는데, 이는 관리자가 URL을 클릭하도록 속인 뒤 몰래 악성코드를 설치하는 방식입니다. 실제로 PrestaShop 1.7.2.5 이하 버전은 UI 리드레싱(UI-Redressing)/클릭재킹(Clickjacking) 보안 문제에 노출되어, 공격자가 정상적인 버튼이나 링크 뒤에 악성코드를 숨길 수 있었습니다. 앞서 언급한 반사형 XSS와 소셜 엔지니어링을 결합해 악성코드를 유포하는 경우도 있습니다.
제로데이 취약점과 트로이목마(Trojan)
공격자가 아직 공개되지 않은 취약점(제로데이)을 확보하는 경우도 있습니다. 이를 이용하면 웹상의 여러 PrestaShop 설치 환경을 대상으로 대규모 악성코드 공격을 감행할 수 있습니다. 실제로 해커가 소프트웨어의 공식 저장소 서버 자체를 표적으로 삼아 악성코드를 심은 사례도 있었습니다. 예를 들어 PHP Pear 패키지 관리자가 공식 사이트를 통해 악성코드에 감염된 적이 있습니다. 이처럼 정상 소프트웨어처럼 위장한 PrestaShop 악성코드를 트로이목마(Trojan)라고 부릅니다.
PrestaShop 악성 광고
해커들은 매일 새로운 악성코드 주입 방식을 진화시키고 있으며, 광고를 활용한 유포도 그중 하나입니다. 웹 공간 일부를 광고로 임대하고 있다면, 그 자리를 공격자가 구매해 고객들에게 악성코드를 유포할 수 있습니다. 이런 유형의 악성코드는 사이트 운영자 입장에서는 모든 것이 멀쩡해 보이지만 실제로는 악성 광고를 통해 감염이 일어나기 때문에 탐지가 특히 어렵습니다.
PrestaShop 악성코드의 주요 유형
암호화폐 채굴기(Cryptocurrency Miner)
이 유형의 악성코드는 서버와 스토어 방문자의 처리 능력을 빼앗아 암호화폐를 채굴하는 것이 목적입니다. 단순한 형태의 채굴 악성코드는 다음과 같은 코드를 담고 있습니다.
<script src="https://authedmine.com/lib/simple-ui.min.js" async></script>
CoinHive는 구현이 쉽다는 이유로 해커들에게 자주 악용되는 정상 서비스였습니다. 물론 이것은 가장 단순한 변종일 뿐입니다. 더 정교한 채굴 악성코드는 코드를 난독화하기 때문에 탐지가 쉽지 않습니다. 일부 변종은 호스트명을 점(.)이 없는 십진수 표기법으로 작성하며, CoinHive 라이브러리를 숨기기 위해 가짜 jQuery 스크립트를 사용합니다. 나아가 Google Analytics 파라미터와 유사한 변수명을 사용해 탐지를 회피하기도 합니다.
랜섬웨어(Ransomware)
PrestaShop 랜섬웨어는 시스템 파일을 암호화해 서버를 사용 불능 상태로 만듭니다. 이후 index.php 하나만 남게 되는데, 이 파일에는 특정 주소로 비트코인을 지불하라는 요구 메시지가 담겨 있습니다. 더 악질적인 점은 몸값을 지불했더라도 파일이 복호화된다는 보장이 전혀 없다는 것입니다. 이런 악성코드 자체를 제거하는 것은 어렵지 않지만, 서버 데이터 복구는 매우 어려운 과제가 됩니다. WannaCry 같은 랜섬웨어 공격이 전 세계의 핵심 시스템을 마비시킨 사례가 있었던 만큼, 예방이야말로 최선의 처방이라 할 수 있습니다.
신용카드 스키머(Credit Card Skimmer)
일부 PrestaShop 악성코드는 스토어의 거래 정보를 훔치도록 특수하게 제작됩니다. 아래 이미지는 그중 하나의 코드 조각입니다.
코드에서 알 수 있듯이 이 악성코드는 먼저 데이터베이스 연결을 설정한 뒤, ps_payment_cc 테이블에서 다음 정보를 탈취합니다.
- 거래의 결제 ID
- 신용카드 번호
- 신용카드 브랜드명
- 신용카드 유효기간
이 정보들을 확보한 뒤 악성코드는 해당 데이터를 공격자가 제어하는 서버로 빼돌립니다.
관련 글 – PrestaShop 카드 해킹 문제 해결하기
바이러스(Virus)
PrestaShop 바이러스는 스토어에서 다양한 악성 행위를 수행할 수 있습니다. 그 범위는 무해한 장난 수준부터 파일 시스템 전체 삭제에 이르기까지 다양합니다. 다만 지속성을 유지하기 위해 PrestaShop 바이러스는 코드를 난독화합니다. PrestaShop은 PHP로 개발되므로, 전형적인 바이러스 시그니처는 아래 이미지와 같은 'php.malware.fopo' 바이러스일 수 있습니다.
이미지에서 보듯 FOPO 난독화로 인해 사람이 코드를 읽을 수 없게 되어 탐지를 회피합니다. 악성코드 제거를 위해 코드를 읽으려면 FOPO 디오브퓨스케이터(Deobfuscator)가 필요합니다. 일부 PrestaShop 플러그인 개발자는 코드 보호 목적으로 FOPO 도구를 사용하기도 하므로, 이런 악성코드의 탐지는 더욱 복잡해지며 비전문가가 임의로 시도해서는 안 됩니다. 또한 여기서 소개한 것은 일반적인 PrestaShop 바이러스의 한 사례일 뿐이며, 이보다 복잡한 바이러스가 여럿 존재하기 때문에 모든 것을 다루는 것은 이 글의 범위를 벗어납니다.
PrestaShop 악성코드 제거 방법
스토어가 PrestaShop 악성코드에 감염되었다면, 먼저 파일 시스템부터 점검하는 것이 좋습니다. PrestaShop은 PHP 기반이므로 해커들은 php.ini, user.ini 같은 PHP 설정 파일을 수정하는 경우가 많습니다. 이 파일들은 시스템 권한 설정과도 관련이 있어 공격자에게 더 많은 자원을 열어줄 수 있습니다. 또 하나의 핵심 파일은 .htaccess 파일입니다. PrestaShop 악성코드는 이 파일을 수정해 사이트 트래픽을 스팸 사이트로 리디렉션합니다. 다만 이 파일들은 민감한 파일이므로 의심스러운 코드를 발견했다고 삭제하지 말고, 주석 처리한 뒤 보안 전문가에게 문의하세요. Base64 형식으로 숨겨진 악성코드를 찾으려면 SSH를 통해 다음 명령어를 실행합니다.
find . -name "*.php" -exec grep "base64" {} \; -print &> code.txt
이 명령은 PrestaShop 파일에 base64 인코딩 형태로 숨겨진 모든 코드를 검색해 code.txt 파일로 저장하며, 이후 이 파일을 디코딩할 수 있습니다. base64 인코딩 외에도 FOPO가 코드 은닉에 사용됩니다. FOPO로 난독화된 코드는 온라인에서 제공되는 도구로 분석할 수 있습니다. 데이터베이스를 정리하려면 phpMyAdmin 도구를 사용하세요. 이 도구로 데이터베이스 내 악성 항목을 검색할 수 있으며, 다음과 같은 악성 키워드를 주의 깊게 살펴야 합니다.
$_POST, $_GET, eval, exec, system, passthru, gzdecode, gzuncompress, base64_decode, file_get_contents, file_put_contents, strtoupper
이 키워드들을 phpMyAdmin에 하나씩 입력해 파일이나 테이블 내부를 검색하면 됩니다. 아래 이미지의 예시를 참고하세요.
궁극의 PrestaShop 악성코드 방어
이 모든 수동 작업은 번거로울 뿐만 아니라, 그렇게 해도 악성코드 감염이 완전히 사라진다는 보장은 없습니다. 이런 번거로움을 피하려면 Astra가 제공하는 것 같은 보안 솔루션을 활용하는 것이 좋습니다. Astra 방화벽은 PrestaShop 스토어를 감염시키려는 공격자의 모든 악성 시도를 차단하고, Astra 보안 솔루션은 파일 시스템을 스캔해 감염 여부를 점검합니다. Astra는 PrestaShop 파일을 자동으로 정리하고 업데이트해 줍니다. Astra를 설치하기만 하면 나머지는 모두 맡기면 됩니다.