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

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 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.
%252520%252520(3).avif)
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.

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
배포 전 AI 기반 개발 보안 확보
소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.



.avif)