블로그

개발자를 위한 보안 정복: 공유 및 학습 시리즈 - XXE 인젝션

August 1, 2019

XML 외부 엔티티 인젝션(XXE 인젝션) 공격은 수년이 지난 지금까지도 널리 퍼져 있는 고전적인 취약점들에 비하면 비교적 최근에 등장했습니다. 하지만 현재 해킹 커뮤니티에서 매우 인기가 높으며, 성공 사례가 늘어남에 따라 그 위협도 더욱 커지고 있습니다.

실제로 OWASP는 현재 XXE 인젝션을 사이트에서 주의 깊게 살피고 적극적으로 방어해야 할 10대 취약점 중 하나로 분류하고 있습니다. 하지만 걱정하지 마세요. XXE 인젝션이 다른 사이버 공격보다 더 강력한 것은 아닙니다. 단지 조금 더 새롭고 덜 알려졌을 뿐입니다. 충분히 예방할 수 있으며, 완전히 차단하는 것도 가능합니다.

이번 에피소드에서는 다음 내용을 배웁니다:

  • 공격자가 XXE 인젝션을 사용하는 방법
  • XXE 인젝션이 위험한 이유
  • 이 취약점을 예방하는 기술.

공격자는 어떻게 XXE 인젝션을 유발할까요?

XXE 인젝션 취약점은 악의적인 사용자가 XML 코드를 제출할 수 있는 환경에서 발생할 수 있습니다. 공격자는 이 권한을 이용해 외부 엔티티에 대한 참조를 생성합니다. 이렇게 생성된 외부 참조와 코드는 기본 설정이나 취약하게 구성된 설정을 가진 XML 파서를 우회하도록 설계됩니다.

공격자는 XML 표준이 엔티티를 일종의 저장 단위로 정의하며, 이 저장소가 내부 또는 외부가 될 수 있다는 점을 악용합니다. 올바르게 사용하면 XML 프로세서가 원격 리소스에 접근할 수 있게 해주지만, 공격자들은 주로 이 기능을 악용하여 웹사이트의 내부 구조를 탐색하거나, 원격 리소스에 접근하려는 대규모 시스템 프로세스를 유발하여 서비스 거부(DoS) 공격을 감행합니다. 심지어 로컬 호스트의 데이터를 공격자가 제어하는 원격 서버로 전송하기도 하는데, 이는 XML 데이터베이스에 포함된 비밀번호나 개인정보와 같은 중요한 데이터를 탈취하는 데 효과적인 기법입니다.

공격에 사용되는 실제 코드는 엔티티 기능을 단순히 악용하는 수준으로 매우 간단한 경우가 많습니다. 예를 들어, 해커가 마스터 비밀번호 파일에 접근하기 위해 다음과 같은 코드를 사용할 수 있습니다.

<!ENTITY hackwithxxe SYSTEM file:///etc/password>

XXE 인젝션이 위험한 이유는 무엇일까요?

XXE 인젝션 공격이 위험하고 널리 퍼져 있는 데에는 몇 가지 이유가 있습니다. 우선, 아직 이 취약점에 대한 이해도가 낮습니다. 또한 공격자가 이를 통해 얻을 수 있는 이득이 상당합니다. 공격자는 지속적인 시도를 통해 내부 네트워크의 모든 경로를 매핑하거나 포트 스캔을 수행할 수 있습니다. 상당한 시간이 걸릴 수는 있지만, 공격자가 신뢰할 수 있는 XML 파서에 의해 처리되는 서버로 XML 코드를 전송하기 때문에 대상 네트워크의 능동적 방어 체계에 탐지될 확률은 거의 없습니다.

네트워크 매핑이 완료되면 공격자는 동일한 XXE 인젝션 기법을 사용하여 필요한 파일을 탈취하거나, 유효한 사용자 자격 증명을 탈취하여 2차 공격에 활용할 수 있습니다. 마지막으로, 단순히 혼란을 야기하려는 공격자들은 시스템을 마비시키기 위해 원격 리소스에 접근하도록 애플리케이션에 명령을 내려 서비스 거부 공격을 유발할 수도 있습니다.

XXE 인젝션 취약점 제거하기

XXE 인젝션 공격이 급증함에 따라 많은 XML 파서가 기본적으로 외부 엔티티(DTD라고도 함) 기능을 비활성화하기 시작했습니다. 이러한 파서를 사용하는 경우, 해당 기능을 활성화하지 않는 것만으로도 충분합니다.

하지만 DTD를 허용하는 파서라도 해당 기능을 비활성화할 수 있습니다. 일반적으로 이를 완전히 차단하려면 다음과 같은 구문이 필요하지만, 정확한 코드는 사용 중인 프레임워크의 문서를 확인하시기 바랍니다.

factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

보안 원칙에 따라 모든 사용자 입력은 애플리케이션 전반에 걸친 필터를 사용하여 살균(Sanitize)하고 검증해야 합니다. GET 및 POST 파라미터, HTTP 헤더, 쿠키를 포함하는 것을 잊지 마세요. 또한 파서가 처리할 특정 DTD와 명령에 대한 화이트리스트를 생성하고 그 외의 모든 것은 허용하지 않도록 설정할 수 있습니다.

화이트리스트와 필터링이 효과적이기는 하지만, XXE 인젝션 공격이 증가하고 있으므로 해당 기능이 필요하지 않다면 DTD 지원 자체를 완전히 비활성화하는 것을 권장합니다.

XXE 인젝션에 대한 추가 정보

더 자세한 내용은 XXE 인젝션 공격에 대한 OWASP의 설명을 참고하시기 바랍니다. 또한, 사이버 보안 팀을 최고의 사이버 전사로 양성하는 Secure Code Warrior 플랫폼의 무료 데모를 통해 방금 습득한 방어 지식을 직접 테스트해 볼 수 있습니다. 이 취약점과 다양한 위협을 방어하는 방법에 대해 더 알아보려면 Secure Code Warrior 블로그를 방문해 주세요.

태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.