WordPress XMLRPC Blocker : 워드프레스 브루트포스(Brute Force) 공격 차단 플러그인
# WordPress XMLRPC Blocker : 브루트포스 차단 플러그인
## 개요
WordPress의 `xmlrpc.php`를 대상으로 한 무차별 대입(Brute Force) 공격을 자동으로 감지하고 차단하는 경량 보안 플러그인입니다.
## 왜 필요한가?
### xmlrpc.php란?
XML-RPC는 WordPress가 외부 애플리케이션과 통신하기 위한 프로토콜입니다. 모바일 앱에서 글 작성, Jetpack 연동, pingback 등에 사용됩니다.
### 문제점
공격자들이 이 엔드포인트를 악용하여:
1. **무차별 대입 공격**: `system.multicall`을 통해 한 번의 요청으로 수백 개의 비밀번호를 시도
2. **DDoS 증폭**: pingback 기능을 이용한 분산 서비스 거부 공격
3. **서버 과부하**: 초당 수십 회의 요청으로 서버 리소스 고갈
### 실제 공격 사례
```
14.18.90.195 - - [08/Dec/2024:07:45:12 +0900] "POST /xmlrpc.php HTTP/1.1" 200 413
14.18.90.195 - - [08/Dec/2024:07:45:12 +0900] "POST /xmlrpc.php HTTP/1.1" 200 413
14.18.90.195 - - [08/Dec/2024:07:45:13 +0900] "POST /xmlrpc.php HTTP/1.1" 200 413
... (초당 3회 이상 지속)
```
위와 같은 공격이 발생하면:
- PHP-FPM CPU 사용률 급증 (40%+ per process)
- MariaDB 부하 증가
- 서버 전체 응답 속도 저하
- 최악의 경우 서버 다운
## 플러그인 특징
### 1. 가볍고 빠름
- **단일 파일** 구성 (의존성 없음)
- **데이터베이스 미사용** - 파일 기반 캐시로 DB 부하 제로
- **조기 차단** - WordPress 완전 로드 전 `plugins_loaded` 단계에서 차단
### 2. 자동 감지 및 차단
- IP별 요청 횟수 추적
- 임계값 초과 시 자동 차단
- 차단 시간 경과 후 자동 해제
### 3. 관리자 대시보드
- 현재 차단된 IP 목록 확인
- 수동 차단 해제 기능
- 공격 로그 조회 및 삭제
## 설치 방법
### 방법 1: FTP/파일 관리자
1. `xmlrpc-blocker` 폴더를 `/wp-content/plugins/` 디렉토리에 업로드
2. WordPress 관리자 → 플러그인 → 'XMLRPC Brute Force Blocker' 활성화
### 방법 2: ZIP 업로드
```bash
# 압축
zip -r xmlrpc-blocker.zip xmlrpc-blocker
# WordPress 관리자 → 플러그인 → 새로 추가 → 플러그인 업로드
```
### 방법 3: WP-CLI
```bash
wp plugin install /path/to/xmlrpc-blocker.zip --activate
```
## 기본 설정
| 설정 | 기본값 | 설명 |
|------|--------|------|
| `XMLRPC_BLOCKER_THRESHOLD` | 5 | 차단 기준 요청 수 |
| `XMLRPC_BLOCKER_TIME_WINDOW` | 60초 | 요청 횟수 감지 시간 |
| `XMLRPC_BLOCKER_BLOCK_DURATION` | 3600초 (1시간) | IP 차단 지속 시간 |
### 설정 변경
`wp-config.php`에 다음을 추가하여 기본값을 오버라이드할 수 있습니다:
```php
// 10초 내 3회 요청 시 차단
define('XMLRPC_BLOCKER_THRESHOLD', 3);
define('XMLRPC_BLOCKER_TIME_WINDOW', 10);
// 24시간 차단
define('XMLRPC_BLOCKER_BLOCK_DURATION', 86400);
```
## 사용 방법
### 관리자 페이지 접근
WordPress 관리자 → **도구** → **XMLRPC Blocker**
### 차단된 IP 확인
대시보드에서 현재 차단된 IP 목록과 남은 차단 시간을 확인할 수 있습니다.
### 로그 확인
공격 로그는 다음 위치에 저장됩니다:
```
/wp-content/xmlrpc-attacks.log
```
로그 형식:
```
[2024-12-08 08:31:45] BLOCKED: 14.18.90.195 (requests: 6) UA: Mozilla/5.0...
```
## 동작 원리
```
┌─────────────────────────────────────────────────────────┐
│ 요청 수신 │
│ /xmlrpc.php │
└─────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 1. 차단 목록 확인 │
│ /wp-content/cache/xmlrpc-blocker/ │
│ {ip_hash}.blocked │
└─────────────────────┬───────────────────────────────────┘
│
┌───────────┴───────────┐
│ │
차단됨 ▼ ▼ 차단 아님
┌─────────────────┐ ┌─────────────────────────────────┐
│ 403 Forbidden │ │ 2. 요청 횟수 증가 │
│ EXIT │ │ {ip_hash}.count │
└─────────────────┘ └─────────────────┬───────────────┘
│
┌──────────┴──────────┐
│ │
임계값 초과 ▼ ▼ 정상
┌─────────────────────┐ ┌─────────────────┐
│ 3. IP 차단 등록 │ │ 요청 허용 │
│ 로그 기록 │ │ (정상 처리) │
│ 403 Forbidden │ └─────────────────┘
└─────────────────────┘
```
## 파일 구조
```
wp-content/
├── plugins/
│ └── xmlrpc-blocker/
│ └── xmlrpc-blocker.php # 메인 플러그인 파일
├── cache/
│ └── xmlrpc-blocker/
│ ├── .htaccess # 디렉토리 보호
│ ├── {ip_hash}.blocked # 차단된 IP
│ └── {ip_hash}.count # 요청 카운트
└── xmlrpc-attacks.log # 공격 로그
```
## 다른 보안 플러그인과 비교
| 기능 | XMLRPC Blocker | Wordfence | Disable XML-RPC |
|------|----------------|-----------|-----------------|
| 파일 크기 | ~8KB | ~20MB | ~5KB |
| DB 사용 | X | O | X |
| 자동 차단 | O | O | X |
| 로그 기록 | O | O | X |
| 차단 해제 | O | O | - |
| 설정 복잡도 | 낮음 | 높음 | 없음 |
| XML-RPC 완전 비활성화 | X | O | O |
## 주의사항
### XML-RPC가 필요한 경우
다음 기능을 사용 중이라면 이 플러그인 대신 다른 방법을 고려하세요:
- **Jetpack** 플러그인 사용
- **WordPress 모바일 앱**으로 글 작성
- **IFTTT**, **Zapier** 등 외부 서비스 연동
- **Pingback/Trackback** 기능 사용
### 권장 설정
일반적인 웹사이트:
```php
define('XMLRPC_BLOCKER_THRESHOLD', 5); // 5회
define('XMLRPC_BLOCKER_TIME_WINDOW', 60); // 60초
define('XMLRPC_BLOCKER_BLOCK_DURATION', 3600); // 1시간
```
높은 보안이 필요한 경우:
```php
define('XMLRPC_BLOCKER_THRESHOLD', 2); // 2회
define('XMLRPC_BLOCKER_TIME_WINDOW', 30); // 30초
define('XMLRPC_BLOCKER_BLOCK_DURATION', 86400); // 24시간
```
## FAQ
### Q: Jetpack을 사용 중인데 문제가 생기나요?
A: Jetpack은 WordPress.com 서버에서 연결하므로 정상적인 사용에서는 임계값에 도달하지 않습니다. 단, 초기 연결 시 여러 요청이 발생할 수 있으므로 임계값을 10 이상으로 설정하는 것을 권장합니다.
### Q: 정상 사용자가 차단되면 어떻게 하나요?
A: WordPress 관리자 → 도구 → XMLRPC Blocker에서 차단을 해제할 수 있습니다. 또는 서버에서 직접 `/wp-content/cache/xmlrpc-blocker/` 디렉토리의 `.blocked` 파일을 삭제하세요.
### Q: 완전히 XML-RPC를 비활성화하고 싶어요
A: 이 플러그인 대신 `functions.php`에 다음을 추가하세요:
```php
add_filter('xmlrpc_enabled', '__return_false');
```
또는 `.htaccess`에:
```apache
<Files xmlrpc.php>
Deny from all
</Files>
```
### Q: 로그 파일이 너무 커지면?
A: 플러그인이 자동으로 1MB 초과 시 최근 500줄만 유지합니다.
## 변경 로그
### 1.0.0 (2024-12-08)
- 최초 릴리스
- IP별 요청 횟수 추적 및 자동 차단
- 관리자 대시보드
- 공격 로그 기능
## 라이선스
GPL v2 or later
## 개발자
EOND (https://eond.com)
구매자 평점
구매·획득한 회원만 평점을 작성할 수 있습니다.
댓글 · 문의 0
구매 후기는 위의 구매자 평점에, 상품에 대한 질문은 여기에 남겨주세요.
리뷰를 작성하려면 로그인이 필요합니다.
첫 리뷰를 남겨보세요.