• Nenhum resultado encontrado

Padr˜ oes de vulnerabilidades

No documento Ricardo Silveira Moreira (páginas 74-77)

3.7 Problemas encontrados

4.1.2 Padr˜ oes de vulnerabilidades

Nesta sec¸c˜ao descrevem-se alguns dos padr˜oes na solu¸c˜ao analisada que deveriam ser acusados pela solu¸c˜ao desenvolvida. S˜ao tamb´em apresentados excertos dos ficheiros de regras.

Inje¸c˜ao de SQL

O padr˜ao de uma injec¸c˜ao de SQL em ASP ´e relativamente simples. Come¸ca sempre com a chamada a uma das v´arias fun¸c˜oes, o que permite fazer pedidos ou actua- liza¸c˜oes na base de dados. Estas fun¸c˜oes recebem todas pelo menos um parˆametro que ´e uma string onde est´a o script ou o procedimento. Esta string ´e tipicamente concatenada com identificadores, que correspondem tipicamente, ou a vari´aveis, ou a constantes ou a valores que resultam de fun¸c˜oes. Estes identificadores quando n˜ao est˜ao correctamente codificados devem dar origem a um padr˜ao que ´e vulner´avel. Apresenta-se a seguir, como exemplo, uma linha de c´odigo com o padr˜ao descrito no bloco de c´odigo em 4.1.

Cap´ıtulo 4. Avalia¸c˜ao 57

Listing 4.1: C´odigo de exemplo para mostrar o padr˜ao a ser identificado 1 <%

2 objdb.query("select * from utilizadores where nome=" & nome) 3 %>

Na solu¸c˜ao desenvolvida o conjunto de regras que ´e capaz de reconhecer as v´arias variantes do padr˜ao descrito ´e mostrado no c´odigo de c´odigo XML apresentado em 4.2

Listing 4.2: C´odigo de exemplo para detectar SQL Injection 1 <padrao expressao="PROCEDIMENTO_INICIO_QUERY"

accao="guardarlocalizacao,saltar(selectQuery)" />

2 <padrao expressao="PROCEDIMENTO_INICIO_EXEC"

accao="guardarlocalizacao,saltar(procedimentoQuery)" />

3 <padrao expressao="PROCEDIMENTO_INICIO_QUERYRS"

accao="guardarlocalizacao,saltar(procedimentoQuery)" />

4 <contexto nome="selectQuery" accaoErro="ignorar"> 5 <padrao expressao="FORMAT" accao="entrar(funcao)" /> 6 <padrao expressao="FMT" accao="entrar(funcao)" />

7 <padrao expressao="FUNCAO" accao="alerta(FuncaoVulneravel)" /> 8 <padrao expressao="IDENTIFICADOR"

accao="alerta(PotencialInjecaoSQLSelect),saltar(principal)" />

9 <padrao expressao="PROCEDIMENTO_FIM_QUERY" accao="saltar(principal)"

/>

10 </contexto>

11 <contexto nome="procedimentoQuery" accaoErro="ignorar"> 12 <padrao expressao="FORMAT" accao="entrar(funcao)" /> 13 <padrao expressao="FMT" accao="entrar(funcao)" />

14 <padrao expressao="FUNCAO" accao="alerta(FuncaoVulneravel)" /> 15 <padrao expressao="IDENTIFICADOR"

accao="alerta(PotencialInjecaoSQLProcedimento),

16 saltar(principal)" />

17 <padrao expressao="FIM_FUNCAO" accao="saltar(principal)"/> 18 </contexto>

Nas linhas 1,2,3 do c´odigo XML em 4.2 temos a a ac¸c˜ao do motor quando este encontra um padr˜ao que ´e emparelhado `a express˜ao correspondente. Neste caso as ac¸c˜oes s˜ao semelhantes. Em cada uma das situa¸c˜oes o motor deve guardar a localiza¸c˜ao onde encontrou o padr˜ao que corresponde `a express˜ao, respectivamente

PROCEDIMENTO INICIO QUERY, PROCEDIMENTO INICIO QUERYRS ou PROCEDIMENTO INICIO EXEC e saltar para o contexto de execu¸c˜ao respectivo.

Cada contexto define um novo comportamento para o motor ao reconhecer ca- racteres ou express˜oes. Para cada um dos contextos ´e definido explicitamente tudo o que deve ser considerado um alerta como se pode ver nas linhas 7,8 e 14,15. O mesmo se aplica `a express˜ao que permite a sa´ıda do contexto respectivo, linhas 9 e 17 para cada um dos contextos.

diferentes dado que n˜ao seguem as regras do contexto onde o motor, como se vˆe nas linhas 5,6 e 12,13. Estas s˜ao as fun¸c˜oes consideradas seguras.

O efeito pr´atico desta regra detecta-se quando ´e descoberta uma express˜ao que corresponde ao in´ıcio de uma chamada de fun¸c˜ao da base de dados, levando a aplica¸c˜ao a entrar num contexto de execu¸c˜ao diferente. Dentro deste novo con- texto tudo o que seja um identificador ou fun¸c˜ao n˜ao conhecida pela ferramenta deve lan¸car um alerta. Qualquer outra situa¸c˜ao deve ser ignorada (”accaoErro”).

Cross Site Scripting

Em ASP, o padr˜ao de Cross Site Scripting ´e pouco variado e acarreta normalmente uma escrita para o ecr˜a. O c´odigo impresso ao ser interpretado pelo motor de html pode ter efeitos indesej´aveis por ter conte´udo malicioso. Este ataque foi j´a detalhado na sec¸c˜ao 2.1.12. Na aplica¸c˜ao aqui desenvolvida o conjunto de regras capaz de detectar os padr˜oes do c´odigo descrito ´e o que se mostra no c´odigo XML em 4.3.

Listing 4.3: C´odigo de exemplo para detectar Cross Site Scripting 1 <padrao expressao="RESPONSE_WRITE"

accao="guardarlocalizacao,saltar(responseWrite)" />

2 <padrao expressao="RESPONSE_INLINE"

accao="guardarlocalizacao,saltar(responseInline)"/>

3 <contexto nome="responseWrite" accaoErro="ignorar"> 4 <padrao expressao="REQUEST_QUERYSTRING"

accao="alerta(PotencialInjecaoPorParametro)" />

5 <padrao expressao="REQUEST_FORM"

accao="alerta(PotencialInjecaoPorParametro)" /> <padrao expressao="FUNCAO" accao="alerta(FuncaoVulneravel)" />

6 <padrao expressao="IDENTIFICADOR" accao="alerta(PotencialInjecaoDOM)"

/>

7 <padrao expressao="NOVALINHA" accao="saltar(principal)" /> 8 <padrao expressao="TERMINAR" accao="saltar(principal)" /> 9 <padrao expressao="ELSE" accao="saltar(principal)" /> 10 </contexto>

11 <contexto nome="responseInline" accaoErro="ignorar"> 12 <padrao expressao="REQUEST_QUERYSTRING"

accao="alerta(PotencialInjecaoPorParametro)" />

13 <padrao expressao="REQUEST_FORM"

accao="alerta(PotencialInjecaoPorParametro)" />

14 <padrao expressao="FUNCAO" accao="alerta(FuncaoVulneravel)" />

15 <padrao expressao="IDENTIFICADOR" accao="alerta(PotencialInjecaoDOM)"

/>

16 <padrao expressao="TERMINAR" accao="saltar(principal)" /> 17 </contexto>

Em ASP ´e poss´ıvel identificar o padr˜ao de um potencial CrossSiteScripting iden- tificando o in´ıcio de um padr˜ao que corresponde `a express˜ao Response.Write ou

Cap´ıtulo 4. Avalia¸c˜ao 59

<%=, o que est´a ilustrado nas linhas 1 e 2 do c´odigo XML 4.3. Quando ´e empare- lhado o padr˜ao RESPONSE WRITE s˜ao desencadeadas a ac¸c˜ao guardarlocalizacaoo e a ac¸c˜ao saltar para o contexto responseWrite. Quando ´e emparelhado o padr˜ao responseInline, s˜ao desencadeadas a ac¸c˜ao guardarlocalizacao e a ac¸c˜ao saltar para o contexto responseInline.

Em cada um dos contextos s˜ao listados todos os casos que dever˜ao dar origem a um alerta. S˜ao tamb´em listadas todas as express˜oes em cada um dos contextos que permitem voltar para o contexto principal.

No documento Ricardo Silveira Moreira (páginas 74-77)

Documentos relacionados