Académique Documents
Professionnel Documents
Culture Documents
Ataques de injeo
A OWASP Top 10 listas Injection e Cross-Site Scripting (XSS) como os riscos mais
comuns de segurana para aplicaes web. Na verdade, eles andam de mos dadas
porque os ataques XSS so contingentes em um ataque de injeo de sucesso. Embora
esta seja a parceria mais bvia, Injeo no se limita apenas a permitir XSS.
A injeo toda uma classe de ataques que dependem de injetar dados em uma aplicao
web, a fim de facilitar a execuo ou interpretao de dados maliciosos de uma forma
inesperada. Exemplos de ataques dentro desta classe incluem Cross-Site Scripting (XSS),
SQL Injection, injeo de cabealho, Log Injeo e Path Full Disclosure. Eu estou
arranhando a superfcie aqui.
Esta classe de ataques bicho-papo de cada programador. Eles so os ataques mais
comuns e bem sucedidos na internet devido a seus inmeros tipos, a superfcie de ataque
grande, e s vezes a complexidade necessria para proteger contra eles. Todas as
aplicaes precisam de dados de algum lugar, a fim de funcionar. Cross-Site Scripting e UI
tutela so, em particular, to comum que dediquei o prximo captulo a eles e estes so
geralmente classificados separadamente dos ataques de injeo de sua prpria classe
dada a sua importncia.
OWASP usa a seguinte definio para ataques de injeo:
Falhas na injeo, tais como SQL, OS, e injeo LDAP, ocorrem quando os dados no
confivel enviado para um intrprete como parte de um comando ou consulta. Dados
hostis do atacante pode enganar o interpretador para executar comandos no
intencionais ou aceder a dados no autorizados.
SQL Injection
De longe a forma mais comum de ataque de injeo o infame ataque SQL Injection.
Injees de SQL no so apenas extremamente comum, mas tambm muito mortal. Eu
no posso enfatizar o suficiente a importncia de compreender este ataque, as condies
em que pode ser realizado com sucesso e os passos necessrios para se defender contra
ele.
Injees SQL operar atravs da injeo de dados em um appplication web que ento
utilizado em consultas SQL. Os dados geralmente vem de entrada no confivel, como
um formulrio web. No entanto, tambm possvel que os dados vm de outra fonte,
incluindo o prprio banco de dados. Os programadores muitas vezes confiar em dados de
seu prprio banco de dados acreditando ser completamente seguro, sem perceber que
ser seguro para uma utilizao particular no significa que ele seguro para todos os
outros usos posteriores. Os dados de um banco de dados deve ser tratado como no
confivel, a menos que se prove o contrrio, por exemplo, atravs de processos de
validao.
Se for bem sucedido, uma injeo SQL pode manipular a consulta SQL a ser alvo de
realizar uma operao de banco de dados no destinados pelo programador.
Considere a seguinte consulta:
O texto acima tem uma srie de coisas erradas com ele. Primeiro de tudo, ns no
validaram o contedo dos dados POST para garantir que ele um user_id vlido. Em
segundo lugar, estamos a permitir que uma fonte no confivel para ns que user_id usar
dizer - um invasor pode definir qualquer vlido user_id eles queriam. Talvez o user_id
estava contido em um campo oculto forma que acreditvamos seguro porque o
formulrio web no iria deix-lo ser editado (esquecendo-se que os atacantes podem
enviar qualquer coisa). Em terceiro lugar, ns no escaparam a user_id ou passou para a
consulta como um parmetro de limite que tambm permite que o invasor injetar cordas
arbitrrias que podem manipular a consulta SQL dado que no conseguiram valid-lo em
primeiro lugar.
O acima de trs falhas so muito comuns em aplicaes web.
Como a confiar dados do banco de dados, imagine que temos procurado por transaes
utilizando um campo user_name. Os nomes so razoavelmente amplo em escopo e
podem incluir citaes. concebvel que um invasor pode armazenar uma seqncia de
injeo SQL dentro de um nome de usurio. Quando reutilizar essa string em uma
consulta posterior, seria ento manipular a string de consulta, se considerado o banco de
dados de uma fonte confivel de dados e no conseguiu escapar corretamente ou
vincul-lo.
Outro fator de SQL Injection para prestar ateno que o armazenamento persistente
no precisa sempre ocorre no servidor. HTML5 suporta o uso de bancos de dados do
lado do cliente, que pode ser consultado por meio do SQL com a assistncia de
Javascript. H duas APIs que facilitam este: WebSQL e IndexedDB. WebSQL foi
preterido pelo W3C em 2010 e suportado pelos navegadores WebKit usando SQLite
no backend. suporte no WebKit provavelmente continuar para fins de
compatibilidade com verses anteriores, embora j no recomendado para uso. Como o
prprio nome sugere, ele aceita consultas SQL um pode, portanto, ser suscetveis a
ataques de injeo SQL. IndexedDB a alternativa mais recente, mas um banco de
dados NoSQL (ou seja, no requer o uso de consultas SQL).
Vazamento de Informaes
Divulgao de dados armazenados
Manipulao de dados armazenados
Ignorando Controles de autorizao
Validao
Captulo 2 cobriu validao de entrada e, como eu, em seguida, observou, devemos
assumir que todos os dados que no sejam criados explicitamente no cdigo fonte do
PHP do atual solicitao deve ser considerado no confivel. Valid-lo rigorosamente e
rejeitar todos os dados falhando. No tente "consertar" os dados, a menos que fazendo
pequenas alteraes cosmticas para o seu formato.
Erros de validao comuns podem incluir a validao dos dados para a sua utilizao em
curso (por exemplo, para fins de clculo de exibio ou) e no representando as
necessidades de validao dos campos de tabela de banco de dados que os dados sero
eventualmente armazenados para.
Escapando
Usando a extenso mysqli, voc pode escapar todos os dados que esto sendo includos
em uma consulta SQL usando a funo mysqli_real_escape_string (). A extenso pgsql
para PostgresSQL oferece a pg_escape_bytea (), pg_escape_identifier (), pg_escape_literal
() e pg_escape_string () funes. A mssql (Microsoft SQL Server) no oferece funes de
escape e os addslashes comumente aconselhados () abordagem insuficiente - voc
realmente precisa de uma funo personalizada [
http://stackoverflow.com/questions/574805/how-to-escape-strings-in -mssql-usandophp ].
S para lhe dar ainda mais de uma dor de cabea, voc nunca pode deixar de escapar de
dados que entram uma consulta SQL. Um deslize, e possivelmente ser vulnervel a SQL
Injection.
Pelas razes acima expostas, Fugir no realmente recomendado. Ele vai fazer em uma
pitada e pode ser necessrio se uma biblioteca de banco de dados que voc usa para
abstrao permite a configurao de nu consultas SQL ou partes de consulta sem impor
parmetro obrigatrio. Caso contrrio, voc deve apenas evitar a necessidade de escapar
completamente. confuso, propenso a erros e difere por extenso de banco de dados.
Incluso de arquivo
O alvo mais bvio para um ataque de injeo de cdigo so o include (), include_once (),
require () e require_once () funes. Se a entrada no confivel permitido para
determinar o parmetro de caminho passado para essas funes possvel influenciar
qual arquivo local ser includo. Deve notar-se que o ficheiro no necessita de ser
includo um ficheiro real PHP; qualquer arquivo includo que capaz de transportar
dados textuais (por exemplo, quase nada) permitido.
O parmetro de caminho tambm pode ser vulnervel a uma passagem de diretrio ou
incluso remota de arquivos. Usando a seqncia de ../ .. ou (ponto-ponto-slash) em um
caminho permite que um atacante para navegar para quase qualquer arquivo acessvel
para o processo PHP. As funes acima tambm aceitar um URL na configurao padro
do PHP, a menos que XXX desativado.
Avaliao
Funo do PHP eval () aceita uma string de cdigo PHP para ser executado.
Misconfiguration servidor
Injeo de Comandos
Exemplos de Injeco de comando
Defesas contra injeo de comandos
Claro, o ponto aqui que um invasor pode anexar todos os tipos de entradas de log. Eles
tambm podem injetar vetores XSS, e at mesmo injectar caracteres para mexer com a
exibio das entradas de log em um console.
Ataques mais nefastas usando Log Injeo pode tentar construir em um ataque de
passagem de diretrio para exibir um registro em um navegador. Nas circunstncias
certas, injetando cdigo PHP em uma mensagem de log e de chamada para o arquivo de
log no navegador pode levar a uma forma bem sucedida de Cdigo de injeco que pode
ser cuidadosamente formatados e executados pela vontade do atacante. Disse o
suficiente l. Se um invasor pode executar PHP no servidor, game over e tempo para
espero que voc tenha suficiente Defesa em profundidade para minimizar os danos.
include_path
configuradas
funes como
file_get_contents ()
include ()
DOMDocument :: load ()
pblicas /
isto ,
/ var / www
. Como esse exemplo simples ilustra, um atacante pode usar isso para
pblico /
servidor web.
Claro, travessias de caminho no so apenas para o retrocesso. Um invasor tambm
pode injetar novos elementos de caminho para acessar diretrios filho que podem ser
inacessveis a partir de um navegador, por exemplo, devido a uma
directiva de um
.htaccess
negar de todo
Injeo XML
Apesar do advento do JSON como um meio de comunicao de dados leves entre um
servidor e cliente, XML continua a ser uma alternativa vivel e popular que muitas
vezes apoiados em paralelo para JSON por APIs de servios web. Fora de servios da
Web, XML a base de troca de uma diversidade de dados usando esquemas XML, tais
como RSS, Atom, SOAP e RDF, para citar apenas alguns dos padres mais comuns.
XML to onipresente que ele tambm pode ser encontrado em uso no servidor de
aplicativos web, em navegadores como o formato de escolha para solicitaes e
respostas XMLHttpRequest, e em extenses do navegador. Dada a sua utilizao
generalizada, XML pode apresentar um alvo atraente para ataques de injeo XML
devido a sua popularidade eo tratamento predefinido de XML permitido por
analisadores de XML comuns, tais como libxml2, que usado pelo PHP no DOM ,
SimpleXML
XMLReader
troca XML, deve-se considerar a XML como um formato de solicitao, onde os usurios
autenticados, atravs de um ataque Cross-Site Scripting, pode ser a apresentao de
XML que est realmente escrito por um invasor.
& lt;
& apos;
Um documento XML com esta definio de entidade podem agora referem-se ao &
inofensivo; entidade em qualquer lugar onde so permitidos entidades:
Um parser XML como PHP DOM, ao interpretar este XML, ir processar esta entidade
personalizada, logo que os documentos cargas para que solicitar o texto relevante
retornar o seguinte:
Este resultado completamente inofensivo
Entidades personalizadas, obviamente, ter um benefcio em representar texto repetitivo
e XML com mais curtos entidades nomeadas. Na verdade no to incomum em que o
XML deve seguir uma gramtica particular e onde entidades personalizadas fazem edio
mais simples. No entanto, de acordo com o nosso tema de no confiar insumos externos,
precisamos ter muito cuidado quanto ao que tudo o XML nossa aplicao est
consumindo realmente at. Por exemplo, este definitivamente no da variedade
inofensiva:
& inofensivo;
vez que todos esses pedidos so feitos localmente, permite revelar o contedo de todos
os arquivos que o aplicativo tenha acesso de leitura. Isso permitiria que os atacantes para
examinar arquivos que no esto publicamente disponveis devem a entidade expandiu
ser includo na sada do aplicativo. O contedo do arquivo que pode ser divulgados neste
so significativamente limitadas - devem ser XML si ou um formato que no ir causar
anlise de XML para gerar erros. Essa restrio pode, todavia, ser completamente
ignorado em PHP:
PHP permite o acesso a um wrapper PHP na forma URI como um dos protocolos aceitos
pelas funes do sistema de arquivos comuns, como file_get_contents () , require () ,
require_once ()
file ()
copy ()
nmero de filtros que podem ser executadas em um determinado recurso para que os
resultados so retornados da chamada de funo. No caso acima, usamos o
convert.base-64-codificar
O que isto significa que um atacante, atravs de uma vulnerabilidade XXE, pode ler
qualquer arquivo acessvel em PHP, independentemente do seu formato textual. Tudo o
atacante precisa fazer base64 decodificar a sada que recebem a partir da aplicao e
podem dissecar o contedo de uma grande variedade de arquivos no-pblicas com
impunidade. Enquanto isso no em si diretamente causando dano aos usurios finais
ou backend do aplicativo, ele vai permitir que os atacantes aprender muito sobre o
aplicativo que est tentando mapear o que pode permitir que estes descubram outras
vulnerabilidades com um mnimo de esforo e risco de descoberta .
Se a visualizao log eram restritos a solicitaes locais, em seguida, o atacante pode ser
capaz de agarrar com xito os logs de qualquer maneira. O mesmo raciocnio se aplica a
interfaces de manuteno ou administrao, cujo acesso restrito desta forma.
Quase qualquer coisa que pode ditar a forma como os recursos do servidor so utilizados
poderia viabilizar ser usado para gerar um ataque DOS. Com XML Entidade Externa
Injection, um invasor tem acesso para fazer solicitaes HTTP arbitrrias que podem ser
utilizados para esgotar os recursos do servidor sob as condies certas.
Veja abaixo tambm para outros potenciais DOS usa de ataques XXE em termos de XML
Entidade Expanses.
libxml2
DOM
SimpleXML
XMLReader
todos dependem
libxml_disable_entity_loader ()
funo
DOCTYPE
Voc precisaria fazer isso para todas as operaes que envolvem XML carregamento de
uma string, arquivo ou URI remoto.
Sempre que as entidades externas nunca so exigidos pelo aplicativo ou para a maioria
dos seus pedidos, voc pode simplesmente desativar o carregamento de recursos
externos por completo em uma base mais global que, na maioria dos casos, ser muito
mais prefervel a localizao de todas as instncias de carga XML, tendo em mente muitas
bibliotecas so provavelmente escrito com inata XXE vulnerabilidades presentes:
libxml_disable_entity_loader ( verdadeiro );
VERDADEIRO
Este
libxml2
bibliotecas PHP que analisam ou de outra forma lidar com XML ter de ser avaliada para
localizar seu "off" para a resoluo de entidade externa.
No caso em que o tipo anterior de comutao comportamento no possvel, em
alternativa, possvel verificar se um documento XML declara uma
DOCTYPE
. Se isso
/ **
* Tentativa uma rapidinha
Tambm vale a pena considerando que prefervel a simplesmente descartar dados que
suspeitamos o resultado de um ataque em vez de continuar a process-lo ainda mais.
Por que continuar a se envolver com algo que mostra todos os sinais de ser perigoso?
Portanto, a fuso das duas etapas a partir de cima tem a vantagem de ignorar dados de
forma proativa, obviamente ruins ao mesmo tempo proteger voc, no caso de descarte de
dados est alm do seu controle (por exemplo, bibliotecas 3rd-party). Descartando os
dados inteiramente se torna muito mais atraente para uma outra razo afirmado
anteriormente -
libxml_disable_entity_loader ()
no desabilita entidades
personalizada no do XML
DOCTYPE
muito maior na memria do que o tamanho original do XML sugeriria permitindo assim
que estes ataques para consumir recursos essenciais para manter a memria servidor
web funcionando de maneira eficiente. Este ataque tambm se aplica ao XMLserializao de HTML5 que no atualmente reconhecido como HTML pelo
libxml2
extenso.
Onde a expanso entidade genrica requer uma entrada XML grande, expanso entidade
recursiva embala mais punch por byte de tamanho de entrada. Ele conta com o parser
XML para resolver exponencialmente conjuntos de pequenas entidades de tal forma que
seus exponenciais natureza explode de um tamanho muito menor de entrada XML em
algo substancialmente maior. bastante apropriado que esta abordagem tambm
comumente chamado de "bomba XML" ou "Billion Risos Attack".
A abordagem da bomba XML no requer um grande tamanho XML que pode ser limitada
pela aplicao. exponencial de resolver os resultados entidades em uma expanso
texto final que de 2 ^ 100 vezes o tamanho do x0 &; valor entidade. Isso um boom
muito grande e devastador!
O acima tambm permite uma abordagem mais tortuoso para executar um ataque DOS,
caso as solicitaes remotas ser adaptado para direcionar a aplicao local ou qualquer
outro compartilhando seus recursos de servidor de aplicativos. Isso pode levar a um
ataque DOS auto-infligido, onde tenta resolver entidades externas pelo analisador XML
pode desencadear inmeros pedidos para aplicativos hospedados localmente
consumindo assim uma propostion ainda maior de recursos do servidor. Este mtodo
pode, portanto, ser usado para amplificar o impacto da nossa discusso anterior sobre o
uso de XML Entidade Externa Injection (XXE) ataques para executar um ataque DOS.
libxml2
libxml_disable_entity_loader ( verdadeiro );
DOMDocument :: $ substituteEntities
qualquer efeito de melhoria. Parece que est preso com o uso de um conjunto de
solues alternativas em vez improvisado.
No entanto,
libxml2
DOCTYPE
DOCTYPE
VERDADEIRO
libxml_disable_entity_loader
libxml2
esta pode ser a nica defesa possvel, a menos que analisador tem um
conjunto abrangente de opes que controlam como as entidades podem ser resolvidos.
Onde voc est a inteno de usar
uma verificado
DOMDocument
Injeo de SOAP
TBD
SimpleXML
objeto usando o
funo.