AI는 개발자가 코드를 작성하고, 애플리케이션을 테스트하며, 클라우드 인프라를 운영하는 방식을 변화시키고 있습니다. 또한 보안 연구원들이 성숙한 소프트웨어 깊은 곳에 숨겨진 취약점을 발견하는 방식도 바꾸고 있습니다.
2026년 10월, 두 가지 심각한 PHP 취약점이 이러한 변화에 초점을 맞추었습니다: CVE-2026-109618과 CVE-2026-109619, 이들은 집합적으로 PHP2Shell로 알려져 있습니다.
이 사건은 개발자, 데브옵스 엔지니어(DevOps engineers), 클라우드 보안 팀에게 중요한 질문을 던집니다:
만약 AI가 수년 동안 존재해 온 소프트웨어의 취약점을 발견하는 데 도움을 줄 수 있다면, 우리는 어떻게 우리의 보안 워크플로우를 재설계하여 따라잡아야 할까요?
그 답은 단순히 또 다른 AI 도구를 추가하는 것이 아닙니다. 우리는 신뢰할 수 있는 자산 인벤토리(asset inventories), 빠른 패치 배포, 깊이 방어(defense in depth) 원칙, 그리고 명확한 안전 경계가 설정된 AI 지원 워크플로우가 필요합니다.
중요: 이 글은 방어적 보안, 취약점 수정 및 안전한 클라우드 아키텍처에 대해 논의합니다. 항상 공식 권고 사항 및 소프트웨어 공급업체의 지침과 비교하여 현재 취약점 상태를 검증하십시오.
1. PHP2Shell이란 무엇인가요?
PHP2Shell은 PHP 런타임의 메모리 처리와 관련된 두 가지 심각한 취약점을 지칭합니다.
- CVE-2026-109618: 메모리 누수(memory-corruption) 문제로, 메모리 부족 상황 처리가 관련되어 있습니다.
- CVE-2026-109619: 오래된 내부 상태(stale internal state)와 관련된 사용 후 해제(use-after-free) 문제입니다.
두 문제 모두 영향을 받는 환경에서 인증되지 않은 원격 코드 실행(unauthenticated remote code execution)을 가능하게 할 수 있는 것으로 보고되었습니다. 각각 CVSS v4.0 점수 9.2점을 받았습니다.
참고 자료: OpenAI의 공동 공개 보고서 및 싱가포르 사이버 보안국(Cyber Security Agency of Singapore) 권고 사항.
개발자가 관심을 가져야 하는 이유는 무엇인가요?
많은 웹 취약점은 권한 오류(authorization mistake)나 안전하지 않은 입력 처리(unsafe input handling)와 같은 애플리케이션 코드에서 발생합니다.
PHP2Shell이 다른 점은 근본적인 런타임 환경(underlying runtime)과 관련되어 있다는 것입니다.
아무리 잘 설계된 애플리케이션이라도 취약한 PHP 버전을 실행한다면 여전히 노출될 수 있습니다. 단순히 애플리케이션 코드를 업데이트하는 것만으로는 런타임 자체의 결함을 반드시 해결할 수 없습니다.
이는 애플리케이션 보안이 전체 소프트웨어 스택(software stack)을 포함한다는 점을 상기시켜 줍니다:
- 애플리케이션 코드 (Application code)
- 프레임워크 및 의존성 (Frameworks and dependencies)
- 언어 런타임 (Language runtimes)
- 컨테이너 이미지 (Container images)
- 운영체제 (Operating systems)
- 클라우드 인프라 및 신원 권한 (Cloud infrastructure and identity permissions)
2. AI가 취약점 발견에 도움을 줄 수 있는 방법
보안 연구원들은 전통적으로 코드 검토(code review), 디버깅, 퍼징(fuzzing), 정적 분석(static analysis) 및 전문 테스트를 결합하여 찾기 어려운 결함을 식별합니다.
AI는 이러한 작업의 일부 과정을 가속화하는 데 도움을 줄 수 있습니다.
예를 들어, AI 지원 연구 워크플로우는 엔지니어들이 다음 작업을 수행하도록 도울 수 있습니다:
- 낯선 코드베이스 이해하기.
- 의심스러운 메모리 관리 패턴 식별하기.
- 외부 입력이 민감한 함수에 도달하는 경로 추적하기.
- 집중적인 테스트 케이스 생성하기.
- 충돌 보고서 및 실행 추적 요약하기.
- 제안된 수정 사항의 잠재적 누락 지점 검토하기.
- 회귀 테스트(regression tests) 및 복구 문서 초안 작성하기.
PHP2Shell 사례에서, OpenAI는 자체 'Patch the Planet' 이니셔티브를 통해 AI 지원 취약점 발견을 보고했습니다. Wiz는 독자적으로 두 가지 취약점을 발견하고 보고했으며, PHP 유지 관리자와 보안 파트너들이 협력하여 복구를 진행했습니다.
출처: OpenAI — Critical vulnerabilities의 조정된 공개.
하지만, AI가 생성한 의심은 확정된 취약점과 같지 않습니다.
연구원은 여전히 해당 동작을 안전하게 재현하고, 그 보안 영향을 확립하며, 수정 사항을 검증하고, 발견 내용을 책임감 있게 전달해야 합니다.
AI는 경험 많은 보안 엔지니어에게 '능력 증강 도구(force multiplier)'로 취급하는 것이 가장 좋으며, 절대적인 보안 권위자로 간주해서는 안 됩니다.
3. AWS 아키텍처: 다중 계층으로 방어하기 (Defend in Multiple Layers)
AWS에서 PHP 애플리케이션을 운영한다고 가정해 봅시다. 이는 Amazon EC2에서 실행될 수도 있고, Amazon ECS 또는 Amazon EKS의 컨테이너 내부에서 실행될 수도 있습니다.
방어적인 아키텍처는 다음과 같을 수 있습니다:
CloudFront는 선택 사항이며, 아키텍처는 실제 배포 환경에 맞춰야 합니다.
각 계층은 다른 목적을 수행합니다:
| Layer | Security purpose |
|---|
| AWS WAF | 구성된 규칙을 사용하여 요청 필터링 |
| ... | |
AWS는 PHP2Shell 공격 경로를 완화하기 위해 AWS WAF를 사용하는 방법에 대한 지침을 발표했습니다. 이러한 제어(controls)는 노출도를 줄일 수 있지만, 영향을 받은 PHP 런타임을 업그레이드하는 것을 대체할 수는 없습니다.
참고: AWS Security Blog — PHP2Shell mitigation guidance.
보안 원칙: 네트워크 제어(Network controls), WAF 규칙, 모니터링은 추가적인 방어 수단입니다. 이는 취약한 소프트웨어를 수정하는 것을 대체할 수는 없습니다.
치명적인 런타임 취약점이 공개되면 속도가 중요하지만, 검증 또한 중요합니다.
단계 1: PHP 버전 인벤토리 파악 (Inventory)
Linux 호스트에서는 다음을 확인하는 것부터 시작하세요:
이것은 단지 시작점일 뿐입니다. 컨테이너화된 워크로드의 경우, 실제 이미지 또는 실행 중인 컨테이너 내부에서 PHP 버전을 검사해야 합니다.
포함할 항목:
- EC2 인스턴스
- ECS 및 EKS 워크로드
- CI/CD 빌드 이미지
- 개발 및 스테이징 시스템
- 레거시 애플리케이션
- PHP를 번들링하는 타사 소프트웨어
단계 2: 영향을 받은 환경 업그레이드 (Upgrade)
지원되는 브랜치에 대해 보고된 PHP 수정 사항은 다음과 같습니다:
- PHP 8.5.12
- PHP 8.4.27
- PHP 8.3.36
- PHP 8.2.35
환경에 맞는 정확한 패치된 릴리스를 확인하려면 PHP2Shell 보안 리서치 및 공식 PHP 또는 배포판 권고 사항을 확인하십시오. 공급업체는 수정 사항을 백포팅(backport)할 수 있으므로, 버전 비교 시 패키지별 지침을 고려해야 합니다.
컨테이너의 경우, 이미지를 다시 빌드하고 재배포해야 합니다. 호스트를 업데이트한다고 해서 기존 컨테이너 이미지에 내장된 PHP가 자동으로 업데이트되는 것은 아닙니다.
단계 3: 임시 완화 조치 적용
패치가 지연되는 경우, 공식 공급업체 지침에 따라 임시 보호 조치를 따르십시오. AWS WAF가 추가적인 방어 계층을 제공할 수 있지만, 어떤 WAF 구성도 모든 가능한 공격 경로를 차단한다고 가정해서는 안 됩니다.
단계 4: 잠재적 침해 조사
관련 애플리케이션, 웹 서버, 운영 체제 및 보안 로그를 검토하십시오.
비정상적인 프로세스, 예상치 못한 파일 변경, 의심스러운 아웃바운드 연결 및 가능한 자격 증명 노출을 조사하십시오. 침해가 의심되는 경우, 인시던트 대응(incident response) 절차를 따르고 증거를 보존하십시오.
단계 5: 복구 확인
영향을 받은 모든 인스턴스와 컨테이너가 패치된 런타임(runtime)을 실행하는지 확인하십시오. 애플리케이션 테스트를 실행하고 배포된 버전의 증거를 보관하십시오.
빌드가 성공적이라고 해서 모든 프로덕션 복제본(replica)이 업데이트되었음을 의미하지는 않습니다.
5. AI 지원 취약점 복구 워크플로우 구축
우리는 AWS 서비스를 사용하여 취약점 발견, AI 지원 분석, 승인 및 검증을 조정할 수 있습니다.
가능한 설계는 다음과 같습니다:
Asset Inventory and Security Scans
|
v
...
이것은 제안된 아키텍처이며, 이 서비스들이 자동으로 제공하는 내장 통합 기능이 아닙니다.
가능한 AWS 서비스 역할
| 서비스 | 예시 책임/역할 |
|---|
| Amazon S3 | 스캔 보고서 및 복구 증거 저장 |
| ... | |
| 작게 시작하세요. 팀은 처음에 신뢰할 수 있는 스캐너, 런타임 인벤토리(runtime inventory), 패치 검증 스크립트만 필요할 수 있습니다. AI 오케스트레이션(AI orchestration)은 명확한 문제를 해결할 때 추가하십시오. | |
AI가 처리해야 할 것은 무엇인가요?
AI 구성 요소는 다음을 지원할 수 있습니다:
- 개발자에게 기술적 발견 사항 설명.
- 애플리케이션별 관련 문제 그룹화.
- 복구 티켓 초안 작성.
- 승인된 자문 데이터(advisory data)를 사용하여 업그레이드 경로 제안.
- 테스트 결과 요약.
- 복구 보고서에서 누락된 증거 식별.
결정론적 코드(deterministic code)가 처리해야 할 것은 무엇인가요?
신뢰할 수 있는 도구와 일반 코드를 사용하여 다음을 수행하십시오:
- 설치된 버전을 권위 있는 자문 데이터(authoritative advisories)와 비교.
- 위험 정책 강제 적용.
- 승인 요구.
- 배포 권한 제어.
- 패치가 배포되었는지 확인.
- 감사 증거 기록.
언어 모델(language model)이 프로덕션 환경(production environment)의 보안 여부를 결정하는 유일한 권위가 되어서는 안 됩니다.
6. 예시: 간단한 PHP 인벤토리 확인
리눅스 호스트에서 PHP 버전을 보고하는 기본적인 셸 스크립트로 시작할 수 있습니다.
#!/usr/bin/env bash
set -euo pipefail
...
이를 check-php-version.sh로 저장한 후 실행합니다:
chmod +x check-php-version.sh
./check-php-version.sh
이 스크립트는 버전을 보고할 뿐이며, 시스템이 취약한지 여부를 결정하지 않습니다.
실제 복구 워크플로우를 위해서는 승인된 자산 관리 시스템(asset-management systems)에서 런타임 인벤토리를 수집하여 권위 있는 공급업체 자문 데이터와 비교해야 합니다. 벤더 백포트(vendor backports), 사용자 지정 빌드(custom builds), 그리고 여러 PHP 설치 환경을 고려하십시오.
컨테이너화된 애플리케이션의 경우, 호스트 버전(host version)에 의존하기보다는 배포된 이미지 또는 컨테이너를 대상으로 동등한 검사를 실행해야 합니다.
7. 다음 AI 보안은 어떤 모습일까요?
이것들은 보장된 일정이 아닌 예측입니다.
단기적 관점: 더 빠른 분류(triage)
AI 기반 코드 검토(code review), 테스트 생성 및 보안 조치 초안 작성은 팀이 발견된 취약점을 더 효율적으로 조사하는 데 도움을 줄 수 있습니다.
중기적 관점: 지속적인 보안 테스트 (Continuous security testing)
AI는 코드 변경에 대한 테스트를 생성하고, 인프라 구성을 검토하며, 보안 정책과 배포 환경 간의 불일치를 식별하는 데 도움을 줄 수 있습니다.
보안 에이전트는 수동 개입을 최소화하면서 자산 검색(asset discovery), 패치 준비, 단계적 테스트(staged testing) 및 검증을 조정할 수 있습니다.
하지만 AI 에이전트에게 무제한의 프로덕션 권한을 부여하는 것은 상당한 운영 및 보안 위험을 초래합니다.
더 안전한 설계는 다음 요소들을 결합합니다:
- 기본적으로 읽기 전용 분석(Read-only analysis)
- 최소 권한 원칙(Least-privilege permissions)
- 높은 영향도의 변경 사항에 대한 인간의 승인(Human approval)
- 스테이징 검증(Staging validation)
- 독립적인 배포 후 점검(Independent post-deployment checks)
- 감사 추적 및 롤백 절차(Audit trails and rollback procedures)
목표는 무한한 자율성이 아닙니다. 빠르고, 안전하며, 측정 가능한 보안 조치입니다.
8. 더 큰 위험: AI의 이중 용도성 (Dual-Use)
방어자가 코드를 분석하는 데 도움을 주는 것과 동일한 도구는 공격자가 소프트웨어를 조사하고 공격의 일부를 자동화하는 데에도 사용될 수 있습니다.
취약점 발견이 가속화됨에 따라, 조직은 공개(disclosure)와 검증된 조치 사이의 시간을 줄여야 합니다.
이는 정확한 자산 인벤토리 유지, 패치 전달 자동화, 모니터링 개선, 그리고 사고가 발생하기 전에 인시던트 대응을 리허설하는 것을 의미합니다.
장기적으로는 보안 설계(secure-by-design) 엔지니어링도 중요합니다. 메모리 안전 기술(Memory-safe technologies)은 전체 클래스의 메모리 오류를 줄일 수 있으며, 퍼징(fuzzing), 회귀 테스트(regression tests), 형식 검증(formal verification)은 핵심 구성 요소에 대한 신뢰도를 높일 수 있습니다.
AI는 이러한 노력들을 지원할 수 있지만, 버그가 없는 소프트웨어를 보장할 수는 없습니다.
결론
PHP2Shell은 AI와 사이버 보안 간의 변화하는 관계를 보여주는 유용한 사례 연구입니다.
AI는 연구원들이 복잡한 소프트웨어를 조사하고 결함을 식별하는 데 도움을 줄 수 있습니다. 하지만 취약점을 발견하는 것은 시작에 불과합니다. 실제 보안 결과는 검증(validation), 책임 있는 공개(responsible disclosure), 패치 전달(patch delivery), 그리고 확인(verification)에 달려 있습니다.
AWS 엔지니어에게 실질적인 핵심은 간단합니다:
AI 지원 분석을 신뢰할 수 있는 인벤토리(inventory), 최소 권한(least privilege), 계층적 방어(layered defenses), 통제된 복구(controlled remediation), 그리고 독립적인 검증과 결합해야 합니다.
클라우드 보안의 미래는 AI가 취약점을 얼마나 빨리 발견하는지에 의해서만 측정되지 않을 것입니다. 또한 엔지니어링 팀이 그러한 발견을 얼마나 신뢰성 있게 안전하고 복원력 있는 시스템으로 전환하는지에 의해서도 측정될 것입니다.
참고 자료