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

 

  1. Introdu��o

 

Freq�entemente me deparo com provedores de hospedagem que oferecem ColdFusion em seus planos. Tamb�m vejo que muitos destes desconhecem quase completamente esta plataforma, especialmente em ambiente compartilhado. S�o v�rios os motivos que levam a esta situa��o. Em minha opini�o pessoal, o principal � a incompet�ncia. Alguns administradores e empresas irrespons�veis, na �nsia de oferecer tudo aqui e agora, acabam deixando a seguran�a e qualidade em segundo (ou �ltimo) plano, n�o estudando ou procurando dominar uma determinada tecnologia em voga e oferecida por eles, como � o caso do 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.

 

  1. Objetivos

 

O objetivo deste documento n�o � ensinar administra��o de ColdFusion Server, muito menos seguran�a em servidores ColdFusion MX. Trata-se de uma pequena colet�nea de settings que recomendo para servidores de hospedagem compartilhados usando ColdFusion Enterprise com sandbox security. Abrange especificamente as vers�es ColdFusion MX 6.0 e 6.1 Enterprise e em modo �stand alone� ou �server configuration�. Tamb�m pode ser usado para o ColdFusion instalado �em modo J2EE�, seja sob JRun ou outro servidor Java em ambiente Windows. Todos os exemplos s�o baseados na plataforma Windows, todavia tamb�m ser�o v�lidos para Linux, bastando adaptar as informa��es.

 

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).

 

  1. Hospedagem compartilhada

 

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 mesmodedicados�, 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.

 

  1. As duas vers�es comerciais do ColdFusion

 

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.

 

  1. Sandboxes

 

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_______________________________________________________________________________________________________________________________a conta do vizinho, fazendo uploads de arquivos ou criando diretbilitadas sem problemas dentro de uma sandbox.  seus dejetos e 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:

 

  1. Entre no ColdFusion Administrator;
  2. No menu lateral, encontre a op��o �Sandbox security� (a �ltima) dentro da �rea chamada �Security�;
  3. Se voc� n�o habilitou isto antes, a op��o �Enable ColdFusion Security� dever� estar apagada. Selecione-a e clique em �submit changes�;
  4. Ser� necess�rio reiniciar o servi�o do ColdFusion Server;

 

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�.

 

  1. Criando novas sandboxes

 

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:

 

    1. Um usu�rio �alexhubner� possui um site no servidor cuja pasta raiz foi configurada como/em �d:\sites\alexhubner�;
    2. Sob a pasta �d:\sites\� existem outras contas de usu�rios como por exemplo �d:\sites\zezinho�, �d:\sites\mariazinha� etc;
    3. Este usu�rio deve ter controle total (read, write, execute (scripts cfml) e delete) via CFML nos arquivos e pastas existentes sob sua pasta raiz.

 

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.

 

  1. Configurando uma sandbox para ambiente compartilhado

 

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 em aplica��es espec�ficas. A pasta tempor�ria do ColdFusion costuma ser �C:\CFusionMX\runtime\servers\default\SERVER-INF\temp\wwwroot-tmp\-� (note que j� coloquei o tra�o), habilite-a sem problemas.

 

Vamos dar in�cio a um �tour� pelas orelhas e suas configura��es recomendadas.

 

  1. Orelha Data Sources

 

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 em hospedagem compartilhada. Lembre-se (de novo): o barato pode sair caro. O Access � um p�ssimo banco de dados para aplica��es web, ainda mais quando localizado na mesma m�quina do servidor de aplica��es. Prefira oferecer ao seu cliente um banco de dados melhor, nem por isso mais caro. O MySQL em uma m�quina separada (Linux de prefer�ncia) � uma excelente (e vi�vel) op��o em substitui��o ao problem�tico Access uma vez que o ColdFusion oferece suporte pleno a este banco de dados. Voc� certamente poupar� dor de cabe�a com suporte t�cnico e eventuais travamentos sem explica��o (para o usu�rio) da base de dados em Access.

 

  1. Orelhas �CF Tags� e �CF Functions�

 

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:

 

 

  1. CFOBJECT, CFOBJECTCACHE e CreateObject

 

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:

 

 

  1. Considera��es finais

 

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: