회원가입 | 고객센터 |
DESIGNONEX
DesignOneX CMS
로그인 회원가입
고객센터

DX Security — Extend Abuse 보안 플러그인

D DX관리자
2026.09.05 18:42 4 0



DX Security — Extend Abuse 방어 v1.0.0 안내서

PHP 5.6+ · IIS / Apache / Nginx 완전 호환 코어 DxExtend 수정 없음 — 훅으로만 동작



목차

  1. DXCMS Extend 구조 이해
  2. 코어 DxExtend 분석
  3. 이 플러그인의 역할
  4. 설치 방법
  5. 방어층 상세 설명
  6. 보안 로그 읽는 법
  7. 보안 강점 요약
  8. 개발자 API 가이드


1. DXCMS Extend 구조 이해

Extend는 DXCMS의 실행 흐름에 개입하는 확장 기능입니다. Hook과 달리 코드 등록 없이 파일을 폴더에 넣으면 자동으로 실행됩니다.

extend/
  top/      ← CMS 초기화 완료 직후 (DB·세션·인증·플러그인 로드 후)
  middle/   ← 라우팅 확정 후, 핸들러 실행 전
  bottom/   ← 렌더링 완료 후 (출력 버퍼 비우기 전)
실행 순서: 파일명 오름차순
  01_init.php → 02_log.php → 10_custom.php → 90_monitor.php


Extend vs Plugin vs Hook

구분 등록 방법 실행 시점 위험도
Plugin dx_register_plugin() 전체 요청 중간
Hook dx_add_hook() 특정 이벤트 중간
Extend 파일 배치 자동 실행 높음

Extend는 파일만 넣으면 자동 실행되므로 Hook보다 더 직접적인 공격 경로가 됩니다.



2. 코어 DxExtend 분석

코어가 이미 잘 하는 것

private function safeExec($file, $context, $slot)
{
    // 경로 검증 — extendRoot 밖의 파일 실행 차단
    $realFile   = realpath($file);
    $realExtend = realpath($this->extendRoot);
    if (strpos($realFile, $realExtend . '/') !== 0) {
        dx_log('[DxExtend] 보안 차단: ' . $file, 'warning');
        return;  // 차단
    }

    // 에러 격리 — 한 파일 오류가 전체 CMS를 멈추지 않음
    set_error_handler(...);
    try {
        extract($context, EXTR_SKIP);
        include $file;
    } catch (Exception $e) { ... }
    restore_error_handler();
}
항목 코어 평가
경로 검증 realpath() + extendRoot 경계
에러 격리 set_error_handler + try/catch
.disabled 파일 제외 glob('*.php')만 실행
위험 함수 탐지 없음
파일 무결성 없음
실행 횟수 제한 없음
Priority 보호 없음
감사 로그 없음


3. 이 플러그인의 역할

코어 DxExtend를 수정하지 않고 dx_extend_top 훅에서 Extend 파일 정적 분석·Integrity 검사·감사 로그를 수행합니다.



4. 설치 방법

(DXCMS 루트)/
└── plugins/
    └── dx-security-extend/
        ├── manifest.php
        └── plugin.php
관리자 → 플러그인 → dx-security-extend → 활성화


5. 방어층 상세 설명


EX1. 위험 함수 정적 분석

Extend 파일에서 위험 함수 사용을 탐지합니다.

탐지 대상:
  shell_exec, exec, system, passthru
  proc_open, popen
  eval
  assert($code)  (코드 실행 형태)
  include($_GET/POST/REQUEST/COOKIE...)  (동적 include)
  require($_GET/POST/REQUEST/COOKIE...)  (동적 require)
  base64_decode + eval 조합

탐지 시점: 서버 시작 시 1회 (static 캐시)
처리: DANGEROUS_PATTERN 로그


EX2. 파일 Integrity 검사

Extend 파일이 설치 후 변조되지 않았는지 MD5 해시로 확인합니다.

첫 실행 시:
  모든 Extend 파일 MD5 해시 계산
  data/cache/extend_hashes.php 저장

이후 실행마다:
  현재 해시 vs 저장 해시 비교
  변경 시 → INTEGRITY_CHANGED 로그


EX3. 실행 횟수 제한

최대 Extend 파일 수: 50개 (DX_EXTEND_MAX_FILES)

top + middle + bottom 합산
초과 시 → FILE_COUNT_EXCEEDED 로그

bottom 실행 완료 후:
  getExecuted() 실제 실행 수 확인
  50 초과 → INVOCATION_LIMIT_EXCEEDED 로그


EX4. Priority 보호 구간 탐지

파일명 번호로 실행 순서를 제어하는 DXCMS 구조에서 보호 구간을 탐지합니다.

보호 구간: 01~09 (코어/보안 전용)
사용자 Extend 권장: 10 이상

코어 파일 목록:
  top/: 01_darkmode_early.php, 05_activity_monitor.php,
        50_board_fields.php, 90_market_guard.php
  middle/: 01_visit_tracker.php, 10_email_verify_gate.php
  bottom/: 01_session_rescue_gc.php, 02_darkmode_engine.php

탐지 조건:
  01~09 번호대 파일 + 코어 파일이 아님
   PRIORITY_RANGE_INTRUSION 로그


EX5. Context 변조 탐지

코어 safeExec()extract($context, EXTR_SKIP)을 사용합니다. EXTR_SKIP이 있으므로 기존 변수는 덮어쓰지 않지만, Extend 파일이 실행 중 Context 변수를 직접 수정하는 것은 여전히 가능합니다. 이 플러그인은 Context 변조 시도를 정적 분석으로 탐지합니다.



EX6. Extend 감사 로그

요청 시작 시:
  모든 Extend 파일 스캔 (EX1~EX4)

관리자 설정 페이지 진입 시:
  전체 Extend 파일 수 기록
  → EXTEND_AUDIT 로그

Plugin 활성화/비활성화 시:
  자동으로 PI 플러그인과 연계 기록


6. 보안 로그 읽는 법

이벤트 타입

타입 의미
EX:DANGEROUS_PATTERN 위험 함수 탐지
EX:INTEGRITY_CHANGED 파일 해시 변경 탐지
EX:FILE_COUNT_EXCEEDED 최대 파일 수 초과
EX:INVOCATION_LIMIT_EXCEEDED 실행 횟수 초과
EX:PRIORITY_RANGE_INTRUSION 보호 구간 파일명 사용
EX:EXTEND_AUDIT 관리자 페이지 Extend 현황


로그 예시

# 위험 함수 탐지
[2026-09-03 09:00:01][EX:DANGEROUS_PATTERN][IP:-][...][UID:0][URI:-]
slot=top file=10_my_extend.php patterns=shell_exec,eval

# Integrity 변조
[2026-09-03 14:22:10][EX:INTEGRITY_CHANGED][IP:121.131.x.x][...][UID:1][URI:/admin]
slot=top file=01_darkmode_early.php

# 보호 구간 침범
[2026-09-03 16:45:03][EX:PRIORITY_RANGE_INTRUSION][IP:-][...][UID:0][URI:-]
slot=top file=05_evil_extend.php prefix=05 protected_max=09

# Extend 현황 감사
[2026-09-03 20:11:44][EX:EXTEND_AUDIT][IP:121.131.x.x][...][UID:1][URI:/admin/setting]
top=4 middle=2 bottom=2


7. 보안 강점 요약

위협 결과 방어 레이어
악성 Extend에 shell_exec 포함 DANGEROUS_PATTERN 로그 EX1
악성 Extend에 eval 포함 DANGEROUS_PATTERN 로그 EX1
Extend 파일 변조 INTEGRITY_CHANGED 로그 EX2
Extend 파일 폭탄 (50개 이상) FILE_COUNT_EXCEEDED 로그 EX3
보호 구간 파일명 사용 (01~09) PRIORITY_RANGE_INTRUSION 로그 EX4
정상 Extend 실행 영향 없음
코어 경로 탈출 시도 코어 DxExtend가 차단 코어 ✅


8. 개발자 API 가이드

새 Extend 파일 배포 전 스캔

// 배포 전 위험 패턴 확인
$issues = dx_extend_scan_file('/path/to/my_extend.php', 'top');
if (!empty($issues)) {
    echo '위험 패턴 발견: ' . implode(', ', $issues);
}


Extend 파일 Integrity 해시 확인

// 현재 해시 조회
$hash = dx_extend_integrity_hash('top', '01_my_extend.php');
echo $hash;


실행된 Extend 목록 확인

// 현재 요청에서 실행된 Extend 목록
$executed = dx_extend_get_executed();
foreach ($executed as $item) {
    echo $item['slot'] . '/' . $item['file'];
}


Extend 파일 권장 파일명

사용자 Extend10 이상 번호 사용 권장:
  10_my_feature.php    일반 기능
  20_my_log.php        로깅
  50_my_api.php        API 확장
  80_my_monitor.php    모니터링

01~09는 코어/보안 전용:
  01_darkmode_early.php    (코어)
  05_activity_monitor.php  (코어)

DX Security — Extend Abuse 방어 v1.0.0 — DesignOneX https://designonex.com
 

라이선스

디자인원엑스 라이선스 참고
https://designonex.com/notice/view/1787577858493247

 

첨부파일 1개 회원전용

댓글0

로그인 후 댓글을 작성할 수 있습니다.
Plugin 58
45
전체 회원
1,396
전체 게시글
2,748
전체 댓글
85
오늘 방문
53,603
전체 방문
0
현재 접속
인기글 7일 이내
최신글
최신댓글
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록
목록