A sua malha de testes O seu analisador estático O seu engenheiro de QA O seu ciclo de feedback com IA em minutos
Para dispositivos embebidos, servidores de alto desempenho, ambientes complexos e praticamente qualquer software do mundo.
Confiança em três camadas na cibersegurança através de análise estática, testes e monitorização em tempo de execução
Análise estática
Verificar o código através de model checking, interpretação abstrata e solucionadores SMT.
Testes
Verificar que uma frota de dispositivos e hosts funciona como esperado no produto inteiro.
Tempo de execução
Verificar que cada dispositivo e host faz aquilo que se espera dele.
A criar testes avançados sozinho? Sim, e isso é pura magia.
pub fn handle(ctx: &Ctx, req: &Request) -> Result<Response> { let peer = req.peer; ctx.auth.bearer(&req.token)?; // authorization ctx.limiter.check(peer)?; // rate limit verify_md5(&req.frame, req.checksum)?; // checksums let sock = mptcp_connect(peer)?; // MPTCP ctx.link.delay(Duration::from_millis(80)); // link delay ctx.router.dispatch(peer, sock)}
Analise o código como um atacante. Em tempo real, dentro do seu agente de IA.
> Implementa suporte para palavras-passe de uso único. Verifica que está matematicamente correto.
uint32_t hotp(const uint8_t *secret, size_t len, uint64_t counter) { uint8_t msg[8]; for (int i = 7; i >= 0; --i) { msg[i] = uint8_t(counter); counter >>= 8; } uint8_t mac[20]; hmac_sha1(secret, len, msg, sizeof msg, mac); int off = mac[19] & 0x0f; uint32_t bin = (mac[off] << 24) | (mac[off + 1] << 16) | (mac[off + 2] << 8) | mac[off + 3]; return bin % 1000000;} bool verify(const uint8_t *secret, size_t len, uint64_t counter, const char *code) { char want[7]; std::snprintf(want, sizeof want, "%06u", hotp(secret, len, counter)); char got[7]; std::strncpy(got, code, sizeof got); return std::strcmp(got, want) == 0;}
otp.cpp:20:20 error arithm/integer/overflow MISRA 12.4
Possível transbordo de inteiro
mac[off] é promovido a int, por isso o bit 31 é o bit de sinal. A RFC 4226 §5.4 manda mascarar o byte com 0x7f antes do deslocamento; sem a máscara o deslocamento é indefinido e cerca de metade dos contadores produz um código que nenhum autenticador padrão aceita.
fix(mac[off] & 0x7f) << 24
otp.cpp:31:5 error cpp/string/no_null_terminator MISRA 21.17
O buffer pode ficar sem terminador nulo
strncpy não escreve o NUL final quando a origem atinge o limite de tamanho. Se o código submetido tiver sete ou mais caracteres, got fica sem terminador e o strcmp seguinte lê para lá do buffer. O código é enviado por quem se está a autenticar.
fixgot[sizeof got - 1] = '\0';
2 problemas · o ficheiro compila sem avisos
Não confie às cegas. Execute. Recolha provas.
Ports:
- tcp 0.0.0.0:22 LISTEN (pid=412 sshd)
- tcp 0.0.0.0:443 LISTEN (pid=980 nginx)
- udp 0.0.0.0:123 LISTEN (pid=377 ntpd)
- tcp 0.0.0.0:2375 LISTEN (pid=1544 dockerd)
Persistence files:
- [systemd] /etc/systemd/system/agent.service mode 0644 uid 0
- [cron] /etc/cron.d/backup mode 0666 uid 0
- [profile] /etc/profile.d/env.sh mode 0644 uid 0
Binaries:
- /usr/bin/agent [aarch64 64-bit LE pie] libc=musl cc="gcc 12.2.0"
- /usr/bin/updater [aarch64 64-bit LE pie] libc=musl cc="gcc 12.2.0"
Binary hardening: NX 2/2, PIE 2/2, RELRO 2/2 (full 1), canary 1/2, fortify 0/2; 0 static, 0 stripped
Check failed
Violações
port high
Open port 2375 (tcp) does not match any policy rule
esperadomatching port-norm rule
obtidono matching rule (port/proto/state/process)
persistence critical ATT&CK T1053.003
Persistence file '/etc/cron.d/backup' (cron) is world-writable
esperadonot world-writable
obtidoworld-writable
hardening medium ATT&CK T1055
Binary '/usr/bin/agent' lacks required mitigation: stack canary
esperadostack canary
obtidomissing
Found 3 violation(s)
Análise estática, testes e execução. Uma plataforma: o Midair.
Os nossos clientes trabalham em setores diferentes.
Equipamento de rede
Um router Wi-Fi é uma pilha completa: o bootloader U-Boot, o firmware e a gestão na cloud. Construímos tudo, testamos a segurança e dizemos o que corrigir. O suporte continua depois do lançamento.
- OpenWRT
- Sistemas de build personalizados
- Kernel
- Drivers
- DPDK e TRex
- U-Boot
- Implementações de túneis
- Aceleradores de rede em hardware
- MPTCP
- Wi-Fi
- Wi-Fi mesh
- Quase todos os protocolos de rede comuns
Wearables e smartphones
Um wearable ou um telemóvel precisa de hardware e software que encaixem um no outro. Desenhamos os dois, desde a escolha da plataforma até todo o software.
- Portar o Android para novas plataformas
- Wearables em Atmel, Microchip, Nordic nRF, ESP32 e outras plataformas
- Portar o U-Boot
Servidores de alto desempenho
Rust e C++ são as nossas linguagens para servidores. A velocidade e a segurança vêm primeiro no desenho.
- Portais de gestão na cloud para equipamento de rede
- Sistemas de alta carga para análise e testes
- DPDK e aceleração de tráfego de rede
Ferramentas para programadores
Desenvolvemos linguagens de programação e ajudamos a afinar o seu desenho. As ferramentas de análise estática e dinâmica e os depuradores vêm da mesma equipa.
- Analisadores e verificações personalizadas para projetos
- IDEs completos, criados de raiz
- Compiladores
- Desenho e implementação de novas linguagens de programação
Segurança e engenharia inversa
Há sistemas que têm de ser seguros, seja qual for o setor, e são esses que construímos. As VPNs têm atenção especial. A engenharia inversa ética é outra opção.
- Engenharia inversa de plataformas não documentadas baseadas em Windows, Windows Mobile, Windows Phone e Android
- Análise de malware
- Resposta a incidentes
- Red teaming
Blockchain
O nosso trabalho em blockchain cobre provas de conhecimento zero e o desenvolvimento de clientes. As toolchains para RISC-V e para a zkVM fazem parte disso.
- Otimização do desempenho de clientes
- Desenvolvimento de zkVM
- Compiladores e toolchains personalizados
Interpretica
Contacte-nos
Descreva o seu sistema e o que precisa de construir, testar ou proteger. Respondemos por email.
Setor
Comece no nível que o seu projeto precisa.
Free
€0
Explore o Midair num projeto pequeno, num protótipo ou numa avaliação inicial.
O plano Free inclui- Análise estática básica
- Visão geral de dependências
- Validação limitada de projeto
- Suporte da comunidade
Professional
€90por utilizador / mês
Ligue a análise, os testes distribuídos e os dados de execução num único fluxo de produção.
Tudo do Free, mais- Configuração rápida em cloud
- Análise estática avançada com o Visao
- Testes distribuídos com o TS Factory
- Insights de execução com o Delta
- Integração CI/CD
- Integração com fluxos de I&D e assistidos por IA existentes
- Relatórios automáticos
- Suporte prioritário
Team
€990por mês
Coordene o Midair em vários projetos e camadas do sistema.
Tudo do Professional, mais- Implementação em cloud ou on-premises
- 10 utilizadores incluídos
- Análise de dependências entre projetos
- Dashboards multi-camada
- Análises de projeto e de equipa
- Onboarding dedicado do projeto
Enterprise
Sob medida
Adapte o Midair a um ambiente de grande escala, embebido ou regulado.
Tudo do Team, mais- Utilizadores ilimitados
- Regras Visao personalizadas
- Integrações personalizadas
- Fluxos de trabalho e relatórios específicos do projeto
- Integração personalizada de fluxos de IA
- Suporte de engenharia dedicado
Notas do nosso trabalho. Escritas por quem o faz.
The research behind Visao: how Equid became our static analyzer
Before Visao was a product, it was a research project called Equid - a language-agnostic static analysis framework built to close the gap between academic verifiers and real ind...
Ler o artigoEmbedded testing diary #2: Reproducible tests
A test result only means something if you know what changed between two runs. Here is how reproducibility works in embedded testing: resets, device state, network isolation, and...
Ler o artigo