Detalhes técnicos da falha de segurança no sistema DNS descoberta no início do mês de Julho começam a se tornar públicos, e alguns provedores de acesso já são vítimas do problema, segundo esta matéria do site Security Focus. A grande imprensa tem noticiado esta falha como sendo uma das piores da história. E, pelo pouco que foi divulgado ao distinto público pelos técnicos envolvidos na correção da mesma, parece que desta vez a imprensa não está exagerando.
Pode uma falha tão absurda existir no software mais testado do mundo?
O responsável pela divulgação da falha, Dan Kaminsky, foi questionado publicamente sobre a veracidade de sua “descoberta”. Foi então que decidiu revelar o problema a um seleto grupo de pesquisadores para que eles confirmassem ao público, ou não, a gravidade do problema. Resulta que todos saíram da reunião acendando um sinal de positivo: o problema era grave.
O megaproblema: A falha é na especificação DNS
A especificação do sistema de DNS se baseia em parte, em confiança entre servidores mestre publicados por donos de domínios, assim como outras tecnologias relacionadas à Internet(o sistema de email, por exemplo). Quando um servidor mestre responde, o DNS tradicional não verifica se a resposta veio do servidor correto, por exemplo.
Há um consenso entre especialistas que o DNS é naturalmente vulnerável a ataques mais sofisticados. O fato de um problema dessa magnitude ter sido descoberto no DNS aos seus 40 anos de idade mostra a complexidade do software: uma falha pode se esconder décadas, e um dia aparecer arriscando a integridade de toda a Internet.
Sentados ao redor de uma mesa em reunião emergencial dia 9 de Julho, alguns dos maiores especialistas de segurança de DNS do mundo solucionaram rapidamente o problema. Bem, em termos. Acontece que o problema não tem solução, é uma falha natural do sistema DNS – ele foi feito assim, e agora descobriu-se que parte da especificação contém uma falha de segurança.
Software é conhecimento. Programar computadores é uma forma de compilar conhecimento computável por uma máquina. E, assim como existem falhas, bugs nos softwares, há falhas também nas suas especificações. Neste caso a especificação DNS tem um bug, e todos os servidores que a implementam corretamente, possuem a falha também. Daí resulta a gravidade do problema: o bug está em toda a infraestrutura da Internet.
A falha
Os detalhes técnicos da falha não foram divulgados, mas eis o que conseguí compreender pelo que foi divulgado na imprensa : quando você pergunta a um servidor DNS de seu provedor “qual o endereço do site www.google.com”, esse servidor deve perguntar aos servidores Google qual o endereço.
Acontece que o Google é um site muito acessado, portanto o servidor DNS de seu provedor mantém os endereços mais comuns em memória, para não consultar os servidores Google bilhões de vezes por dia. Em termos informáticos, como você deve saber se está lendo este post até aqui, o nome de um armazém temporário de dados com finalidade de acelerar uma consulta é um “cache”.
DNS Cache poisoning
O que acontece, então, se você conseguir alterar os dados desse cache dos provedores de acesso? Digamos que o servidor consulta o DNS mestre do Google, e obtém o endereço correto. Porém, o servidor precisará consultar o Google novamente em 24 ou 48 horas para saber se o endereço mudou, e assim manter o cache sincronizado com o servidor principal.
E se, por acaso, fosse possível interferir nessa comunicação do seu servidor cache com o servidor mestre e inserir no cache um endereço IP diferente daquele do Google? Se voce conseguir a proeza, terá sequestrado o site do Google. Você terá “envenenado” o cache DNS. É disso que se trata esta falha de segurança: Dan Kaminskydescobriu que é possível fazer exatamente isso interferindo com a resposta do servidor mestre antes que ela chegue ao servidor cache.
E qual é a falha?
Como poderiam alterar a resposta do servidor mestre? Bem, esse é o detalhe que não foi divulgado. A falha poderia parar a Internet, então Kaminsky trabalhou com os proprietários de redes de infraestrutura para trampar o furo antes que ele se tornasse 100% público. Porém alguns detalhes vazaram, e há exploits na web que exploram a falha com sucesso. O que sabemos é que a solução proposta torna aleatória a porta UDP de origem quando o DNS se conecta ao servidor mestre(sempre porta 53) para renovar o cache.
Tornar a porta UDP de origem aleatória significa que de alguma maneira o atacante estaria conseguindo adivinhar quando o servidor consultava o servidor mestre e conectava-se à essa porta antes da resposta do mestre, com endereço de origem falso, devolvendo informação inválida(e de interesse do vândalo). Seria como substituir o endereço do Google com o de seu site. Imagine o potencial disso…
A solução
Tecnicamente não há nada de novo na solução proposta, pois ela já havia sido descrita há anos atrás pelo matemático e especialista em segurança Daniel J Bernstein : as portas de origem das conexões DNS devem ser aleatórias para dificultar o ataque.
Após algumas horas de trabalho duro (segundo este relato de Kaminsky) o grupo decidiu que a solução do problema era adotar a idéia de Bernstein : remendar todos os principais softwares de DNS tornando a porta de origem das consultas aos servidores mestres aleatória.
Está passando da hora de proteger o seu DNS
O número de exploits para a falha está crescendo, já existem pelo menos 2 sendo divulgados sendo que um deles permite “substituir todos os servidores DNS de um domínio”, efetivamente sequestrando toda uma rede. Imagine o seguinte: o vândalo poderia substituir os servidores do domínio globo.com, por exemplo, e todos os subsites do globo.com passariam a seu controle.
Os detalhes que permitiram aos desenvolvedores de exploits produzirem o código funcional foram compilados até ontem, 7/8. Ou seja, hoje é um bom dia para atualizar seu sistema DNS. Se o seu cache for envenenado, você permanecerá envenenado por 24 a 72 horas, dependendo do TTL(Time To Live, ou tempo depois do qual o cache deve recarregar), então evite perder dias de trabalho e atualize já seu servidor.
Nota: não existe conserto para o BIND 8. Se você estiver rodando a versão 8 será preciso migrar para 9.5. O Yahoo! era o maior usuário de BIND 8 conhecido e foi obrigado a atualizar toda sua infraestrutura.
A Reuters publicou uma notícia que me chamou a atenção: Cuba teria finalmente criado uma distribuição Linux própria e estaria em processo de migração de todos seus computadores estatais para ela.
Confesso que fiquei surpreso com a notícia. Não pela questão técnica, porque não duvido que os Cubanos possam criar uma distribuição excelente. Fiquei surpreso, sim, ao descobrir que Cuba, até hoje, não tinha tornado institucionalmente obrigatório o uso de software livre nas suas dependências estatais. Tinha em mente que o uso de Microsoft Windows por lá era simplesmente proibido. Eu estava enganado – não só não é proibido, como o governo Cubano parece fazer vista grossa do uso desse sistema em cópias piratas, e o governo de Raúl Castro tem seguido a tendência do governo de Fidel de adotar muito lentamente o software livre.
Pior, fazendo uma retrospectiva rápida, podemos ir além e concluir que, de 1980 para cá, nenhum país do chamado “bloco socialista” apoiou, de fato, o movimento do software livre.
Jamais havia me questionado sobre o assunto mas, realmente, saber que apenas em 2009 a ilha decidiu substituir oficialmente(com ações concretas) o Windows por Linux demonstra que há um vácuo imenso entre o discurso oficial e a prática. Um movimento que teve início nos anos 1980 e que, por muito tempo, foi considerado “contrário aos princípios do mercado” não teve qualquer apoio institucional do bloco socialista. Essa constatação é, no mínimo, intrigante.
Uma reportagem falando sobre a migração ao software livre em Cuba afirma que “apesar de [Cuba] ter proclamado sua intenção de migrar todos seus sistemas para software livre em 2005, os esforços neste sentido parecem depender mais de pequenos grupos de entusiastas do que de apoio politico e institucional do governo Cubano”
Segundo a mesma reportagem, o professor Yudivián Almeida, da Universidade de Havana afirma que “ainda há grande resistência à mudança”.
É claro que a Internet propiciou a globalização do software livre, o próprio Linux só foi possível devido à colaboração global através da grande rede. O acesso das massas à Internet só foi possível após o fim da guerra fria, com a transferência do controle da Internet de militares da DARPA para civís do InterNIC em 1992. O fato do desenvolvimento do Linux ter explodido nessa época não é mera coincidência. Devemos admitir que a Internet foi o grande catalisador do movimento do software livre, mas, em termos históricos, o questionamento à falta de apoio político do bloco comunista ao software livre ainda é válido.
Em 1983 Richard Stallman iniciou o projeto GNU, produzindo um compilador excelente da linguagem C(GCC, o mais utilizado até hoje), um editor de textos poderoso(Emacs) e deu início ao trabalho num kernel Unix livre(HURD), projeto que não obteve sucesso mas inspirou muitos outros posteriormente. Hoje o projeto GNU é a força motriz por trás do Linux, OpenSolaris, FreeBSD, NetBSD, OpenBSD e inúmeros outros.Segundo Eric Raymond, em seu livro “The Art of Unix Programming”, o software livre só decolou no “mundo capitalista” quando o nome “software livre” foi substituido por “software aberto”. Por que? Para evitar conotações socialistas e, segundo o próprio Raymond, “retirar a carga ideológica do projeto de Richard Stallman”. A mudança para “OSS” ao invés de “Free Software” pegou embalo em 1998 quando as fundações Mozilla, Apache, X e por aí vai todas concordaram em utilizar o termo “software aberto” ao invés de free software. Foi só então que a IBM e outros gigantes capitalistas adotaram o Linux como alternativa à Microsoft.
Ou seja, o mercado teve a “preocupação”, ou puro preconceito ideológico, de evitar conotações socialistas no uso do software livre, mas Cuba não se importou nem um pouco com a mensagem política enviada ao mundo ao permitirem o uso do Microsoft Windows até os dias de hoje?
Vejam só. Eis que uma década depois da mudança da tarja de “free software” para “open source”, Cuba ainda não havia realmente, de fato, abraçado a causa. Isso nos diz algo ainda mais marcante: até 1998 nenhum país “socialista” havia utilizado politicamente o software livre. China, Cuba e até mesmo a URSS não enxergaram o potencial do software livre nos anos 1970, ou na década de 80 quando Ronald Reagan os chamava de ‘Império do Mal’, ou até mesmo na euforia do mundo pós-Guerra Fria dos anos 90?
Toda aquela “birra” ideológica do início do novo mliênio, de que o software livre seria uma afronta ao mercado livre, não passou de marketing de empresas de software fechado para tentar evitar que uma metodologia mais inteligente de compilação de conhecimento humano prejudicasse seus lucros.
Hoje podemos concluir que, enquanto Richard Stallman lutava para que todo software fosse aberto e naturalmente acessível por todas as classes sociais, todo o bloco socialista ignorou solenemente aquele que poderia ter sido um de seus maiores trunfos: o software livre.
Em “Cyberpunk”, o jornalista John Markoff narra a história de “Pengo”, um hacker de Berlim oriental que se infiltrava em computadores dos EUA, roubava código fonte e depois vendia para agentes secretos do bloco socialista. A Russia preferiu a pirataria ao invés de apoiar Stallman e todo o movimento de software livre dos anos 1980.
Em retrospectiva, notamos que enquanto Bill Gates dava uma surra no software livre e se tornava o homem mais rico do mundo vendendo código fechado, todo o bloco socialista ficou passivo, observando a luta dos hackers anarquistas pelo direito ao acesso à tecnologia por todas as classes sociais.
O caso do hacker “Pengo” ilustra como a URSS preferiu comprar mercadoria ilícita de hackers adolescentes à ter uma política institucional de apoio ao software livre. O que poderia ter sido mais poderoso como arma ideológica do que uma iniciativa soviética de apoiar o “Free Software” produzindo compiladores grátis e sistemas operacionais de alta qualidade inteiramente livres de royalties de corporações e governos estrangeiros? Imagine se o software livre tivesse apoio do bloco comunista e algo semelhante ao Linux tivesse nascido em 1980…
Ainda segundo a reportagem, em pleno 2009 Cuba utiliza Linux em apenas 20% de seus computadores. Podemos supor, com pequena margem de erro, que os outros 80% de computadores de Cuba utilizam alguma versão do Microsoft Windows.
A estimativa de um especialista da Universidade de Ciência de Informação de Cuba é de que em 5 anos 50% dos computadores da ilha estejam rodando Linux. Espera aí, 5 anos para atingir 50%???!!! É inacreditável.
Torço para que a distro Nova Linux de Cuba tenha sucesso e que todos os cubanos tenham acesso livre à nova distro. Na verdade Cuba deveria simplesmente banir imediatamente a pirataria de sistemas Microsoft Windows e abrir completamente o acesso do povo Cubano ao NetBSD, FreeBSD, Apache, Linux, Mozilla e demais projetos abertos.
Um pequeno retrospecto histórico nos mostra que já passou da hora, e muito.
Você já deve ter ouvido falar: o Debian 5.0 foi finalmente lançado no Sábado 14/2.
Confira changelog e release aqui.
Baixe o Torrent do ISO para CD ou DVD aqui.
Ou compre uma distro para ajudar a financiar o desenvolvimento do Debian, clicando aqui.
Este é o backup do meu ~/.emacs
Decidí trazer aqui pro blog de modo que possa puxá-lo sempre que necessário em outras máquinas, e também para compartilhar com vocês, claro!
O que essa configuração faz? Bem, eu não queria usar o modo CUA que imita as teclas de atalho do Windows, pois já me acostumei com as tradicionais sequências do Emacs e consigo ser produtivo com elas. Caso se interesse, o modo CUA deixa o Emacs semelhante aos editores do Windows, Ctrl+c copia, Ctrl+v cola, Ctrl+x recorta, Ctrl+z para desfazer e Shift-movimento para selecionar.
Para usar o modo CUA do Emacs insira o seguinte no seu arquivo ~/.emacs (caso não exista, deve criá-lo):
(cua-mode t)
(transient-mark-mode 1)
(setq cua-keep-region-after-copy t)
No entanto prefiro a seguinte configuração:
(setq indent-line-function ‘indent-relative-maybe)
(setq make-backup-files nil) ;; desabilita criação de arquivos de backup com til, exemplo: index.html~
(global-set-key (kbd “TAB”) ‘self-insert-command) ;; força o emacs a inserir uma tabulação sempre que eu teclar
(define-key global-map (kbd “RET”) ‘newline-and-indent) ;; torna o comportamento do ENTER o mesmo de Ctrl+J
Aviso: Emacs vicia! Ao terminar este post automaticamente digitei C-x C-s
Encontrei esta dica interessante hoje : o que faz o sinal zero, enviado através do kill -0 no UNIX?
Resposta: nada.
Então para que serve? Para saber se um processo existe.
Ao enviar um kill -0 [PID] o kill retorna 0 (tudo ok) se o processo existe, ou 1 (“erro”) caso contrário. Como diz o post original, é uma forma até elegante de saber se um PID existe à partir de um shell script.