versiones protocolos introduccion example estructura ejemplo descargar and xml

protocolos - ¿Cómo funciona el ataque multiusos XML DoS?



xml example (4)

<!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>

supuestamente esto se llama un ataque DoS de mil millones de risas.

¿Alguien sabe como funciona?


El ataque Billion Laughs es un ataque de denegación de servicio que se dirige a los analizadores XML. El ataque de Billion Laughs también se conoce como una bomba XML, o más esotéricamente, el ataque de expansión de entidad exponencial. Se puede producir un ataque de Billion Laughs incluso cuando se usa XML bien formado y también se puede aprobar la validación de esquema XML.

El ataque vanilla Billion Laughs se ilustra en el archivo XML representado a continuación.

<?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>

En este ejemplo, hay 10 entidades XML diferentes, lol - lol9 . La primera entidad, lol se define como la cadena “lol” . Sin embargo, cada una de las otras entidades se define como 10 de otra entidad. La sección de contenido del documento de este archivo XML contiene una referencia a una sola instancia de la entidad lol9 . Sin embargo, cuando esto es analizado por un analizador DOM o SAX, cuando se encuentra lol9 , se expande a 10 lol8 s, cada uno de los cuales se expande a 10 lol7 s, y así sucesivamente. En el momento en que todo se expande al texto lol , hay 100,000,000 instancias de la cadena "lol" . Si hubiera una entidad más, o lol se definió como 10 cadenas de “lol” , habría miles de millones de "lol" s, de ahí el nombre del ataque. Huelga decir que esta gran cantidad de expansiones consume una cantidad exponencial de recursos y tiempo, lo que provoca el DOS.

Una explicación más extensa existe en mi blog .


Escribe "¡Ja!" 2 128 veces.


Una de las bombas XML: http://msdn.microsoft.com/en-us/magazine/ee335713.aspx

Un atacante ahora puede aprovechar estas tres propiedades de XML (entidades de sustitución, entidades anidadas y DTD en línea) para crear una bomba XML maliciosa. El atacante escribe un documento XML con entidades anidadas como en el ejemplo anterior, pero en lugar de anidar solo un nivel profundo, anida sus entidades en muchos niveles profundos ...

También hay un código para proteger de estas "bombas" (en el mundo .NET):

XmlReaderSettings settings = new XmlReaderSettings(); settings.ProhibitDtd = false; settings.MaxCharactersFromEntities = 1024; XmlReader reader = XmlReader.Create(stream, settings);


<!ENTITY ha "Ha !"> Define una entidad, &ha; que se expande a "Ha !" . La siguiente línea define otra entidad, &ha2; que se expande a "&ha; &ha;" y, finalmente, "Ha ! Ha !" .

&ha3; se convierte en Ha ! Ha ! Ha ! Ha ! Ha ! Ha ! Ha ! Ha ! , y así sucesivamente, doblando el número cada vez. Si sigues el patrón, &haN; es "Ha !" , 2 N-1 veces, entonces &ha128 , se expande a 2 127 "Ha !" s, que es demasiado grande para cualquier computadora.