�Code Review�
int main(int argc, char *argv[])
Allan Trindad - Parad0x
BOITATECH
~#: 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"
}
]
"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)
Tópicos
Code Review
Neste post vamos utilizar o termo “code review” somente com o foco em segurança!
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:
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
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.
Porém, essa metodologia sofre de algumas limitações, por exemplo:
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:
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.
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.
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!
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:
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.
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.
Ferramentas de mercado
Ferramentas opensource
Talk is cheap, show me the code.
Onde estudar
owasp
pentesterlab