Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
FARO — FARO - Detector de Sensibilidade de Documentos | Kitploit
Ferramentas/GitHubGitHub/gradiant/faro
Análise EstáticaAnálise de VulnerabilidadesAuditoria de ConfiguraçãoExfiltração de DadosColeta de InformaçõesDetecção de SegredosAprendizado de MáquinaAprendizado e Educação
GitHubgradiant/faro

FARO

FARO - Detector de Sensibilidade de Documentos

Ver Repositório
1086há 3 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

FARO (Detector de Sensibilidade de Documentos)

LOGO FARO

Índice

  • O que é isto
  • O que existe aqui?
  • Executar FARO com Docker
  • Executar FARO na máquina anfitriã
    • Pré-requisitos
    • Ambiente virtual
    • Dependências
    • Modelos NER
    • FARO Spider
    • Deteção de Ficheiro Único
  • Detalhes Técnicos
    • Detetor de entidades FARO
    • Configuração
    • Formatos de Ficheiro de Entrada Suportados
    • Técnicas
    • Testes
    • Instalar Git-LFS
    • Argumentos adicionais de deteção FARO
    • Problemas conhecidos
  • Contribuidores

O que é isto

FARO é uma ferramenta para detetar informação sensível em documentos numa organização. Está orientada para ser usada por pequenas empresas e particulares que queiram rastrear os seus documentos sensíveis dentro da sua organização, mas que não possam gastar muito tempo e dinheiro a configurar ferramentas complexas de Proteção de Dados.

FARO extrai indicadores de sensibilidade de documentos (ex.: IDs de documentos, quantias monetárias, emails pessoais) e atribui uma pontuação de sensibilidade ao documento (de baixa a alta) usando a frequência e o tipo dos indicadores no documento.

Baixar ferramenta

Atualmente toda a funcionalidade desta ferramenta é para documentos escritos em espanhol, embora possa ser facilmente atualizada para cobrir mais idiomas.

Esta ferramenta é desenvolvida pela TEGRA R&D Cybersecurity Center.

O que existe aqui?

O projeto contém as seguintes pastas:

  • faro/ : este é o módulo FARO com a funcionalidade principal.
  • config/: os ficheiros de configuração yaml vão aqui. Há um ficheiro yaml por idioma (mais um nolanguage.yaml para fornecer funcionalidade básica para idiomas não detetados) e um ficheiro yaml com configurações comuns para todos os idiomas config/commons.yaml.
  • models/: esta é a pasta para colocar os modelos FARO.
  • faro_detection.py: lançador do FARO para operação autónoma sobre um único ficheiro.
  • faro_spider.sh: script para processamento em lote.
  • docker_build_faro.sh: script para construir a imagem Docker do FARO no Linux e Mac OS.
  • docker_build_faro.bat: script para construir a imagem Docker do FARO no Windows.
  • docker_run_faro.sh: script para executar um contentor FARO no Linux e Mac OS.
  • docker_run_faro.bat: script para executar um contentor FARO no Windows.
  • CHANGELOG: registo de alterações do FARO.

Executar FARO com Docker

O FARO pode ser executado como um contentor autónomo usando o Docker. Pode construir a imagem por si ou obtê-la do repositório Docker Hub.

Obter imagem FARO do Docker Hub

Assumindo que tem o Docker instalado e em execução no seu sistema, execute o seguinte comando para obter a imagem FARO mais recente do Docker Hub.

root@kitploit:~
docker pull gradiant/faro

Para executar a imagem Docker utilize os scripts docker_run_faro.sh (Linux/Mac OS) ou docker_run_faro.bat (Windows). Pode encontrá-los na raiz do projeto ou na versão mais recente.

Construir imagem FARO

Assumindo que tem o Docker instalado e em execução no seu sistema, faça o seguinte para construir a imagem FARO.

Linux e Mac OS

root@kitploit:~
./docker_build_faro.sh

Windows

root@kitploit:~
docker_build_faro.bat

Executar contentor FARO

Para executar um contentor FARO, alguns scripts são fornecidos na raiz do projeto. Pode copiá-los e usá-los a partir de qualquer outro local por conveniência. A pasta "output" será criada sob o seu diretório atual.

Linux e Mac OS

root@kitploit:~
./docker_run_faro.sh <a sua pasta com ficheiros>

Windows

root@kitploit:~
docker_run_faro.bat <a sua pasta com ficheiros>

Adicionámos suporte OCR ao tika através da sua integração com o tesseract. É possível personalizar alguns parâmetros do processo de OCR através do uso de um ficheiro env cujo caminho precisa de ser fornecido como segundo argumento do script. Fornecemos um exemplo comentado para servir de modelo aqui

root@kitploit:~
./docker_run_faro.sh <a sua pasta com ficheiros> <caminho para o ficheiro env>

por exemplo:

root@kitploit:~
./docker_run_faro.sh ../data docker_faro_env_example.list

Resultados

O FARO cria uma pasta "output" dentro da pasta atual e armazena os resultados da execução em dois ficheiros:

  • output/scan.$CURRENT_TIME.csv: é um ficheiro csv com a pontuação atribuída ao documento e a frequência dos indicadores em cada ficheiro.
root@kitploit:~
filepath,score,person_position_organization,monetary_quantity,signature,personal_email,mobile_phone_number,financial_data,document_id,custom_words,meta:content-type,meta:author,meta:pages,meta:lang,meta:date,meta:filesize,meta:num_words,meta:num_chars,meta:ocr
/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf,high,0,0,0,0,0,0,1,4,application/pdf,Powered By Crystal,1,es,,85739,219,1185,False
/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf,high,0,6,0,0,0,0,2,8,application/pdf,Python PDF Library - http://pybrary.net/pyPdf/,1,es,,77171,259,1524,True
/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf,high,0,3,0,0,0,0,1,2,application/pdf,FPDF 1.6,1,es,2019-09-12T20:08:19Z,1545,62,648,False
  • output/scan.$CURRENT_TIME.entity: é um json com a lista de indicadores (desagregados) extraídos num ficheiro. Por exemplo:
root@kitploit:~
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_NRU_0_1_001.pdf", "entities": {"custom_words": {"facturar": 3, "total": 1}, "prob_currency": {"12,0021": 1, "12,00": 1, "9,92": 1, "3,9921": 1, "3,99": 1, "3,30": 1, "15,99": 1, "13,21": 1, "1.106.166": 1, "1,00": 1, "99,00": 1}, "document_id": {"89821284M": 1}}, "datetime": "2019-12-11 14:19:17"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/Factura_Plancha.pdf", "entities": {"document_id": {"H82547761": 1, "21809943D": 2}, "custom_words": {"factura": 2, "facturar": 2, "total": 2, "importe": 2}, "monetary_quantity": {"156,20": 4, "2,84": 2, "0,00": 2, "159,04": 2, "32,80": 4, "191,84": 2}, "prob_currency": {"1,00": 6, "189,00": 2}}, "datetime": "2019-12-11 14:19:27"}
{"filepath": "/Users/test/code/FARO_datasets/quick_test_data/20190912-FS2019.pdf", "entities": {"document_id": {"C-01107564": 1}, "custom_words": {"factura": 1, "total": 1}, "monetary_quantity": {"3,06": 1, "0,64": 1, "3,70": 1}}, "datetime": "2019-12-11 14:19:33"}

Executar FARO na Máquina Anfitriã

NOTA: APENAS LINUX E MAC OS X

Pré-requisitos

O modo requer algum sistema operativo e bibliotecas para funcionar corretamente

  • Linux ou Mac OS
  • Java 1.7 ou superior
  • virtualenv (não obrigatório, mas altamente recomendado)
  • GNU parallel (para acelerar o nosso script spider. Pode ver mais informações sobre a ferramenta aqui
  • git lfs instalado.

Ambiente Virtual

É aconselhável usar um ambiente virtual separado. Para instanciar um ambiente virtual com virtualenv.

root@kitploit:~
virtualenv -p `which python3` <nome_do_ambiente>

Para ativar o ambiente virtual no seu terminal basta digitar:

root@kitploit:~
source <nome_do_ambiente>/bin/activate

Dependências

A maneira mais fácil de deixar o sistema operacional é instalar as dependências desta forma

root@kitploit:~
pip install -r requirements.txt

A lista de dependências é a seguinte:

  • SpaCy com pelo menos o modelo de idioma espanhol
  • numpy
  • scipy
  • sklearn
  • gensim
  • sklearn-crfsuite
  • fuzzywuzzy
  • tika
  • gensim
  • pyyaml
  • pandas

Estas outras dependências são usadas para testes:

  • mox
  • unittest-xml-reporting

Modelos NER

O FARO depende de vários modelos de ML para funcionar.

root@kitploit:~
detection:
    nlp_model : es_core_news_sm
    crf_ner_list: models/crf_professions_v1.joblib
    personal_email_detection: models/email_detector.joblib
    target_list: models/legal.txt
    crf_ner_classic: models/crf_classic_step1.joblib,models/crf_classic_step2.joblib,models/crf_classic_step3.joblib,models/crf_classic_step4.joblib,models/crf_classic_step5.joblib
    corp_mail_list: models/corp_mail_list.txt

No nosso repositório estamos a gerir modelos através do Git LFS devido ao seu tamanho. Se tiver git-lfs instalado, deve ter automaticamente os modelos descarregados quando clonar o nosso repositório pela primeira vez.

Se quiser descarregar modelos manualmente, execute o seguinte comando a partir da raiz do projeto.

root@kitploit:~
git lfs pull

Verifique que os caminhos mostrados abaixo dentro do ficheiro config/es.yml apontam para os modelos.

FARO spider

O nosso spider é um script para analisar recursivamente os documentos dentro de uma pasta, armazenando os resultados da análise num ficheiro.

root@kitploit:~
./faro_spider.sh <a sua pasta com ficheiros>

Após adicionar OCR, existem algumas configurações que podem ser personalizadas para a execução do FARO através de variáveis de ambiente:

  • FARO_DISABLE_OCR: se esta variável for encontrada (com qualquer valor), o FARO não executará OCR nos documentos
  • FARO_REQUESTS_TIMEOUT: Número de segundos antes de o FARO expirar se o servidor tika não responder (padrão: 60)
  • FARO_PDF_OCR_RATIO: Bytes por caractere usados em documentos PDF mistos (texto e imagens) para forçar OCR (padrão: 150 bytes/char)

A configuração de registo (logging) também pode ser configurada através de variáveis de ambiente:

  • FARO_LOG_LEVEL: Nível de registo do Faro (padrão: INFO)
  • FARO_LOG_FILE: Ficheiro de registo do Faro (padrão: None). Ao usar docker, certifique-se de o definir dentro da pasta output para o persistir na máquina anfitriã.

Deteção de ficheiro único

Pode executar a deteção do faro sobre um único ficheiro usando o nosso script faro_detection.py

root@kitploit:~
./faro_detection.py -i <o_seu_ficheiro>

Dois ficheiros de saída são gerados com os caminhos <o_seu_ficheiro>.entity e <o_seu_ficheiro>.score.

a) <o_seu_ficheiro>.entity: um json com a lista de entidades ordenadas pelo seu tipo e o número de ocorrências (saída do módulo detetor de entidades):

root@kitploit:~
{"LOC": {"Pontevedra": 1}, "MONEY": {"1.000 euros": 2}, "PER": {"Betty Corti\u00f1as": 1, "Eva Expósito": 1, "Belén Portela": 1, "Marta Rivadulla": 1, "Miguel Rivas": 1}, "PROF": {"el tutor": 1}, "ORG": {"Centro de Recursos Educativos": 1}}

b) <o_seu_ficheiro>.score: um json com os tipos de entidades e o número de vezes que esse tipo de entidade aparece no texto. Este json também contém a pontuação de sensibilidade na propriedade "score" (pode ser "low", "medium" e "high").

root@kitploit:~
{"score": "high", "summary": {"monetary_quantity": 1, "person_position": 1, "mobile_phone_number": 1, "personal_email": 1, "credit_account_number": 2}}

Para obter informações sobre argumentos adicionais que podem ser passados ao nosso script de deteção, veja aqui.

Detalhes Técnicos

Detetor de entidades FARO

O detetor de entidades FARO executa dois passos:

  1. Extração de indicadores de sensibilidade: os indicadores são entidades e outros elementos de texto (ex.: quantias monetárias) que provavelmente aparecem em documentos sensíveis.

A lista de indicadores é a seguinte:

  • person_position_organization: este é um grupo de entidades (Pessoa, Cargo - Posição, Organização) que foram extraídas e ligadas entre si a partir dos documentos.

  • monetary_quantity: quantia monetária (atualmente apenas euros e dólares são suportados).

  • signature: devolve a pessoa que assina um documento

  • personal_email: emails que não são corporativos (ex.: não info@ rrhh@ )

  • mobile_phone_number: números de telemóvel (filtrando os não móveis)

  • financial_data: cartões de crédito e números de conta IBAN

  • document_id: NIF e CIF espanhóis.

As contagens únicas destas frases são reunidas num objeto json e transmitidas como entrada para o próximo passo.

  1. Pontuação da sensibilidade de um documento: uma regra de classificação é aplicada (utilizando limiares) aos indicadores extraídos na fase 1 para atribuir uma pontuação de sensibilidade ao documento.

As seguintes regras são aplicadas:

  • Cada nível de sensibilidade define limiares para os indicadores de sensibilidade. Um documento deve cumprir pelo menos um dos limiares (mínimo e máximo) para obter essa pontuação.

  • Se diferentes limiares de sensibilidade aparecerem no documento (atualmente configurados para três), o documento sobe o nível de sensibilidade apesar de cumprir todos os limiares para o nível.

  • A pontuação "low" também é atribuída a documentos onde nenhum indicador de sensibilidade foi encontrado

Configuração

Utiliza um conjunto de ficheiros YAML para configurar a sua funcionalidade (os ficheiros YAML estão localizados dentro da pasta "config")

  • common.yaml: tem a funcionalidade comum a todos os idiomas

  • <código de idioma>.yaml: tem a configuração específica para um idioma (atualmente apenas espanhol é suportado: código "es"). Também indica onde estão localizados os Modelos ML (ex.: por padrão dentro da pasta "models")

Configuração da pontuação de sensibilidade

São uma coleção de condições que selecionam uma pontuação seguindo a especificação do ficheiro de configuração. Os níveis são configurados na sensitivity_list ordenados pela sua intensidade (do menos para o mais sensível). O dicionário sensitivity contém as condições (min, max) ordenadas por tipo de entidade. O sistema precisa apenas de cumprir uma condição de um certo nível para sinalizar o documento com esse nível de sensibilidade. Além disso, se vários KPIs de um determinado nível forem encontrados no documento (conforme marcado pelo parâmetro sensitivity_multiple_kpis), o sistema aumenta o seu nível de sensibilidade (ex.: de medium para high).

root@kitploit:~
sensitivity_list:
    - low
    - medium
    - high


sensitivity_multiple_kpis: 3

sensitivity:
    low:
        person_position:
            min: 1
            max: 5
        monetary_quantity:
            min: 1
            max: 5

        signature:
            min: 0
            max: 0

        personal_email:
            min: 0
            max: 0

        ....

  • sensitivity_list é a lista de diferentes pontuações de sensibilidade ordenadas por intensidade.

  • sensitivity_multiple_kpis este número indica o número simultâneo de pontuações num nível permitido antes de subir o nível de sensibilidade

  • sensitivity é um dict com as condições de sensibilidade que devem ser satisfeitas para alcançar um nível de sensibilidade.

Formatos de Ficheiro de Entrada Suportados

A aplicação FARO utiliza Tika para processamento de documentos. Portanto, todos os formatos que o Tika processa podem ser usados como entrada. No entanto, os scripts faro_spider.sh/faro_spider.bat para processamento em lote estão restritos às seguintes extensões: .doc, .docx, .pptx, .ppt, .xls, .pdf, .odt, .ods, .odp, .txt e .rtf.

Técnicas

O FARO usa NER (construído com CRFs) para extrair entidades clássicas (Pessoa, Organização e Localização) e cargos.

Outros indicadores são extraídos com RegExp (IDs de documentos, números de telefone e cartão de crédito, etc.).

Os emails são extraídos com RegExp. Um classificador de ML e heurísticas são usados para distinguir entre emails corporativos e pessoais.

Testes

O FARO tem vários testes para verificar a funcionalidade do sistema (atualmente os testes cobrem apenas as expressões regulares). Os testes podem ser executados com o seguinte comando:

root@kitploit:~
python test_suite.py

Argumentos Adicionais de Deteção FARO

--dump: o sistema imprime a informação de <o_seu_ficheiro>.score para stdout em formato csv. Exemplo de saída:

root@kitploit:~
id_file,score,person_jobposition_organization,monetary_quantity,sign,personal_email,mobile_phone_number,credit_account_number,id_document
data/test/test2.pdf,medium,3,0,1,0,0,0,0

Os caminhos dos ficheiros de saída podem ser definidos explicitamente na linha de comandos usando --output_entity_file e --output_score_file

root@kitploit:~
python faro_detection.py --input_file <o_seu_ficheiro> --output_entity_file <caminho para a saída> --output_score_file <caminho para a saída>

O comportamento padrão do nosso script de deteção é mostrar apenas o tipo de entidades que afetam diretamente a pontuação de sensibilidade. Para mostrar todas as entidades detetadas, use o parâmetro --verbose na linha de comandos.

Existe um parâmetro adicional (--split_lines) que deve ser usado com documentos em que cada linha do documento é uma frase (ou parágrafo). Por padrão, o FARO tenta juntar linhas no documento porque em muitos casos uma linha diferente não implica uma frase diferente (ex.: em PDFs).

Instalar Git-lfs

Siga as instruções para instalar git-lfs (GIT Large File Storage) dependendo

Linux

Descarregue o pacote em https://git-lfs.github.com/ e siga as instruções de instalação.

Windows

Instale "git bash" no Windows (verifique a secção Windows neste link https://git-scm.com/downloads) e depois visite https://git-lfs.github.com/ e siga as instruções de instalação.

Mac OS

root@kitploit:~
brew install git-lfs
git lfs install

Uma pasta models será criada com todos os modelos no interior.

Problemas Conhecidos

  • A funcionalidade completa funciona apenas com documentos em espanhol, embora seja facilmente expansível para novos idiomas (especialmente se forem suportados pelo SpaCy, a ferramenta de PLN usada para processar a frase e os documentos).

  • O sistema usa SpaCy para análise e pré-processamento de frases PoS. Embora o SpaCy forneça um sistema NER treinado para entidades clássicas, NERs personalizados são usados para a extração de entidades clássicas (Pessoa, Organização, Localização) e profissões/cargos.

Contribuidores

TEGRA é um Centro de I&D em Cibersegurança sediado na Galiza (Espanha). É um esforço conjunto da Telefónica, uma empresa líder internacional de telecomunicações, através da ElevenPaths, a sua unidade global de cibersegurança, e da Gradiant, um centro de I&D em TIC com mais de 100 profissionais a trabalhar em áreas como conectividade, segurança e inteligência, para criar produtos e serviços inovadores no domínio da cibersegurança.

O trabalho da TEGRA está focado em duas áreas no panorama da cibersegurança: Segurança de Dados e Análise de Segurança. Estamos empenhados em criar tecnologias de ponta que possam nutrir e assim fornecer valor diferenciador aos nossos produtos.

Consulte o ficheiro CONTRIBUTORS.