Virtio e Netmap no FreeBSD

November 18, 2011

Ontem (17/11/11) foi dado o commit do framework “netmap” na árvore HEAD do FreeBSD. O netmap é um framework criado na Universita` di Pisa que permite o I/O de pacotes entre kernel land/user land em redes de 10Gbits de maneira muito eficiente [1] [2].

E hoje (18/11/11) foi adicionado a infraestrutura virtio na mesma árvore. O virtio é um conjunto de drivers PCI, rede e disco que permitem que o sistema guest saiba que está sendo executado em um ambiente virtual e faz com que esses dispositivos cooperem com o hypervisor [3] [4]. Segundo o log do commit o virtio foi testado nos sistemas: Qemu/KVM, VirtualBox e no novíssimo BHyVe.

Mais duas grandes novidades para o nosso querido capeta.

[1] – http://svnweb.freebsd.org/base?view=revision&revision=227614
[2] – http://info.iet.unipi.it/~luigi/netmap/
[3] – http://wiki.libvirt.org/page/Virtio
[4] – http://svnweb.freebsd.org/base?view=revision&revision=227652


FreeBSD com endereços de pilha aleatórios

November 16, 2011

Hoje na lista freebsd-current [1] um cara chamado Oliver Pinter enviou um patch [2] que adiciona ao FreeBSD uma funcionalidade do ASLR (Address Space Layout Randomization). Este patch permite que o sistema possa deixar os endereços da pilha dos programas aleatório. A vantagem é que em um ataque que explora estouros de buffer, embora o atacante até consiga injetar código arbitrário na pilha, é improvável que o salto para o código seja acertado.

Apliquei o patch em um FreeBSD 9.0-PRERELEASE 64 bits (atualizado hoje 15/11/11), funcionou (quase) perfeitamente. Através da MIB sysctl kern.stackgap_random é possível definir quanto do endereço será “randomizado”, o padrão é 16 bits (65536), eu deixei 24 bits nos testes (16777216). Segue os resultados (com um pequeno código em C):

#include <stdio.h>
int main()
{

    int a;
    char nome[100];

    printf("%p\n", &a);
    printf("%p\n", nome);

    return(0);
}

estacao# ./a.out 
0x7fffffb70f4c
0x7fffffb70ee0
estacao# ./a.out
0x7fffff78cbac
0x7fffff78cb40
estacao# ./a.out
0x7fffffeaf15c
0x7fffffeaf0f0
estacao# ./a.out
0x7fffff46576c
0x7fffff465700

E para não dizerem que não falei dos problemas, em certos momentos recebi a seguinte mensagem, talvez por ter aumentado a quantidade de bits aleatorizados, ao tentar abrir o VIM:

estacao# vim test.c
Fatal error 'Cannot allocate red zone for initial thread' at line 388 in file /usr/src/lib/libthr/thread/thr_init.c (errno = 12)
Abort (core dumped)

Embora não seja perfeito, este patch (que existe desde 2005 também) deveria servir de incentivo para o desenvolvedores dedicarem algum tempo nestes recursos de segurança (ASLR e W^X) que já existem no Linux, NetBSD e Windows. O W^X, também conhecido como exec-shield no Linux e responsável por não permitir a execução de código na pilha, existe no OpenBSD.

[1] – http://lists.freebsd.org/pipermail/freebsd-current/2011-November/029279.html
[2] – http://dl.dropbox.com/u/23276705/randomize-stack-and-mmap.txt


FreeBSD – O que vem por aí

July 9, 2011

Criei uma página dentro do blog para manter uma lista com as novidades que vão aparecendo no FreeBSD. Minha ideia é me manter atualizado sobre as alterações e me aprofundar mais no desenvolvimento do FreeBSD. Vou tentar mantê-la atualizada diariamente. A página é esta -> FreeBSD – O que em por aí.


FLISOL Maringá 2011 – Resultados

April 10, 2011

O FLISOL Maringá deste ano provavelmente foi o mais animado de todos. Contamos com o número recorde de 215 inscrições, 11 palestras e mais 4 palestras-relâmpago no Lightning Talks. Contamos também com o apoio de 7 empresas que nos ajudaram e patrocinaram. Conseguimos vários brindes que foram sorteados no evento e em uma promoção pelo Twitter onde tivemos 433 participantes.

Em breve as fotos do evento estarão disponíveis no album do FLISOL Maringá no Picasa. Tentamos filmar todas as palestras mas infelizmente não tinhamos recursos para tal, logo logo o vídeos que fizemos também estarão disponíveis no nosso canal do Youtube. Obrigado a todos pela participação.

Caso alguém se interesse, estou disponibilizando os PDFs das 3 palestras que apresentei este ano:

Apresentando o FreeBSD

Introdução ao processamento paralelo com o Grand Central Dispatch

Lightning Talks – ZFS: Zettabyte File System


FLISOL Maringá 2011, chamada de trabalhos aberta

February 21, 2011

O FLISOL (Festival Latino-americano de Instalação de Software Livre) de Maringá – PR está com a chamada de trabalhos aberta. Quem não quiser participar com palestras de 50 minutos pode participar do Lightning Talk (palestras relâmpago), que será de aproximadamente 10 minutos. Clique no panfleto abaixo para ir para o site.


Introdução ao Grand Central Dispatch

January 30, 2011

O GCD (Grand Central Dispatch), ou libdispatch, é uma biblioteca criada pela Apple para facilitar o uso de múltiplos processadores. A libdispatch torna transparente para o desenvolvedor a criação e a manutenção de threads, facilitanto a paralelização de trechos do código. Em 2009 ela foi liberada sob a licença Apache 2.0 e funciona em diversos sistemas operacionais como o Mac OSX, iOS, FreeBSD e Linux. O GCD está disponível para C/C++, Obj-C e Ruby.

O GCD agrupa todas as terefas em uma fila concorrente e simultaneamente as distribui entre os processadores disponíveis. Pode-se também utilizar filas seriais, onde não existe concorrência entre as tarefas. Para enviar uma tarefa para a fila, é necessário que ela seja encapsulada dentro de um bloco. Um bloco (Block) é uma extensão da linguagem C, algo parecido com o trecho abaixo:

typedef void (^UmBlocoVoid)();

UmBlocoVoid bloco = ^{
    printf("Dentro de um Block\n");
    int i;
    for(i=0;i<100;i++){
        printf("Exemplo %d\n", i);
    }
};

Também é possível usar funções ao invés de Blocks. Para compilar uma aplicação usando estruturas de bloco como essa, é necessário usar o compilador Clang/LLVM com o parâmetro -fblocks, no Mac OSX o GCC suporta blocks com o uso do mesmo parâmetro. No Ubuntu eu precisei usar -fblocks -lBlocksRuntime para funcionar.

Existem 3 tipos de filas no GCD:

  • Concurrent: Também conhecida como global dispatch queue, o que é colocado nesta fila é processado paralelamente pelo GCD;
  • Serial: Também conhecida como private dispatch queue, o que é colocado nesta fila é processado sequencialmente (sem paralelismo);
  • main dispatch queue: O que é colocado nesta fila é processado na thread principal do programa, não em paralelo ao programa.

Read the rest of this entry »


Iniciando com o Qt no Mac OSX

January 23, 2011

Comecei a brincar com desenvolvimento em Qt hoje, não sei quase nada ainda mas só a parte de criação do projeto em Qt merece um post. Todo o processo foi feito em um Mac OSX Snow Leopard e por preferência foi usado o Clang/LLVM como compilador padrão – um build da versão 2.9.

Bom, o primeiro passo é instalar o Qt no OSX, e esse processo não proderiar ser mais Mac fácil. Você pode baixar o pacote AQUI.

Depois de instalado, eu fiz uma pequena alteração no arquivo /usr/local/Qt4.7/mkspecs/common/mac-llvm.conf para adicionar suporte ao Clang, eu apenas alterei duas variávei conforme abaixo:

QMAKE_CC                 = clang
QMAKE_CXX                = clang++

Para criar seu projeto crie um fonte básico, como por exemplo o código abaixo (tirado do livro C++ GUI Programming with Qt 4).

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel *label = new QLabel("Hello Qt!");
    label->show();
    return app.exec();
}

Salve seu fonte com alguma extenção relacionada ao C++ (.cc .cpp) e rode os comandos abaixo no mesmo diretório do fonte:

# qmake -project
# qmake -spec macx-llvm

Agora você tem um Makefile pronto para compilar o seu projeto. Se você preferir usar o GCC, troque o parâmetro -spec macx-llvm por -spec macx-g++. Você também pode criar um projeto do Xcode com o qmake (que inclusive é o padrão dele no Mac OSX):

# qmake -project
# qmake

Agora você tem um arquivo .xcodeproj que pode ser usado no Xcode.


Dinheiro, prostituição e OpenBSD

December 15, 2010

Acabo de ler sobre a possível existência de um backdoor na pilha IPSEC do OpenBSD e não pude deixar de fazer algumas considerações.

No dia 11 de dezembro Theo de Raadt recebeu um email de Gregory Perry, avisando-o da possível existência de um backdoor dentro do OpenBSD, mais exatamente na pilha IPSEC do sistema. A acusação é grave (tanto que o de Raadt tornou o email público), segundo Gregory o FBI pagou para um desenvolvedor incluir o backdoor no código. Depois disso, o FBI começou a dizer “usem OpenBSD como solução de firewall e VPN, ele é igual o Wolverine, o melhor no que faz”. Isso supostamente, para não dizer com certeza, para poder monitorar o tráfego dos túneis alheios.

Segundo de Raadt, desde a época desta sacanagem, o código foi bastante alterado com melhorias e correções de maneira que ainda não se pode dizer qual o impacto da acusação.

Essa história me fez pensar em algumas coisas que digo quando me perguntam se software livre é seguro, acho que também é a resposta de muitos: “tantos olhos observando o código raramente deixam um bug permanecer escondido por muito tempo”. Bem, se isso tudo for verdade, esse ficou “malocado” por uma década. Claro que um framework criptográfico, como o do OpenBSD, não deve ser tão simples de ser auditado, mas uma década…

Espero que tudo seja papo furado, trair os usuários e todos os outros desenvolvedores é uma coisa muito triste. Isso mancharia a imagem do OpenBSD pra sempre, que até então é considerado um dos sistemas operacionais mais seguros do mundo.

Referência
tech@openbsd.org


As facilidades do FreeBSD

September 8, 2010

Sempre digo por aí que é muito fácil fazer certas coisas no FreeBSD. Algumas pessoas (as que conhecem FreeBSD só de longe) dizem que FreeBSD é só para “Heavy Users” de UNIX, mas isso não é verdade, por ser um sistema muito simples as pessoas acabam tendo uma falsa impressão sobre ele. É claro que para trabalhar com ele você deve ter um certo conhecimento de ambientes UNIX.

Por isso resolvi escrever esse artigo. Vou tentar, de maneira sucinta, demonstrar algumas operações que nós normalmente precisamos executar em nossos servidores, seja no momento da implementação, manutenção ou uso cotidiano. O artigo irá abordar coisas como: RAID, Firewall, configuração de rede, compilação de kernel, gerenciamento de pacotes, Jails, módulos do kernel, atualização do sistema, ZFS, monitoramento de recursos do sistema e como colocar serviços para iniciar automaticamente.

Não pretendo me aprofundar muito em nenhum tópico, mas ao final de cada um estarão algumas referências para você ir além.

Read the rest of this entry »


Apache Software Foundation e o FreeBSD

September 7, 2010

Dando uma fuçada no site da Apache, encontrei algumas informações interessantes. Como pode ser visto nos links abaixo, uma boa parte dos servidores do projeto Apache roda FreeBSD, além disso podemos perceber o uso massivo de Jails:

http://www.apache.org/dev/machines.html

http://monitoring.apache.org/status/


Follow

Get every new post delivered to your Inbox.