Segurança do Apache - lista todos os manipuladores / ações possíveis

3

Para garantir que não haja falhas de segurança que possam ser exploradas via .htaccess, como podemos ver todos os manipuladores possíveis que o Apache pode usar por meio de diretivas como SetHanlder e AddHandler .

Eu sei que posso encontrar alguns olhando para a saída de mod_info ou grepping através de arquivos conf (que foi uma abordagem que encontrei ao tentar encontrar uma resposta para essa pergunta), mas isso não significa que não há manipuladores disponíveis que não estão listados dessa forma. Eu imagino que eu poderia baixar e pesquisar através de todo o código fonte do Apache e de cada módulo que está carregado e ver o que eles estão registrando, mas existe uma maneira melhor?

Uma solução rápida seria não permitir AddHandler e SetHandler em .htaccess, mas isso tem suas desvantagens. Por exemplo, o Drupal tem um caso de uso válido para a diretiva SetHandler, pois o usa como parte da defesa em profundidade para impedir que scripts PHP sejam executados se alguém de alguma forma conseguir enviá-los para o site por meio de um uploader de arquivos.

Aqui estão alguns exemplos do que estou me referindo:

AddHandler server-parsed .shtml

SetHandler server-info

AddHandler application/x-httpd-php5 .php

Aqui está o caso de uso do Drupal em sites / default / files / .htaccess se alguém estiver interessado:

# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
  # Override the handler again if we're run later in the evaluation list.
  SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>

EDIT 30 de julho de 2015: Esta não é uma resposta exaustiva, mas no caso de ser útil para qualquer pessoa, encontrei alguns manipuladores listados no topo de link e também lê que manipuladores personalizados podem ser criados pela diretiva Action (veja link ).

EDIT 1 de setembro de 2015: Gostaria de saber se há alguma maneira de despejar a memória de um processo httpd e encontrar os nomes dos manipuladores lá. Eu tentei isso usando o gcore, mas não tive sucesso (embora eu nunca tenha usado isso antes e recebi um aviso ao fazer isso, então não tenho certeza se estou fazendo algo errado).

    
por sa289 30.07.2015 / 18:57

2 respostas

1

Não é possível, desculpe. De acordo com minhas declarações no Guia de módulos do Apache :

Thus, the server itself does not presume to know which module is responsible for handling a specific request, and will ask each module whether they have an interest in a given request or not. It is then up to each module to either gently decline serving a request, accept serving it or flat out deny the request from being served, as authentication/authorization modules do

Tudo é tratado no momento da solicitação, conforme o design, portanto, não é possível percorrer os módulos ou descobrir isso. Você precisa ler o código-fonte de cada módulo para aprender sobre os nomes dos manipuladores.

Sua melhor aposta é criar um módulo que verifique o manipulador atualmente definido para uma solicitação em relação a um conjunto de nomes de manipuladores aceitos e altere-o para padrão, caso não esteja presente na lista.

    
por 02.09.2015 / 22:06
1

Tenho certeza de que não há uma maneira já implementada de retornar uma lista de ações, scripts, etc. que seu manipulador poderia mapear as solicitações.

Pode ser possível escrever um módulo do apache que possa retornar essas informações, mas seria necessário explorar o código do apache para entender o que é possível lá.

    
por 31.07.2015 / 13:15