quinta-feira, 15 de setembro de 2011

FindBugs Gerenciado pelo Sonar

O FindBugs é uma ferramenta de revisão estática de código fonte que analisa código Java. A efetividade de uma ferramenta de análise estática é consequência principalmente do conjunto de regras ou assinaturas que ela possui. Para o caso do Findbugs, existem duas categorias de regras que merecem maior atenção da segurança. São elas : malicious code e security. As regras que estes dois conjuntos englobam podem ser observadas na tabela a seguir:

Categoria
Regra
MALICIOUS CODE
DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
MALICIOUS CODE
DP_DO_INSIDE_DO_PRIVILEGED
MALICIOUS CODE
EI_EXPOSE_REP
MALICIOUS CODE
EI_EXPOSE_REP2
MALICIOUS CODE
FI_PUBLIC_SHOULD_BE_PROTECTED
MALICIOUS CODE
EI_EXPOSE_STATIC_REP2
MALICIOUS CODE
MS_CANNOT_BE_FINAL
MALICIOUS CODE
MS_EXPOSE_REP
MALICIOUS CODE
MS_FINAL_PKGPROTECT
MALICIOUS CODE
MS_MUTABLE_ARRAY
MALICIOUS CODE
MS_MUTABLE_HASHTABLE
MALICIOUS CODE
MS_OOI_PKGPROTECT
SECURITY
DMI_CONSTANT_DB_PASSWORD
SECURITY
DMI_EMPTY_DB_PASSWORD
SECURITY
HRS_REQUEST_PARAMETER_TO_COOKIE
SECURITY
HRS_REQUEST_PARAMETER_TO_HTTP_HEADER
SECURITY
SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE
SECURITY
XSS_REQUEST_PARAMETER_TO_JSP_WRITER
SECURITY
XSS_REQUEST_PARAMETER_TO_SEND_ERROR
SECURITY
XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER

O baixo número de regras, nem a limitação para avaliação de outras linguagens, como JSP ou o framework JSF, não são justificativas para descartar o uso dessa ferramenta, uma vez que a sua varredura pode revelar alguns dos riscos de segurança mais críticos como, por exemplo, SQLInjection e XSS. Outro ponto forte do Findbugs é a sua gratuidade.

A execução de varredura pelo Findbugs é tão simples, quanto o entendimento de seus parâmetros de  linha de comando. Segue o exemplo de comando:

<caminho máquina para o findbugs>/findbugs/lib/findbugs.jar -textui -effort:max -sortByClass -low -html -output <caminho destino do relatório>/findbugs.html <caminho onde se encontra jar>/teste.jar

Os detalhes sobre os parâmetros podem ser observados aqui.

Entretanto, na maioria dos casos, existe a  necessidade de revisar o resultado da varredura, eliminando os falsos positivo. Além disso, é desejável que se tenha um histórico do bugs revelados e de suas correções. Esses recursos não são nativos do Findbugs. Uma das alternativas, além de escrever seu próprio aplicativo bugtracker é o uso do Sonar.
O Sonar é uma plataforma para gestão de qualidade de código que já possui instalada em sua versão de instalação o plugin do Findbugs. Por ela, é possível gerenciar dentre diversos bugs, aqueles revelados pelo Findbugs. 

Como a documentação do Sonar é muito completa, registro alguns pontos relevantes para colocá-lo em uso.

Download

Instalação

Configuração
Como nosso enfoque é segurança, vamos configurá-lo para que use somente as regras de segurança do Findbugs. Para as configurações relacionadas a seguir considere a instalação padrão do Sonar.

2. Copie o profile  Sonar way with Findbugs e dê o nome Findbugs-Sec

3 - Clique no botão Set as default.

4 - Entre no profile Findbugs - Sec e desative todas as regras.

5 - Ative todas as regras da categoria Security:

6 -  Ative todas as regras da categoria Malicious Code.

A partir deste ponto o Sonar está preparado para usar apenas as regras das categorias Security e Malicious Code.

Varredura
Para realizar a varredura existem três possibilidades (Maven, Ant e Java Runner), mas optamos pelo uso do Ant.

No arquivo build.xml de sua aplicação, introduza o conteúdo a seguir:

      
      
         
          
      
   
         
      
   
              
      
      
      
   





Agora, basta rodar o Ant direcionando para a tarefa sonar (ex.: .\ant  sonar). No exemplo da imagem a seguir, foi realizada a varredura do Webgoat 5.2.


Arremate
Com o Sonar em operação pode-se monitorar a evolução dos bugs de segurança com maior facilidade. O exemplo abaixo mostra o resultado de duas varreduras no Webgoat 5.2, sendo que uma mudança no código gerou uma vulnerabilidade Blocker e eliminou outra Critical.



É importante ressaltar que os resultados são provenientes do Findbugs, consequência do seu conjunto de regras, mostradas anteriormente.

O uso dos recursos apresentados aqui são mais apropriados para casos em que a organização esteja pensando em adotar uma ferramenta de análise estática de segurança de código fonte. Considero a sua operação, como um primeiro passo antes da aquisição de ferramentas de mercado.