segunda-feira, 22 de junho de 2015

Logar tentativas de acesso a diretórios protegido pelo .htaccess

Domingão a noite, estava conversando sobre coisas nerds com o Robertux e ele me perguntou se conhecia algum honeypot para logar tentativas de acesso a diretório protegidos com o .htaccess. Logicamente por motivos de segurança as senhas não são salva por padrão nos logs texto que o apache gera.

De cabeça e pesquisando rapidamente não conhecia nada, mas algo que gosto de usar bastante para simular honeypots web é o próprio apache, bem mal configurado as vezes, visto que o foco é coletar infos e não ser seguro.



Pequisando e fazendo alguns testes, consegui montar algo usando basicamente essas 2 configurações:

1-) Criar o .htaccess dentro do diretório protegido com o seguinte conteúdo:

ErrorDocument 401 /logging.php

AuthName "My Password Protected Site"
AuthUserFile /tmp/.htpasswd
AuthType Basic
Require valid-user

# Set REMOTE_USER env variable on 401 ErrorDocument
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} ^401$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},E=REMOTE_USER:%{ENV:REDIRECT_REMOTE_USER}]

No caso, o arquivo que será redirecionado em caso de erro do login estará no root e com nome logging.php.

2-) Criar o logging.php com o seguinte código

if(isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])):
    $fp = fopen('/tmp/htaccess.log', 'a+');
    $ip = $_SERVER['REMOTE_ADDR'];
    $password = $_SERVER['PHP_AUTH_PW'];
    $username = $_SERVER['PHP_AUTH_USER'];
    $time = date('y-m-d/H:i:s');
    $request = $_SERVER['REDIRECT_URL'];
    fwrite($fp, $time."\t".$ip."\t".$request."\t".$username."/".$password."\r\n");
    fclose($fp);
endif;

ob_start();
header("HTTP/1.1 401 Authorization Required",1);
header("Status: 401 Authorization Required",1);
echo '
401 Authorization Required

Authorization Required


This server could not verify that you are authorized to
 access the document
 requested.  Either you supplied the wrong
 credentials (e.g., bad password), or your
 browser doesn\'t understand how to supply
 the credentials required.
';
exit();
?>

No exemplo ele salvará as tentativas no /tmp/htaccess.log .


3-) Lembre-se de mudar o AllowOverride das configurações do diretório root de None para All, visto que ele vem como None por motivos de segurança

        Options Indexes FollowSymLinks
        AllowOverride all
        Require all granted
O resultado no /tmp/htaccess.log (fiz um update no script acima que salva o IP source também) será:

15-06-22/14:32:20    127.0.0.1    /honey/    admin/123
15-06-22/14:32:20    127.0.0.1    /honey/    admin/lalala
15-06-22/14:32:20    127.0.0.1    /honey/    admin/1234546
15-06-22/14:32:20    127.0.0.1    /honey/    admin/abc
15-06-22/14:32:20    127.0.0.1    /honey/    admin/test
15-06-22/14:32:20    127.0.0.1    /honey/    admin/root
15-06-22/14:32:20    127.0.0.1    /honey/    admin/teste
15-06-22/14:32:20    127.0.0.1    /honey/    admin/admin


Usei de referência essa link - http://serverfault.com/questions/460765/log-invalid-login-attempts-htpasswd

Lembrando que isso é pra função de honeypot, código pode (ou não) conter falhas, simplesmente fiz algo funcional.

Alguém conhece algo melhor ? Sugestões ? Subirei depois isso em algum node pra ver se consigo infos legais e logicamente compartilhar.

Happy Detection!

Sp0oKeR Labs

Nenhum comentário: