본문 바로가기
플러그인

WordPress XMLRPC Blocker : 워드프레스 브루트포스(Brute Force) 공격 차단 플러그인

이온디 2025.12.08 조회 130 추천 0
wordpress워드프레스wp이온디eond

xmlrpc-blocker.zip


# 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.0(0)

구매·획득한 회원만 평점을 작성할 수 있습니다.

댓글 · 문의 0

구매 후기는 위의 구매자 평점에, 상품에 대한 질문은 여기에 남겨주세요.

첫 리뷰를 남겨보세요.

리뷰를 작성하려면 로그인이 필요합니다.