Contornando Bloqueios em um Aplicativo iOS: VLESS + Reality via sing-box e os Obstáculos no Caminho

Contornando Bloqueios em um Aplicativo iOS: VLESS + Reality via sing-box e os Obstáculos no Caminho

Um relato técnico sobre como a equipe do mensageiro RCQ implementou a tecnologia VLESS + Reality com sing-box para contornar bloqueios em seu aplicativo iOS. O artigo detalha as escolhas de design, os desafios de infraestrutura e as lições aprendidas, focando em como manter o aplicativo funcional em ambientes com censura.

MundiX News·23 de maio de 2026·10 min de leitura·👁 21 views

rcq 19 minutos atrás Contornando Bloqueios em um Aplicativo iOS: VLESS + Reality via sing-box e os Obstáculos no Caminho Médio 6 min 499 Swift * Go * Segurança da Informação * Tecnologias de Rede * iOS * Caso de Uso Da Caixa de Areia

Nós desenvolvemos um mensageiro. Na primavera de 2026, nosso backend começou a falhar para alguns usuários na Rússia: as requisições HTTPS para a API expiravam, o WebSocket não subia. A situação é familiar para todos que mantêm um serviço com um único domínio e um único IP.

Para um mensageiro, isso é uma sentença de morte. Não é “inconveniente”, é uma sentença de morte: um aplicativo que nem consegue se conectar é inútil. E a opção “peça ao usuário para primeiro ativar a VPN” não nos agradava nem um pouco. Abaixo, detalharei por que acabamos integrando o contorno diretamente no aplicativo, em que ele funciona e em quais obstáculos tropeçamos. Sem marketing, direto ao ponto.

Por que não “apenas VPN”

A primeira ideia de todos é a mesma: que o usuário instale uma VPN. Mas, se você olhar para isso com os olhos do produto, tudo desmorona.

Primeiro, isso mata o funil. Cada etapa adicional até que “o aplicativo funcione” custa uma parte da sua audiência, e “instale e configure um aplicativo separado” não é uma etapa, é um abismo. É especialmente doloroso que a parte dos usuários que mais precisa do produto seja exatamente a que falha.

Segundo, a própria VPN é um alvo móvel. Protocolos populares (OpenVPN, WireGuard, IKEv2) são detectados há muito tempo e bem por assinaturas, os intervalos de provedores de VPN conhecidos são cortados em massa. Ou seja, você delega uma função crítica para você a um aplicativo de terceiros, que amanhã pode parar de funcionar por conta própria.

Queríamos um comportamento diferente: o usuário abre o mensageiro e ele funciona. Sem um aplicativo separado, sem uma assinatura de um serviço de terceiros, sem um perfil de VPN nas configurações do sistema iOS. O contorno deve ser um detalhe de implementação, e não uma tarefa do usuário.

O que exatamente está sendo bloqueado

Para entender o que consertar, você precisa entender o que está quebrando. Temos um esquema bastante típico: API HTTPS e WebSocket no mesmo domínio. Bloquear essa conexão pode ser feito de várias maneiras, e geralmente elas são combinadas:

  • Por endereço IP do servidor;
  • Por nome de domínio em ClientHello (o campo SNI é enviado em texto simples, mesmo em TLS);
  • Por DPI, que olha para a própria estrutura do tráfego e reconhece o protocolo.

Uma conexão TLS normal para o seu domínio é cortada por SNI em um instante. Portanto, a tarefa é formulada da seguinte forma: a conexão deve parecer uma chamada para algum outro host, sem nada de especial e obviamente permitido. Não “criptografar mais”, mas sim “parecer diferente”.

Por que VLESS e Reality

Um pouco de história, é importante aqui. Shadowsocks e VMess, em seu tempo, resolveram exatamente essa tarefa, e por algum tempo resolveram bem. O problema é a sondagem ativa: o censor não apenas observa seu tráfego passivamente, ele mesmo envia uma solicitação de teste para um servidor suspeito. Se o servidor responder como um proxy (e as primeiras implementações responderam de forma reconhecível), o endereço vai para o bloco. Além disso, assinaturas passivas foram acumuladas, pelas quais o “tráfego de proxy” diferia do HTTPS normal.

Reality resolve isso com um truque cuidadoso. O servidor proxy não apresenta seu próprio certificado TLS. Em vez disso, durante o handshake, ele faz proxy do TLS-handshake para um site real, de terceiros e popular. Para um observador passivo e para um testador ativo, seu servidor é indistinguível desse site: certificado válido, handshake válido, cadeia válida. E somente o cliente, que possui a chave pública correta, após o handshake “muda” para o túnel real. A sondagem de terceiros não tem para que mudar, ela vê um site grande normal.

o que isso dá na prática:

  • Não há seu próprio domínio, que pode ser inserido no bloco por SNI;
  • Não há seu próprio certificado, pelo qual você pode identificar “este é um proxy”;
  • A sondagem ativa se baseia em um site legítimo de terceiros.

VLESS aqui é um transporte leve sem sua própria camada de criptografia (a criptografia é assumida pelo TLS), com uma impressão digital pequena e sem expressão. E o fluxo xtls-rprx-vision suaviza ainda mais o padrão “TLS dentro de TLS”, que, caso contrário, é visível pelos tamanhos característicos dos pacotes.

Não inventamos nada disso. Reality e sing-box são trabalho de outras pessoas, e muito bom. A parte interessante começou mais tarde: como colocar isso dentro de um aplicativo normal para que o usuário não percebesse nada.

sing-box dentro do aplicativo

sing-box é uma plataforma proxy universal em Go e, entre outras coisas, pode ser um cliente VLESS + Reality. Normalmente, ele é executado como um processo separado com uma configuração. Não precisamos de um processo separado, precisamos que ele viva dentro do aplicativo iOS.

Isso é ajudado pelo gomobile. Através do gomobile bind O código Go é compilado em nativo .xcframework , que é vinculado ao aplicativo como uma dependência normal. Ou seja, sing-box não é um CLI próximo a nós, mas um framework dentro do binário. Executamos diretamente no processo do aplicativo.

sing-box, iniciado dessa forma, abre um inbound local (tipo mixed, ou seja, SOCKS e HTTP ao mesmo tempo) em 127.0.0.1 em uma porta aleatória. Em seguida, há uma bifurcação, e ela é fundamental.

Você pode fazer uma VPN do sistema via NEPacketTunnelProvider : então todo o tráfego do dispositivo passará pelo túnel. Você pode fazer um proxy no nível do aplicativo: então apenas o tráfego do seu aplicativo passará pelo túnel. Escolhemos a segunda opção, e é por isso. Não precisamos direcionar todo o telefone pelo relay, precisamos entregar apenas o tráfego do mensageiro ao servidor. E como é assim, então a Network Extension com sua arquitetura, um processo de extensão separado, limites de memória e perguntas adicionais na revisão na App Store, simplesmente não precisamos. Menos peças móveis, menos pontos de falha.

Na prática, isso se parece com o seguinte: sing-box executa um proxy local, e a pilha de rede do aplicativo ( URLSession ) envolvemos nesse endereço local.

swift
let config = URLSessionConfiguration.default
config.connectionProxyDictionary = [
    "SOCKSEnable": 1,
    "SOCKSProxy": "127.0.0.1",
    "SOCKSPort": localPort,
]

Todo o resto do telefone não é afetado, nenhum perfil de VPN aparece nas configurações. A desvantagem da abordagem é honesta: esta não é uma VPN universal, outros aplicativos não passarão por ela. Mas não precisávamos disso.

A configuração para sing-box é gerada em tempo de execução. Se você remover o desnecessário, o núcleo ficará assim:

json
{
  "inbounds": [{
    "type": "mixed",
    "listen": "127.0.0.1",
    "listen_port": 0
  }],
  "outbounds": [{
    "type": "vless",
    "server": "RELAY_ADDR",
    "server_port": 443,
    "uuid": "...",
    "flow": "xtls-rprx-vision",
    "tls": {
      "enabled": true,
      "server_name": "www.site-grande-terceiro.com",
      "utls": { "enabled": true, "fingerprint": "chrome" },
      "reality": {
        "enabled": true,
        "public_key": "...",
        "short_id": "..."
      }
    }
  }]
}

Separo utls com impressão digital chrome . A implementação TLS padrão do Go tem seu próprio ClientHello reconhecível, e esta é uma assinatura em si. uTLS substitui ClientHello para que ele corresponda ao Chrome real. O detalhe é pequeno, mas é desses pequenos detalhes que se forma “parece um navegador normal”.

Obstáculos com relay

Agora, pelo que valeu a pena escrever este artigo. Com o protocolo, tudo acabou bem. Passamos pelos obstáculos na infraestrutura.

O primeiro relay foi configurado em um VPS barato de um hoster típico. O endereço queimou rapidamente. Os intervalos de data centers e hospedagem, nos quais historicamente há muitos proxies, são rastreados e cortados, seja preventivamente, seja de forma muito operacional. Reality esconde perfeitamente o protocolo, mas não esconde o fato de que “o tráfego vai para um IP de um intervalo suspeito”.

Transferimos o relay para um endereço no intervalo de um grande provedor de nuvem. E aqui ele vive. A lógica é simples: cortar o espaço de endereço de uma grande nuvem por atacado é caro em termos de danos colaterais, há uma massa de serviços legítimos nos mesmos endereços que ninguém quer quebrar.

A conclusão que tiramos para nós mesmos: com Reality, o ponto fraco não é o protocolo, mas o IP. É o endereço que queima. Portanto, o relay é, por definição, um consumível, e deve ser tratado como um consumível.

O endereço do relay não deve ser embutido no binário

Consequência direta do item anterior. Se o endereço do relay estiver hardcoded no aplicativo, então o IP queimado significa um novo lançamento na App Store e aguardar a revisão. Para um consumível que pode queimar a qualquer momento, isso é inaceitável.

Portanto, os parâmetros do relay (endereço, chaves, SNI) o aplicativo deve receber separadamente de sua compilação. Então, a alteração do relay é uma alteração da configuração, e não um ciclo de lançamento. O mecanismo específico de entrega da configuração pode ser diferente, o princípio em si é importante: o que queima com frequência não vive no binário.

Honestidade sobre limites

O túnel não é mágica, e vendê-lo como mágica é desonesto.

O operador do relay (no nosso caso, nós mesmos) vê seu tráfego para nossos servidores da mesma forma que seu provedor o veria com uma conexão direta. O túnel muda a aparência da conexão para o censor no caminho e não muda quem está nas extremidades. O conteúdo da correspondência é, em qualquer caso, protegido por criptografia de ponta a ponta no nível do aplicativo (libsignal), e o túnel não adiciona nem subtrai nada a isso. É importante separar isso: contornar bloqueios e a privacidade da correspondência são duas tarefas diferentes que são resolvidas por diferentes camadas.

Reality mantém bem a sondagem ativa, mas “para sempre” não existe nesta área. Os IPs queimam, as assinaturas se acumulam, os métodos de detecção se desenvolvem. Esta é uma corrida, e você precisa tratá-la como uma corrida: ter uma reserva de endereços, ser capaz de alterá-los rapidamente, monitorar o que exatamente falhou.

Em nosso caso, o contorno está desativado por padrão. O aplicativo primeiro tenta se conectar diretamente, e somente se a conexão direta não for bem-sucedida, ele levanta o túnel. Não faz sentido direcionar o tráfego pelo relay onde a rede já está aberta.

O que tirar deste texto

Se você estiver resolvendo um problema semelhante, três coisas que economizarão seu tempo:

  • Um proxy no nível do aplicativo geralmente é melhor do que uma VPN do sistema. Se você só precisa entregar seu tráfego ao servidor, NEPacketTunnelProvider é uma complexidade desnecessária. Um inbound local mais connectionProxyDictionary resolve o problema com menos esforço.
  • O protocolo é a parte fácil. VLESS + Reality + sing-box é um problema resolvido, tudo já foi escrito antes de você. A parte difícil é a infraestrutura: quais endereços você usa, com que rapidez você os altera, como você monitora tudo isso.
  • Planeje a rotação desde o primeiro dia. Não “algum dia colocaremos o relay na configuração”, mas imediatamente. Porque o primeiro IP queimado mostrará se você tem rotação ou não, e descobrir isso na produção é desagradável.

Tudo o que foi descrito vive em nosso mensageiro RCQ, agora está em beta aberto no iOS. O cliente para iOS é de código aberto, então, se desejar, você pode ver exatamente como o trabalho com o transporte é organizado, e não acreditar na palavra: github.com/rcq-messenger/rcq-ios

Se você está fazendo algo semelhante e encontrou seus obstáculos na infraestrutura, conte nos comentários, especialmente interessante sobre a prática de rotação de endereços.

Tags: contorno de bloqueios VLESS Reality sing-box XTLS proxy censura iOS Swift gomobile

Hashes: Swift Go Segurança da Informação Tecnologias de Rede iOS

🛡️⚡

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.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 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.

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Com centenas de ferramentas pré-instaladas, a distribuição Kali Linux facilita o trabalho de os profissionais de segurança começarem a fazer testes de segurança rapidamente. No entanto, com mais de 600 ferramentas em seu arsenal, o Kali Linux também pode ser desafiador. A nova edição deste prático livro abrange as atualizações nas ferramentas e inclui uma melhor abordagem da análise forense e da engenharia reversa. Ric Messier, autor, não fica apenas no teste de segurança, mas também faz uma abordagem sobre a execução de análise forense, incluindo a análise em disco e na memória, assim como alguma análise básica de malware. • Explore as diversas ferramentas disponíveis no Kali Linux • Entenda o valor do teste de segurança e examine os tipos de teste disponíveis • Aprenda os aspectos básicos do pentest em todo o ciclo de vida do ataque • Instale o Kali Linux em vários sistemas, tanto físicos quanto virtuais • Descubra como usar diferentes ferramentas destinadas à segurança • Estruture um teste de segurança baseado nas ferramentas do Kali Linux • Estenda as ferramentas do Kali para criar técnicas de ataque avançadas • Use o Kali Linux para ajudar a criar relatórios quando o teste terminar “A abordagem concisa, clara e baseada na experiência adotada por Ric Messier para a introdução do Kali Linux e dos testes de cibersegurança é incomparável. Este livro é uma leitura excelente e acessível para iniciantes e um recurso valioso para qualquer pessoa.” —Alexander Arlt, Consultor sênior de segurança, Google

Ver na Amazon
Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Compatível com portas USB-C e USB-A, ideal para ampliar a conectividade de dispositivos como MacBook Pro e outros com portas USB-C. Inclui um adaptador USB-A extra, proporcionando uma conexão Ethernet estável e veloz de até 1 Gbps, perfeita para filmes, jogos online e videoconferências. Oferece três portas USB 3.0 com velocidades de transferência de até 5 Gbps, permitindo conectar mouse, teclado, discos rígidos e outros periféricos. Fabricado em alumínio durável, garantindo longa vida útil e resistência ao uso diário. Design compacto e leve, ideal para viagens de negócios e uso diário, facilitando o transporte e armazenamento. Funciona com Windows 10/8.1/8, Mac OS e Chrome OS, oferecendo versatilidade incomparável para diversas necessidades de conectividade. Assegura uma conectividade estável e rápida, perfeita para tarefas exigentes como transferência de dados, streaming e mais.

Ver na Amazon
Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs is a crash course on web API security testing that will prepare you to penetration-test APIs, reap high rewards on bug bounty programs, and make your own APIs more secure. You'll learn how REST and GraphQL APIs work in the wild and set up a streamlined API testing lab with Burp Suite and Postman. Then you'll master tools useful for reconnaissance, endpoint analysis, and fuzzing, such as Kiterunner and OWASP Amass. Next, you'll learn to perform common attacks, like those targeting an API's authentication mechanisms and the injection vulnerabilities commonly found in web applications. You'll also learn techniques for bypassing protections against these attacks. In the book's nine guided labs, which target intentionally vulnerable APIs, you'll practice: Enumerating APIs users and endpoints using fuzzing techniques Using Postman to discover an excessive data exposure vulnerability Performing a JSON Web Token attack against an API authentication process Combining multiple API attack techniques to perform a NoSQL injection Attacking a GraphQL API to uncover a broken object level authorization vulnerability

Ver oferta
Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Up-to-date strategies for thwarting the latest, most insidious network attacks This fully updated, industry-standard security resource shows, step by step, how to fortify computer networks by learning and applying effective ethical hacking techniques. Based on curricula developed by the authors at major security conferences and colleges, the book features actionable planning and analysis methods as well as practical steps for identifying and combating both targeted and opportunistic attacks. Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition clearly explains the enemy's devious weapons, skills, and tactics and offers field-tested remedies, case studies, and testing labs. You will get complete coverage of Internet of Things, mobile, and Cloud security along with penetration testing, malware analysis, and reverse engineering techniques. State-of-the-art malware, ransomware, and system exploits are thoroughly explained. Fully revised content includes 7 new chapters covering the latest threats Includes proof-of-concept code stored on the GitHub repository Authors train attendees at major security conferences, including RSA, Black Hat, Defcon, and B-Sides

Ver na Amazon
Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Proteção de privacidade aprimorada: protege o link de transmissão de dados para evitar roubo de informações, fornecendo proteção de segurança robusta que protege a privacidade do usuário durante transferências de arquivos e garante uma conexão segura para interações de dispositivos sem preocupações em vários ambientes Uso a longo prazo: a camada protetora resistente ao desgaste, combinada com um corpo de metal resistente, oferece gerenciamento de calor confiável e qualidade duradoura durante o uso diário Entrega eficiente de energia: a tecnologia de chip inteligente garante a identificação automática dos requisitos de energia, fornecendo carregamento eficiente alinhando-se com vários protocolos de carregamento rápido para maior conveniência Proteção contra sobrecarga: evitando riscos de sobrecarga, este bloqueador de dados USB protege a vida útil da bateria e garante um desempenho estável, mantendo um fluxo estável de energia para melhorar a longevidade do dispositivo de forma eficaz Prático de transportar: com atenção à portabilidade, este bloqueador de dados USB oferece um design compacto que é leve e fácil de transportar, melhorando a conveniência do usuário e operação eficiente

Ver na Amazon

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.