← 블로그 목록
작성일: 2026-05-20 WordPress보안Nginx

WordPress 공격 패턴 총정리: 로그로 보안 이벤트 탐지하기

WordPress는 전 세계 웹사이트의 40% 이상을 차지하는 만큼 공격자들의 주요 타깃입니다. 자동화 봇은 WordPress를 사용하는 서버를 끊임없이 스캔하고, 알려진 취약점을 찾아 공격을 시도합니다. 이 모든 시도는 Nginx 또는 Apache 액세스 로그에 기록됩니다.


공격자가 먼저 하는 일: WordPress 탐지

`` GET /wp-login.php HTTP/1.1 GET /wp-admin/ HTTP/1.1 GET /wp-content/ HTTP/1.1 GET /xmlrpc.php HTTP/1.1 `

이 경로에 대한 요청이 갑자기 증가했다면, 봇이 WordPress 사이트임을 확인하고 공격 준비에 들어간 것입니다.


공격 유형별 로그 패턴

1. wp-login.php 브루트포스

` 203.0.113.42 - - [10/May/2024:03:21:05 +0000] "POST /wp-login.php HTTP/1.1" 200 4823 203.0.113.42 - - [10/May/2024:03:21:06 +0000] "POST /wp-login.php HTTP/1.1" 200 4823 `

주의: 응답이 200이어도 로그인 실패입니다. WordPress는 로그인 실패 시에도 200을 반환하므로 응답 크기로 판단해야 합니다.

탐지:

`bash grep 'POST /wp-login.php' /var/log/nginx/access.log \ | awk '{print $1}' | sort | uniq -c | sort -rn | head -10 `

2. xmlrpc.php 악용

` 198.51.100.7 - - [10/May/2024:04:10:01 +0000] "POST /xmlrpc.php HTTP/1.1" 200 403 198.51.100.7 - - [10/May/2024:04:10:02 +0000] "POST /xmlrpc.php HTTP/1.1" 200 403 `

XML-RPC의 system.multicall 메서드를 사용하면 단 1번의 HTTP 요청으로 수백 번의 로그인 시도가 가능합니다.

3. 플러그인 취약점 스캔

` GET /wp-content/plugins/revslider/temp/update_extract/revslider/revslider.php GET /wp-content/plugins/contact-form-7/ GET /wp-content/plugins/elementor/ `

4. 사용자 이름 열거

` GET /?author=1 HTTP/1.1 GET /?author=2 HTTP/1.1 GET /?author=3 HTTP/1.1 `

WordPress의 ?author=숫자 파라미터는 유효한 사용자 페이지로 리다이렉트됩니다.


Nginx 설정으로 WordPress 보호

wp-login.php IP 제한

`nginx location = /wp-login.php { allow 203.0.113.10; deny all; fastcgi_pass unix:/run/php/php8.2-fpm.sock; include fastcgi_params; } `

xmlrpc.php 완전 차단

`nginx location = /xmlrpc.php { deny all; return 403; } `

플러그인 PHP 직접 실행 차단

`nginx location ~ /wp-content/.\.php$ { deny all; return 403; } `

사용자 열거 차단

`nginx if ($query_string ~* "author=[0-9]+") { return 403; } `


WordPress 보안 체크리스트

항목방법
------------
관리자 계정명 변경admin 대신 예측 불가 사용자명 사용
이중 인증(2FA) 적용Google Authenticator 플러그인
로그인 시도 횟수 제한Limit Login Attempts 플러그인
xmlrpc.php 비활성화Jetpack 등 필요 시 IP 제한
파일 편집기 비활성화define('DISALLOW_FILE_EDIT', true);`
플러그인 최신화취약한 구버전 플러그인이 주요 침투 경로

정리

WordPress 공격은 대부분 자동화 봇에 의해 반복적으로 발생합니다. 핵심 방어 경로는 wp-login.php 접근 제한, xmlrpc.php 차단, 플러그인 PHP 실행 차단 세 가지입니다.