억만장자 웃음 XML DoS 공격은 어떻게 작동합니까?
<!DOCTYPE root [
<!ENTITY ha "Ha !">
<!ENTITY ha2 "&ha; &ha;">
<!ENTITY ha3 "&ha2; &ha2;">
<!ENTITY ha4 "&ha3; &ha3;">
<!ENTITY ha5 "&ha4; &ha4;">
...
<!ENTITY ha128 "&ha127; &ha127;">
]>
<root>&ha128;</root>
이것은 십억 웃음 DoS 공격이라고 불리는 것 같습니다.
그게 어떻게 작동하는지 아는 사람?
Billion Laughes 공격은 XML 파서를 대상으로 하는 서비스 거부 공격입니다.Billion Laughs 공격은 XML 폭탄, 또는 난해하게는 지수적 개체 확장 공격이라고도 합니다.Billion Laughs 공격은 잘 형성된 XML을 사용하는 경우에도 발생할 수 있으며 XML 스키마 유효성 검사를 통과할 수도 있습니다.
바닐라 억만장자 웃음 공격은 아래에 표시된 XML 파일에 설명되어 있습니다.
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
이 예에서는 10개의 다른 XML 엔티티가 있습니다.lol
–lol9
. 첫번째 실체는lol
문자열로 정의됩니다.“lol”
. 그러나 다른 기업들 각각은 다른 기업의 10개로 정의됩니다.이 XML 파일의 문서 내용 섹션에는 엔티티의 인스턴스 하나에 대한 참조만 들어 있습니다.lol9
. 그러나, 이것이 DOM 또는 SAX 파서에 의해 파싱될 때,lol9
10개로 확장됩니다.lol8
s, 각각은 10개로 확장됩니다.lol7
s, 등등.모든 것이 텍스트로 확장될 때까지lol
, 문자열의 인스턴스가 100,000,000개입니다."lol"
. 만약 한 개의 실체가 더 있다면, 또는lol
10개의 문자열로 정의되었습니다.“lol”
, 10억 개의 "lol"이 있을 것이고, 그래서 공격의 이름이 지어졌습니다.말할 것도 없이, 이 많은 확장은 기하급수적인 양의 자원과 시간을 소비하여 DOS를 유발합니다.
제 블로그에는 좀 더 광범위한 설명이 있습니다.
XML 폭탄 중 하나 - http://msdn.microsoft.com/en-us/magazine/ee335713.aspx
공격자는 이제 XML의 세 가지 속성(대체 엔티티, 중첩 엔티티 및 인라인 DTD)을 이용하여 악의적인 XML 폭탄을 만들 수 있습니다.공격자는 이전 예와 같이 중첩된 엔티티로 XML 문서를 작성하지만, 한 레벨만 깊이로 중첩하는 대신 여러 레벨 깊이로 엔티티를 중첩합니다.
또한 이러한 "폭탄"으로부터 보호하기 위한 코드가 있습니다.NET world):
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.MaxCharactersFromEntities = 1024;
XmlReader reader = XmlReader.Create(stream, settings);
<!ENTITY ha "Ha !">
도면요소를 정의합니다.&ha;
까지 확장되는"Ha !"
. 다음 행은 다른 개체를 정의합니다.&ha2;
까지 확장되는"&ha; &ha;"
결국엔"Ha ! Ha !"
.
&ha3;
로 바뀌다Ha ! Ha ! Ha ! Ha !
, 매번 두 배씩 늘려서요.패턴을 따라가면,&haN;
이다."Ha !"
, 2번N-1. 그래서.&ha128
, 2로127 확장 "Ha !"
s, 어떤 컴퓨터도 다루기에는 너무 큽니다.
언급URL : https://stackoverflow.com/questions/3451203/how-does-the-billion-laughs-xml-dos-attack-work
'it-source' 카테고리의 다른 글
ui-view? angular ui 라우터를 다시 로드하지 않고 $stateParams를 업데이트하려면 어떻게 해야 합니까? (0) | 2023.10.23 |
---|---|
각진 재료 및 글꼴 변경 (0) | 2023.10.23 |
gradle로 스프링 응용 프로그램 디버그하는 방법 (0) | 2023.10.18 |
웹사이트용 워드프레스와 앵귤러 8을 통합하는 방법은? (0) | 2023.10.18 |
SaltStack을 이용한 MariaDB 심볼릭 링크 (0) | 2023.10.18 |