890 likes | 1.06k Views
OWASP AppSec Brazil 2010, Campinas, SP. Tony’s Top 10 Application Artifacts A Computer Forensics Approach to OWASP Top 10. Tony Rodrigues, CISSP, CFCP Provider IT Business Solution inv.forense arroba gmail ponto com. Quem sou ?. Tony Rodrigues, CISSP, CFCP, Security +
E N D
OWASP AppSec Brazil 2010, Campinas, SP Tony’s Top 10 Application Artifacts A Computer Forensics Approach to OWASP Top 10 • Tony Rodrigues, CISSP, CFCP • Provider IT Business Solution • inv.forense arroba gmail ponto com
Quem sou ? • Tony Rodrigues, CISSP, CFCP, Security+ • Gestor/TI e Consultor em Segurança de Informações • Perito/Investigador em Computação Forense • Blog: http://forcomp.blogspot.com
Agenda • Introdução • CF de aplicações • Top 10 – Vestígios • Web Server Log • Banco de Dados • Timelines • Logs do SO • Logs da Aplicação • Monitoramento de Rede • Registry • Sistema de Arquivos • Memória • Documentação • Conclusão
Computação Forense de Aplicações • Incidente já ocorreu ! • Busca descobrir • Quem ? • Quando ? • Como ? • Alcance (DoP) • Analisa os vestígios deixados • Nas aplicações • No seu ambiente
Computação Forense de Aplicações (II) • Destaca-se: • Necessidade de respostas rápidas • Requerem entendimento específico da aplicação • Forte dependência de outras disciplinas forenses • Disco, Memória • Correlação nos resultados • Requisitada em diversas normas • PCI (DSS), SUSEP (285)
Computação Forense de Aplicações (III) • Desafios: • Volume de informações • Ausência de monitoramentos e logs • Pouca disponibilidade do ambiente • Ausência de padrão nos logs dificulta correlação
OWASP Top 10 • Os dez riscos mais críticos para aplicações Web • Top 10 anual • Conceitos • Como verificar as vulnerabilidades • Como evitá-las • Exemplos de vulnerabilidades
Tony’s Top 10 ??? • Relação dos vestígios mais comuns em Forense de Aplicações • Correlacionam-se com os OWASP Top 10 • Ferramentas e técnicas aplicáveis
#1 – Log do WebServer • Registra cada requisição ao Web Server • Formato de texto • Geralmente podem ser configurados quanto às informações a logar • É a porta de entrada dos sistemas Web
#1 – Log do WebServer (IIS) • Formato W3C Extended • Em geral, ficam em LogFiles\W3SVCx • Por default, logam: • Data/Hora, Client IP, Server Info, HTTP Method, URL e Parâmetros, Http Status Code e User Agent • Pode ser habilitado: • Bytes transferidos, Host Header, Cookies, Referrer • Dados do POST nunca são logados
#1 – Log do WebServer (IIS) #Software: Microsoft Internet Information Services 5.0 #Version: 1.0 #Date: 2008-06-20 01:03:15 #Fields:time c-ip cs-method cs-uri-stem cs-uri-query Status version 1:03:15 172.16.22.33 POST /execute.asp sessionid=90198e1525e4b03797f833ff4320af39 200 HTTP/1.0
#1 – Log do WebServer (IIS) #Software: Microsoft Internet Information Services 5.0 #Version: 1.0 #Date: 2005-05-13 07:40:49 #Fields: date time c-ipcs-username s-sitename s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status sc-win32-status sc-bytes cs-bytes time-taken cs-version cs(User-Agent) cs(Cookie) cs(Referer) 2005-05-13 07:40:49 203.164.88.39 - W3SVC235 W2KWEB5B 207.172.13.44 80 GET /rcn.htm - 200 0 1982 381 594 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0;+.NET+CLR+1.1.4322) - -
#1 – Log do WebServer (Apache) • Formato e localização bastante customizáveis • Configuração fica em httpd.conf • Access.log armazena todas as requisições • LogFormat "%h %l %u %t \"%r\" %>s %b“ • Host remoto, logname remoto, usuário remoto, hora, linha do request, status e bytes enviados • Mod_log_config e Mod_logio ampliam informações logadas • Dados do POST nunca são logados
#1 – Log do WebServer (Apache) Usando: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio Gera: 192.168.200.105 - - [24/Nov/2006:11:23:30 -0500] "GET / HTTP/1.1" 200 8054 "http://wooga.drbacchus.com/index.php?" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0" 935 8522
#1 – Log do WebServer - Ferramenta • Microsoft LogParser • Ferramenta free para manipular logs • Suporta vários formatos de log • Usa sintaxe SQL para manipular dados • C:\WINNT\System32\LogFiles\W3SVC1>logparser "SELECT DISTINCT TO_LOWERCASE(cs-uri-stem) AS URL, Count(*) AS Hits FROM ex*.log WHERE sc-status=200 GROUP BY URL ORDER BY URL" -rtp:-1
#1 – Log do WebServer - Investigando SQL Injection: logparser "SELECT date, time,s-ip,c-ip,cs-uri-stem AS query INTO C:\Log_op\sql1.txt FROM C:\W3SVC1\ex*.log WHERE (sc-status>=200 AND sc-status<400) AND (cs-uri-stem LIKE '%--%' OR cs-uri-stem LIKE '%;%' OR cs-uri-stem LIKE'%\'%' OR cs-uri-stem LIKE '%#%') AND (cs-uri-stem LIKE '%|%' OR cs-uri-stem LIKE '%+%' OR cs-uri-stem LIKE '%OR%‘ OR cs-uri-stem LIKE '%AND%' OR cs-uri-stem LIKE '%SELECT%' OR cs-uri-stem LIKE '%UPDATE%‘ OR cs-uri-stem LIKE '%INSERT%' OR … outras keywords de SQL) ORDER BY date, time"
#1 – Log do WebServer - Investigando XSS: logparser "SELECT date, time, s-ip, c-ip, cs-uri-stem AS query INTO C:\Log_op\xss.txt FROM C:\W3SVC1\ex*.log WHERE cs-uri-stem LIKE '%<%' OR cs-uri-stem LIKE '%>%' OR cs-uri-stem LIKE '%\'%' OR cs-uri-stem LIKE '%:%' OR cs-uri-stem LIKE '%\"%' OR cs-uri-stem LIKE '%\--%‘ OR … outras keywords html (script, iframe, por exemplo) ORDER BY date, time"
#1 – Log do WebServer - Investigando Session Mgt: logparser "SELECT date, cs-uri-query, c-ip, count(cs-uri-query) as Ocorrencias INTO C:\Log_op\session.txt FROM C:\W3SVC1\ex*.log WHERE cs-uri-query LIKE '%sessionID%‘ GROUP BY date, cs-uri-query, c-ip “ Suspeite de mesmo sessionID na mesma data e com IPs diferentes
#1 – Log do WebServer - Investigando Envio de informações: logparser "SELECT date, c-ip, max(sc-bytes) as MaiorEnvio INTO C:\Log_op\envio.txt FROM C:\W3SVC1\ex*.log GROUP BY date, c-ip “ Valor de MaiorEnvio destoando dos outros deve ser averiguado. Faça devidos filtros por data
#1 – Log do WebServer - Investigando Redirection/CSRF: logparser "SELECT cs-uri-stem, cs-referer, count() as Ocorrencias INTO C:\Log_op\referer.txt FROM C:\W3SVC1\ex*.log GROUP BY cs-uri-stem, cs-referer HAVING cs-uri-stem <> ‘/paginainicial’“ Em geral, páginas tem um pequeno conjunto específico de referers
#1 – Log do WebServer - Investigando Subqueries: logparser "SELECT c-ip, cs-uri-stem, Count(*) as Hits FROM ex*.log WHERE TO_LOWERCASE(cs-uri-stem) NOT LIKE '%.gif' AND TO_LOWERCASE(cs-uri-stem) NOT LIKE '%.jpg%' AND c-ip IN (SELECT c-ip FROM c:\Log_op\arquivo.txt WHERE sc-status=404) AND sc-status=200 GROUP BY c-ip, cs-uri-stem" -rtp:-1“ Resultados podem ser aninhados
Caso – Ações em Alta • Vários clientes da corretora alegaram que operações foram feitas em suas contas sem sua autorização. Ações de uma empresa desconhecida foram compradas a partir de suas contas • Informações iniciais: • Data/Hora das transações • Log do WebServer (IIS) • O que foi localizado no log: • SessionID passado pela URL (GET) • Vários IPs em datas diferentes com o mesmo SessionID
Caso – Ações em Alta • O que foi localizado na máquina da vítima: • Nenhum trojan ou keylogger • Um email (phishing) explorando sessionfixation • Conclusão • As pessoas lesadas tinham clicado em um email fraudulento que explorava a falha da aplicação. • Vestígios localizados no log do webserver e no computador de uma das vítimas apoiaram a conclusão.
#2 – Banco de Dados • Fundamental nas aplicações Web • Vestígios importantes mesmo sem auditorias ligadas • Alvo comum em ataques • Vestígios em DML e DDL
#2 – Banco de Dados – Ordem de Coleta • Dados voláteis do SGBD • Sessões e Conexões • Requests ativos • Usuários ativos • Memória • Transaction Logs • Arquivos de Base de Dados • Error Logs do SGBD • Logs de eventos do sistema • Arquivos de Trace
#2 – Banco de Dados – Coletando dados voláteis • Ferramenta: sqlcmd • Command line para SQL Server • Permite executar queries no banco de dados e logar os resultados • Outros bancos possuem conceitos similares • Coletando o transaction log ativo: • sp_helpdb
#2 – Banco de Dados – Coletando dados voláteis • Sessões abertas no banco: • select * fromsys.dm_exec_sessions
#2 – Banco de Dados – Coletando dados voláteis • Conexões ativas no banco: • selectc.session_id, c.connect_time, • c.net_transport, c.last_read, • c.last_write, c.client_net_address, • c.local_tcp_port,s.text • from sys.dm_exec_connections c • cross apply sys.dm_exec_sql_text • (c.most_recent_sql_handle) s
#2 – Banco de Dados – Coletando dados voláteis • Contas do banco: • selectname, type_desc, create_date, • modify_date • from sys.sql_logins • order by • create_date, modify_date
#2 – Banco de Dados – Coletando dados voláteis • Informações sobre execuções: • select * fromsys.dm_exec_requests 1.SELECT[text]FROMsys.dm_exec_sql_text Results: 1.Text 2.SELECTAccountDescriptionFROMDimAccountWHEREAccountKey=2
#2 – Banco de Dados – Selects • Informações sobre queries recentemente executadas: QueryPlansCache • Exemplo:
#2 – Banco de Dados – Selects – Plan Cache • Armazenam quantidade considerável de informações • Em um server com 28Gb, pode chegar a 16Gb de cache em um SQL Server 2005 • Podem ficar dias na memória • Dependências: • Demanda de memória do servidor • Mudança em objetos associados • Limpeza manual do cache • Restart do serviço do SQL Server
#2 – Banco de Dados – Selects – Plan Cache • Capturando informações do QueryPlanCache: • Select * • fromsys.dm_exec_cached_plans • crossapplysys.dm_exec_sql_text(plan_handle) • Outras informações no Cache: • Select * fromsys.dm_exec_query_stats • Select * • fromsys.dm_exec_cached_plans • crossapplysys.dm_exec_plan_attributes(plan_handle)
#2 – Banco de Dados – Selects – Plan Cache • Analise queries que apresentem anomalias em relação ao padrão de queries da aplicação
#2 – Banco de Dados – Transaction Log • Transaction Log • Não pode ser desligado como um item de auditoria • Registra DDLs e DMLs aplicadas ao banco • Permite recuperar conteúdos apagados • Permite detectar valores antes e após modificações
#2 – Banco de Dados – Transaction Log • Coletando • - Select * from ::fn_dblog(NULL,NULL) • - Dbcc log (<nome do banco>,3)
#2 – Banco de Dados – Transaction Log • Campos mais importantes:
#2 – Banco de Dados – Transaction Log • RowContents – Estrutura:
#2 – Banco de Dados – Ferramenta: SQLJuicer • Lista transações marcadas no transaction log • Reconstrói da transação mais recente à mais antiga após o último checkpoint • Informa data/hora, operação, campos afetados e valores antes/depois da transação • Dependente do SQL Server e do SQLCmd • Escrita em PERL • HELP ! • Ainda não lista DDLs • Algumas operações ainda não foram mapeadas • Avançado: Independência do SQL Server e dos checkpoints
#2 – Banco de Dados – Outros vestígios • Arquivos de trace default: • Diretório MSSQL\LOG\LOG_#.TRC • Logs de erro do SQL Server • Diretório MSSQL\LOG\ERRORLOG
Caso – Super Promoção de Eletros • Uma operadora de cartões de crédito alertou a uma companhia de vendas de departamento que opera pela Web que estava recebendo de lá repetidas transações fora do perfil • Informações iniciais: • Data/Hora das transações • Log do WebServer (IIS) • Banco de Dados SQL Server • O que foi localizado: • No transaction log havia vários updates, colocando preços ínfimos para os produtos anunciados no site • No query plan cache havia selects na tabela de compras, recuperando números de cartão de crédito • Esses números de cartão foram usados nas compras • Havia várias tentativas seguidas de login do usuário SA assinaladas no SQL Server Error Log • As queries dos updates foram realizadas pelo SA
Caso – Super Promoção de Eletros • Conclusão • A senha do SA foi quebrada e o atacante se logou no banco. Ele veio a partir de uma máquina interna • Ele buscou números de CC para usar e realizou compras pela aplicação, depois de trocar os preços de vários produtos • Depois foi apurado que alguém resgatou os produtos no endereço de entrega usando Engenharia Social
#3 – Timelines • Análise temporal dos eventos • Permitem filtrar por datas próximas ao evento • Envolvem: • Sistema de Arquivos • Eventos do SO • Logs diversos • System Restore Points • Sensível ao sincronismo de relógio !
#3 – Timelines • Ferramentas: • FLS (The SleuthKit) • Log2Timeline • Ex-Tip
#4 – Logs do SO • Registram eventos específicos do SO • Podem ser usados em timelines • Envolvem: • Logs de eventos do Windows • Logs de Atividades Agendadas • SetupApi • Arquivos Prefetch • System Restore Points • Shadow Copy
#4 – Logs do SO • Podem indicar: • Erros de execução em exploits • Execução de programas estranhos ao ambiente • Uso de mídia removível no servidor • Mudança de versão de arquivo
#4 – Logs do SO • Ferramentas: • Evtxdump • Evtxparser • LogParser • Prefetch_info • WFA • SAEX (SetupApi Extractor) • ShadowExplorer • Restore Point Analyser