Home - etc - 워드프레스 해킹 해결 사례: 플러그인 취약점 루트 추정

워드프레스 해킹 해결 사례: 플러그인 취약점 루트 추정

Contents

1차 해킹

오래전에 운영하던 블로그가 있었습니다. 중간에 플러그인 취약점으로 추정되는 해킹 문제가 생겨서 구글 검색 순위가 떡락하는 일이 생겼었죠. 당시 티스토리를 떠나며 워드프레스 공부 겸 시작한거라 크게 신경쓰진 않았지만 해당 도메인은 어떻게 복구해야할지 몰라서 아깝지만 아예 새 도메인으로 시작하자는 생각으로 만든게 지금의 블로그 입니다.

어차피 유지해놓고 나중에 활용, 폐기를 결정할거였고 워드프레스에 대한 지식이 별로 없던 시기여서 다른 사람의 방법들을 보고 해결했었습니다.

  1. 보안 플러그인 설치 후 의심 파일 삭제
  2. 오염된 콘텐츠 코드 수정
  3. 플러그인 최소화 후 모두 삭제

워드펜스라고 불리는 Wordfence Security 플러그인을 설치해서 스캐닝 후 나타난 문제들을 해결하고 각 글에 추가된 정체불명의 코드를 수동으로 삭제했었어요. 해결했다 생각하고 넘어갔는데..

2차 해킹

써놓은 글들이 아깝기도하고 나중에 테스트용으로 사용해보려고 거의 유지만하고 있었는데 올해 로그인해보니 하.. 당시 삭제했던 악성 코드 + 추가 코드가 재주입 되어있었습니다.

스마트폰 브라우저로 접속할 때만 특정 사이트로 납치하는 코드여서 가끔 PC 웹 브라우저로만 접속했던 제가 알아채지 못하고 있었습니다.

1차 해결 당시에 삭제하느라 짜증나서 기억에 새겨져있던 코드라 보자마자 바로 기억이 났습니다. 이게 그대로 다시 되살아났다면 제가 삭제하지 못한 어딘가에 악성코드가 숨겨져 있었다는것..

해킹 케이스가 다양하기 때문에, 제가 당했던 것에 대해서만 말씀드릴게요. 저는 이 분야에 전문가가 아니므로 저에게 해킹 복구 방법을 문의하셔도 알려드릴수 없습니다.

워드프레스 해킹 해결했던 방법

  1. 의심스러운 파일과 폴더 제거
  2. DB 수정
  3. 워드프레스 설정 변경
  4. 콘텐츠 전부 수정

대략적으로 이런데 아래 조금 더 자세히 설명드릴게요.

파일 및 폴더 제거

FTP로 접속 후 삭제하시면 되는데 SSH 환경 사용이 가능하신 분들은 명령어로 폴더별 의심스러운 PHP 파일을 찾아보시는게 더 좋습니다.

제가 했던 것

  • wp-content/languages: 폴더를 다 삭제했습니다. 의심스러워 보이는 파일들이 있었는데 뭐가뭔지 몰라서 전체 삭제. 이건 설정에서 한글로 설정하면 다시 재설치되므로 날려도 됩니다.
  • wp-content/themes: 사용하지 않는 것들은 모조리 삭제
  • wp-content/uploads: 이미지 파일이 워낙 많기 때문에 여기에 숨겨놓기도 한다는군요. 폴더 다 뒤져서 청소

Admin 페이지 체크리스트

  • 추가 CSS: 세상에 여기에 숨겨져 있었을 줄이야.. [모양] – [사용자 정의] – [추가 CSS] (custom CSS)로 들어갔더니 여기에도 숨겨져 있었습니다. 전부 청소.
  • 플러그인: 적게 사용할수록 보안에 유리
  • 사용자: 사용자 계정이 추가되어있었고 저의 gravatar가 변경되어있었습니다.
    • 비밀번호 변경
    • 세션 – 다른 모든 곳에서 로그아웃
  • 설정: 설정 – 일반 들어갔더니 ‘사이트 주소 (URL)’이 중국 사이트로 설정되어있었어요.

콘텐츠 수정

Post, Page 모두 하나하나 들어가서 코드 모드에서 수동으로 깔끔하게 삭제해주세요. 정규 표현식으로 해볼수도 있겠지만 확실히 하기위해선 글이 수백개가 아닌이상 직접 체크하는게 좋을 것 같아요.

DB 수정

여기서 반복적으로 나오는 코드가 있습니다. DB 검색시 광범위한 검색 결과가 나오지 않도록 검색할 코드를 찾아봅니다. 특정 도메인이나 반복되는 코드 짧은거 하나 선택합니다.

저는 코드의 시작이었던 ‘9e23’을 DB 검색어로 정했습니다.

DB 수정을 위한 쿼리는 저기에 입력 후 이미지에서는 잘렸는데 아래 ‘실행’ 버튼을 누르시면 돼요.

아래는 AI 형님이 알려주신 것을 다시 정리한 것입니다. AI 시대가 아니었다면 저는 정말 해결하기 힘들었을것같아요.


🔍 리다이렉트 / JS 인젝션

납치 스크립트 이런게 포스팅 코드에 숨겨져있나 보는거예요.

SELECT ID, post_title
FROM wp_posts
WHERE post_content REGEXP
'(<script|window\\.location|document\\.location|http-equiv|iframe|atob\\(|eval\\()';

게시글 revision 포함 전체 검사

revision(변경된 내용)까지 한 번 더 검사해봅시다.

SELECT ID, post_title, post_type
FROM wp_posts
WHERE post_content REGEXP
'(ushort\\.dev|c-o\\.life|window\\.location|<script|iframe)';

📌 post_type = 'revision' 이라도 감염이면 삭제 대상

저는 리비전까지 다 감염되어있었어요. 아래 명령어로 삭제.

DELETE FROM wp_posts
WHERE post_type = 'revision';

wp_options 악성 트리거 탐색

SELECT option_name
FROM wp_options
WHERE autoload = 'yes'
AND option_value REGEXP
'(script|iframe|window\\.location|eval\\(|atob\\(|fromCharCode)';

도메인 기반 재주입 여부 확인

  • 아래는 저에게 주입되어있던 url을 검색한거예요. ***처리함 여러분의 악성코드를 AI에게 알려주고 삭제 방법을 알려달라고하세요.
  • 정상적인 필드도 함께 나옵니다. 다 지우지 마시고 ‘수정’ 눌러서 이상한것만 삭제하세요.
SELECT option_name
FROM wp_options
WHERE option_value REGEXP
'(ushort\\.dev|***\\.life|https?://)';

난독화 트리거 검색

아래 9e23은 제가 찾을 코드입니다. 여러분의 것으로 바꾸세요.

SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%9e23%';
SELECT option_name
FROM wp_options
WHERE option_value LIKE '%9e23%';
SELECT meta_id
FROM wp_postmeta
WHERE meta_value LIKE '%9e23%';

이렇게 검색해서 나오는 것들을 다 삭제했습니다.

사용자 계정 확인

내가 입력한 이메일 주소가 맞고 다른 것은 없는지 확인

SELECT ID, user_login, user_email
FROM wp_users;

관리자 권한 확인

SELECT u.user_login
FROM wp_users u
JOIN wp_usermeta m
ON u.ID = m.user_id
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%administrator%';

예약 작업 (wp-cron) 감염 여부

SELECT option_name
FROM wp_options
WHERE option_name = 'cron'
AND option_value REGEXP '(script|iframe|eval|atob)';

이상한 옵션명 자체 탐지

*각 필드별로 ‘수정’ 버튼 눌러서 의심스러운 것만 삭제

SELECT option_name
FROM wp_options
WHERE option_name REGEXP
'(_temp|_cache|_inject|_redirect|_payload|base64|eval)';

또 감염되면?

DB는 청소 완료되었기 때문에 재감염 된다면 어딘가에 악성 코드 파일이 남아있는 것 입니다.

  • 테마, 플러그인 재설치
  • uploads 파일 다시 검사
  • 그래도 문제면 서버측 의심

저는 대충 이정도로 끝났습니다. 만약 또 재발하면 새로운 환경에 세팅해서 콘텐츠만 옮길 생각입니다.

테스트용으로 만들어놨던 다른 블로그까지 동일하게 감염된거라 호스팅쪽 의심도 해봤는데.. 500원짜리 파킹용으로 사용하는거라 나중에 집에 놀고있는 컴퓨터로 서버만들어서 다 옮겨놔야겠습니다.

아직 댓글이 없습니다

댓글 남기기