Análise Profunda do ESE: De Árvores B+ a Artefatos do Windows
Explore o Extensible Storage Engine (ESE), o motor de armazenamento de dados da Microsoft, e como seus artefatos são cruciais em investigações de segurança. Este artigo detalha a estrutura de dados, o funcionamento das árvores B+ e a extração de informações valiosas.
MundiX News·18 de junho de 2026·15 min de leitura·👁 1 views
O Extensible Storage Engine (ESE), também conhecido como Jet Blue, é um componente fundamental no ecossistema do Windows, servindo como um motor de armazenamento de dados local para diversos componentes do sistema e servidores da Microsoft. Diferente do Jet Red (Microsoft Jet Database Engine) utilizado em aplicações como o Microsoft Access, o ESE opera através de chamadas de API e estruturas de dados específicas, sem a interface SQL tradicional. Arquiteturalmente, o ESE é um armazenamento ISAM (Indexed Sequential Access Method) baseado em páginas, que utiliza árvores B+ para organizar tabelas e índices. Cada arquivo de banco de dados é composto por páginas de tamanho fixo, onde tabelas e índices são representados por árvores de páginas distintas. Os dados são armazenados em nós folha, enquanto os nós internos contêm apenas chaves e referências para páginas filhas. A ligação entre páginas folha adjacentes permite o acesso sequencial eficiente, eliminando a necessidade de percorrer a árvore a partir da raiz a cada consulta. Essa estrutura suporta dois modos de acesso principais: "Indexed" para busca por chave e "Sequential" para percorrer a cadeia de páginas folha.
O formato ESE é encontrado em uma vasta gama de artefatos do Windows de interesse para analistas de segurança, incluindo bancos de dados do Active Directory, cache do Internet Explorer, filas do BITS (Background Intelligent Transfer Service), índices do Windows Search e bases de dados do Exchange. Para fins de Forense Digital e Resposta a Incidentes (DFIR), a capacidade de analisar automatizadamente esses arquivos é essencial para a normalização de dados e o desenvolvimento de detecções. Embora ferramentas com interface gráfica (GUI) possam ser úteis para visualização, a análise profunda e a extração automatizada frequentemente exigem o uso de bibliotecas de parsing. A utilização da API padrão do ESE pode ser restritiva devido à forte dependência da versão do sistema operacional e à dificuldade em lidar com arquivos corrompidos, uma ocorrência comum em investigações. Por isso, a comunidade de segurança desenvolveu bibliotecas de parsing em linguagens como Python (libesedb) e Go (go-ese). No entanto, muitas dessas implementações enfrentam desafios com "long values" (valores longos), reconstrução incorreta de chaves para árvores B+, montagem de "chunks" ou até mesmo a omissão de parsing de LV (Long Value), utilizando LID (Long Value Identifier) em vez do valor em si. Outro ponto crítico são as variações na estrutura do formato dependendo do tamanho da página (small page <= 8KB e large page > 8KB), que afetam cabeçalhos de página, flags de registros em árvores B+ e a interpretação de colunas "tagged". Ignorar esses detalhes pode levar a dados incorretos ou à perda de registros.
Para auxiliar no desenvolvimento e depuração de parsers ESE, é fundamental contar com ferramentas que permitam analisar a estrutura e o conteúdo dos bancos de dados. A utilidade esentutl, fornecida com o Windows, é uma ferramenta poderosa para interagir com arquivos ESE em baixo nível. Outras utilidades da Microsoft, como eseutil (com o Exchange) e ntdsutil (com o Active Directory), também podem ser usadas para leitura de arquivos ESE, sendo recomendável utilizar a versão correspondente à aplicação que gerou o arquivo para operações que modificam o banco de dados. Para uma visão mais amigável, o ESEDatabaseView da NirSoft oferece uma interface gráfica, embora possa apresentar instabilidades e não exibir "separated long values" de forma completa, sendo mais útil para obter uma visão geral da estrutura das tabelas. A análise detalhada da estrutura de páginas, incluindo cabeçalhos (PGHDR, PGHDR2), a área de dados e o array de tags, é crucial. A interpretação dos flags (fFlags) nas páginas determina o tipo de árvore (data, index, long value, space) e o papel da página (root, internal/branch, leaf, parent of leaf), influenciando diretamente como os dados são lidos. A estrutura LINE (key + payload) e KEYDATAFLAGS (key, data, flags) são os blocos de construção fundamentais, com particular atenção à compressão de chaves (fNDCompressed) que exige a reconstrução da chave completa a partir de um prefixo armazenado no cabeçalho externo da página e um sufixo na própria LINE. A compreensão da organização das colunas (fixed, variable, tagged) e a decodificação do cabeçalho do registro (RECHDR) são passos essenciais para extrair os dados de forma precisa, especialmente ao lidar com valores NULL e diferentes tipos de colunas.
🛡️⚡
Pare de pesquisar. Comece a hackear.
O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.
Sem cartão para começar · Planos a partir de R$49/mês
O Extensible Storage Engine (ESE), também conhecido como Jet Blue, é um componente fundamental no ecossistema do Windows, servindo como um motor de armazenamento de dados local para diversos componentes do sistema e servidores da Microsoft. Diferente do Jet Red (Microsoft Jet Database Engine) utilizado em aplicações como o Microsoft Access, o ESE opera através de chamadas de API e estruturas de dados específicas, sem a interface SQL tradicional. Arquiteturalmente, o ESE é um armazenamento ISAM (Indexed Sequential Access Method) baseado em páginas, que utiliza árvores B+ para organizar tabelas e índices. Cada arquivo de banco de dados é composto por páginas de tamanho fixo, onde tabelas e índices são representados por árvores de páginas distintas. Os dados são armazenados em nós folha, enquanto os nós internos contêm apenas chaves e referências para páginas filhas. A ligação entre páginas folha adjacentes permite o acesso sequencial eficiente, eliminando a necessidade de percorrer a árvore a partir da raiz a cada consulta. Essa estrutura suporta dois modos de acesso principais: "Indexed" para busca por chave e "Sequential" para percorrer a cadeia de páginas folha.
O formato ESE é encontrado em uma vasta gama de artefatos do Windows de interesse para analistas de segurança, incluindo bancos de dados do Active Directory, cache do Internet Explorer, filas do BITS (Background Intelligent Transfer Service), índices do Windows Search e bases de dados do Exchange. Para fins de Forense Digital e Resposta a Incidentes (DFIR), a capacidade de analisar automatizadamente esses arquivos é essencial para a normalização de dados e o desenvolvimento de detecções. Embora ferramentas com interface gráfica (GUI) possam ser úteis para visualização, a análise profunda e a extração automatizada frequentemente exigem o uso de bibliotecas de parsing. A utilização da API padrão do ESE pode ser restritiva devido à forte dependência da versão do sistema operacional e à dificuldade em lidar com arquivos corrompidos, uma ocorrência comum em investigações. Por isso, a comunidade de segurança desenvolveu bibliotecas de parsing em linguagens como Python (libesedb) e Go (go-ese). No entanto, muitas dessas implementações enfrentam desafios com "long values" (valores longos), reconstrução incorreta de chaves para árvores B+, montagem de "chunks" ou até mesmo a omissão de parsing de LV (Long Value), utilizando LID (Long Value Identifier) em vez do valor em si. Outro ponto crítico são as variações na estrutura do formato dependendo do tamanho da página (small page <= 8KB e large page > 8KB), que afetam cabeçalhos de página, flags de registros em árvores B+ e a interpretação de colunas "tagged". Ignorar esses detalhes pode levar a dados incorretos ou à perda de registros.
Para auxiliar no desenvolvimento e depuração de parsers ESE, é fundamental contar com ferramentas que permitam analisar a estrutura e o conteúdo dos bancos de dados. A utilidade esentutl, fornecida com o Windows, é uma ferramenta poderosa para interagir com arquivos ESE em baixo nível. Outras utilidades da Microsoft, como eseutil (com o Exchange) e ntdsutil (com o Active Directory), também podem ser usadas para leitura de arquivos ESE, sendo recomendável utilizar a versão correspondente à aplicação que gerou o arquivo para operações que modificam o banco de dados. Para uma visão mais amigável, o ESEDatabaseView da NirSoft oferece uma interface gráfica, embora possa apresentar instabilidades e não exibir "separated long values" de forma completa, sendo mais útil para obter uma visão geral da estrutura das tabelas. A análise detalhada da estrutura de páginas, incluindo cabeçalhos (PGHDR, PGHDR2), a área de dados e o array de tags, é crucial. A interpretação dos flags (fFlags) nas páginas determina o tipo de árvore (data, index, long value, space) e o papel da página (root, internal/branch, leaf, parent of leaf), influenciando diretamente como os dados são lidos. A estrutura LINE (key + payload) e KEYDATAFLAGS (key, data, flags) são os blocos de construção fundamentais, com particular atenção à compressão de chaves (fNDCompressed) que exige a reconstrução da chave completa a partir de um prefixo armazenado no cabeçalho externo da página e um sufixo na própria LINE. A compreensão da organização das colunas (fixed, variable, tagged) e a decodificação do cabeçalho do registro (RECHDR) são passos essenciais para extrair os dados de forma precisa, especialmente ao lidar com valores NULL e diferentes tipos de colunas.
📤 Compartilhar & Baixar
🧰 Ferramentas recomendadas
Divulgação: alguns links são patrocinados. Podemos receber comissão se você comprar — sem custo extra para você. Só indicamos o que faz sentido para a comunidade.