Playing with Sandbox: An analysis of Capsicum

Blog post written by me and originally posted in 2015 on an information security company blog. Reproduced only for historical reasons.

Introduction

In this post we talk a little about sandbox. People that work and study software exploitation know the sandbox concept. This kind of feature when properly implemented on a system makes hard to exploit some kind of vulnerabilities, especially that involving memory corruption. In wikipedia we have a good reference about this:

“In computer security, a sandbox is a security mechanism for separating running programs. It is often used to execute untested code, or untrusted programs from unverified third parties, suppliers, untrusted users and untrusted websites. A sandbox typically provides a tightly controlled set of resources for guest programs to run in, such as scratch space on disk and memory. Network access, the ability to inspect the host system or read from input devices are usually disallowed or heavily restricted.”

The sandbox is a security mechanism that separates running processes. Basically we have a process with least privileges (target) and another process with greater privileges (broker). If the process with least privileges need execute some operation that is not allowed, a request is sent to the process with greater privileges that checks whether the operation has permissions to be executed and run with return to target (process with least privilege). Sandbox normally is used to protect the application and can also be used to provide a restricted environment for execute and test some malicious binaries, one example of this is Cuckoo Sandbox that used for malware analysis.

In this post we talk about Capsicum[1], is that a kind of sandbox developed by the University of Cambridge that support several common commands of the system such as tcpdump[2], hastd, dhclient, kdump and sshd as mentioned in the website[3]. The Capsicum is a new kind of sandbox but we have support for use in the FreeBSD and Linux[4]. The first experimental version was made only for FreeBSD[5] and available since version 9.0. This sandbox add two new features to the system, called capability mode and capabilities.

Here we introduced a rapid explanation about two modes. Capability mode is the feature that enable for the developers isolate processes allowing only that some system calls execute some tasks reducing the permissions of the process. Capabilities enables a more refined control over the files and devices. This post has more focus on the capability mode.

Continue reading “Playing with Sandbox: An analysis of Capsicum”

Uma análise do CVE-2012-0217

Artigo escrito por mim e publicado originalmente em 2012 no blog de uma empresa de segurança da informação. Reproduzido aqui somente por motivos históricos.

Introdução

Em junho desse ano (2012) o time de segurança do sistema operacional FreeBSD publicou um alerta de segurança sobre uma vulnerabilidade descoberta por Rafal Wojtczuk que afeta todas as versões 64 bits.

Essa  vulnerabilidade não só afeta o sistema  operacional FreeBSD  mas também vários sistemas operacionais e sistemas de virtualização[1] disponíveis, com exceção do OpenBSD 5.0 e o Linux que já tinham corrigido a vulnerabilidade desde 2006[3].

Nesse post será explicado a natureza da vulnerabilidade e como ela pode ser utilizada para obter execução de códigos no kernel. Apesar de já existir exploits públicos para Windows [4] e para FreeBSD[5] [6], um exploit para FreeBSD também será apresentado nesse artigo.

Assume-se que o leitor saiba  como funciona exploração  de vulnerabilidades  em kernel, sistemas operacionais e suas estruturas, principalmente IDT[7] e como realizar debugging do kernel.

Os experimentos  realizados  nesse  artigo  foram  realizados  utilizando  a  versão  9.0 RELEASE  do FreeBSD.

Continue reading “Uma análise do CVE-2012-0217”

Entendendo e explorando o CVE-2012-4576 para o kernel do FreeBSD

Artigo escrito por mim e publicado originalmente em 2013 no blog de uma empresa de segurança da informação. Reproduzido aqui somente por motivos históricos.

Introdução

Dando continuidade a exploração de vulnerabilidades em kernel-land [1], neste artigo serão analisados os detalhes da vulnerabilidade registrada no CVE-2012-4576 e como podemos utilizá-la para obter execução de código no kernel do FreeBSD.

Esta vulnerabilidade foi reportada por Mateusz Guzik e o advisory [2] oficial do time de segurança do FreeBSD foi publicado no dia 22 de Novembro de 2012.

A falha ocorre devido a falta de validação em uma chamada de sistema. Como resultado, regiões de memória podem ser sobrescritas. A vulnerabilidade existe no módulo que adiciona a compatibilidade de execução de arquivos binários nativos do Linux no FreeBSD, então apenas sistemas que usam este recurso podem estar vulneráveis.

Todos os experimentos neste artigo foram realizados no sistema operacional FreeBSD 7.0, 8.2 e 9.0 arquitetura 32 bits (i386).

Continue reading “Entendendo e explorando o CVE-2012-4576 para o kernel do FreeBSD”

NullByte Security Conference – 4º Edição

No último Sábado (18/11) aconteceu a 4º edição da NullByte Security Conference. A NullByte Security Conference é uma conferência técnica em segurança da informação que acontece anualmente em Salvador, Bahia e que vem se consolidando entre as conferências técnicas de segurança da informação no Brasil. A conferência é limitada a 50 pessoas e as inscrições esgotaram bem antes da conferência mas o pessoal da organização abriu mais inscrições que totalizou 87 pessoas inscritas oficialmente nessa edição. Como de costume, esse ano a conferência apresentou trabalhos técnicos interessantes e de bastante relevância no mercado.

A conferência foi realizada no mesmo local da edição anterior, a Sala de Arte do Museu Geológico da Bahia. O local comportou muito bem a edição anterior e dessa vez não foi diferente. Não tenho ideia quantas pessoas estavam presentes ao certo, mas acredito que tanto na sala de apresentações (um cinema) quanto na área livre, todos estavam confortáveis. O bar/lanchonete começou a funcionar cedo e bem antes da conferência iniciar, então, quem chegou cedo, teve tempo suficiente de pegar uma bebida, comer algo e ainda bater um papo antes de assistir a primeira apresentação que demorou um pouco de começar. Os slides estão disponíveis aqui e algumas fotos postadas pelo pessoal podem ser encontradas aqui. Até o momento que olhei, somente duas apresentações tem os slides publicados.

Continue reading “NullByte Security Conference – 4º Edição”

An almost perfect vulnerability for kernel rootkits – Uma quase perfeita vulnerabilidade para carregar rootkits em kernel

English / Português

English:

Access to the kernel of a system means to get access to one of the most interesting part of a computer. When accessing the kernel, an attacker gets privilege to do many things one could not do in user space. Therefore, I started to think about vulnerabilities that allow to load kernel modules without proper permissions. After browsing a bit, I found out that similar vulnerabilities were found in the Linux kernel. The vulnerabilities identified by CVE-2013-7421 [1] and CVE-2014-9644 [2]. In fact these two CVEs are about the same vulnerability and they could be considered as duplicated CVEs. The first patch [3] did not really fix the problem and even so allowed exploitation. After a few days since the first patch, a new one [4] appeared and fixed the problem. This post was written based on my understanding of the information and references available on [5].

Português:

Acesso ao kernel de um sistema significa ganhar acesso a uma das partes mais interessantes de um computador. Ao acessar o kernel, um atacante ganha privilégio para fazer muitas coisas que não poderia ser feito no espaço de usuárioSendo assim, comecei a pensar em vulnerabilidades que permitissem carregar módulos no kernel sem os privilégios necessários. Depois de pesquisar um pouco, descobri que vulnerabilidades similares foram encontradas no kernel do Linux. As vulnerabilidades identificadas por CVE-2013-7421 [1] e CVE-2014-9644 [2]. Na verdade, estes dois CVEs representam a mesma vulnerabilidade, podendo ser considerados como CVEs duplicados. A primeira correção [3] não eliminava o problema por completo e ainda assim permitia a exploração. Após alguns poucos dias desde a primeira correção, uma nova [4] apareceu e corrigiu o problema. Este post foi escrito baseado na minha interpretação das informações e referências disponíveis em [5].

Continue reading “An almost perfect vulnerability for kernel rootkits – Uma quase perfeita vulnerabilidade para carregar rootkits em kernel”