오래된 웹사이트의 보안, 점검부터 패치까지 — 직접 만든 WebGuard

오래된 웹사이트의 보안, 점검부터 패치까지 — 직접 만든 WebGuard

WebGuard는 운영 중인 웹사이트의 보안 문제를 점검하고, 변경 계획을 검토한 뒤 패치와 검증까지 진행할 수 있도록 직접 개발한 보안 솔루션입니다.

Linux 서버에 설치해 사용하는 도구로, PHP 및 HTML·JS 웹사이트를 대상으로 합니다. WordPress를 비롯해 제로보드4, XE, Rhymix, 그누보드와 직접 만든 PHP 사이트 등을 점검할 수 있도록 구성했습니다.

동작 과정은 다음과 같습니다.

환경 분석 → 백업 → 보안 검사 → 변경 계획 → 패치 적용 → 검증 → 필요시 롤백

최근 보안 이슈와 오래된 코드의 위험을 함께 고려하면서, 문제를 찾는 것부터 실제 조치까지 연결하고자 했습니다. 이 과정에서 중심에 둔 원칙은 “사이트를 깨뜨리지 않는다”는 것입니다.

변경 전에 원본을 보관하고, 무엇을 바꿀지 먼저 확인하며, 적용 후 이상이 감지되면 해당 작업을 되돌릴 수 있도록 설계했습니다.

https://github.com/OVERockq/webguard

 

GitHub - OVERockq/webguard: Security audit & safe patching tool for live PHP/HTML sites (WordPress, Zeroboard, XE, Gnuboard). An

Security audit & safe patching tool for live PHP/HTML sites (WordPress, Zeroboard, XE, Gnuboard). Analyze → backup → plan → apply with per-change verification and auto-rollback, plus PHP 5.x → ...

github.com

 

어떤 문제를 점검할 수 있을까요?

웹사이트가 정상적으로 열리고 있어도 내부에는 확인해야 할 문제가 남아 있을 수 있습니다.

외부에서 내려받을 수 있는 DB 백업파일, 웹에서 접근 가능한 설정 파일, 누구나 수정할 수 있는 파일 권한, 업로드 폴더 안에서 실행되는 PHP 등이 그 예입니다. 오래된 CMS나 라이브러리를 사용하고 있다면 관련 위험도 함께 살펴봐야 합니다.

WebGuard는 다음 항목들을 점검합니다.

  • 설정 파일, DB 덤프, 백업파일과 개발 저장소의 외부 노출
  • 과도한 파일 권한과 업로드 폴더의 PHP 실행 여부
  • 웹셸 의심 파일, 이미지에 숨겨진 PHP와 악성 스크립트 패턴
  • PHP 설정과 웹서버의 보안 설정
  • 오래된 JS 라이브러리와 CMS 관련 위험
  • WordPress 코어 파일의 무결성
  • PHP 버전 변경 시 문제가 될 수 있는 오래된 코드

이때 파일이 존재한다는 사실과 실제로 노출된 상태를 구분하도록 했습니다. 예를 들어 백업파일은 HTTP로 접근할 수 있는지 확인하고, 업로드 폴더는 임시 파일을 이용해 PHP 실행 여부를 점검합니다.

 

바로 수정하지 않고 변경 계획을 먼저 만듭니다

검사 결과가 나왔다고 모든 항목을 곧바로 수정하지는 않습니다.

WebGuard는 발견한 문제를 바탕으로 설명용 변경 계획과 편집 가능한 계획 파일을 만듭니다. 사용자는 조치 내용을 살펴보고 적용할 작업을 선택할 수 있습니다.

오탐 가능성이 있거나 서버 전체에 영향을 주는 작업은 기본적으로 꺼 두었습니다. PHP 업그레이드, CMS 이전, JS 라이브러리 교체처럼 별도 판단이 필요한 항목은 수동 조치로 구분합니다.

운영 중인 사이트에서는 보안을 강화하는 변경도 기존 기능에 영향을 줄 수 있습니다. 따라서 검사 결과를 확인하는 과정과 실제 적용하는 과정을 나누어 두었습니다.

 

패치한 뒤에는 기존 상태와 비교합니다

패치는 작업 단위로 적용하며, 각 작업의 원본과 변경 기록을 남깁니다.

PHP 파일은 현재 웹서버와 같은 버전의 PHP로 문법검사를 통과한 경우에만 교체합니다. 작업 후에는 사이트 응답을 다시 요청해 기존 상태와 비교하고, 이상이 감지되면 해당 작업만 자동으로 되돌리도록 했습니다.

예를 들어 접근차단 설정을 적용했다면 실제로 차단되는지 확인하고, 업로드 폴더의 PHP 실행을 막았다면 실행되지 않는지 다시 점검하는 방식입니다.

어떤 설정을 변경했다는 기록과 함께, 그 변경이 실제로 반영되었는지 확인할 수 있도록 구성했습니다.

 

오래된 PHP 코드와 데이터도 함께 확인합니다

최근 보안 이슈를 고려하면 지원이 끝난 PHP와 CMS를 계속 유지하기는 어렵습니다. 하지만 버전만 올린다고 기존 사이트가 그대로 동작하는 것은 아닙니다.

사용하던 함수가 제거되거나 문법이 달라질 수 있고, 오래된 한글 사이트에서는 문자셋과 문자열 처리 방식 때문에 데이터가 다르게 보일 수도 있습니다.

WebGuard는 목표 PHP 버전을 지정해 호환성을 점검할 수 있습니다. 일부 비호환 문법은 PHP 토큰 단위로 분석해 변환하고, 제거된 함수 일부는 호환 레이어로 대응합니다. 자동으로 처리하기 어려운 코드는 직접 확인할 항목으로 남깁니다.

이때 중요하게 본 것은 코드가 실행되는지와 함께, 기존과 같은 데이터를 보여주는지 확인하는 것입니다.

페이지 응답을 정규화해 비교하고, DB의 행 수와 체크섬을 확인하며, 구 PHP와 목표 PHP에서 데이터를 읽고 문자열을 처리한 결과를 비교할 수 있도록 구성했습니다.

코드 변환과 호환 레이어 적용 작업은 페이지 출력이 달라지면 해당 작업을 되돌리고 차이를 기록합니다. 비교 결과는 실제 문제가 생긴 것인지, 의도된 변화인지 검토하는 데 활용할 수 있습니다.

 

AI는 검토를 보조하는 역할을 합니다

선택적으로 Claude나 ChatGPT API를 연결해 코드 변환 내용과 데이터 차이를 한 번 더 검토할 수 있습니다.

AI는 문제 가능성을 판단하고 수정안을 제시하는 역할이며, 제안한 코드를 직접 적용하지는 않습니다. 자동 검증 결과에 검토 의견을 더하되, 실제 변경 과정과는 구분해 두었습니다.

외부 API로 자료가 전달되는 만큼 DB 설정 파일은 전송 대상에서 제외하고, 비밀번호와 키 등은 가리도록 했습니다. 전송할 내용도 먼저 확인할 수 있도록 구성했습니다.

 

WebGuard를 만든 이유

오래전에 구축한 웹사이트도 여전히 제 역할을 하는 경우가 많습니다. 게시판에 쌓인 자료가 있고, 익숙한 기능을 계속 사용하는 사람들도 있습니다. 새로운 시스템으로 바꾸려면 옮겨야 할 데이터와 확인해야 할 기능이 적지 않습니다.

그렇다고 화면이 잘 열린다는 이유만으로 오래된 코드와 운영환경을 그대로 두기에도 위험이 있습니다.

최근 보안 이슈들을 살펴보면서, 이런 사이트를 점검하고 실제로 조치하는 과정을 연결할 필요가 있다고 생각했습니다. 문제 목록을 만드는 데서 끝내지 않고, 변경할 내용을 검토하고 적용한 뒤 기능과 데이터가 유지되는지 확인하는 과정까지 돕고자 했습니다.

WebGuard는 이렇게 보안 대응의 필요성과 기존 서비스를 유지해야 하는 현실을 함께 고려해 만든 프로젝트입니다.

 

사용 전 유의사항

WebGuard는 운영 서버의 파일과 권한, 웹서버·PHP 설정을 직접 변경하는 도구입니다. 자체 백업과 자동 롤백 기능이 있지만, 모든 환경에서 정상 동작하거나 모든 보안 위협을 탐지·차단하는 것을 보장하지는 않습니다.

  • 별도 백업과 복구 확인
    사이트 파일, DB와 서버 설정을 별도로 백업하고 실제 복원할 수 있는지 확인해 주세요. 자체 백업과 롤백만을 유일한 복구 수단으로 사용하지 않으시길 바랍니다.
  • 테스트 환경에서 먼저 검증
    가능하면 운영환경과 유사한 테스트 서버에서 실행하고, 변경 계획과 데이터 비교 결과를 검토한 뒤 적용하시길 권장합니다.
  • 주요 기능은 직접 확인
    자동 페이지 검증은 GET 요청을 기준으로 합니다. 로그인, 글쓰기, 파일 업로드, 결제 등 실제 사용 흐름은 적용 후 별도로 확인해 주세요.
  • 탐지 결과와 변환 내용 검토
    웹셸 탐지에는 오탐과 미탐이 있을 수 있으며, 코드 변환도 사이트 고유의 동작까지 모두 판단하지는 못합니다. 격리하거나 수정할 항목은 적용 전에 검토해 주세요.
  • AI 검토 시 외부 전송 확인
    코드와 페이지 내용 일부가 외부 API로 전송될 수 있습니다. 마스킹 기능이 있더라도 전송 내용을 확인하고, 사내 보안 정책과 개인정보 처리 기준에 따라 사용해 주세요.
  • 지원 종료 환경은 이전 계획 필요
    요청 가드와 호환 레이어는 위험을 줄이고 이전을 돕기 위한 장치입니다. 지원이 끝난 환경을 계속 안전하게 사용할 수 있도록 보장하는 것은 아니므로, 지원되는 환경으로의 이전을 함께 준비해 주세요.

WebGuard는 MIT 라이선스로 공개했으며, 별도의 보증 없이 ‘있는 그대로(AS IS)’ 제공됩니다. 사용 전 저장소의 유의사항과 라이선스를 확인해 주세요.

비슷한 환경을 관리하고 계시다면 프로젝트의 구성과 동작 방식을 살펴보시고, 발견한 문제나 개선 의견을 함께 남겨 주셔도 좋겠습니다.

WebGuard 소스 코드와 사용 안내