Parte 1 de 2 No dia 01/03 o Renato me convidou pra escrever um pouco da relação Unix-BSD-OSX, pra série de artigos de segurança sendo divulgados pela IDS Tecnologia na MacMagazine. Escrevi um artigo um tanto extenso, que foi condensado propriamente ao ser publicado na MacMagazine (clique pra ver), e partes dele serão reutilizados ao longo dos demais artigos. No entanto em particular tive pedidos pelo artigo na íntegra, então segue ele postado aqui na FUG também, espero que gostem :-) Pessoalmente gosto muito desse trecho da história dos BSD em geral e acaba ilustrando como a guerra jurídica que o CSRG/Berkeley sofreu por parte da USL/AT&T quando a segunda processou Berkeley por conta dos 6 arquivos AT&T restantes no BSD Unix. Lógico que pro mundo BSD foi uma passagem terrível, retardou a adoção de sistemas BSD e liberdade Open Source do código BSD. Mas teve seus lados positivos, como Torvalds e seu kernel baseado no Minix quando ele ficou inseguro ao usar o 386BSD, e nessa passagem outro ponto positivo, a criação do Mach pela universidade de Carnegie Mellon como uma alternativa ao BSD sob base BSD, posteriormente aproveitados no NeXT Step. Segue então o conteúdo, na íntegra, abaixo.
Infra-estrutura Unix no (Mac) OS X Em sua documentação oficial, a Apple aponta que o kernel do OS X (coração do sistema operacional) é construído com base nos sistemas BSD Unix e Mach. Entre outras coisas, a parte BSD da alma do OS X implementa os recursos primários de sistemas de arquivos, serviços de rede e gerenciamento / identificação de usuários e grupos do sistema. A segurança é também BSD, o subsistema BSD Unix garante que as políticas de segurança sejam imperativamente respeitadas em todos os aspectos do sistema, sistemas de arquivos, processos, rede e memória. É onde começa a integração do kernel BSD com o Mach, uma vez que o lado Mach na alma do OS X gerencia memória, controle de threads, abstração e gerenciamneto de hardware e comunicação entre processos. O lado Mach também gerencia tarefas, supervisionado pelo subsistema BSD. Parecem duas “almas” trabalhando em conjunto, e é como o coração do OS X realmente trabalha. É um kernel híbrido, e isso é fundamental para a segurança do sistema e nossa compreensão sobre essa segurança. Vamos então olhar isso mais de perto. Quando Steve Jobs saiu da Apple, em Maio de 1985, oficialmente os argumentos de Scully para convencer a diretoria da empresa eram problemas financeiros e fracassos em projetos recentes, como de vendas quase insignificativas do Apple Lisa alinhados a queda na aceitação de sistemas Mac. No entanto os desentendimentos precediam os fatores de negócio, e iniciavam-se na parte técnica. Jobs estava descontente com o estado atual dos Mac e seu sistema, e insistia que os Mac deveriam assumir uma personalidade mais “Unix”. Essa ideia era muito bem aceita por parte da equipe de desenvolvimento da Apple e má vista por outra parte e alguns gestores, como Scully. Foi só recentemente que uma passagem da biografia autorizada de Steve Jobs indicou consistentemente que a ideia de tornar o Mac mais “Unix” foi um dos grandes estopins para desentendimento de Jobs com Scully e a diretoria. O resultado disso, sabemos, a saída de Jobs da Apple, o que abriu margem para novos empreendimentos de Jobs. Além de sua relação com Hollywood por meio da Pixar, Jobs criou a NeXT Computers, empresa que passaria a criar hardware e sistema operacional de grande poder de processamento matemático, com foco inicialmente no mercado acadêmico que sempre teve grandes demandas de poder computacional para simular estudos e cálculos complexos. Jobs levou para a NeXT uma parte considerável dos engenheiros de software da Apple, os que queria trabalhar em um Unix. O que aumentou ainda mais o desconforto da diretoria da Apple à época com seu fundador. Os computadores da Next mostraram-se depois, adequados a processamento gráfico de grande desempenho, como efeitos gráficos e animações em filmes e comerciais de TV. Na NeXT, Jobs colocou em prática seus planos e junto aos computadores NeXT, incluindo o famoso Next Cube, foi criando um sistema operacional, o NEXTSTEP. O NEXTSTEP juntou em um único sistema, as características Unix outrora planejadas e outros recursos. O sistema passou a ser fundamentado em um kernel de arquitetura Microkernel, o Mach. O Mach por sua vez é um kernel criado na Universidade de Carnegie Mellon, cujo objetivo original era formar um sistema Unix completo, livre da licença comercial da AT&T, para isso o conceito original do Mach é um kernel rodando sob uma base (userland, aplicações, bibliotecas, etc) BSD, já que o BSD Unix em versões antes do 4.4-BSD Lite2 dependia da licença do AT&T Unix (comercial) para ser utilizado. Então o Mach, em uma base BSD, incorporando do kernel BSD as tecnologias relevantes, criadas pela Universidade de Berkeley (onde o BSD foi criado), passou a dar origem ao NEXSTEP dentro da NeXT. E para garantir resultados em seu projeto, Jobs foi beber na fonte, e contratou como Engenheiro Chefe de Software, Avie Tevanian, um dos criadores do Mach na Carnegie Mellon. Avie posteriormente seguiu com cargo similar (CSTO) dentro da própria Apple até 2006. Alguns recursos no entanto, como pilha de rede, sinalização de processos e sockets de rede, criados em Berkeley no BSD, Jobs queria ver em seu NEXTSTEP. Então o NEXTSTEP começou a tomar uma forma única, mesclando uma arquitetura de kernel monolítico (BSD) com microkernel (Mach), um dos poucos únicos sistemas com kernel híbrido funcionais. Essa arquitetura permanece até hoje. Portanto a inspiração original do Mach foi incrementada no NEXSTEP que agora passava a ser um sistema de base BSD (userland), kernel Mach mas também kernel BSD. Devido a natureza híbrida do novo sistema e monolítica do kernel BSD, o(s) microkernel Mach passaram a poder se comunicar independentemente (como originalmente) mas registrar-se no kernel monolítico BSD, de forma similar a módulos e extensões de kernel (chamados kext no OS X, kernel extensions), o que faz com que o microkernel Mach cumpra as exigências de segurança do BSD. Mais tarde isso seria melhorado, com a adoção dos Kernel Entry Points BSD no Mach (projeto TrustedBSD) permitindo componentes imperativos de controle de acesso (MAC – Mandatory Access Control) do BSD impor controles também no Mach. Junto a essa arquitetura Unix o NEXTSTEP trouxe display em PostScript e um subsistema de janelas gráficas, junto com uma base de desenvolvimento fundamentada em kits de orientação a objeto e uma nova linguagem: Objective-C. Essa plataforma computacional também foi a base para a criação da última dentre as principais tecnologias Internet, a Web. À época já tínhamos correio eletrônico, DNS (criados em Berkeley, BSD), FTP, Gopher, etc. Mas foi só em 1990 que Tim Berners-Lee em um NeXT Cube com NEXTSTEP criou o primeiro servidor HTTP e o primeiro navegador, batizado de WorldWideWeb (dando origem a sigla). A alma da web, o HTML, foi baseado no Textclass da NeXT. Em 1997 a Apple adquiriu a NeXT, o interesse inicial era no sistema operacional. Agora o BSD já era livre (Open Source) e rodava em plataformas abertas. Então a ideia era trazer pra Apple algo parecido ao que a NeXT tinha no NEXTSTEP, com base no NEXSTEP mas novo e melhor. Os componentes Mach foram reaproveitados do NEXTSTEP mas a base BSD deu lugar à base FreeBSD, um BSD mais moderno, livre, com uma licença mais amigável e que tinha desenvolvedores originais do BSD Unix. A Apple e seu Mac começou a retomar forma após lançamento do iMac com um novo sistema, Mac OS 9. O Mac OS 9 foi uma tentativa, algumas características Unix passaram a ser incorporadas mas sem muito sucesso: O Mac OS 9 era arcaico demais para incorporar aquela tecnologia. Jobs resolveu mater o Mac OS como era conhecido, e decretou o fim do Mac OS 9. Paralelamente a isso, deu-se início a criação de um novo sistema operacional dentro da Apple, um sistema naturalmente “evolucionário”, batizado inspiradamente, Darwin. O Darwin era um Fork do FreeBSD, com características do kernel Mach herdadas do NEXTSTEP, com um kernel monolítico integrado agora FreeBSD, e toda a base (userland, bibliotecas, etc) FreeBSD e algumas vezes, NetBSD. Trechos do NetBSD foram inicialmente utilizados em aplicações da base para a arquitetura PowerPC, típica à época dos iMac. O Darwin passaria a ser um sistema baseado no FreeBSD, com heranças Mach do NEXTSTEP, e a Apple nessa base estável, sólida e comprovada, focaria seu desenvolvimento no “diferencial” Apple: o kernel adotou o “Core Graphics” e “Core Audio”, a interface gráfica incorporou características NEXSTEP incluindo o Dock, mas também a nova interface Aqua, bibliotecas como Cocoa e outros recursos de usabilidade e user-feeling que tanto diferenciam a Apple. Por trás disso tudo, o coração BSD, com artérias Mach. Isso alinhava-se com outra intenção de Jobs: a troca de arquitetura, sair de PowerPC e ir para Intel. Só hoje, após ler a bibliografia de Jobs sabíamos que ele planejou a longo prazo, escolhendo como base um sistema focado em arquitetura Intel, sem se importar em ter que fazer adaptações temporárias para rodar também em PowerPC: a plataforma mais tarde seria descontinuada em favor de arquitetura Intel apenas, tornando a escolha FreeBSD com o tempo mais acertada ainda. Em 2000 foi lançado o novo Mac OS, a décima (e tão diferente) versão, O Mac OS X (10 em Romano) Curiosidade: a Apple repreende fortemente, dizer “Mac OS Xis”, deixando claro que é Mac OS Ten – Dez – agora apenas OS 10, inclusive essa sendo uma das primeiras regras para falar publicamente como parceiro Apple, seja em treinamento, consultoria ou negócios. E para garantir qualidade, mais uma vez, Jobs foi beber da fonte: contratou como engenheiro chefe de software Unix na Apple, Jordan K. Hubbard, fundador e criador do FreeBSD (
Este endereo de e-mail est sendo protegido de spam, voc precisa de Javascript habilitado para v-lo
). O JKH ainda ocupa esse cargo, sendo a pessoa por trás das bases Unix do OS X e do iOS (co-worker direto de Forstall). Hubbard foi apresentado a Steve Jobs através de um amigo em comum, John Lasseter, um dos 3 fundadores originais da Pixar, hoje animador na Disney. Lasseter, um dos grandes nomes da animação gráfica de todos os tempos, além de amigo pessoal de Jordan Hubbard e Steve Jobs, é ainda amigo de McKusick, um dos pais do BSD Unix. Curiosidade: A amizade é tão próxima que curiosamente, o mascote do BSD (o daemon) originalmente rascunhado por McKusick, tem sua última e definitiva versão assinada por John Lasseter, e o conceito por trás do Hexley, o mascote do Darwin, é também de Lasseter e arte de Jon Hooper. O OS X tem desde então evoluído, em recursos que normalmente são focados na usabilidade e interesse geral do usuário final. Mas é a evolução por trás de sistema de arquivos, gerencia de recursos que permite que tenhamos resultados como Versions, Resume, e agora recursos de segurança como Gatekeeper e Mac Sandbox. Os recursos de segurança do OS X são fatores diretamente herdados (e construídos juntos, a bem da verdade) da base BSD Unix. Um projeto chamado TrustedBSD financiado por 10 anos pela Agência de Pesquisas e Projetos Avançados de Defesa (DARPA) do Departamento de Defesa dos EUA (DoD), passou a ser criado sob base FreeBSD (e para FreeBSD) com objetivo de implementar requisitos de segurança da informação de especificações militares (baseadas no Orange Book / TCSEC – Trusted Computer Systems Evaluation Criteria) e na especificação POSIX.1e. A Apple e Sun Microsystems passaram a ter interesse direto nesse projeto e participaram apoiando o desenvlvimento dessas tecnologias no FreeBSD e posterior adoção em seus sistemas. Isso vale a Apple o certificado oficial de sistema Unix, e também um dos únicos sistemas operacionais classificados com padrão de segurança TCSEC/B3 pelo DoD dos EUA. Os recursos incorporados no OS X herdados dessa parceria de desenvolvimento em segurança são: - POSIX.1e ACLs – Os controles de acesso, as ACL, permissões para usuários, grupos, etc que você configura com Cmd+i no seu Mac / Finder;
- MAC (Mandatory Access Control) – OS X incorpora MAC em kernel entry points, ou seja são pontos de entrada que o kernel olha uma política para decidir se a aplicação ou usuário tem direito de executar alguma função; as políticas MAC mais famosas implementadas no OS X são Seatbelt e Sandbox;
- BSM Audit – Subsistema de auditoria de acesso a recursos;
- Atributos Extendidos no Sistema de Arquivos (Finder e comando xattr(1);
Esses são alguns recursos que oferecem, acima de tudo, camadas de abstração de segurança avançadas para os programadores no OS X. Ou seja alguns desses recursos o usuário final não vê tomando forma, outros apenas vê em modo Trusted (processo de hardening do OS X o qual nossos 50 artigos, aos poucos, ajudará você a implementar) ou em versões OS X Server. Aos poucos a Apple tem tentado trazer esses recursos pro usuário, já que eles já existem no sistema. Mas trazer os recursos de segurança desse porte sem comprometer a usabilidade e facilidade com que o usuário está acostumado leva tempo, e vem aos poucos no sistema. Outros, mais radicais já estão disponíveis. Além desses recursos, o OS X ainda herda da base BSD outros componentes de segurança como: - Security Framework: comando security(1) que implementa para o usuário final a Keychain;
- Separação imperativa de processos de usuários (MAC BSD_Partition), que o usuário não vê, mas acontece quando se usa por exemplo o Fast User Switching no OS X;
- Firewall: Em Security no Systems Preference do seu OS X, você tem o IPFW, FreeBSD Firewall nativo, tanto IPv4 (ipfw) quanto IPv6 (ip6fw);
- Firewall2: A partir do OS X Lion, o Packet Filter (comando pfctl no terminal) também está disponível no OS X;
- Geli: Subsistema de criptografia de disco e memória virtual com chave simétrica ou assimétrica, o usuário vê como FileVault e FileVault2 no OS X;
- srm: Secure Remove, comando srm no terminal, variação do comando rm -P no FreeBSD, apaga um arquivo em conformidade com o padrão militar (DoD) reescrevendo o arquivo diversas vezes, evitando recuperação de dados apagados. O usuário final enxerga isso como “Limpeza segura da lixeira” nas preferências do Finder;
- Root Tampering: o poder de root (system administrator) parcialmente delegado para usuários administradores ou integralmente com o comando “sudo su”, sem permitir que o usuário root logue, aumentando rastreabilidade e auditoria;
- Dtrace: rastreamento e controle de chamadas de sistemas de kernel;
- TCP Wrappers (controle de respostas em serviços de rede por aplicação);
- chflags – habilidade de transformar arquivos em imutáveis (mesmo para o administrador e system administrator – aka root), invisíveis, inapagáveis ou apenas concatenação;
- BSD IPSec – habilidade de criptografar pacotes de rede, criando túneis seguros de propósito geral e VPNs nativamente;
- BSD OpenSSL – implementação com as modificações do FreeBSD/OpenBSD para aceleração de criptografia por hardware;
- Kext Control – controle de carregamento de módulos de kernel (kernel extensions no OS X);
- Mac Ports - uma das coisas mais legais do Mac OS X, a possibilidade de ter um subsistema de Ports, pra instalar aplicações Open Source; criado pelo próprio JKH (autor original do Ports do FreeBSD), uma pena não vir por padrão no OS X, mas pode ser facilmente instalado online;
Esse trecho do artigo constará da nova versão do FreeBSD S.S.A. Original: http://www.tracanelli.com.br/blog/infra-estrutura-unix-no-mac-os-x/
|