CFMX Sandbox Security para ambientes compartilhados
Aqui você encontra uma versão atualizada para o ColdFusion MX 7
Alex H�bner,
http://www.cfgigolo.com
alex@hubner.org.br
Macromedia
Certified Professional
Freq�entemente
me deparo com provedores de hospedagem que oferecem ColdFusion
Certamente
existem empresas e pessoas oferecendo um servi�o de hospedagem ColdFusion competente e de qualidade, contudo muitos s�o
inaceit�veis. Costumo separar estes em tr�s tipos: o primeiro, dos totalmente
irrespons�veis, que n�o conhecem nada do produto e o instalam/oferecem assim
mesmo. O segundo, dos que instalam e oferecem, mas �limpam as m�os� quando algo
sai errado dizendo: �ColdFusion � inseguro, inst�vel, bl�,
bl�, muito comum em locais cuja cultura tecnol�gica � preconceituosa e
estagnada. O terceiro e �ltimo � composto por aqueles que conhecem um pouco da
plataforma, entretanto n�o de forma satisfat�ria ou completa. Desconhecem, por
exemplo, a necessidade de se configurar sandboxes. Por isso, num suspiro de bom
senso e sanidade, optam simplesmente por desabilitar tags �sens�veis� tais como
CFFILE, CFDIRECTORY, entre outras, acreditando que assim estar�o seguros. Ledo
engano. Leia este post, apenas como exemplo: http://www.cfgigolo.com/archives/2002/11/pintando_e_bord.html
Esta
situa��o � embara�osa para todos os desenvolvedores ColdFusion
que se v�m marginalizados e � merc� de provedores de hospedagem ruins e de
segunda m�o, alguns que sequer possuem uma licen�a oficial do software.
O
objetivo deste documento n�o � ensinar administra��o de ColdFusion
Server, muito menos seguran�a
Tamb�m
n�o � objetivo deste documento aprofundar-se em detalhes t�cnicos e explica��es
pormenorizadas. Isso certamente daria um livro, n�o um documento de poucas p�ginas.
Encare-o como uma esp�cie de �receita de bolo�. Lembre-se que este documento
n�o necessariamente ser� adequado para o seu caso. Atente � descri��o do
ambiente em que estou trabalhando (par�grafo acima) e adapte/use tais
informa��es de acordo com seu julgamento e experi�ncia.
Estou
aberto a responder quaisquer d�vidas e especificidades deste documento na lista
de discuss�o ColdFusion Brasil � http://www.coldfusion.org.br. Cr�ticas,
sugest�es de melhoria e corre��es para este tamb�m s�o bem vindas. Cadastre-se
na lista e poste sua d�vida/cr�tica/sugest�o/corre��o para que todos possam se
beneficiar das respostas (n�o apenas minhas).
Algo
que precisa estar claro desde j�: uma hospedagem compartilhada nunca ser� 100%
segura. Por mais que se diga o contr�rio, o fato � que compartilhando recursos
do servidor, riscos inerentes tamb�m ser�o, por assim dizer,
�compartilhados�. Isso porqu� em tal ambiente
n�o existe isolamento total entre usu�rios e aplica��es. Qualquer aplica��o
pode causar interfer�ncia numa outra aplica��o e no servidor todo. Um exemplo
cl�ssico s�o ataques do tipo DoS (n�o confundir com
DDoS), propositais ou muitas vezes n�o - alguns programadores �m�os pesada�
conseguem criar monstros devoradores de CPU e mem�ria sem perceber - onde um
script ou uma aplica��o inteira p�e o processador em apuros, comprometendo a
performance de todo o servidor.
Caso
voc� n�o abra m�o de ter um ambiente absolutamente seguro, dever� partir para
uma solu��o dedicada ou semi-dedicada. O ColdFusion MX oferece a possibilidade de se ter, numa mesma
m�quina f�sica, m�ltiplas inst�ncias de seu servi�o rodando de forma isolada
entre elas. Trata-se de um isolamento tanto em termos de seguran�a quanto em
termos de performance j� que nesta modalidade, cada
inst�ncia tem sua JVM pr�pria. Para os que n�o conhecem Java, o termo JVM � uma
abrevia��o para Java Virtual Machine, onde o software cria uma abstra��o
pr�pria que, grosso modo, funciona como se fosse uma m�quina exclusiva e
separada.
Para
esta abordagem existe um custo maior tanto operacionalmente quanto em termos de
consumo de recursos da m�quina. Trata-se, portanto de uma excelente op��o para
planos �semidedicados� ou mesmo �dedicados�,
ainda n�o oferecidos no Brasil (veja que boa oportunidade!) e em raros casos no
exterior. Por isso n�o iremos trat�-la neste documento.
Muitos
n�o sabem, mas existem duas vers�es comerciais do ColdFusion
Server, uma mais barata, apelidada de Standard (tamb�m conhecida como
Professional na vers�o 6.0) e outra, mais cara, chamada Enterprise. As
diferen�as? Para quem desenvolve nenhuma uma vez que o suporte a CFML �
id�ntico. No entanto, para quem hospeda, as diferen�as s�o muito importantes e
significativas. O ColdFusion Enterprise oferece
suporte a um n�mero maior de plataformas e bancos de dados. Adicionalmente, a
vers�o Enterprise suporta a instala��o de m�ltiplas inst�ncias (mencionadas no
item anterior), sandboxes (contextos) de seguran�a - indispens�veis numa
hospedagem compartilhada - e otimiza��es especiais
para o envio de grande quantidade de e-mails. Inclui ainda uma vers�o completa
do famoso servidor J2EE da Macromedia, o JRun e alguns
outros recursos interessantes. A tabela comparativa das diferen�as entre as
vers�es pode ser encontrada aqui no seguinte link: http://www.macromedia.com/software/coldfusion/productinfo/product_editions/.
Se voc� est� oferecendo ColdFusion MX em ambiente
compartilhado, sua escolha natural deve ser pela vers�o Enterprise.
Infelizmente muitos provedores, desconhecendo as diferen�as (ou n�o), optam por
comprar a vers�o "mais barata", Standard.
Lembre-se de que o barato sai caro: uma hospedagem compartilhada na vers�o Standard � arriscada.
Normalmente
(repetindo: normalmente) desenvolvedores CFML s�o bem intencionados e n�o
perdem tempo com tentativas de invas�o e ou outras atividades virtuais
il�citas. Al�m disso, para explorar vulnerabilidades usando scripts CFML �
necess�rio que se tenha uma conta no servidor, o que faz do atacante quase
obrigatoriamente um cliente. Isso j� � motivo (ou n�o) para deixar os mal
intencionados do lado de fora, uma vez que prejudicando o servidor ele estar�
prejudicando sua pr�pria conta e aplica��o. Por�m nunca confie na boa �ndole
(ou capacidade de fazer besteira) de todos eles.
Quem
tem gato em casa (especialmente em apartamento) sabe que eles precisam (e
gostam) de usar uma caixa de areia (ou de granulado especial) para fazer suas
necessidades e enterr�-las de forma higi�nica. O conceito de sandboxes no ColdFusion pode ser explicado, de forma rudimentar, fazendo
uma analogia � caixa de areia dos gatos. Nesta caixa isolada seus usu�rios
poder�o fazer o que bem desejarem, de forma �higi�nica�, sem sujar ou estragar
o que estiver ao redor. O que isto significa na pr�tica? Significa que tags
como CFFILE, CFDIRECTORY e outras que, potencialmente podem causar
estragos, podem ser habilitadas sem qualquer tipo de problema. O usu�rio de uma
sandbox devidamente configurada, n�o ter� permiss�o para �sujar� a conta do
vizinho ou qualquer outro local. Ele n�o vai conseguir fazer upload de
arquivos, deletar, copiar ou criar diret�r ios fora da sua
pasta raiz, da sua sandbox. Por�m existem algumas pequenas exce��es, mais �
frente vamos falar delas.
Torna-se
claro portanto que toda e qualquer hospedagem
compartilhada deve fazer uso de sandboxes. Por isso pergunto: sandbox security
j� est� habilitada no seu servidor? N�o? Ent�o vamos habilitar:
Uma
vez completado os passos acima, voc� deve entrar novamente no ColdFusion administrator e verificar se ele criou os dois
diret�rios padr�es e necess�rios. Veja a imagem abaixo:
Estes
dois diret�rios (ColdFusion CFIDE e ColdFusion
WEB-INF) s�o necess�rios para que o ColdFusion funcione perfeitamente. Por isso
eles n�o podem ser removidos (note a aus�ncia do �cone de deletar lado). �
importante saber que a entrada que aponta para o diret�rio CFIDE deve
corresponder ao diret�rio onde est�o os arquivos da aplica��o �ColdFusion Administrator�. Se a pasta CFIDE estiver em seu
local de instala��o padr�o o CFMX ir� configur�-la corretamente. Entretanto,
caso voc� tenha trocado a localiza��o da pasta CFIDE ser� necess�rio criar uma
nova entrada de sandbox security para esta. Isso pode ser feito de forma
simples: na primeira caixa de di�logo (�Add Security Sandbox�), selecione a
op��o j� existente para a pasta CFIDE em �New Sandbox, or pick one to copy
from�. Feito isso, especifique (voc� pode usar o bot�o �browse server�) a localiza��o da pasta CFIDE que voc� est� usando e
clique em �Add�.
Antes
de come�armos, � necess�rio fazer uma observa��o sobre uma pr�tica muito comum
em provedores de hospedagem compartilhados: muitas vezes o nome de pastas base
de usu�rios s�o definidas usando uma sintaxe tal como:
�d:\Inetpub\dominio.com.br�. Esta sintaxe � desaconselh�vel, pois utiliza
caracteres especiais e h� casos onde esta sintaxe ser� lida e interpretada pelo
enginee do CF como sendo �d:\Inetpub\dominio\com\br�.
O
processo de cria��o de sandboxes � bastante simples. Uma sandbox � criada
sempre sob uma pasta base ou raiz, normalmente a pasta base do usu�rio no
servidor. Para exemplificar imagine o seguinte cen�rio:
Diante
de tal cen�rio, o processo de cria��o consiste nesses dois passos simples:
a.
Em �Add Security Sandbox�, especifique o caminho completo para a pasta
base do usu�rio, no nosso caso �d:\sites\alexhubner�;
b.
Clique no bot�o �Add�.
Feito
isso, a nova sandbox, representada pelo caminho da pasta base, dever� aparecer
na listagem de sandboxes existentes:
O
pr�ximo passo ser� configurar em detalhes esta sandbox. � aqui que este
documento come�a a fazer sentido na medida em que as configura��es que
proponho, daqui em diante, foram pensadas visando a melhor seguran�a do
servidor em ambientes compartilhados.
Ao
se clicar na sandbox em quest�o, temos uma interface com cinco �orelhas� a saber: �Data Sources�, �CF Tags�, �CF Functions�,
�Files/Dirs� e �Server/Ports�. Veja a imagem abaixo:
O
esquema de funcionamento desta interface � bastante simples. Para todas as
orelhas, na janela esquerda t�m-se o que est� habilitado e na janela direita o
que est� desabilitado. Por padr�o, cada nova sandbox ter� permiss�o de acesso
em todas as data sources do servidor e qualquer tag e
fun��o dispon�veis. Tamb�m poder� acessar qualquer recurso externo (webservices
ou consultas/acessos com CFHTTP, CFFTP etc) uma vez que n�o existe nenhuma
restri��o em �Server/Ports�. A exce��o � a manipula��o de arquivos que, por
padr�o (obviamente), ficar� limitada � pasta base do usu�rio (�d:\sites\alexhubner�). Um clique na orelha �File/Dirs�
evidencia isso:
Perceba
que existem duas entradas para a pasta do usu�rio. Em teoria bastaria uma
entrada no formato �d:\sites\alexhubner\-�. Note o tra�o,
que significa que a sandbox tem autoriza��o para ler, escrever, executar e
deletar qualquer arquivo e pasta recursivamente a partir da pasta base. Por�m,
por algum motivo que desconhe�o, o ColdFusion precisa
de ambas entradas para funcionar corretamente. N�o me pergunte por que, eu
realmente n�o sei.
Eu
costumo adicionar uma terceira entrada (n�o obrigat�ria) apontando para a pasta
tempor�ria do ColdFusion. Algumas aplica��es em CFML
fazem uso desta atrav�s da fun��o GetTempDirectory().
Esta pasta e fun��o podem ser usadas para armazenamento tempor�rio de arquivos
Vamos
dar in�cio a um �tour� pelas orelhas e suas configura��es recomendadas.
Na
orelha �Data Sources� n�s indicaremos ao ColdFusion
quais data sources - conex�es JDBC que permitem a intera��o com bancos de dados
� poder�o ser usadas por uma determinada sandbox/conta. Na imensa maioria das
vezes habilitamos �quelas pertencentes apenas � conta de hospedagem em quest�o.
Imagine que o nosso cliente tem direito apenas a uma data source no seu plano,
a orelha ficaria desta maneira:
Voc�
j� deve estar se perguntando: por que a data source �cfserver_clients� tamb�m
est� habilitada? N�o deveria ser apenas a do cliente? Bem, no meu servidor, por
quest�es de performance e seguran�a, costumo
armazenar vari�veis de cliente (op��o �Client Variables� no Administrator) num
banco de dados de alta capacidade (mySQL, SQL Server etc) em oposi��o �s
alternativas existentes (cookie e registry - mais a frente vamos falar dos
problemas com o registro) � saiba mais neste link: http://mysecretbase.com/ColdFusion_Tutorial_01.cfm.
Desta maneira a sandbox em quest�o precisa ter acesso � data source respons�vel
pelo armazenamento de vari�veis de cliente no servidor. No nosso caso ela se
chama �cfserver_clients�.
N�o
dediquei um item especifico a esta quest�o, mas saiba
desde j� que, para uma configura��o segura (e mais r�pida tamb�m), voc� deve
armazenar as vari�veis de cliente num banco de dados separado, mesmo que isso
seja feito usando uma base de dados em Access, no improv�vel caso de n�o
existir um banco de dados mais potente para isso.
Uma
informa��o adicional que julgo importante: muitos oferecem o Access como op��o
�barata� de banco de dados
Chegamos
� parte mais importante deste documento. Voc� deve se recordar que, mais acima
no item cinco, eu mencionei o fato de existirem algumas exce��es � seguran�a
completa de uma sandbox. Justamente por conta destas exce��es algumas tags e
fun��es CFML precisam estar desabilitadas. Recomendo a leitura da documenta��o
presente no seu CD ou download de CFMX sobre as tags e fun��es em quest�o antes
de prosseguir.
Na
orelha de �CF Tags�, recomendo desabilitar as seguintes tags:
A
orelha �CF Tags� ficaria assim ent�o:
Na
orelha �CF Functions�, recomendo desabilitar as seguintes fun��es:
A
orelha �CF Functions� ficaria assim ent�o:
No
item anterior sugerimos que as tags CFOBJECT, CFOBJECTCACHE e a fun��o CreateObject fossem desabilitadas. Em vers�es anteriores ao
CFMX desabilita-las n�o seria um grande problema, por�m estas ganharam um apelo
e utilidade bastante importante nas vers�es CFMX o que certamente trar� dores
de cabe�a a voc� e ao seu cliente. Tenha certeza de que ele vai reclamar o fato
destas n�o estarem habilitadas, por�m existem quest�es de seguran�a e
privacidade importantes envolvendo-as, o que as tornam candidatas �
desabilita��o. Para explicar o porqu� desta recomenda��o, faz-se necess�rio uma
breve explica��o sobre as funcionalidades das mesmas.
Com
a mudan�a de plataforma para Java, o ColdFusion
oferece aos seus usu�rios um leque enorme de possibilidades, a melhor delas:
total integra��o com o ambiente Java, incluindo execu��o de classes, EJBs,
custom tags JSP e muitas outras. Esta intera��o � feita usando-se as tags
CFOBJECT, CFOBJECTCACHE e a fun��o CreateObject. Estas
tags tamb�m s�o usadas com componentes COM, CORBA e outros. At� aqui nenhum
problema, exceto que de forma similar ao que ocorre com a tag CFEXECUTE, �
poss�vel acessar componentes COM e/ou objetos Java maliciosos, que n�o
necessariamente estar�o isolados dentro da sandox. Tamb�m � poss�vel acessar
objetos e classes (e m�todos) do pr�prio ColdFusion de
uma forma muito �ntima e insegura. Podemos citar algumas tais como recuperar
senhas de data sources, senha do pr�prio ColdFusion
Administrator (em vers�es CFMX 6.0 pr� Updater 1), vari�veis de sess�o
existentes em outras aplica��es do servidor etc, isso tudo mesmo estando dentro
de um contexto de sandbox. O problema n�o se limita � possibilidade de explorar
e ler informa��es sens�veis, mas tamb�m de alterar, criar e deletar
configura��es diversas. Usando estas tags e a fun��o CreateObject,
� poss�vel, por exemplo, deletar data sources ou criar novas. Pode-se criar
mappings, schedules e uma infinidade de outros recursos inerentes ao ColdFusion Server (lembre-se de que o ColdFusion � um
aplicativo Java). T�m-se tamb�m acesso � API Java, existente sob o CFMX, o que
pode trazer problemas uma vez que se trata de um universo complexo e � parte.
Mas
e qual ser� o motivo da reclama��o por parte do cliente se ele n�o estiver
querendo usar Java? Bem, estas tags podem ser usadas como uma forma elegante (e
cada vez mais presente entre os desenvolvedores) de se programar em CFML como
se fosse uma pseudo-linguagem orientada a objetos.
Tamb�m s�o usadas com freq��ncia em substitui��o � tag CFINVOKE para utilizar e
consumir Componentes ColdFusion (arquivos cfc), usados
com freq��ncia em novas aplica��es.
Esta
� uma das minhas mais s�rias cr�ticas ao ColdFusion
Server. N�o vou citar exemplos nem demonstrar como se pode obter ou alterar
tais informa��es. Lembre-se de que se o ColdFusion
Administrator, uma aplica��o inteiramente feita em CFML (criptografada), �
capaz de alterar e controlar quase todas as configura��es do servidor, voc�
provavelmente poder� fazer o mesmo com a sua aplica��o CFML. Desabilitando tais
tags voc� impede que isso ocorra (lembre-se de que o ColdFusion
Administrator - CFIDE - possui sua sandbox, que foi adicionada automaticamente,
onde estas tags est�o habilitadas).
Espero
que as pr�ximas vers�es do ColdFusion tragam uma
solu��o para este problema. At� l�, desconhe�o qualquer maneira de se
contorna-lo sem sacrificar o uso das tags em quest�o. J� pesquisei bastante
sobre o assunto, contudo sem sucesso. Caso voc� conhe�a alguma maneira, por
favor, entre em contato.
A
�nica forma de se oferecer suporte a estas tags, com total seguran�a, � atrav�s
de m�ltiplas inst�ncias do ColdFusion (possibilidade
de configura��o citada neste documento). Importante frisar algo: clientes podem
argumentar que sem estas tags habilitadas, n�o ser� poss�vel fazer uso dos ColdFusion Components. Isso n�o � verdade, os mesmos poder�o
ser utilizados atrav�s da tag CFINVOKE.
Todas
as demais tags, que n�o recomendamos desabilitar, n�o oferecem qualquer risco
ao servidor e aos sites/aplica��es existentes.
Sou
um pouco radical quando questionado sobre o porqu� de desabilitar as tags
CFOBJECT, CFOBJECTCACHE e a fun��o CreateObject.
Respondo de forma bastante simples: �esta � uma hospedagem ColdFusion,
n�o numa hospedagem Java ou qualquer outra tecnologia. CFML n�o � uma linguagem
orientada a objetos, use CFINVOKE�. Sugiro fazer o mesmo para acalmar (ou
ati�ar) os �nimos de seu cliente.
Bem,
at� agora cobrimos 4 das 5 orelhas existentes na
interface de configura��o de sandboxes security. Vimos como proteger data
sources, tags, fun��es e arquivos (nossa primeira explica��o). Ficou faltando a quinta �orelha�, chamada �Server/Ports�. As configura��es
desta n�o s�o t�o importantes em termos de seguran�a uma vez que o consumo de
recursos externos n�o � muito diferente de se oferecer uma conta de FTP (o que
com certeza todos ter�o) num servidor. O cliente pode colocar o que bem quiser
dentro da sua conta. Entretanto, se voc� por acaso (quest�es de consumo de
banda ou qualquer outro) resolver aplicar restri��es nesta �orelha�, tome
ci�ncia de um bug de funcionalidade n�o documentado pela Macromedia que afeta a
tag CFFTP em contas �sandboxeadas� - http://www.cfgigolo.com/archives/000326.html.
Na
nossa configura��o, a orelha �Server/Ports�, sem restri��es, ficaria assim:
Assim
como qualquer tecnologia oferecida numa hospedagem compartilhada, existem
muitas considera��es a se fazer e detalhes a observar. N�o � diferente com o ColdFusion MX Server. Muitas delas, envolvem performance e outras tantas seguran�a. A imensa maioria n�o
foi coberta por este documento, que focou apenas a cria��o de sanboxes e a
necessidade de se us�-las.
Leia
a documenta��o do produto, participe de listas de discuss�o, leia os blogs
nacionais e internacionais (principalmente), fique ligado em dicas e
best-pratices encontrados em sites sobre o ColdFusion
(ex: o site do CFUG-SP � http://www.cfugsp.com.br
� oferece o download de apresenta��es sobre seguran�a em aplica��es ColdFusion
e tamb�m sobre performance neste).
Abaixo
seguem algumas �ltimas recomenda��es importantes, � luz do que foi apresentado: