Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
GoTEE — Ambiente de Execução Confiável (TEE) em Go | Kitploit
Ferramentas/GitHubGitHub/usbarmory/gotee
Segurança de Sistemas EmbarcadosVirtualização para SegurançaSegurança de Hardware
GitHubusbarmory/gotee

GoTEE

Ambiente de Execução Confiável (TEE) em Go

Ver Repositório
15213há 2 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Introdução

O framework GoTEE implementa a instanciação concorrente de unikernels baseados em TamaGo em modos privilegiado e não privilegiado, interagindo entre si através do modo monitor e de chamadas de sistema personalizadas.

Com essas capacidades, o GoTEE implementa um Ambiente de Execução Confiável (TEE) baseado em TamaGo, trazendo a segurança de memória, a conveniência e as capacidades do Go para execução em bare metal no Mundo Seguro ARM TrustZone ou em Ambientes de Execução Supervisor RISC-V.

O GoTEE pode supervisionar Trusted Applets freestanding baseados em Go puro, Rust ou C, que implementam a API GoTEE, bem como qualquer sistema operacional capaz de executar no Mundo Normal ARM TrustZone ou no modo S RISC-V, como Linux.

Recursos

  • Contextos de execução isolados para modo User ARM, Mundo Normal TrustZone ou Modo Supervisor RISC-V

  • Soft lockstep oportunista para detecção de falhas

  • API para implementação de Trusted OS (Syscall, JSON-RPC e handlers de exceção)

Documentação

Go Reference

A documentação principal, que inclui um tutorial, pode ser encontrada na wiki do projeto.

A documentação da API do pacote pode ser encontrada em pkg.go.dev.

Hardware suportado

A tabela a seguir resume os SoCs e placas atualmente suportados.

Exemplo de aplicação

Na nomenclatura TEE, o unikernel privilegiado é comumente referido como Trusted OS, enquanto o não privilegiado representa um Trusted Applet.

O exemplo do GoTEE demonstra a operação concorrente de unikernels Go atuando como Trusted OS, Trusted Applet e Main OS.

[!WARNING] O Main OS pode ser qualquer sistema operacional "rico" (ex.: Linux); o TamaGo é simplesmente usado para um exemplo autocontido. O mesmo se aplica ao Trusted Applet, que pode ser qualquer aplicação bare metal capaz de executar em modo usuário e implementar a API GoTEE, como programas freestanding em C ou Rust.

Um exemplo em Rust pode ser usado substituindo trusted_applet_go por trusted_applet_rust na compilação.

A combinação de trusted OS/applet de exemplo realiza testes básicos de execução concorrente de três unikernels TamaGo em diferentes níveis de privilégio:

  • Trusted OS (ARM: modo sistema do Mundo Seguro TZ, RISC-V: modo M)
  • Trusted Applet (ARM: modo usuário do Mundo Seguro TZ, RISC-V: modo S)
  • Main OS (ARM: modo sistema do Mundo Normal TZ, RISC-V: modo S)

O Main OS retorna o controle com uma chamada de monitor.

O Trusted Applet dorme por 5 segundos antes de tentar ler a memória do Trusted OS, o que dispara uma exceção tratada pelo supervisor, que encerra o Trusted Applet.

A interface syscall do GoTEE é implementada para comunicação entre o Trusted OS e o Trusted Applet.

Quando executado no USB armory Mk II, o exemplo de aplicação é acessível via SSH através de Ethernet via USB (protocolo ECM, suportado em hosts Linux e macOS):

root@kitploit:~
$ ssh [email protected]
tamago/arm • TEE security monitor (Secure World system/monitor)

allgptr                                          # memory forensics of applet goroutines
csl                                              # show config security levels (CSL)
csl             <periph> <slave> <hex csl>       # set config security level (CSL)
dbg                                              # show ARM debug permissions
exit, quit                                       # close session
gotee                                            # TrustZone example w/ TamaGo unikernels
help                                             # this help
linux           <uSD|eMMC>                       # boot NonSecure USB armory Debian base image
lockstep        <fault %>                        # tandem applet example w/ fault injection
peek            <hex offset> <size>              # memory display (use with caution)
poke            <hex offset> <hex value>         # memory write   (use with caution)
reboot                                           # reset device
sa                                               # show security access (SA)
sa              <id> <secure|nonsecure>          # set security access (SA)
stack                                            # stack trace of current goroutine
stackall                                         # stack trace of all goroutines

>

O exemplo pode ser iniciado com o comando gotee, que executa o Main OS duas vezes para demonstrar o comportamento antes e depois de as restrições do TrustZone entrarem em vigor, usando periféricos de hardware reais.

Além disso, o comando linux pode ser usado para iniciar a imagem base Debian do USB armory como Main OS não seguro.

[!NOTE] Apenas versões da imagem base Debian do USB armory >= 20211129 são suportadas para operação não segura.

gotee

O exemplo também pode ser executado sob emulação QEMU.

[!NOTE] Execuções emuladas realizam testes parciais devido à falta de suporte completo a TrustZone/PMP por parte do QEMU.

root@kitploit:~
make qemu
...
> gotee
00:00:00 tamago/arm • TEE security monitor (Secure World system/monitor)
00:00:00 SM loaded applet addr:0x9c000000 entry:0x9c072740 size:4940275
00:00:00 SM loaded kernel addr:0x80000000 entry:0x8007100c size:4577643
00:00:00 SM waiting for applet and kernel
00:00:00 SM starting mode:USR sp:0x9e000000 pc:0x9c072740 ns:false
00:00:00 SM starting mode:SYS sp:0x00000000 pc:0x8007100c ns:true
00:00:00 tamago/arm (go1.19.1) • TEE user applet
00:00:00 tamago/arm (go1.19.1) • system/supervisor (Non-secure)
00:00:00 supervisor is about to yield back
00:00:00 SM stopped mode:SYS sp:0x8146bf54 lr:0x801937a4 pc:0x80193884 ns:true err:exit
00:00:00 applet obtained 16 random bytes from monitor: b4cc4764dd30291a52545b182313003c
00:00:00 applet requests echo via RPC: hello
00:00:00 applet received echo via RPC: hello
00:00:00 applet will sleep for 5 seconds
00:00:01 applet says 1 mississippi
...
00:00:05 applet says 5 mississippi
00:00:05 applet is about to read secure memory at 0x98010000
00:00:05    r0:98010000  r1:9c8240c0  r2:98010000  r3:00000000
00:00:05    r4:00000000  r5:00000000  r6:00000000  r7:9c86bec8
00:00:05    r8:00000007  r9:0000003d r10:9c8020f0 r11:9c342f41 cpsr:600001d7 (ABT)
00:00:05   r12:00000061  sp:9c86bf08  lr:9c1b1be8  pc:9c011330 spsr:600001d0 (USR)
00:00:05 SM stopped mode:USR sp:0x9c86bf08 lr:0x9c1b1be8 pc:0x9c011330 ns:false err:ABT

Compilando o compilador

Compile o compilador TamaGo (ou use a última versão binária):

root@kitploit:~
wget https://github.com/usbarmory/tamago-go/archive/refs/tags/latest.zip
unzip latest.zip
cd tamago-go-latest/src && ./all.bash
cd ../bin && export TAMAGO=`pwd`/go

Compilando e executando em alvos ARM

Compile o trusted applet de exemplo e os executáveis do kernel da seguinte forma:

root@kitploit:~
git clone https://github.com/usbarmory/GoTEE-example
cd GoTEE-example && export TARGET=usbarmory && make nonsecure_os_go && make trusted_applet_go && make trusted_os

[!NOTE] Substitua trusted_applet_go por trusted_applet_rust para um exemplo de TA em Rust; isso requer Rust nightly e a toolchain armv7a-none-eabi.

Os executáveis finais são criados no subdiretório bin; trusted_os_usbarmory.imx deve ser usado para execução nativa.

Os seguintes alvos estão disponíveis:

TARGETPlacaExecução e depuração
usbarmoryUSB armory Mk IIusbarmory

Os alvos suportam execução nativa (consulte os links de documentação relevantes na tabela acima), bem como execução emulada (ex.: make qemu).

Compilando e executando em alvos RISC-V

Compile o trusted applet de exemplo e os executáveis do kernel da seguinte forma:

root@kitploit:~
git clone https://github.com/usbarmory/GoTEE-example
cd GoTEE-example && export TARGET=sifive_u && make nonsecure_os_go && make trusted_applet_go && make trusted_os

[!NOTE] Substitua trusted_applet_go por trusted_applet_rust para um exemplo de TA em Rust; isso requer Rust nightly e a toolchain riscv64gc-unknown-none-elf.

Os executáveis finais são criados no subdiretório bin.

Alvos disponíveis:

TARGETPlacaExecução e depuração
sifive_uQEMU sifive_usifive_u

O alvo só foi testado com execução emulada (ex.: make qemu)

Aplicações que usam GoTEE

  • ArmoredWitness - rede de testemunhas entre ecossistemas

Autores

Andrea Barisani
[email protected]

Andrej Rosano
[email protected]

Licença

GoTEE | https://github.com/usbarmory/GoTEE
Copyright (c) Os autores do GoTEE. Todos os direitos reservados.

Estes arquivos de código-fonte são distribuídos sob a licença estilo BSD encontrada no arquivo LICENSE.

Baixar ferramenta
SoCPlacaPacote SoCPacote da placa
NXP i.MX6ULZUSB armory Mk IIimx6ulusbarmory/mk2
NXP i.MX6ULLMCIMX6ULL-EVKimx6ulmx6ullevk
SiFive FU540QEMU sifive_ufu540qemu/sifive_u