FindBugs Gerenciado pelo Sonar
Autor: Fabricio Braz | Publicado: 2011-09-15T08:36:00-03:00

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&nbsp;é a sua gratuidade. 
A execução de varredura pelo Findbugs é tão simples, quanto o entendimento de seus parâmetros de&nbsp; linha de comando. Segue o exemplo de comando:
&lt;caminho máquina para o findbugs&gt;/findbugs/lib/findbugs.jar -textui -effort:max -sortByClass -low -html -output &lt;caminho destino do relatório&gt;/findbugs.html &lt;caminho onde se&nbsp;encontra  jar&gt;/teste.jar
Os detalhes sobre os parâmetros podem ser observados aqui.
Entretanto, na maioria dos casos, existe a&nbsp; 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.&nbsp; 
Como a documentação do Sonar é muito completa, registro alguns pontos relevantes para colocá-lo em uso.
Downloadhttp://www.sonarsource.org/downloads
Instalaçãohttp://docs.codehaus.org/display/SONAR/Install+Sonarhttp://docs.codehaus.org/display/SONAR/Analyse+with+Ant+Task
ConfiguraçãoComo 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.
1. Acesse o link http://127.0.0.1:9000/profiles
2. Copie o profile &nbsp;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 -&nbsp; 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. 
VarreduraPara 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&nbsp; sonar). No exemplo da imagem a seguir, foi realizada a varredura do Webgoat 5.2.

ArremateCom 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&nbsp;Critical.


É importante ressaltar que os resultados são provenientes do Findbugs,&nbsp;consequência&nbsp;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.