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.