XML 주입 공격은 해커가 XML 데이터베이스를 호스팅하는 시스템을 손상시키는 데 도움이 되는 불쾌한 작은 악용입니다. 이것은 전통적인 데이터베이스에 대해 생각할 때 떠오르는 것들의 종류를 포함합니다 - 의약품에서 영화에 이르기까지 무엇이든에 대한 자세한 정보 저장. 일부 XML 데이터 저장소는 권한이 있는 사용자를 확인하는 데도 사용되므로 새 XML 코드를 삽입하면 호스트 시스템이 해당 시점부터 수락할 새 사용자를 만들 수 있습니다.
공격자가 XML 주입을 구현하려면 XML 데이터베이스에 의존하거나 적어도 액세스하는 응용 프로그램이 있어야 합니다. 이러한 경우 사용자 입력이 제대로 검토되지 않을 때마다 새 XML 코드를 데이터 저장소에 추가할 수 있습니다. 공격자의 기술에 따라 새 XML 코드를 추가하면 많은 피해를 줄 수 있으며 전체 데이터베이스에 대한 액세스를 제공할 수도 있습니다.
읽으면서 XML 주입이 이전에 다루었던 SQL 주입 공격과 밀접한 관련이 있음을 알 수 있습니다. 다른 유형의 데이터베이스를 대상으로 하지만 매우 유사하기 때문입니다. 그리고 고맙게도, 수정 사항도 비슷합니다. 한 가지 유형의 공격을 물리 칠 하는 방법을 학습 하는 것은 다른 것을 방지 하기 위해 작업 할 때 게임 보다 잘 당신을 넣어 것입니다.
이 에피소드에서는 다음을 배우게 됩니다.
XML 주사가 작동하는 방법 왜 그렇게 위험합니까? 방어를 완전히 막을 수 있는 방법.
공격자는 어떻게 XML 주사를 트리거합니까? XML 주사는 권한이 없는 사용자가 XML 코드를 작성하고 기존 XML 데이터베이스에 삽입할 때마다 성공합니다. 이렇게 하려면 XML 데이터베이스에 의존하거나 연결하는 응용 프로그램과 공격자가 공격을 시작할 수 있는 보안되지 않은 데이터 경로의 두 가지 작업만 필요합니다.
XML 주사는 처리를 위해 서버로 전송되기 전에 사용자 입력이 소독되지 않거나 그렇지 않으면 제한되지 않는 경우 거의 항상 성공적입니다. 이렇게 하면 공격자가 일반 쿼리 문자열끝에 자체 코드를 작성하거나 삽입할 수 있습니다. 성공하면 서버가 XML 코드를 실행하도록 속여 레코드를 추가하거나 삭제하거나 전체 데이터베이스를 표시할 수도 있습니다.
해커는 일반 쿼리에 XML 코드를 추가하여 XML 사출 공격을 구현합니다. 검색 필드에서 로그인 페이지에 이르기까지 모든 것이 될 수 있습니다. 쿠키나 헤더 와 같은 것들도 포함될 수도 있습니다.
예를 들어 등록 양식에서 사용자는 사용자 이름 또는 암호 필드 다음에 다음 코드를 추가할 수 있습니다.
<user></user> <role>administrator</role> <username>John_Smith</username><password>Jump783!Tango@12</password>
이 예제에서는 관리자 액세스로 John_Smith 라는 새 사용자가 만들어집니다. 적어도 새 사용자는 좋은 암호 밀도 규칙을 채택하고 있습니다. 너무 나쁜 그들은 실제로 공격자입니다.
해커는 반드시 항상 XML 주사와 함께 성공하기 위해 그런 홈런을 칠 필요가 없습니다. 쿼리를 조작하고 서버가 반환하는 다양한 오류 메시지를 기록하면 XML 데이터베이스의 구조를 매핑할 수 있습니다. 그리고 그 정보는 공격의 다른 유형을 향상시키기 위해 사용할 수 있습니다.
XML 주사가 왜 그렇게 위험합니까? XML 주입 공격에 관련된 위험 수준은 대상 XML 데이터베이스 내에 저장되는 정보 또는 해당 정보가 사용되는 방식에 따라 달라집니다. 예를 들어 XML 데이터베이스가 사용자를 인증하는 데 사용되는 경우 XML 주입을 통해 공격자에게 시스템에 액세스할 수 있습니다. 또한 대상 네트워크의 관리자가 될 수 있으며, 이는 물론 매우 위험한 상황입니다.
더 전통적인 데이터베이스에 대해 부과되는 XML 주사의 경우 해당 정보를 도난당하거나, 잘못된 데이터를 저장소에 추가하거나, 좋은 데이터를 덮어쓰는 위험이 있습니다. XML 코드는 배우기 가 그리 어렵지 않으며 일부 명령은 매우 강력하여 전체 정보 필드를 덮어쓰거나 데이터 저장소의 내용을 표시할 수도 있습니다.
일반적으로 저장된 정보에 값이 없는 한 아무도 데이터베이스를 빌드하지 않습니다. 해커는 이것을 알고, 그래서 그들은 종종 그들을 대상으로. 해당 데이터에 직원 또는 고객에 대한 개인 정보와 같은 정보가 포함된 경우, 데이터가 손상되면 평판 손실, 재정적 결과, 무거운 벌금 또는 소송으로 이어질 수 있습니다.
XML 사출 공격 중지 XML 주사는 하나를 당기는 데 어려움이 적고 XML 데이터베이스의 보급으로 인해 상당히 일반적입니다. 그러나 이러한 공격은 오랫동안 주변에 있었습니다. 따라서, 이제까지 실행에서 그들을 방지 할 수있는 몇 가지 철갑 수정이 있습니다.
공격을 중지하는 가장 좋은 방법 중 하나는 미리 컴파일된 XML 쿼리만 사용하도록 응용 프로그램을 설계하는 것입니다. 이렇게 하면 쿼리의 기능이 권한 있는 활동 하위 집합으로 제한됩니다. 미리 컴파일된 쿼리 함수와 일치하지 않는 추가 인수 또는 명령이 들어오는 모든 것은 실행되지 않습니다. 매우 제한적이지 않으려면 매개 변수화를 사용할 수도 있습니다. 이렇게 하면 정수만 사용하는 것과 같은 특정 유형의 쿼리 및 데이터로 사용자 입력이 제한됩니다. 이러한 매개 변수 외부에 있는 모든 항목은 유효하지 않은 것으로 간주되며 쿼리가 실패하도록 합니다.
미리 컴파일된 쿼리또는 매개 변수화된 쿼리를 사용자 지정 오류 메시지와 페어링하는 것도 좋습니다. 실패한 쿼리에서 기본 오류 메시지를 다시 보내는 대신 응용 프로그램은 해당 응답을 가로채고 보다 일반적인 메시지로 바꿔야 합니다. 이상적으로는 쿼리가 실패한 이유를 사용자에게 알리지만 데이터베이스 자체에 대한 정보를 제공하지 않는 것이 좋습니다. 이러한 사용자 지정 메시지를 몇 가지 선택 사항으로 제한하면 해커가 실패한 쿼리에서 유용한 정찰을 컴파일할 수 없습니다.
XML 주사는 처음 개발되었을 때 매우 성공적이었습니다. 그러나 얼마 전에 있었던 점을 감안할 때, 오늘날 우리는 더 이상 위반될 수 없는 방어를 쉽게 구축할 수 있습니다.
XML 주사에 대한 자세한 정보 추가 읽기에 대 한, XML 주사에 OWASP 쓰기를 살펴 볼 수 있습니다. 또한 새로운 방어 지식을 테스트에 넣을 수 있습니다. Secure Code Warrior 사이버 보안 팀이 궁극적인 사이버 전사가 될 수 있도록 하는 플랫폼. 이 취약점을 물리치는 것에 대해 자세히 알아보려면 Secure Code Warrior 블로그 .