1 of 17

�Code Review�

int main(int argc, char *argv[])

Allan Trindad - Parad0x

BOITATECH

2 of 17

~#: whoami

​

[

{

"nome": "Allan Trindad",

"Nickname": "Parad0x",

"Cargo": "Analista de segurança da informação - Willbank",

"Graduação": "Sistemas da informação",

"Certificações": [

"DCPT",

"OSCP"

],

"Redes Sociais": "@parad0x_0xff",

"BlogPost": "https://parad0x-0xff.github.io",

"Hobbie": "Dançarino de Hip-Hop / Bboy"

}

]

​

​

3 of 17

"Precisa se perder para achar lugares que não se acham, se não todos saberiam onde fica". (Capitão Barbosa)

"É preciso saber perder-se quando queremos aprender algo das coisas que nós próprios não somos." (Friedrich Nietzsche)

4 of 17

Tópicos

  • O que é code review
    • Metodologias
    • Debugging
  • Ferramentas
    • mercado
    • opensource
  • Demonstração
    • php
    • Java
  • Onde Estudar
    • owasp
    • pentesterlab

​

5 of 17

Code Review

​

Neste post vamos utilizar o termo “code review” somente com o foco em segurança!

6 of 17

O que é Code Review ?

​

​

​

​

Code review é o ato de analisar o código fonte de uma aplicação a fim de encontrar vulnerabilidades, fragilidades e a validação de boas práticas no que remete-se a codificação segura.

Podendo ser divididas em três partes:

​

  • Análise manual
  • Testes automatizados (SAST)
  • Pentest Whitebox

​

​

​

​

​

​

​

7 of 17

Metodologias

​

​

​

Ao realizar uma análise de código, precisamos conhecer as metodologias para saber qual melhor se adapta ao nosso cenário. Abaixo temos uma lista das metodologias que podemos utilizar.

​

  • Bug baseado em grep.
  • Seguir o input do usuário.
  • Revisar o código de forma aleatória.
  • Analisar o código inteiro.
  • Validar uma funcionalidade por vez.

​

​

​

​

​

8 of 17

Bug baseado em grep

​

Esse é o método mais rápido, quando estamos falando dos “low-hanging fruits”, termo em inglês utilizado para a definição de algo fácil de se obter ou seja vulnerabilidades fáceis de serem encontradas por terem algum tipo de padrão.

  • grep -Ri "shell_exec(" . --color
  • grep -Ri "system(" . --color
  • grep -Ri "exec(" . --color

Porém, essa metodologia sofre de algumas limitações, por exemplo:

  • Você não consegue obter muita cobertura e/ou garantia de qualidade e consequentemente segurança do código fonte.

​

  • Você precisaria conhecer todas as funções e/ou padrões perigosos que podem levar à alguma vulnerabilidade.

​

  • Você acaba utilizando expressões regulares muito complexas.

​

9 of 17

Seguir o input do usuário

Outra maneira de se revisar código é seguindo todos os inputs da aplicação que são controlados pelo usuário e encontrar todas as maneiras de acessar a aplicação. Esse método também é conhecido como “Top to bottom”. Para começar você precisa encontrar todas as maneiras de enviar dados para a aplicação, por exemplo em PHP:

​

  • $_POST
  • $_GET
  • $_REQUEST
  • $_COOKIE
  • $_SERVER

​

Este método oferece uma boa cobertura do código fonte. Porém, você precisa ter um bom entendimento da estrutura da linguagem utilizada, como: conseguir identificar rotas, URIs, arquivos de configuração e tudo mais que estiver relacionado ao input do usuário.

​

​

​

​

​

​

​

​

​

10 of 17

Revisar o código de forma aleatória

​

No primeiro momento parece uma forma meio burra de analisar código, né?

​

​

Mas então eu vou te provar que pode ser muito interessante… Essa metodologia também é conhecida como “bottom to top” e nela você procura por funções que você acredita que possam causar alguma vulnerabilidade, então você faz o processo inverso e a partir dessa função você tenta identificar se é possível controlar os dados que passam por ela até chegar no topo por assim dizer.

​

Essa metodologia também possui uma cobertura muito boa, porém somente das funções que você seguiu o fluxo.

​

​

​

​

11 of 17

Analisar o código inteiro

​

Esse com certeza é o método que vai lhe custar mais tempo!!!

Mas para executar essa metodologia o ideal é que você vá com o pensamento de encontrar fraquezas na aplicação e não necessariamente vulnerabilidades. A revisão do código inteiro de forma linear, não lhe dará ideia de quem se comunica com quem e como é o fluxo da aplicação. Mas sim de encontrar fraquezas que podem levar a uma vulnerabilidade. Esse tipo de abordagem cai bem quando você faz parte de um time interno e precisa realizar a análise de código, fazendo com que seu código tenha uma série de melhorias de segurança.

​

Sua cobertura de código é total, porém como já foi dito o tempo tem que ser o seu aliado se escolher utilizar essa abordagem!

​

​

​

​

12 of 17

Validação por funcionalidade

Uma outra maneira bem comum de se revisar um código é pegando um tipo de funcionalidade específica e testando uma por vez. Por exemplo:

  • Autenticação
  • Reset de senha
  • Upload de arquivos

​

Assim você se concentra em revisar todo o código relacionado a aquela funcionalidade da aplicação.

​

Essa abordagem oferece uma ótima cobertura de código para as funções analisadas e lhe ensinará alguns error geralmente cometidos quando as pessoas estão implementando uma funcionalidade específica.

Porém isso vale somente para o que você revisou.

​

​

​

13 of 17

Debugging vs Logging

​

​

​

O debugging no caso em português (depuração) serve para executar o código passo a passo, permitindo analisar as variáveis, pontos específicos do programa e até mesmo pausar a execução na linha de código desejada.

​

O Logging por sua vez nos auxilia a ver como nossos comandos est˜åo sendo interpretados, seja pelo servidor web, banco de dados ou qualquer outro software.

​

​

​

​

​

14 of 17

Ferramentas de mercado

​

​

​

Ferramentas opensource

​

​

​

​

​

​

​

15 of 17

Talk is cheap, show me the code.

16 of 17

Onde estudar

​

​

​

​

owasp

​

​

pentesterlab

​

​

​

​

​

17 of 17