
Análise estática focada em segurança para o Phoenix Framework
Sobelow é uma ferramenta de análise estática focada em segurança para Elixir e o framework Phoenix. Para pesquisadores de segurança, é uma ferramenta útil para obter uma visão rápida de pontos de interesse. Para mantenedores de projetos, pode ser usado para evitar a introdução de várias vulnerabilidades comuns.
Atualmente, o Sobelow detecta alguns tipos dos seguintes problemas de segurança:
Potenciais vulnerabilidades são sinalizadas em diferentes cores de acordo com a confiança na sua insegurança. Alta confiança é vermelha, média confiança é amarela e baixa confiança é verde.
Um achado é tipicamente marcado como "baixa confiança" se parece que uma função pode ser usada de forma insegura, mas não é possível determinar com confiabilidade se a função aceita entrada fornecida pelo usuário. Ou seja, Se um achado é marcado em verde, ele pode ser criticamente inseguro, mas exigirá maior validação manual.
Nota: Este projeto está em constante desenvolvimento e vulnerabilidades adicionais serão sinalizadas ao longo do tempo. Se você encontrar um bug, ou quiser solicitar funcionalidades ou verificações de segurança adicionais, por favor abra uma issue!
Para usar o Sobelow, você pode adicioná-lo às dependências da sua aplicação.
def deps do
[
{:sobelow, "~> 0.13", only: [:dev, :test], runtime: false}
]
end
Você também pode instalar o Sobelow globalmente executando o seguinte a partir da linha de comando:
$ mix escript.install hex sobelow
Para instalar a partir do branch master, em vez do último lançamento, o seguinte comando pode ser usado:
$ mix escript.install github nccgroup/sobelow
Após a instalação, a maneira mais simples de escanear um projeto Phoenix é executar o seguinte a partir da raiz do projeto:
$ mix sobelow
Nota: Quaisquer argumentos de caminho devem ser caminhos absolutos, ou relativos à raiz da aplicação.
--root ou -r - Especificar o diretório raiz da aplicação.
Aceita um argumento de caminho, ex. ../my_project.
--verbose ou -v - Imprimir trechos de código e detalhes
adicionais do achado.
--ignore ou -i - Ignorar tipos de achado fornecidos. Aceita uma
lista separada por vírgulas de nomes de módulos, ex. XSS.Raw,Traversal.
--ignore-files - Ignorar arquivos. Aceita uma lista separada por
vírgulas de nomes de arquivos, ex. config/prod.exs.
--details ou -d - Obter detalhes do tipo de achado. Aceita um
único nome de módulo, ex. Config.CSRF.
O Sobelow permite que os usuários salvem opções frequentemente usadas em um arquivo de configuração. Por exemplo, se você se vê constantemente executando:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low
Você pode usar a flag --save-config para criar seu arquivo de configuração .sobelow-conf:
$ mix sobelow -i XSS.Raw,Traversal --verbose --exit Low --save-config
Este comando criará o arquivo .sobelow-conf na raiz
da sua aplicação. Você pode editar este arquivo diretamente para fazer
alterações.
Você também pode executar o comando sem nenhuma opção:
$ mix sobelow --save-config
quando começar a usar este pacote - o arquivo de configuração gerado será preenchido com os valores padrão para cada opção. (Isso ajuda a incorporar rapidamente este pacote em uma base de código pré-existente.)
Agora, se você quiser executar o Sobelow com a configuração salva,
você pode executar o Sobelow com a flag --config.
$ mix sobelow --config
O Sobelow favorece o excesso de relatórios em vez da subnotificação. Como tal,
você pode encontrar vários falsos positivos em uma varredura típica.
Esses achados podem ser ignorados individualmente adicionando um
comentário # sobelow_skip, junto com uma lista de módulos, antes
da definição da função.
# sobelow_skip ["Traversal"]
def vuln_func(...) do
...
end
Ao integrar o Sobelow em um novo projeto, pode haver um grande
número de falsos positivos. Para marcar todos os achados impressos
como falsos positivos, execute o Sobelow com a flag --mark-skip-all.
Depois de marcar os achados apropriados, execute o
Sobelow com a flag --skip.
$ mix sobelow --skip
Enquanto os comentários # sobelow_skip só podem marcar achados
no nível de função (e, portanto, não podem ser usados para ignorar problemas de configuração),
a flag --mark-skip-all pode ser usada para ignorar qualquer tipo
de achado.
As categorias de achados são divididas em módulos. Esses módulos
podem então ser usados para ignorar classes de achados (através das
opções ignore e skip) ou para obter detalhes de vulnerabilidade (através da
opção details).
Esta lista, e outras informações úteis, podem ser encontradas na linha de comando:
$ mix help sobelow
Para executar o Sobelow em todos os aplicativos filhos dentro de um aplicativo umbrella com um único comando, você pode adicionar um alias para sobelow no seu arquivo mix.exs raiz:
defp aliases do
[
sobelow: ["cmd mix sobelow"]
]
end
Se você deseja usar arquivos de configuração em um aplicativo umbrella, crie um .sobelow-conf em cada aplicativo filho e use a flag --config.
Ao escanear um projeto, o Sobelow ocasionalmente verificará por
atualizações e imprimirá um alerta se uma nova versão estiver disponível.
O Sobelow mantém o controle da última verificação de atualização criando um
arquivo .sobelow na raiz do projeto escaneado.
Se essa funcionalidade não for desejada, a flag --private pode
ser usada com a varredura.
--all-details - Obter detalhes de todos os tipos de achado.
--private - Pular verificações de atualização.
--router - Especificar localização do roteador. Isso só precisa ser
usado se a localização do roteador for não padrão. Aceita um argumento
de caminho, ex. my/strange/router.ex.
--exit - Retornar status de saída diferente de zero em ou acima de um limite
de confiança de low, medium ou high. Padrão é false que retorna um status de saída zero.
--threshold - Retornar achados em ou acima de um nível de confiança
de low (padrão), medium ou high.
--format ou -f - Especificar formato de saída dos achados. Aceita um formato,
ex. txt ou json.
Note que opções como --verbose não funcionarão com o formato json.
Todos os achados formatados em json contêm uma chave type, file e line.
Outras chaves podem variar.
--quiet - Retornar uma única linha indicando o número de achados.
Caso contrário, retornar nenhuma saída se não houver achados.
--compact - Achados mínimos de linha única com saída colorida
de acordo com a confiança.
--flycheck - Achados mínimos de linha única que são compatíveis
com ferramentas baseadas em flycheck.
--save-config - Gera um arquivo de configuração baseado nas opções
da linha de comando. Veja Arquivos de Configuração para mais
informações.
--config - Executar Sobelow com arquivo de configuração. Veja Arquivos de Configuração
para mais informações.
--mark-skip-all - Marcar todos os achados exibidos como ignoráveis.
--clear-skip - Limpar configuração criada por --mark-skip-all.
--skip - Ignorar achados que foram marcados para ignorar. Veja Falsos Positivos
para mais informações.
--version - Exibe a versão atual do Sobelow. Útil para etapas de CI ou integração com outras ferramentas como Salus.