
Scanner de Vulnerabilidades de Código Fonte Baseado na Web

Raptor é um scanner de vulnerabilidades de código-fonte centrado no GitHub, baseado na web (serviço web + interface). Ou seja, ele escaneia um repositório apenas com a URL do repositório do GitHub. Você pode configurar webhooks para garantir varreduras automatizadas sempre que fizer um commit ou mesclar um pull request. A varredura é feita de forma assíncrona e os resultados estão disponíveis apenas para o usuário que iniciou a varredura.
Algumas das funcionalidades do Raptor:
Esta ferramenta é uma tentativa de ajudar a comunidade e as startups a enfatizar a codificação segura. Esta ferramenta pode ou não corresponder aos recursos/qualidade de alternativas comerciais, nada é garantido e você foi avisado. Esta ferramenta destina-se a ser usada por revisores de código de segurança e/ou desenvolvedores com experiência em codificação segura para encontrar pontos de entrada de vulnerabilidades durante auditorias de código ou revisões por pares. Por favor, NÃO confie cegamente na saída da ferramenta. É melhor usá-la se você integrar o Raptor no seu pipeline de CI/CD.
0.1 beta
Plugins Integrados:
Nota: Muitas das seguintes ferramentas/módulos/bibliotecas foram fortemente modificadas para se integrarem bem no framework.
Pacotes de Regras Disponíveis:
Vídeo de Instalação: YouTube Instalação
$ wget https://github.com/dpnishant/raptor/archive/master.zip -O raptor.zip
$ unzip raptor.zip
$ cd raptor-master
$ sudo sh install.sh
Vídeo de Utilização: YouTube Uso
cd raptor-master
sudo sh start.sh #inicia o serviço web backend
Agora aponte o seu navegador para Página Inicial do Raptor (http://localhost/raptor/)
Faça login com o nome de utilizador registado no servidor github correspondente ao qual está ligado e qualquer palavra-passe (mas lembre-se do nome de utilizador para ver o histórico de varreduras)
Por exemplo:
Se estiver registado como foobar em https://github.com, utilize o mesmo nome de utilizador ao analisar repositórios em https://github.com. No entanto, se estiver registado como foobar_corp no seu github pessoal/empresarial (por exemplo, https://github.corp.company.com), utilize o mesmo nome de utilizador se pretender analisar repositórios em https://github.corp.company.com
No entanto, por agora a palavra-passe pode ser qualquer coisa, uma vez que NÃO implementámos uma base de dados na versão de desenvolvimento.
Pode usar o editor de regras leve, com interface gráfica no lado do cliente, para adicionar qualquer nova regra(s) personalizada(s) para os seus requisitos específicos, ou qualquer outro editor de texto simples, pois os ficheiros rulepack são estruturas JSON simples. Use o seu navegador para abrir as regras localizadas em 'backend/rules'. Quando terminar, guarde o seu novo ficheiro de regras modificado no mesmo diretório, i.e., 'backend/rules'. Tudo o que precisa fazer agora é uma pequena edição, aqui: Script de Inicialização. Acrescente o nome do seu novo ficheiro rulepack a este array sem a extensão '.rulepack' e reinicie o servidor backend. Está pronto! 👍
Pode aceder aqui: Editor de Regras (http://localhost/raptor/editrules.php)
Adicione um padrão de nome de ficheiro ou nome de diretório a excluir da análise. Isto é útil para ignorar ficheiros conhecidos como jquery.min.js etc. ou até mesmo todo o diretório /test/. Por exemplo, no conteúdo de exemplo abaixo, jquery significa jquery e é sensível a maiúsculas/minúsculas, por isso tenha cuidado. Na secção plugins, o name do plugin é o nome do ficheiro rulepack sem a extensão ".rulepack" conforme disponível no diretório rules/. O campo issue é o ID do problema mencionado em cada regra dos ficheiros rulepack: Exemplo #1, Exemplo #2. O valor do campo match_type pode ser regex ou start ou end. O campo value é a string exata a ser correspondida caso o match_type seja ou . Caso o campo seja , o deve conter o padrão RegEx bruto que precisa ser codificado em Base64 para evitar problemas de escape de sintaxe JSON. é uma correspondência baseada em Expressões Regulares, corresponderá ao início do trecho e corresponderá ao final do trecho.
A forma como funciona é: quando o scanner terminar de analisar problemas, irá iterar por todos os problemas encontrados e remover aqueles que correspondem aos padrões (com base no tipo de correspondência) de cada plugin mencionado no ficheiro ignore_list.rulepack.
(conteúdo de exemplo abaixo)
{
"files": [
"/.",
"bootstrap",
"jquery",
"uglify",
"knockout",
"angular",
"backbone",
"ember",
"yui",
"mocha",
"express",
"yql",
"dataTables"
],
"directories": [
"/node_modules/",
"/test/"
],
"plugins": [
{
"name": "common", <----- Name of the Plugin
"issue": "HARD_CRED1", <----- ID of the issue
"patterns": [
{
"match_type": "start", <----- Match type can be either "regex", "start" or "end"
"value": "foreach" <----- The actual string to match. Base64 Encode this pattern if match_type is "regex"
},
{
"match_type": "start",
"value": "for"
},
{
"match_type": "start",
"value": "elseif"
}
]
}
]
}
Pode criar um novo rulepack completamente novo e adicioná-lo ao scanner, ou pode escrever o seu próprio plugin de scanner e adicioná-lo ao framework. Um ficheiro rulepack de exemplo é uma estrutura JSON muito simples.
{
"plugin_type": "plugin_name", <-- Give it a name (any string)
"file_types": [
".java", <-- Add as many file extensions, you would want the scanner to pick while scanning
".js"
],
"rules": [
{
"id": "HARD_CRED1", <-- A unique IssueID, be creative.
"severity": "High", <-- This can be High, Medium or Low. This would accordingly show up in the graphs in UI.
"title": "Title of the Issue", <-- The title of the issue.
"description": "This text here shall be reflected in the UI as description of the issue.", <-- The description of the issue, this is optional.
"remediation": "The text here shall be reflected in the UI as the steps to remediate the issue", <-- The remediation of the issue, this is optional.
"link": "Any URL that has more resources about the issue.", <-- URL of the issue. This is optional
"example_insecure": "Put the insecure version of the code snippet for learning purpose.", <-- This is optional
"example_secure": "Put the secure version of the code snippet for learning purpose.", <-- This is optional
"platform_version": "all", <-- Leave it like that
"enabled": "true", <-- This value enables or disables the rule during the scan. It can be either "true" or "false".
"logic": "Explain the logic behind this rule for future updation or customization", <-- This is optional
"signature": "base64encode(regexp)" <-- Write the Regular Expression of your pattern and then base64encode it to put it here.
}
]
}
Se quiser mais controlo ou adicionar mais inteligência ao seu scanner em vez de uma simples pesquisa RegExp, pode escrever um plugin de scanner rápido como este e integrar o script aqui e anexar o nome do script aqui. É isso. É bastante direto para qualquer pessoa com conhecimentos básicos de scripting em Python.
Pode usar o Raptor para analisar instâncias privadas e públicas do GitHub da sua organização, especificando os endpoints corretos do servidor aqui e aqui.











Quer contribuir? Ótimo! Entre em contacto comigo se tiver uma ideia, ou sinta-se à vontade para fazer fork e melhorar. 😊
GNU GPL v2.0
Software Livre, Hell Yeah!
startendmatch_typeregexvalueregexstartend