Newzest Studio

newzeststudio

COLUMN04

홈페이지 리뉴얼, 털리고 나서 하시겠습니까?

사고 전에 하면 계획이고, 사고 뒤에 하면 수습입니다

커피잔을 옆에 두고 ‘뉴제스트 일보’ 보안 특집을 펼쳐 든 사람 일러스트
DATE
READ TIME
9 MINUTES
AUTHOR
NEWZEST STUDIO

WHY WE WROTE THIS

BEFORE THE BREACH

리뉴얼은 사고 전에 하면 계획이고

사고 뒤에 하면 수습입니다

이번 PHP 사태는 업데이트할 버전조차 없는 홈페이지가 많다는 사실을 드러냈습니다 언젠가 다시 지어야 한다면, 그 날짜는 사고가 아니라 대표님이 고르시길 바랍니다

01 FASTER THAN THE NEWS

공격은 뉴스보다 빨랐습니다

아침에 커피 한 잔을 옆에 두고 뉴스를 넘기다 보면, 보안 사고 기사는 늘 큰 회사 이야기처럼 보입니다. 이번 주 기사는 조금 달랐습니다. 대표님 회사 홈페이지가 돌아가는 바로 그 기술의 이야기였기 때문입니다.

10월 21일, PHP가 긴급 업데이트를 냈습니다. PHP는 게시판, 문의 폼, 쇼핑몰처럼 홈페이지 뒤에서 일하는 프로그램을 돌리는 엔진입니다. 전 세계 웹사이트의 70% 이상이 이 엔진 위에서 돌아간다는 추산도 있습니다.

이번에 발견된 결함은 그 엔진 자체에 있었습니다. 로그인도 필요 없이, 평범한 방문처럼 보이는 요청 하나로 서버에 명령을 내릴 수 있는 결함입니다. 홈페이지를 아무리 잘 만들었어도 엔진이 같으면 똑같이 해당됩니다.

  1. 45 MIN수만 건
  2. 2 HOURS수십만 건
  3. NOW수백만 건
클라우드플레어 대표 발언 · 동아일보 2026.10.24막대 높이는 증가 흐름을 나타내며, 정확한 건수 비례가 아닙니다

클라우드플레어 대표에 따르면 공격 시도는 2시간 만에 수십만 건, 지금은 수백만 건으로 늘었습니다. 일본에서는 총리가 웹사이트를 잠시 닫으라고 권했고, 대기업 여러 곳이 인터넷 서비스 일부를 멈췄습니다. 영국 정부도 서비스 32개를 내렸습니다.

국내에서는 민간 사이버위기 경보가 ‘주의’로 올라갔고, 한국인터넷진흥원(KISA)은 업데이트가 어렵다면 서비스를 잠시 멈추는 것까지 검토하라고 안내했습니다.

다행히 지금까지 공격이 성공했다고 공식 확인된 사례는 없습니다. 이 글은 거기서 시작합니다. 이번에는 업데이트로 막을 수 있었지만, 업데이트할 수 없는 홈페이지가 생각보다 많았습니다.

  • 10.20

    정보 유출

    예정된 발표보다 먼저 결함 정보가 새어 나갔습니다

  • 10.21

    긴급 업데이트

    PHP가 고친 판을 냈고, 45분 만에 공격 시도가 수만 건 들어왔습니다

  • 10.22

    경보 상향

    민간 사이버위기 경보가 ‘주의’로 올라가고 KISA가 대응 수칙을 냈습니다

  • NOW

    수백만 건

    공격 시도는 지금도 늘고 있습니다

02 NO VERSION TO UPDATE

업데이트하라는데, 올릴 버전이 없습니다

모든 보안 안내의 첫 줄은 같습니다. “최신 버전으로 업데이트하세요.” 그런데 이번에 고친 판이 나온 건 PHP 8.2부터 8.5까지뿐입니다.

그보다 오래된 8.1 이하는 PHP 공식 업데이트가 끝난 버전입니다. 이번에도 정식 업데이트판은 나오지 않았습니다. 다만 배포판·LTS 업체가 별도로 패치를 제공한 경우가 있으니, 호스팅 업체에 제공 여부와 적용 상태를 확인해야 합니다. 서버를 직접 조립해 쓰는 곳을 위한 최소한의 수정 코드만 공개됐는데, 일반 호스팅을 쓰는 회사가 적용할 수 있는 형태는 아닙니다.

문제는 그 오래된 버전을 쓰는 곳이 적지 않다는 겁니다. 인터넷에 노출된 국내 PHP 서버의 약 82%가 8.1 이하라는 조사가 나왔습니다. 열 곳 중 여덟 곳이 ‘업데이트하세요’라는 안내를 받고도 올릴 판이 없는 셈입니다.

82%

인터넷에 노출된 국내 PHP 서버 10곳 중 8곳이 8.1 이하

시벨앙젤 조사 · 동아일보 2026.10.24

PHP 버전별 긴급 업데이트와 보안 지원 종료일
PHP 버전이번 긴급 업데이트보안 지원 종료지금 할 일
8.58.5.122029.12.31업데이트 후 서버 재시작
8.48.4.272028.12.31업데이트 후 서버 재시작
8.38.3.362027.12.31업데이트 후 서버 재시작
8.28.2.352026.12.31업데이트 후 재시작, 올해 안에 이전 계획
8.1 이하정식 업데이트판 없음 · 배포판·LTS 업체 확인이미 종료지원 버전으로 이전(코드 수정·재시험 공사)

php.net 지원 버전표 기준

버전만 올리면 되지 않느냐고 물으실 수 있습니다. 몇 년 전에 만든 홈페이지 코드는 새 버전에서 그대로 돌지 않는 경우가 많습니다. 그사이 사라진 기능을 쓰고 있거나, 같은 코드가 다르게 동작하기 때문입니다. 결국 코드를 고치고 화면을 하나하나 다시 시험해야 합니다. 사실상 작은 리뉴얼입니다.

호스팅 업체들도 발표 당일 임시 조치를 했지만, 완전한 해결은 지원되는 버전으로 옮기는 것이라고 안내하고 있습니다. 그리고 이번에 고친 판을 받은 8.2도 올해 12월 31일이면 보안 지원이 끝납니다. 그 뒤에 새 결함이 나오면 8.2도 올릴 판이 없습니다.

버전을 모른다는 건 업데이트를 챙기는 사람이 없다는 뜻이기도 합니다. 확인은 전화 한 통이면 됩니다. 주소 끝에 .php가 보이거나 그누보드·워드프레스·영카트로 만든 홈페이지라면 PHP일 가능성이 높습니다. 만든 업체나 호스팅 업체에 아래 세 가지만 물어보세요.

  • QUESTION 01

    지금 PHP 몇 버전인가요

    8.1 이하는 PHP 공식 업데이트가 끝났습니다. 배포판·LTS 업체의 별도 패치는 호스팅 업체에 확인하세요

  • QUESTION 02

    이번 긴급 업데이트는 적용했나요

    8.2 이상이라면 고친 판이 나와 있습니다

  • QUESTION 03

    적용한 뒤 서버를 다시 시작했나요

    업데이트는 서버를 다시 시작해야 적용됩니다

03 PLAN OR DAMAGE CONTROL

사고 뒤의 리뉴얼은 공사가 아니라 수습입니다

올릴 판이 없는 홈페이지는 언젠가 다시 지어야 합니다. 남은 질문은 언제냐입니다. 사고 전이냐, 사고 뒤냐.

사고 뒤의 순서는 대개 이렇습니다.

AFTER

사고 뒤의 리뉴얼 = 수습

  1. 01

    사이트를 내립니다

    무엇이 열렸는지 모르는 채로 손님을 받을 수 없습니다. 광고를 돌리고 있었다면 광고도 같이 멈춰야 합니다

  2. 02

    기록을 뒤집니다

    언제, 어디까지 들어왔는지 서버 기록으로 확인합니다. 기록이 없으면 ‘새지 않았다’는 것도 증명할 수 없습니다

  3. 03

    72시간 안에 신고합니다

    해킹으로 개인정보가 새면 단 1건이어도 개인정보보호위원회나 KISA에 신고하고, 고객에게도 알려야 합니다

  4. 04

    그제야 다시 짓습니다

    업체도, 예산도, 일정도 급하게 정합니다. “일단 빨리 다시 열어 주세요”가 가장 큰 요구사항이 됩니다

날짜를 고르는 쪽: 사고

BEFORE

사고 전의 리뉴얼 = 계획

  1. 01

    날짜를 고릅니다

    손님이 적은 달을 고릅니다

  2. 02

    업체를 비교합니다

    여러 곳의 구조와 견적을 차분히 봅니다

  3. 03

    데이터를 옮깁니다

    기존 게시물과 고객 정보를 정리해 옮깁니다

  4. 04

    구조를 바꿉니다

    화면·서버·데이터를 나눠 다시 짓습니다

날짜를 고르는 쪽: 대표님

고객에게 보내는 안내문은 홈페이지를 만든 업체 이름으로 나가지 않습니다. 회사 이름으로, 대부분은 대표님 이름으로 나갑니다.

사고 전의 리뉴얼은 순서가 반대입니다. 손님이 적은 달을 고르고, 업체를 비교하고, 기존 데이터를 차분히 옮깁니다. 무엇보다 구조를 바꿀 시간이 있습니다. 같은 리뉴얼인데, 한쪽은 대표님이 날짜를 고르고 다른 한쪽은 사고가 날짜를 고릅니다.

04 ONE ROOM OR THREE

은행은 금고를 창구에 두지 않습니다

그렇다면 리뉴얼 때 무엇을 바꿔야 할까요. 디자인을 새로 하는 건 당연합니다. 하지만 이번 사태가 짚은 곳은 겉모습이 아니라 구조였습니다.

오래된 홈페이지의 상당수는 서버 한 대, 프로그램 하나가 모든 일을 합니다. 화면을 보여주고, 문의를 받아 처리하고, 고객 정보를 보관하는 일까지. 가게로 치면 손님을 맞는 창구와 서류를 처리하는 사무실, 돈을 넣어 두는 금고가 한 방에 있는 셈입니다. 창문 하나가 열리면 방 전체가 열립니다.

이번 결함이 무서웠던 이유도 여기 있습니다. 엔진에 결함이 있으면 그 위에 무엇을 지었든 서버 전체가 위험해집니다. 보안 업체들이 ‘홈페이지 코드와 관계없이 서버 전체가 위험하다’고 경고한 이유입니다. 리뉴얼 때 디자인만 바꾸면, 같은 한 방에 새 벽지를 바르는 일이 됩니다.

ONE ROOM

한 방 구조

요청

창구 화면사무실 처리금고 고객 정보

창문 하나가 열리면 방 전체가 열립니다

THREE ROOMS

나눈 구조

요청

창구 화면약속된
서류만
사무실 처리약속된
서류만
금고 고객 정보

창구가 열려도 금고까지는 문을 몇 개 더 지나야 합니다

은행은 다르게 짓습니다. 손님은 창구까지만 들어옵니다. 창구 직원은 약속된 서류만 뒤쪽 사무실로 넘기고, 금고는 또 다른 문 너머에 있습니다. 창구 유리창이 깨져도 금고까지 가려면 문을 몇 개 더 지나야 합니다.

개발자들은 이걸 ‘프론트엔드와 백엔드를 나눈다’고 부릅니다. 은행과 대기업 시스템이 오래전부터 이렇게 지어진 건 사고가 나지 않아서가 아니라, 사고가 나도 한 방에서 끝나게 하기 위해서입니다.

05 HOW WE BUILD

저희가 홈페이지를 짓는 방식

저희는 규모가 큰 SI 현장에서 일을 배웠습니다. 그곳에서 창구와 금고를 나누는 건 선택이 아니라 기본이었습니다. 뉴제스트를 차리면서 정한 원칙 하나가, 그 기본을 작은 회사 홈페이지에도 그대로 가져오는 것이었습니다. 그래서 관리자와 문의 기능이 있는 홈페이지는 처음부터 세 칸으로 나눕니다.

방문자

인터넷에 열린 곳

창구 · 화면

미리 지어 둔 화면

방문할 때마다 서버 프로그램이 돌지 않고, 미리 만들어 둔 화면을 전송망(CDN)에서 바로 보여 줍니다. React·Next.js로 만듭니다

React · Next.js · CDN

밖에서 보이지 않는 곳

사무실 · 서버

밖에서 보이지 않는 서버

문의 접수와 관리자 기능은 외부에서 직접 닿지 않는 내부망 서버가 처리합니다. 전자정부 표준프레임워크의 바탕이자 금융권에서 널리 쓰는 Java·Spring Boot로 만듭니다

Java · Spring Boot · 내부망

금고 · 데이터베이스

따로 떨어진 금고

고객 정보는 인터넷과 직접 닿지 않는 별도 구역에 둡니다. 서버만 정해진 통로로 들어갈 수 있습니다

격리 구역 · 정해진 통로만

이번 사태에 대입해 보면, 창구에는 애초에 공격받을 엔진이 돌지 않습니다. 사무실 서버에 문제가 생겨도 금고는 다른 구역에 있습니다. 그렇다고 사고가 절대 나지 않는다고 말씀드리지는 않겠습니다. 다만 한 곳이 열렸을 때 어디까지 열리는지를, 저희는 짓기 전에 정해 둡니다.

오픈 뒤 1년 동안 생긴 오류는 횟수와 상관없이 고쳐 드리고, 소스코드는 납품 때 넘겨 드립니다. 나중에 다른 업체를 만나시더라도, 집의 설계도는 대표님 손에 있어야 하기 때문입니다.

06 NOT ABOUT PHP

PHP가 나쁜 기술이라는 말이 아닙니다

오해가 없도록 분명히 해 두겠습니다. PHP 팀은 결함을 빠르게 고쳤고, 호스팅 업체들도 당일 대응했습니다. 지금 이 순간에도 PHP로 잘 운영되는 좋은 홈페이지가 많습니다.

저희가 쓰는 Java와 Spring도 다르지 않습니다. 2021년 Log4Shell, 2022년 Spring4Shell이라는 큰 결함을 겪었습니다. 저희도 이런 소식이 나오면 똑같이 업데이트해야 합니다.

  • 2021Log4ShellJava 기록 도구저희가 쓰는 기술
  • 2022Spring4ShellSpring저희가 쓰는 기술
  • 2026PHP2ShellPHP 엔진

그러니 당장 홈페이지를 갈아엎으시라는 말도 아닙니다. 8.2 이상이고 업데이트와 재시작까지 마쳤다면, 오늘 할 일은 아래 세 가지면 충분합니다. 그리고 다음 리뉴얼을 계획할 때, 이번에 배운 질문을 꺼내시면 됩니다.

  • 01

    업데이트와 재시작

    8.2 이상이라면 업데이트하고 서버를 다시 시작합니다

  • 02

    기록 점검

    10월 20일 이후 서버 기록을 점검받습니다

  • 03

    열쇠 교체

    이상한 흔적이 있으면 관리자 비밀번호와 접속 키를 바꿉니다

07 BEFORE THE RENEWAL

리뉴얼 업체를 만나면 물어볼 다섯 가지

어느 업체와 리뉴얼하시든 계약 전에 아래 다섯 가지를 물어보시길 권합니다. 이번 사태가 남긴 목록입니다.

01화면과 데이터 처리가 나뉘어 있나요

한 서버가 모든 일을 하면, 한 곳이 열릴 때 전부 열립니다

02고객 정보는 인터넷에서 직접 닿지 않는 곳에 있나요

금고가 창구 옆에 있는지, 다른 문 너머에 있는지를 묻는 질문입니다

03이런 긴급 업데이트는 누가, 며칠 안에 적용하나요

“유지보수에 포함되나요?”까지 물어보세요. 답이 흐리면 아무도 챙기지 않는다는 뜻입니다

04쓰는 기술의 지원은 언제 끝나나요

이번에 가장 크게 드러난 문제입니다. 끝나는 날을 알아야 그 전에 옮길 계획을 세울 수 있습니다

05문제가 의심될 때 기록은 얼마나 남나요

기록이 없으면 무슨 일이 있었는지도, 아무 일 없었다는 것도 확인할 수 없습니다

08 LAST NOTE

겁을 드리려는 글이 아닙니다

이 글의 썸네일 속 사람은 웃으며 신문을 읽고 있습니다. 저희가 바라는 대표님의 모습도 그렇습니다. 보안 사고 기사를 커피 한 잔과 함께, 남의 일로 읽을 수 있는 것.

그러려면 리뉴얼 날짜를 사고가 아니라 대표님이 고르셔야 합니다. 오래된 홈페이지를 언젠가 다시 지어야 한다면, 그날은 사고 뒤보다 사고 전이 훨씬 조용하고, 대개는 더 쌉니다.

지금 홈페이지가 해당되는지 모르겠다면, 아래 보안 점검에 주소만 입력해 보세요. PHP·Node.js 사용 흔적과 공개된 버전을 바로 확인하고, 담당자에게 물어볼 내용을 정리해 드립니다.

다음 리뉴얼을 고민하고 계시다면, 저희와 계약하지 않으셔도 괜찮습니다 어느 업체를 만나시든 위의 다섯 가지만 물어보세요 대답을 들으면 그 업체가 지을 집이 보입니다