주요 내용
- 스캐너, 코드 감사, 정적 분석 도구를 사용하여 PHP 취약점을 선제적으로 탐지하여 Linux 환경에서 진화하는 위협에 한발 앞서 대응하세요.
- 강화된 php.ini 구성, 정기적인 종속성 패치, 보안 코딩 관행의 일관된 사용으로 PHP 스택을 보호하세요.
- TuxCare의 PHP에 대한 끝없는 수명 주기 지원 는 지속적인 패치를 통해 PHP 7.4와 같은 오래된 버전도 호환성을 깨지 않고 안전하게 유지합니다.
PHP는 주로 웹 개발에 사용되는 오픈소스 범용 스크립팅 언어입니다. 2025년에도 여전히 가장 많이 표적이 되는 기술 중 하나로, CVE 수 기준 상위 소프트웨어 프로젝트에 꾸준히 랭크되어 있습니다. 서버가 PHP 애플리케이션에 의존하고 있고 보안 패치를 최신 상태로 유지하지 않는다면 공격자에게 문을 활짝 열어두는 꼴이 될 수 있습니다.
이 글에서는 원격 코드 실행, SQL 인젝션, 안전하지 않은 설정 등 가장 일반적인 PHP 취약점을 분석하고 이를 효과적으로 완화하는 데 도움이 되는 실행 가능한 전략을 제공합니다.
5가지 일반적인 PHP 취약점
2025년에도 PHP 애플리케이션은 익숙하지만 진화하는 보안 위협에 계속 직면하게 될 것입니다. 공격자는 입력 처리, 세션 관리, 코드 실행의 취약점을 노려 시스템을 손상시키는 경우가 많습니다. 이러한 문제를 직접 해결하지 않으면 시스템이 노출됩니다.
1. 원격 코드 실행(RCE)
공격자는 다음과 같은 기능을 악용합니다. eval()
, system()
또는 서버에서 임의의 코드를 실행하기 위한 비위생적인 파일 업로드. 원격 코드 실행 는 종종 공급망 공격 악성 컴포저 패키지를 사용하는 경우가 많습니다. 따라서 종속성을 사전에 모니터링하는 것이 중요합니다.
완화: 위험한 PHP 함수를 비활성화하려면 disable_functions
지시어를 사용하여 모든 입력의 유효성을 엄격하게 검사하고 안티바이러스 검사 및 엄격한 MIME 유형 유효성 검사 등 강력한 파일 업로드 처리 기능을 구현하세요.
2. SQL 주입
SQL 인젝션은 오래되고 잘 알려진 공격임에도 불구하고 레거시 애플리케이션이나 개발자가 준비된 문을 건너뛰는 곳에서 지속되고 있습니다. 최신 변종은 부적절하게 사용될 경우 Eloquent 또는 Doctrine과 같은 ORM을 악용합니다.
완화: PDO 또는 MySQLi에서는 항상 매개변수화된 쿼리를 사용하세요. 데이터베이스 작업 시 문자열 보간을 사용하지 마세요. 데이터베이스 로깅 및 웹 애플리케이션 방화벽(WAF) 보호를 활성화하여 비정상적인 패턴을 탐지하세요.
3. 크로스 사이트 스크립팅(XSS)
댓글이나 프로필과 같은 사용자 제작 콘텐츠 영역에서 XSS는 여전히 위협이 되고 있습니다. 공격자는 악성 JavaScript를 삽입하여 세션을 가로채거나 데이터를 탈취합니다.
완화: 다음과 같은 강력한 출력 인코딩 기능을 활용하세요. htmlspecialchars()
허용된 리소스를 제어하기 위해 엄격한 콘텐츠 보안 정책(CSP)을 구현하세요. PHP 필터링 기능 또는 Laravel의 유효성 검사 엔진과 같은 프레임워크를 사용하여 입력을 살균합니다.
4. 파일 인클루전 공격
안전하지 않은 사용 include
, require
또는 동적 파일 경로가 로컬 파일 포함(LFI) 또는 원격 파일 포함(RFI)으로 이어집니다. 공격자는 이를 사용하여 시스템 파일을 읽거나 백도어를 실행합니다.
완화: 사용자가 제공한 데이터에 기반한 동적 파일 포함은 완전히 피하세요. 동적 포함이 꼭 필요한 경우에는 허용되는 파일의 엄격한 화이트리스트를 구현하세요. 비활성화 allow_url_include
를 사용하여 적절한 디렉토리 제한을 설정하고 open_basedir
.
5. 세션 하이재킹
세션 ID가 유출되거나 예측 가능한 경우 PHP의 기본 세션 처리는 취약합니다. 공격자는 특히 세션이 암호화되지 않았거나 시간 제한이 없는 경우 이를 이용해 사용자를 사칭합니다.
완화: 모든 세션 쿠키에 HTTPS 강제 적용, 설정 session.cookie_httponly=1
로그인 후 세션 ID를 재생성하고, 보안 권한으로 웹 루트 외부에 세션을 저장하고, 확장성과 보안이 중요한 경우 기본 파일 기반 스토리지 외에 더 강력한 세션 스토리지 메커니즘을 사용하는 것을 고려하세요.
PHP 취약점이 위험한 이유는 무엇인가요?
PHP 취약점은 공격자가 시스템의 핵심에 직접 액세스할 수 있도록 허용할 수 있습니다. 파일 업로드가 제대로 처리되지 않거나 사용자 입력이 위생적으로 처리되지 않는 등 하나의 취약점으로 인해 전체 서버가 손상되거나 데이터 도용, 멀웨어 주입이 발생할 수 있습니다. 또한 PHP 앱은 상승된 권한으로 실행되는 경우가 많기 때문에 피해가 인프라 전체로 빠르게 확산될 수 있습니다.
2025년에도 PHP는 워드프레스, 줌라, 맞춤형 엔터프라이즈 앱과 같이 널리 사용되는 CMS 플랫폼의 기반이 될 것입니다. 따라서 가치가 높은 공격 대상입니다. 결정적으로, 공격자는 네트워크 경계를 침입할 필요가 없는 경우가 많기 때문에 익스플로잇 가능한 결함이 있는 공개적으로 액세스 가능한 PHP 애플리케이션은 열린 문과 같은 역할을 합니다.
하나의 PHP 취약점이 전체 환경의 게이트웨이가 될 수 있습니다. PHP 스택을 선제적으로 보호하고 스캔하지 않으면 잘못된 요청 한 건으로 인해 보안 침해가 발생할 수 있습니다.
시스템에서 PHP 취약점을 탐지하는 방법
다음 방법은 공격자가 취약점을 악용하기 전에 시스템에서 PHP 취약점을 식별하는 데 도움이 될 수 있습니다:
정적 코드 분석 도구
실행하지 않고 PHP 코드를 검사하려면 PHPStan, SonarQube (정적 분석 기능용) 또는 RIPS 코드 분석과 같은 도구를 활용하세요. 이러한 도구는 안전하지 않은 함수, 안전하지 않은 코딩 패턴, 취약점을 유발할 수 있는 잠재적인 잘못된 구성을 식별합니다.
패키지 감사
실행 composer audit
를 정기적으로 확인하여 사용 중인 PHP 패키지의 알려진 보안 취약점이 있는지 프로젝트의 종속성을 확인하세요.
로그 검사 및 이상 징후 탐지
웹 서버와 PHP 오류 로그를 분석하여 특정 PHP 스크립트와 관련된 과도한 오류, 존재하지 않는 파일에 대한 액세스 시도, 의심스러운 POST 요청 등 비정상적인 활동이 있는지 확인합니다. Fail2Ban과 같은 도구는 탐지된 패턴을 기반으로 악성 IP를 자동으로 차단할 수 있습니다.
수동 검토
중요한 구성 파일을 수동으로 검사합니다(예, config.php
, .env
)에서 자격 증명이나 민감한 정보가 노출되지 않도록 주의하세요. 업로드 핸들러 및 양식 처리 로직과 같은 스크립트의 사용자 입력 처리는 인젝션 취약점과 안전하지 않은 파일 작업의 빈번한 표적이 되므로 주의 깊게 검토하세요.
또한, CI/CD 파이프라인 또는 크론 작업을 통해 정기적으로, 이상적으로는 매주 자동화된 검사를 실행하세요. 이렇게 하면 수동 개입 없이도 지속적으로 모니터링하고 새로 도입된 취약점을 조기에 탐지하여 공격자가 공격할 수 있는 기회를 줄일 수 있습니다.
CVE 권고 확인
대부분의 Linux 배포판은 CVE(공통 취약점 및 노출) 자문 페이지 또는 메일링 리스트를 적극적으로 유지 관리합니다. 이러한 리소스에서는 PHP 및 관련 라이브러리를 포함하여 배포판 패키지에 영향을 미치는 취약점을 추적합니다.
이러한 권고를 정기적으로 모니터링하면 PHP 애플리케이션에 영향을 줄 수 있는 잠재적인 시스템 수준의 취약점을 알려줄 수 있습니다. 설치된 패키지가 영향을 받는지 확인하는 방법과 배포판에서 제공하는 필요한 업데이트 또는 패치를 적용하는 방법에 대한 정보를 종종 찾을 수 있습니다.
우분투의 경우, 우분투 보안 공지 페이지에서 확인할 수 있습니다. Red Hat 기반 시스템의 경우 Red Hat 보안 공지에서 확인할 수 있습니다.
PHP 취약점으로부터 보호하는 방법
항상 최신 PHP 보안 업데이트 적용
지원되는 PHP 버전(예: 8.x)의 경우 알려진 취약점을 해결하는 가장 쉽고 효과적인 방법은 업데이트를 유지하는 것입니다. PHP 팀은 보안 결함에 대한 패치를 자주 릴리스하며, 그 중 일부는 야생에서 활발하게 악용되고 있습니다.
TuxCare의 PHP에 대한 무한 수명 주기 지원 사용
많은 레거시 애플리케이션은 호환성 문제나 마이그레이션의 복잡성으로 인해 여전히 PHP 7.4 또는 5.6과 같은 지원 종료(EOL) 버전에 의존하고 있습니다. 그러나 이러한 지원되지 않는 버전은 더 이상 중요한 보안 업데이트를 받지 못하므로 악용에 취약한 상태로 남아 있습니다.
TuxCare의 엔드리스 수명 주기 지원(ELS)은 코드 변경이나 위험한 버전 업그레이드 없이 오래된 PHP 버전에 대한 지속적인 보안 패치를 제공합니다. 즉, 프로덕션 환경에서 안정성을 유지하면서 레거시 PHP 애플리케이션을 보호할 수 있습니다.
Linux와 Windows에서 모두 사용할 수 있는 TuxCare는 다음과 같이 지원합니다:
PHP EOL 버전: PHP 5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4 및 8.0.
현재 PHP 버전: 안전한 중앙 집중식 저장소를 통한 PHP 8.1, 8.2, 8.3.
이를 통해 보안을 유지하면서 레거시 시스템을 안전하게 유지 관리하고 일정에 맞춰 업그레이드를 계획할 수 있습니다.
알려진 모든 PHP 취약점을 살펴보고 패치 적용 여부를 확인하려면 TuxCare의 CVE 페이지를 확인하세요.
라이브러리 및 종속성 업데이트 유지
오래된 PHP 라이브러리와 종속성은 조용한 위협이며, 공격자는 종종 인기 있는 패키지의 알려진 취약점을 악용합니다.
Composer의 기본 제공 감사를 사용하세요:
작곡가 감사
그런 다음 다음으로 업데이트합니다:
작곡가 업데이트
Dependabot 또는 리노베이트와 같은 도구를 사용하여 자동 종속성 업데이트를 활성화하세요. 또한 알려진 좋은 버전을 composer.lock
를 사용하여 배포 중 예기치 않은 동작을 방지할 수 있습니다.
보안 코딩 표준 시행
PHP 코드베이스는 기본적으로 최신 보안 관행을 따라야 합니다. 여기에는 다음이 포함됩니다:
- 데이터베이스 쿼리에 준비된 문을 사용하여 SQLi를 방지하세요.
- 모든 입력을 살균하고 모든 출력을 이스케이프 처리하여 XSS를 차단합니다.
- 다음과 같이 더 이상 사용되지 않거나 위험한 기능 피하기
eval()
그리고create_function()
. - 사이트 간 요청 위조를 방지하기 위해 모든 형태의 CSRF 토큰을 구현하세요.
실시간 위협 모니터링, 기록 및 대응
보안은 일회성으로 설정하는 것이 아니라 지속적으로 유지해야 합니다. 항상 환경을 감시하세요.
- ModSecurity 또는 클라우드 기반 솔루션과 같은 웹 애플리케이션 방화벽(WAF)을 배포합니다.
- Fail2Ban을 사용하여 무차별 대입 로그인 시도를 차단하세요.
- Logwatch, Graylog 또는 ELK Stack과 같은 도구로 로그를 모니터링하세요.
- 비정상적인 동작(예: HTTP 500 오류 급증, 비정상적인 로그인 시도, 예기치 않은 파일 업로드)에 대한 알림을 설정합니다.
TuxCare로 PHP 취약점으로부터 한 발 앞서 나가세요.
PHP 취약점은 사라지지 않고 있으며, 여전히 PHP 7.4 이전 버전과 같은 레거시 버전을 실행하고 있다면 좋은 의도 이상의 노력이 필요합니다. 스택을 손상시키지 않는 지속적인 보안 업데이트가 필요합니다.
TuxCare의 PHP에 대한 무한 수명 주기 지원은 수명이 다한 PHP 버전에 대한 확장된 보안 패치를 제공하므로 원하는 방식으로 업그레이드를 계획하면서 보호 상태를 유지할 수 있습니다.
다음 CVE가 나올 때까지 기다리지 마세요. 지금이 바로 행동에 나서야 할 때입니다. 보안 전문가와 상담하여 TuxCare가 오래된 PHP를 보호하는 방법을 알아보거나 수명이 다한 소프트웨어 실행의 위험에 대한 도움말을 살펴보세요.

