Módulo Magento 2 – Scanner de Segurança e Deteção de Código Malicioso
Kowal Security Scan é um módulo de segurança avançado para Magento 2 que ajuda a detetar mais rapidamente alterações suspeitas em ficheiros, código malicioso, URL perigosos e injeções em conteúdos da base de dados. Foi concebido para funcionar de forma leve, sem agentes adicionais e sem implementação complexa.
Principais funcionalidades do módulo
- Verificação de alterações em ficheiros - deteta ficheiros novos, modificados e removidos dentro da aplicação Magento.
- Verificação heurística de malware - analisa ficheiros
php,phtml,js,html,svg,htaccesse outros suportes de payloads. - Análise de tokens PHP - deteta cadeias
decode -> execute, callbacks dinâmicos, variable function calls einclude/requiresuspeitos. - Verificação da base de dados - verifica tabelas Magento selecionadas quanto a HTML malicioso, JavaScript, SVG, URI
data:e links perigosos. - Integração com Google Safe Browsing - avalia a reputação dos URL presentes nos conteúdos da loja.
- Análise opcional com OpenAI - expande o relatório com avaliação de risco e recomendações de ação.
- Allowlists avançadas - permitem limitar false positives ao nível de domínios, ficheiros, conteúdos e regras específicas.
- Relatórios com configuração pronta - o módulo sugere candidatos para allowlist e gera uma exportação JSON normalizada pronta a utilizar.
O que distingue este módulo?
- Identificadores de regras estáveis - as regras de ficheiros e da base de dados têm o seu próprio
rule_id, pelo que a configuração da allowlist não depende da descrição textual completa. - Relatórios que apoiam a gestão de incidentes - o relatório mostra não só as deteções, mas também o nível de risco, recomendações e entradas prontas para a configuração.
- Controlo de false positives sem desativar o scanner - pode silenciar uma regra individual para o caminho ou tabela indicada em vez de desativar todo o módulo.
- Automação completa - o módulo funciona em cron, mas cada verificação também pode ser iniciada manualmente via CLI.
Que ameaças ajuda a detetar?
- código PHP ofuscado baseado em
e-val,base-64_decode,gzin-flatee técnicas semelhantes, - injeções JavaScript maliciosas em conteúdos CMS,
- iframes externos e redirecionamentos suspeitos,
- payloads SVG e conteúdos ocultos em URI
data:, - links perigosos que conduzem a malware, phishing ou software indesejado,
- alterações não autorizadas nos ficheiros da aplicação.
Onde o módulo procura ameaças?
O módulo analisa áreas-chave da loja onde os incidentes surgem com mais frequência:
- ficheiros da aplicação Magento e dos módulos,
- blocos CMS,
- páginas CMS,
core_config_data,- templates de e-mail do Magento e da newsletter,
- conteúdos de produto e avaliações de clientes.
Relatórios e resposta operacional
- Os resultados são guardados na tabela de relatórios dedicada do módulo.
- O relatório pode ser enviado por e-mail ao operador.
- Cada deteção pode incluir nível de risco, orientações operacionais e o respetivo
rule_id. - O relatório consegue preparar sugestões prontas para allowlist e configuração JSON normalizada.
Exemplos de utilização
- deteção de código malicioso adicionado após uma invasão da loja,
- monitorização de alterações não autorizadas nos ficheiros da implementação,
- deteção de blocos CMS infetados ou conteúdos na base de dados,
- avaliação de se um URL suspeito deve ser permitido na allowlist ou removido do sistema.
Porque vale a pena?
- Implementação rápida - funciona como módulo Magento 2 sem infraestrutura adicional.
- Relatórios práticos - o módulo não termina no momento da deteção, mas ajuda a passar para a decisão operacional.
- Melhor controlo da qualidade dos alertas - as allowlists e o
rule_idfacilitam a manutenção de elevada eficácia sem inundação de falsos alarmes. - Boa adequação a ambientes de produção - verificações automáticas, relatórios por e-mail e comandos CLI manuais apoiam o trabalho diário da equipa técnica.
Compatibilidade
- Magento Open Source 2.3.x - 2.4.x
- Adobe Commerce / Magento Commerce
O que inclui o pacote?
- módulo Magento 2 com tarefas cron e comandos CLI,
- configuração administrativa do módulo,
- mecanismo de relatórios para a base de dados e e-mail,
- regras de deteção avançadas e sistema de allowlist.
Documentação e suporte
O módulo inclui documentação de implementação e configuração, e a sua arquitetura suporta o ajuste contínuo de regras e processos de segurança na loja Magento 2.
Garanta a deteção antecipada de incidentes no Magento 2 com Kowal Security Scan.
Manual do módulo Kowal_SecurityScan
Visão geral
O módulo acrescenta ao Magento 2 uma camada de monitorização de segurança para ficheiros da aplicação, tabelas selecionadas da base de dados, URL suspeitos e análise opcional de incidentes através de OpenAI.
Os relatórios são guardados na tabela kowal_securityscan_report e podem ser enviados por e-mail.
Principais funcionalidades
- verificação de alterações em ficheiros Magento com comparação com snapshot,
- verificação heurística de ficheiros
php,phtml,php5,inc,phar,js,html,htm,svg,htaccess, - análise de tokens PHP através de
token_get_all(), - verificação de tabelas selecionadas da base de dados quanto a HTML malicioso, JavaScript, SVG, URI
data:e URL suspeitos, - integração com Google Safe Browsing API,
- análise opcional com OpenAI para deteções,
- allowlists configuráveis de domínios, ficheiros, padrões de conteúdo e regras,
- relatórios com sugestões prontas para allowlist e exportação de configuração JSON normalizada.
Requisitos
- Magento 2,
- módulo
kowal/basedisponível, - cron Magento em funcionamento,
- envio de e-mail corretamente configurado,
- opcionalmente: chave OpenAI API e chave Google Safe Browsing API.
Instalação
1. Adicionar o repositório do pacote
Se o pacote não estiver disponível no repositório Composer predefinido, adicione a origem:
composer config repositories.securityscan vcs https://github.com/kowalco/module-securityscan
Se o repositório exigir autorização:
composer config --global --auth github-oauth.github.com
2. Instalação do pacote
composer require kowal/module-securityscan
3. Ativação do módulo
php bin/magento module:enable Kowal_SecurityScanphp bin/magento setup:upgradephp bin/magento cache:flush
Em ambiente de produção, execute os passos padrão de deployment do Magento, de acordo com o seu processo de implementação.
Cron e agendamento das verificações
O módulo regista o seu próprio grupo cron securityscan.
kowal_securityscan_filecheck- diariamente às00:00,kowal_securityscan_malwarecheck- diariamente às01:00,kowal_securityscan_dbcheck- diariamente às02:00,kowal_securityscan_cleanup_reports- diariamente às02:30.
Sem o cron Magento em funcionamento, as verificações automáticas não serão executadas.
Execução manual das verificações
Para executar manualmente as verificações, utilize:
php bin/magento kowal_securityscan:filecheckphp bin/magento kowal_securityscan:malwarecheckphp bin/magento kowal_securityscan:dbcheck
Este é o método recomendado para testar após a instalação e após alterações de configuração.
Configuração
Caminho da configuração:
Stores -> Configuration -> kowal -> kowal_security
Definições gerais
Ativar móduloEndereço de e-mail para relatóriosEndereço de e-mail do remetenteRetenção de relatórios em diasGoogle Safe Browsing API KeyAllowlist de domíniosAllowlist de ficheirosAllowlist de padrões da base de dadosAllowlist de regras de ficheirosAllowlist de regras da base de dados
Configuração mínima
- ative o módulo,
- defina o endereço do destinatário dos relatórios,
- defina o endereço do remetente dos relatórios,
- certifique-se de que o envio de e-mail do Magento funciona,
- certifique-se de que o cron do Magento funciona.
Análise OpenAI
A secção Análise OpenAI permite expandir os relatórios com avaliação de risco e recomendações de ação.
Campos disponíveis:
Ativar análise AI,OpenAI API Key,Modelo OpenAI,Contexto máximo para AI.
Como ativar
- ative
Ativar análise AI, - preencha
OpenAI API Key, - guarde a configuração,
- atualize o formulário de configuração,
- selecione o modelo.
Comportamento predefinido
- modelo predefinido:
gpt-4.1-mini, - limite de contexto predefinido:
12000, - valores abaixo de
2000são elevados para12000, - o limite máximo de contexto é
50000.
Se o OpenAI estiver desativado ou faltar a chave, o módulo continua a funcionar e aplica heurísticas locais.
Google Safe Browsing
Se preencher Google Safe Browsing API Key, o módulo irá:
- verificar URL detetados em ficheiros e na base de dados,
- verificar o endereço base da loja.
A ausência da chave não bloqueia as verificações básicas, apenas desativa esta etapa.
Verificação de alterações em ficheiros
filecheck funciona com base num snapshot guardado em:
var/security_scan_hashes.json
Na primeira execução:
- é criado um snapshot,
- ainda não existe comparação de alterações,
- o relatório informa sobre a criação da base de referência.
As execuções seguintes reportam alterações do tipo ADDED, MODIFIED e REMOVED.
São ignorados, entre outros:
var/,generated/,vendor/,pub/static/,node_modules/.
Verificação de malware em ficheiros
malwarecheck verifica os ficheiros da aplicação com base em:
- regras regex com
rule_id, - heurísticas de tokens PHP,
- verificações de URL através de Safe Browsing.
Exemplos de tipos de deteção:
file.obfuscated_eval_chain,file.command_execution_from_request,file.encoded_payload_blob,file.token.decode_execute_chain,file.token.include_from_request,file.inline_svg_or_event_handler.
Nos relatórios, os motivos são apresentados no formato:
[file.encoded_payload_blob] Encoded payload blob detected
Verificação da base de dados
dbcheck analisa tabelas Magento selecionadas:
cms_block,cms_page,core_config_data,email_template,newsletter_template,review_detail,catalog_product_entity_text.
Exemplos de regras:
db.inline_script_tag,db.html_event_handler,db.external_iframe,db.javascript_uri,db.data_uri_executable,db.embedded_svg_payload,db.javascript_dom_redirect.
O conteúdo é previamente normalizado através de:
html_entity_decode,rawurldecode,- normalização de whitespace,
- análise de múltiplas variantes do mesmo conteúdo.
Configuração avançada: allowlists
As allowlists servem para limitar false positives sem desativar todo o módulo.
1. Allowlist de domínios
Campo: kowal_security/general/allowlisted_domains
Formato:
- um domínio por linha, ou
- lista separada por vírgulas.
cdn.example.comstatic.example.org
Efeito:
- os URL destes domínios não serão tratados como suspeitos,
- o Safe Browsing não os irá verificar.
2. Allowlist de ficheiros
Campo: kowal_security/general/allowlisted_file_patterns
Formato:
- caminhos relativos,
- suporte para globs.
app/code/Vendor/Module/Test/*pub/media/custom.js
Efeito: os ficheiros correspondentes ao padrão são totalmente ignorados pela verificação de malware. Esta definição tem um alcance alargado.
3. Allowlist de padrões da base de dados
Campo: kowal_security/general/allowlisted_db_patterns
Formato:
- frases,
- fragmentos HTML ou JS,
- entradas separadas por nova linha ou por vírgulas.
trusted-inline-widgetdata:image/svg+xml
Efeito: um registo da base de dados que contenha esse fragmento é ignorado pela verificação DB. Esta definição
também tem um alcance alargado.
4. Allowlist de regras de ficheiros
Campo: kowal_security/general/allowlisted_file_rules
Formato preferido:
caminho_ou_glob | rule_id
Exemplo:
app/code/Vendor/Module/* | file.encoded_payload_blobpub/media/custom.js | file.javascript_redirect_or_rewrite
Compatibilidade retroativa:
- as entradas antigas pela etiqueta completa da regra continuam a funcionar,
- as novas entradas devem utilizar
rule_id.
Efeito: apenas a regra indicada é silenciada para o caminho indicado, e o restante scan desse ficheiro continua a
funcionar.
5. Allowlist de regras da base de dados
Campo: kowal_security/general/allowlisted_db_rules
Formato preferido:
tabela_ou_* | rule_id
Exemplo:
cms_block | db.inline_script_tag* | db.fetch_or_xhr_loader
Efeito: apenas a regra indicada é silenciada, e as restantes continuam ativas para esse registo ou tabela.
Relatórios
Os relatórios podem conter:
- lista de deteções,
- avaliação de risco,
- indicadores e recomendações,
- candidatos a allowlist após verificação manual,
- configuração allowlist normalizada em JSON.
Sugestões de allowlist nos relatórios
A secção do relatório pode conter entradas do tipo:
- cms_block | db.inline_script_tag | certeza=MEDIUM | alcance=LOW- app/code/Vendor/Module/* | file.encoded_payload_blob | certeza=MEDIUM | alcance=LOW- data:image/svg+xml,
Interpretação:
alcance=LOW - candidato mais seguro,
alcance=HIGH - silenciamento alargado, apenas após verificação rigorosa,
certeza=MEDIUM/HIGH - candidato à configuração mais previsível,
certeza=LOW - exige cautela.
Exportação JSON
O relatório inclui também a secção Configuração allowlist normalizada (JSON). Trata-se de um
conjunto de valores pronto e sem duplicados para copiar para a configuração.
Forma de utilização recomendada
- execute manualmente as três verificações após a instalação,
- trate o primeiro
filecheck como a criação do snapshot,
- analise os relatórios e confirme quais as deteções reais,
- para false positives, utilize primeiro
allowlisted_file_rules e
allowlisted_db_rules,
- só quando necessário utilize
allowlisted_domains, allowlisted_file_patterns e
allowlisted_db_patterns,
- após alterar a configuração, execute novamente a verificação CLI adequada e confirme o resultado.
Notas operacionais
filecheck na primeira execução ainda não reporta alterações como incidente,
- o módulo funciona sem OpenAI e sem Safe Browsing, mas com menor profundidade de análise,
allowlisted_file_patterns e allowlisted_db_patterns têm impacto alargado e
devem ser usados com moderação,
- o formato preferido para allowlists de regras é
rule_id, não a etiqueta textual completa.
Versão: 1.0.27
31.03.2026
Expandimos o módulo Kowal_SecurityScan com novas funcionalidades relacionadas com a análise de ameaças e a administração de relatórios.
Novidades
- Foi adicionada integração com OpenAI para análise de ficheiros alterados e registos suspeitos na base de dados.
- Os relatórios e mensagens de e-mail incluem agora avaliação de risco e ações recomendadas nas áreas de:
- Magento
- servidor
- firewall
- Foi adicionada a configuração OpenAI no painel Magento, incluindo:
- ativação/desativação da análise AI
- chave API
- seleção do modelo
- limite de contexto enviado para análise
Melhorias
- A lista de modelos OpenAI é agora obtida dinamicamente da API e apresentada na configuração como dropdown.
- O conteúdo das mensagens de e-mail foi ampliado com identificação da loja Magento:
- domínio da loja
- URL da loja
- O domínio da loja também é adicionado ao assunto da mensagem, o que facilita a gestão de várias instâncias.
Automação e manutenção
- Foi adicionado um novo cron para limpar entradas antigas da tabela de relatórios.
- O tempo de retenção dos relatórios é configurável em system.xml como número de dias.
Correções técnicas
- A lógica de análise de ficheiros e registos suspeitos foi reorganizada.
- Foi melhorado o tratamento do contexto dos dados enviados para análise AI.
- Foi removido um problema de compilação DI relacionado com a implementação anterior do cliente OpenAI.























