1. XML(Extensible Markup Language) 보안 위협의 개요
XML(Extensible Markup Language) 공격은 주로 XML Parser(확장성 마크업 언어 구문 분석기)가 외부 개체를 처리하는 과정에서의 취약점을 악용합니다. 이는 기밀성(Confidentiality) 침해, 서비스 거부(DoS, Denial of Service), 서버 측 권한 도용으로 이어질 수 있습니다.
2. 주요 XML(Extensible Markup Language) 공격의 종류
① XXE (XML External Entity, XML 외부 개체) 주입 공격
가장 대표적인 공격으로, XML(Extensible Markup Language) 문서 내에 외부 개체를 정의하고 이를 참조하게 하여 서버 내부 파일에 접근하거나 SSRF(Server-Side Request Forgery, 서버 측 요청 위조)를 유발합니다.
- 공격 원리: DTD(Document Type Definition, 문서 형식 정의) 내의 외부 엔티티 선언을 악용합니다.
- 영향:
/etc/passwd와 같은 민감 파일 노출, 내부 포트 스캔, 원격 코드 실행.
② XML Bomb (Billion Laughs Attack, 빌리언 러프 공격)
XML(Extensible Markup Language)의 개체 치환 기능을 악용하여 메모리 자원을 고갈시키는 DoS(Denial of Service, 서비스 거부) 공격입니다.
- 공격 원리: 엔티티가 다른 엔티티를 재귀적으로 참조하게 설계하여, 파싱 시 데이터 크기를 기하급수적으로 증폭시킵니다. (예: 1KB 미만의 파일이 파싱 후 수 GB의 메모리를 점유)
- 영향: 애플리케이션 서버의 가용성 상실.
③ XPath(XML Path Language, XML 경로 언어) 주입 공격
사용자 입력값이 XPath(XML Path Language) 쿼리에 직접 포함될 때 발생하며, SQL(Structured Query Language, 구조화된 질의 언어) 주입과 유사한 형태입니다.
- 공격 원리: 조작된 입력값을 통해 쿼리의 논리 구조를 변경하여 인증을 우회하거나 비정상적인 데이터를 추출합니다.
- 영향: 데이터베이스 내의 민감 정보 노출 및 권한 우회.
④ XML Signature Wrapping (XML 서명 래핑) 공격
XML(Extensible Markup Language) 디지털 서명의 검증 로직과 실제 비즈니스 로직이 데이터를 참조하는 방식의 차이를 악용합니다.
- 공격 원리: 유효한 서명 요소는 그대로 두고, 동일한 이름의 악성 요소를 삽입하여 보안 검사를 통과시킨 후 악성 데이터를 처리하게 만듭니다.
- 영향: SOAP(Simple Object Access Protocol, 단순 객체 액세스 프로토콜) 기반 웹 서비스의 인증 및 무결성 파괴.
3. 기술적/관리적 대응 방법
① XML Parser(구문 분석기) 보안 설정 (가장 중요)
가장 근본적인 대책은 Parser(구문 분석기)에서 위험한 기능을 비활성화하는 것입니다.
- DTD(Document Type Definition) 비활성화: 외부 엔티티 참조를 원천 차단합니다.
- Java(자바) 예시:
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- 외부 엔티티(External Entities) 처리 제한: DTD(Document Type Definition) 사용이 불가피한 경우 외부 엔티티 참조 기능만 개별적으로 끕니다.
② 입력값 검증 및 파라미터화 (Parameterization)
- XPath(XML Path Language) 보안: 사용자 입력을 쿼리문에 직접 연결하지 말고, Precompiled(사전 컴파일된) 쿼리나 파라미터화된 인터페이스를 사용하여 Injection(주입) 경로를 차단합니다.
- Schema(스키마) 검증: W3C(World Wide Web Consortium, 월드 와이드 웹 컨소시엄) XML Schema(확장성 마크업 언어 스키마) 등을 사용하여 허용된 구조와 데이터 형식만 받아들이도록 강제합니다.
③ 시스템 및 네트워크 보안 강화
- WAF(Web Application Firewall, 웹 애플리케이션 방화벽) 활용: XXE(XML External Entity, XML 외부 개체) 패턴이나 비정상적인 XML(Extensible Markup Language) 구조를 탐지하고 차단하는 시그니처를 적용합니다.
- 최소 권한 원칙: XML Parser(구문 분석기)를 실행하는 프로세스의 권한을 최소화하여, 공격 성공 시에도 시스템 전체로 피해가 확산되지 않도록 격리(Sandboxing)합니다.
④ 보안 라이브러리 업데이트
- 사용 중인 XML(Extensible Markup Language) 처리 라이브러리(예: Xerces, JAXB)의 최신 보안 패치를 상시 적용하여 알려진 취약점(CVE, Common Vulnerabilities and Exposures)에 대응합니다.
4. 결론 및 제언
XML(Extensible Markup Language) 공격은 주로 "신뢰하지 않는 외부 입력의 무분별한 허용"에서 비롯됩니다. 따라서 개발 단계에서부터 Secure Coding(시큐어 코딩) 가이드를 준수하고, Parser(구문 분석기)의 기본 설정을 '최소 허용' 원칙에 따라 구성하는 것이 필수적입니다. 최근에는 JSON(JavaScript Object Notation, 자바스크립트 객체 표기법)의 사용이 늘고 있으나, 금융 및 엔터프라이즈 환경의 SOAP(Simple Object Access Protocol) 기반 서비스에서는 여전히 XML(Extensible Markup Language) 보안이 핵심적인 방어 요소임을 명심해야 합니다.