como modificar a ação da regra modsecurity para apenas um parâmetro?

1

Eu tenho uma segurança moderada com o Conjunto de regras principais. E eu tenho POST-request com 3 parâmetros: Par1="XML codificado em base64" & Par2="url" & Par3="hash".

Eu quero modificar regras de CRS para base64Decode somente Par1 e usar Par2 & Par3 'como está'.

Eu tentei usar a diretiva SecRuleUpdateActionById , mas é necessário escrever uma diretiva para cada regra no CRS. A diretiva SecDefaultAction também não funciona, porque todas as regras CRS possuem "t: none" que substitui as ações padrão. Também encontrei a ação multiMatch , mas acho que isso causará muitos falsos positivos base64-string.

Existe alguma maneira de atualizar ações para várias regras sem reescrever essas regras?

    
por Vladimir 21.10.2016 / 10:39

2 respostas

2

Eu encontrei uma solução. Eu decidi pegar o valor do parâmetro Par1, base64-decodificá-lo e gravar em um "TX"

1.1. use lua:

  • crie o arquivo extract_param.lua com um conteúdo semelhante:

    function main()
        -- Retrieve par1
        local par1 = m.getvar("ARGS.Par1", {"base64DecodeExt"});
        if par1 == nil then
            m.log(3, "no Par1 in request.");
            return nil;
        end
        m.log(3, "Par1 base64-decoded:" ..par1.. ".");
        m.setvar("TX.Par1",par1);
    return nil;
    end
    
  • adicione SecRuleScript directive antes de o CRS ser carregado:

    SecRuleScript path/to/script/extract_param.lua phase:2,log
    

1.2. use a funcionalidade padrão "setvar". Esse método é mais fácil, eu uso. Mas eu achei ( aqui ) mais tarde e decidi contar sobre lua também.

  • adicione a seguinte regra antes de o CRS ser carregado:

    SecRule ARGS:par1 "^(.*)$" "log, pass, id:22, phase:2, t:base64DecodeExt, setvar:tx.par1=%{MATCHED_VAR}"
    

2. Adicione o grupo de SecRuleUpdateTargetByTag diretivas após CRS é carregado:

SecRuleUpdateTargetByTag 'OWASP_CRS/WEB_ATTACK/SQL_INJECTION' "!ARGS:par1|TX:par1"
    
por 09.11.2016 / 10:14
0

Não é fácil atualizar a ação de várias regras do CRS, além de listar cada ID de regra pelas razões fornecidas por você.

É possível atualizar as variáveis correspondidas para um grupo de regras usando SecRuleUpdateTargetByTag , mas não a ação como não há SecRuleUpdateActionByTag (apenas um SecRuleUpdateActionById ), mas para ser honesto, mesmo se houvesse o fato de você querer apenas transformar 1 de suas variáveis causará problemas. E eu concordo que a correspondência múltipla provavelmente não é a resposta certa aqui, mesmo que você possa fazer isso.

Em última análise, o que recomendo é:

  1. Deixe as regras como estão e basicamente ignore a variável base1 par1 para o CRS (note que você pode precisar atualizar SOME rules para ignorar este parâmetro para certas regras se a codificação base64 estiver criando falsos positivos).

  2. Decida quais são os vetores de ataque para sua variável XML par1 e grave (ou copie do CRS) um subconjunto menor de regras apenas para isso, com uma transformação base64Decode. Mesmo quando decodificado o base64, eu imagino que o XML poderia criar muitos falsos positivos ainda, então você provavelmente não quer executar o CRS completo de qualquer forma.

Boa sorte!

    
por 28.10.2016 / 00:32