어제(10/21) 전 세계 웹사이트를 긴장하게 만든 보안 사고가 있었다.
이름은 PHP2Shell. 나도 보안 전문가는 아니라서, 최대한 쉽게 이해한 만큼 정리해 봤다.
웹사이트는 크게 두 부분으로 나뉜다.
PHP는 이 서버 쪽 일을 하는 프로그래밍 언어다.
워드프레스 블로그, 위키백과, 오래된 쇼핑몰, 학교·동네 홈페이지 게시판까지… 전 세계 웹사이트의 약 70% 가 PHP를 쓴다고 한다.
PHP 안에서 구멍 두 개가 발견됐다.
이 구멍을 이용하면 로그인도 안 한 낯선 사람이, 멀리서, 남의 서버에 명령을 내릴 수 있다.
비유하면 이렇다.
아파트(웹사이트)마다 문을 잘 잠갔는데,
알고 보니 모든 아파트에 쓰인 같은 회사의 자물쇠에 결함이 있었던 것.
집주인이 아무리 조심해도, 자물쇠 자체가 문제라서 뚫린다.
그래서 이번 일은 "어떤 사이트가 실수했다"가 아니라 "PHP를 쓰는 모두가 위험하다" 라서 큰 뉴스가 됐다.
둘 다 컴퓨터가 메모리(작업 공간)를 정리하는 방식에서 생긴 실수다.
손님 주문서를 쓰다가 종이가 떨어져서 중간에 멈췄는데,
나중에 그 반쯤 쓴 주문서를 완성된 것처럼 그냥 처리해 버린 상황.
나쁜 사람은 일부러 종이(메모리)가 떨어지게 만들어서, 엉터리 주문서를 끼워 넣을 수 있다.
사물함을 비우고 반납했는데, 열쇠 번호를 아직 기억하고 있다가
다음에 그 사물함을 열어서 안에 든 걸 내 물건인 줄 알고 꺼내 쓰는 상황.
그 사이 나쁜 사람이 그 사물함에 이상한 물건을 넣어 두면, 서버는 그걸 믿고 실행해 버린다.
미국 정부 기관(NSA)이 "당장 못 고치면 서버를 꺼 두라"고 할 정도였다.
답은 간단하다. PHP를 최신 버전으로 업데이트하기.
스마트폰 보안 업데이트 알림이 뜨면 미루지 말고 바로 하는 것과 같다.
| 쓰는 버전 | 이 버전 이상으로 올리기 |
|---|---|
| 8.5 | 8.5.12 |
| 8.4 | 8.4.27 |
| 8.3 | 8.3.36 |
| 8.2 | 8.2.35 |
| 8.1 이하 | 더 이상 공식 지원 X → 새 버전으로 이사 필요 |
서버를 관리한다면 이 명령어로 버전을 확인할 수 있다.
php -v
그리고 업데이트한 뒤에는 혹시 이미 누가 들어왔다 갔는지도 확인해야 한다.
(모르는 파일이 생겼는지, 서버가 이상하게 꺼진 적이 있는지 등)