Blind XPath Injection: Booleanización [III de III]
***************************************************************************************
- Blind XPath Injection: Booleanización [I de III]
- Blind XPath Injection: Booleanización [II de III]
- Blind XPath Injection: Booleanización [III de III]
***************************************************************************************
3) Predecir en función del tamaño del alfabeto y la longitud de la palabra.
Con el objetivo de establecer una solución predictiva comprobable empíricamente se puede construir un sistema que determine L’ en función de S y L. Es decir, intentar obtener cual es la longitud más probable de L’ en función de una longitud de cadena S y un juego de caracteres L, ambos conocidos en cada instante.
Para realizar esta comprobación se va asumir que cada carácter c de L tiene, a priori, más o menos prioridad de aparecer dependiendo del tipo de documento XML con que se esté trabajando. Esta premisa, no obstante, podría ser discutida si se conoce el tipo de dato que se almacena y el idioma en que se guarda. Sin embargo, suponiendo un comportamiento totalmente aleatorio es posible hacer estimaciones como las del siguiente ejemplo en el que para un cada de longitud S=3 y un juego de caracteres L={a,b,c,d}=4, la longitud del juego de caracteres reducido L’ podría estimarse como:
Como se puede apreciar en la tabla hay:
Figura 13: Todas las posibilidades para S=3 y L=4
- 4 posibilidades de que todos los valores sean iguales, es decir, que L’=1
- 36 posibilidades de que haya 2 valores iguales, es decir, que L’ =2
- 24 posibilidades de que no haya ningún valore repetido, es decir, que L’=3
Luego para S=3 y L=3 se puede estimar que:
L’= (4*1+36*2+24*3) = 2,31
Es decir, que si se define K como la constante de reducción de L frente a S, obtendríamos que K, para este entorno sería igual a 2,31 dividido entre 3, es decir, a 0,77 lo que implica que con este alfabeto, de forma totalmente aleatoria, para una palabra de 3 letras, se podría haber reducido el juego de caracteres en un 23 % en media.
Con esos valores ya se puede estimar si es conveniente o no realizar la fase de reducción del juego de caracteres.
P’ menor que P
L+S•(Log2(L’)) menor que S•(Log2(L));
4+3•(Log2(2,31)) menor que 3•(Log2(4));
8,5596 menor 6 -> Falso
La pregunta que se plantea es, ¿existirá algún valor para el que, con una suposición de aleatoriedad total exista un S y un L que predigan un L’ con una constante de reducción K que haga beneficiosa la reducción?
La respuesta es NO.
Tras identificar mediante una función la longitud esperada de L’ para cualquier S y L dados, nunca se ha obtenido una combinación que haga posible que las curvas de la figura 15 se corten.
Figura 14: Longitud esperada de L' y K para S: 1..10 y L=10
Figura 15: Representación para S:1..20 y L=10
Tras probar valores de S de 1..2L para todos los L:1..40 siempre se ha obtenido el comportamiento de la gráfica. Es decir, la función está limitada inferiormente por S*Log2(L) y superiormente por L+S*Log2(L), lo que implica que nunca será beneficioso reducir a priori si no se conocen datos del documento, por lo que la mejor solución parece la solución algoritmica del punto 2.
Conclusiones finales
Este artículo solo ha pretendido analizar algunos aspectos de la booleanización de los valores en ataques Blind XPath Injection, sin embargo, existen otras reducciones a la hora de booleanizar el documento completo a tener en cuenta, como predecir atributos y valores en función de los atributos y valores ya descubiertos, etc... Sin embargo, tras todo lo visto, parece evidente que, o se tiene información previa del documento - o se hace un análisis previo del mismo - o la reducción del charset puede ser muy perjudicial para el rendimiento.
En las pruebas que hemos realizado, con ficheros XML de diferentes tipos, la reducción del charset siempre ha sido mucho más costosa que la búsqueda binaria directa o el algoritmo de predicción de histórico.
Saludos Malignos!
***************************************************************************************
- Blind XPath Injection: Booleanización [I de III]
- Blind XPath Injection: Booleanización [II de III]
- Blind XPath Injection: Booleanización [III de III]
***************************************************************************************
- Blind XPath Injection: Booleanización [I de III]
- Blind XPath Injection: Booleanización [II de III]
- Blind XPath Injection: Booleanización [III de III]
***************************************************************************************
3) Predecir en función del tamaño del alfabeto y la longitud de la palabra.
Con el objetivo de establecer una solución predictiva comprobable empíricamente se puede construir un sistema que determine L’ en función de S y L. Es decir, intentar obtener cual es la longitud más probable de L’ en función de una longitud de cadena S y un juego de caracteres L, ambos conocidos en cada instante.
Para realizar esta comprobación se va asumir que cada carácter c de L tiene, a priori, más o menos prioridad de aparecer dependiendo del tipo de documento XML con que se esté trabajando. Esta premisa, no obstante, podría ser discutida si se conoce el tipo de dato que se almacena y el idioma en que se guarda. Sin embargo, suponiendo un comportamiento totalmente aleatorio es posible hacer estimaciones como las del siguiente ejemplo en el que para un cada de longitud S=3 y un juego de caracteres L={a,b,c,d}=4, la longitud del juego de caracteres reducido L’ podría estimarse como:
Como se puede apreciar en la tabla hay:
Figura 13: Todas las posibilidades para S=3 y L=4
- 4 posibilidades de que todos los valores sean iguales, es decir, que L’=1
- 36 posibilidades de que haya 2 valores iguales, es decir, que L’ =2
- 24 posibilidades de que no haya ningún valore repetido, es decir, que L’=3
Luego para S=3 y L=3 se puede estimar que:
L’= (4*1+36*2+24*3) = 2,31
Es decir, que si se define K como la constante de reducción de L frente a S, obtendríamos que K, para este entorno sería igual a 2,31 dividido entre 3, es decir, a 0,77 lo que implica que con este alfabeto, de forma totalmente aleatoria, para una palabra de 3 letras, se podría haber reducido el juego de caracteres en un 23 % en media.
Con esos valores ya se puede estimar si es conveniente o no realizar la fase de reducción del juego de caracteres.
P’ menor que P
L+S•(Log2(L’)) menor que S•(Log2(L));
4+3•(Log2(2,31)) menor que 3•(Log2(4));
8,5596 menor 6 -> Falso
La pregunta que se plantea es, ¿existirá algún valor para el que, con una suposición de aleatoriedad total exista un S y un L que predigan un L’ con una constante de reducción K que haga beneficiosa la reducción?
La respuesta es NO.
Tras identificar mediante una función la longitud esperada de L’ para cualquier S y L dados, nunca se ha obtenido una combinación que haga posible que las curvas de la figura 15 se corten.
Figura 14: Longitud esperada de L' y K para S: 1..10 y L=10
Figura 15: Representación para S:1..20 y L=10
Tras probar valores de S de 1..2L para todos los L:1..40 siempre se ha obtenido el comportamiento de la gráfica. Es decir, la función está limitada inferiormente por S*Log2(L) y superiormente por L+S*Log2(L), lo que implica que nunca será beneficioso reducir a priori si no se conocen datos del documento, por lo que la mejor solución parece la solución algoritmica del punto 2.
Conclusiones finales
Este artículo solo ha pretendido analizar algunos aspectos de la booleanización de los valores en ataques Blind XPath Injection, sin embargo, existen otras reducciones a la hora de booleanizar el documento completo a tener en cuenta, como predecir atributos y valores en función de los atributos y valores ya descubiertos, etc... Sin embargo, tras todo lo visto, parece evidente que, o se tiene información previa del documento - o se hace un análisis previo del mismo - o la reducción del charset puede ser muy perjudicial para el rendimiento.
En las pruebas que hemos realizado, con ficheros XML de diferentes tipos, la reducción del charset siempre ha sido mucho más costosa que la búsqueda binaria directa o el algoritmo de predicción de histórico.
Saludos Malignos!
***************************************************************************************
- Blind XPath Injection: Booleanización [I de III]
- Blind XPath Injection: Booleanización [II de III]
- Blind XPath Injection: Booleanización [III de III]
***************************************************************************************
No hay comentarios:
Publicar un comentario