Playing with Sandbox: An analysis of Capsicum

Introduction

In this post, we will talk about sandbox. Researchers who work and study software exploitation probably know the concept. When properly implemented on a system, this kind of feature makes it harder to compromise the system. On Wikipedia, we have a good description of the concept:

“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 processes. Basically, we have a process with least privileges (target) and another process with greater privileges (broker). If the process with least privileges needs to execute an operation that is not allowed, a request is sent to the broker. Then, the broker checks whether the operation is allowed to be executed. If so, it executes, acknowledges the execution and returns a value to the target when needed. Sandboxes is used to protect the application and can also be used to provide a restricted and safe environment for execution and testing of malicious binaries. As an example, the Cuckoo Sandbox that is used for malware analysis.

In this post, we will talk about Capsicum [1]. It is a sandbox technology developed by the University of Cambridge. Capsicum support has already being implemented for several popular commands in the FreeBSD operating system, such as tcpdump [2], hastd, dhclient, kdump and sshd [3]. The experimental version was developed for FreeBSD [5] and was available since version 9.0. This sandbox adds two new features to the system, capability mode and capabilities.

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

Uma análise do CVE-2012-0217

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

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”