Manual de utilização do PathScope
Este manual percorre os ecrãs por ordem, desde encontrar com o PathScope os pontos fracos deste dispositivo até perceber por onde começar a corrigi-los. As explicações dos ecrãs evitam, tanto quanto possível, o jargão técnico; os comandos estão reunidos no capítulo «Utilização na linha de comandos».
1. O que é o PathScope
O PathScope identifica os «caminhos» pelos quais um utilizador comum deste dispositivo pode chegar a root (privilégios de administrador) ou a dados sensíveis e mostra, com prioridades, onde corrigir é mais eficaz. Destina-se a verificar dispositivos que gere e ambientes de teste.
A análise é só de leitura. Não altera definições nem ficheiros e não aplica correções automaticamente. São apresentados exemplos de comandos de correção, mas cabe a si decidir se os executa.
pathscope). O PathScope é uma aplicação separada do RoamSwitch, com licença Apache License 2.0. Não está abrangido pelo contrato de licença do RoamSwitch (EULA).2. Instalação e arranque
O PathScope é instalado como uma aplicação separada, com ícone próprio. Veja como o iniciar.
| Ambiente | Como iniciar |
|---|---|
| Mac | Abra o PathScope.app a partir do ficheiro de distribuição (DMG) e clique em «Analisar». |
| Linux | Abra «PathScope» na lista de aplicações e clique em «Analisar». A partir de um terminal, execute pathscope-gui. A janela requer o WebKitGTK 4.1, que é instalado automaticamente com deb e rpm. No Arch (AUR), instale webkit2gtk-4.1 como dependência opcional. |
| Linha de comandos | Execute pathscope num terminal. No Mac é PathScope.app/Contents/MacOS/pathscope. |
Ao iniciar, abre-se uma janela com os botões «Analisar», «Histórico», «Assistência de LLM», «Explicar com LLM» e «Definições» na parte superior. «Explicar com LLM» só pode ser premido depois de ser apresentado um resultado. O PathScope não abre nenhuma porta em escuta e a janela não carrega sítios externos.
3. Executar a análise e ler o resultado
Ao clicar em «Analisar», o PathScope recolhe o estado deste dispositivo a partir do utilizador atual e analisa-o. Pode demorar de alguns segundos a algumas dezenas de segundos. No fim, o resultado é guardado automaticamente como uma entrada do histórico.
Passos
- Clique em «Analisar».
- Em «Diagrama de caminhos» e «Lista de caminhos», veja que utilizador chega a root ou a dados sensíveis e por que passos. Os círculos e quadrados são utilizadores e destinos, e cada linha é um passo que eleva privilégios. O número sobre uma linha corresponde ao «motivo pelo qual o passo é possível» na tabela abaixo do diagrama.
- Em «Pontos de correção (por ordem de correção)», verifique onde corrigir tem maior efeito. Cada item mostra a prioridade (crítica, alta, média ou baixa, com uma pontuação), o número de caminhos afetados, uma correção sugerida e a técnica MITRE ATT&CK mais próxima.
- Clique em «E se corrigir isto?» para voltar a analisar, a título de teste, os caminhos que restariam se esse ponto fosse corrigido como sugerido. «E se corrigir tudo?» faz o mesmo para todos os pontos apresentados. Nenhuma das opções altera este dispositivo.
- Leia a lista das áreas que não foi possível verificar, apresentada abaixo dos pontos de correção.
Que caminhos encontra
- Pertença ao grupo docker (permite as mesmas operações que o root)
- Abuso de um executável que corre com privilégios de root (SUID) para se tornar root, reescrever ficheiros ou ler ficheiros
- É possível reescrever o executável de um serviço que corre como root, de um programa em que o root escuta ou de um ficheiro que o root executa periodicamente
- Definições que permitem sudo sem palavra-passe (os ficheiros de configuração do sudo e do cron são considerados depois de lidos com «Assistência de LLM»)
- No Mac, é possível reescrever uma aplicação com permissão de acesso a todos os ficheiros
- O software instalado, o kernel ou a versão do macOS ainda têm uma vulnerabilidade conhecida explorada em ataques reais ou com grande probabilidade de o ser (no KEV da CISA ou, fora do KEV, com uma pontuação EPSS alta da FIRST; só as que permitem a um utilizador comum tornar-se root)
As vulnerabilidades conhecidas são verificadas com dados incluídos na aplicação. São abrangidos o macOS e as versões de Debian, Ubuntu, família RHEL, SUSE, Arch e Alpine para as quais existem dados; tudo o resto (Debian 11 e anteriores, Fedora, etc.) é apresentado como «não verificado». Não é uma funcionalidade para examinar vulnerabilidades de forma exaustiva.
4. Histórico, exportação e verificação periódica
Os resultados da análise ficam guardados automaticamente como histórico neste dispositivo. Clique em «Histórico» para abrir a lista, onde pode abrir uma entrada, atribuir-lhe uma etiqueta (por exemplo, antes da correção) ou eliminá-la. Selecione duas entradas e clique em «Comparar os dois selecionados» para ver os caminhos que desapareceram e os que surgiram, bem como as alterações nos pontos de correção. Use isto para comparar a situação antes e depois de uma correção.
Os resultados da análise guardados em formato JSON noutro dispositivo podem ser trazidos para o histórico com «Importar resultados de análise». Selecione duas ou mais entradas no histórico e clique em «Resumir os selecionados» para ver os dispositivos mais em risco, por ordem, e as fragilidades comuns a vários dispositivos.
O resultado apresentado pode ser guardado como «Resultado da análise (JSON)», «Lista de vigilância (JSON)» ou «Regras do auditd (para o registo de auditoria do Linux)». O destino escolhe-se na janela de gravação. Apenas se escrevem ficheiros; não é aplicada nenhuma definição nem este dispositivo é alterado.
Isto escreve um ficheiro de configuração que analisa periodicamente e avisa quando há mais caminhos do que da vez anterior.
- Apresente um resultado de análise e clique em «Guardar como referência».
- Defina o «Intervalo (minutos)» (de 5 a 10080).
- No Mac clique em «Guardar definições do launchd…», no Linux em «Guardar definições do systemd…», e escolha onde guardar.
- Verifique o conteúdo escrito e depois registe-o você mesmo (por exemplo, com launchctl load). O PathScope não o regista.
5. Funcionalidades que usam um LLM (opcional)
Configuração
- Assinale «Ativar o LLM».
- Escolha o «LLM a utilizar». As opções são os comandos claude, opencode, codex e agy, e podem ser usados aqueles cujo «Estado» é «Instalado». Se aparecer «Não encontrado», instale primeiro esse comando.
- Escolha «O que enviar ao LLM ao ler as configurações» (veja a tabela abaixo).
- Clique em «Guardar».
Na lista, o «Modelo» e o «Limite de tempo (segundos)» podem ser alterados para cada LLM. O claude é iniciado com a execução de comandos e a leitura de ficheiros desativadas. O opencode, o codex e o agy são tratados como não restringíveis e só podem ser usados se assinalar «Compreendo que não é possível impedir este LLM de executar comandos nem de ler ficheiros». Um LLM que não pode ser restringido pode ler ficheiros por iniciativa própria durante o processo, e o seu conteúdo pode ser enviado ao serviço do LLM.
Explicar com LLM
Com um resultado apresentado, clique em «Explicar com LLM» para que o LLM escreva uma avaliação geral, a ordem e os motivos das correções, o significado das áreas não verificadas e pontos semelhantes. É passado apenas um resumo dos caminhos, dos pontos de correção e das áreas não verificadas; a informação em bruto recolhida (como listas de proprietários e permissões de ficheiros) não é passada. O resumo contém, no entanto, os nomes de utilizador e os caminhos de ficheiros que aparecem nos caminhos. A resposta do LLM é indicativa. São as pessoas que verificam e decidem o que fazer, e nada muda automaticamente com base na resposta.
Assistência de LLM (leitura de ficheiros de configuração)
Os ficheiros de configuração como sudoers, cron e scripts são escritos de formas muito variadas e, só com um programa, por vezes não é possível lê-los. A assistência de LLM faz com que um LLM leia esses ficheiros e procure descrições relacionadas com privilégios de root.
- Clique em «Assistência de LLM». Os ficheiros candidatos à leitura são listados com o motivo de cada um (no início estão todos selecionados). São candidatos o sudoers, o cron, as definições do systemd e do launchd e os executáveis carregados por serviços que correm como root, entre outros. Desmarque os que não quiser enviar.
- Clique em «Enviar ao LLM os selecionados (○)». Aparece uma confirmação do que será enviado; leia-a e depois clique em «Enviar (confirmado)».
- No resultado, verifique «Elementos encontrados», «Ficheiros lidos» e «Ficheiros não lidos (continuam por verificar)».
- Clique em «Aplicar e analisar de novo» para acrescentar os elementos encontrados à análise. Se já não os quiser usar, elimine-os em «Guardados».
Só são usados os elementos indicados pelo LLM cuja linha foi confirmada como existindo realmente no ficheiro original. Os que não foram confirmados aparecem apenas em «Apenas para referência» e não são usados na análise. A verificação repete-se a cada análise, pelo que um elemento cuja linha original desapareceu deixa de ser usado.
| O que é enviado | Detalhes |
|---|---|
| Padrão | Os valores que parecem palavras-passe ou chaves são substituídos por «[REDACTED]» antes do envio. Ficheiros como chaves privadas não são enviados. De um ficheiro grande são enviadas apenas as linhas que contêm caminhos ou comandos. |
| Sem restrições | Uma definição para os casos em que o conteúdo não sai do seu dispositivo, como num LLM local (por sua conta e risco). São também enviados os hashes de palavras-passe e semelhantes. |
6. Utilização na linha de comandos
A mesma análise da janela pode ser executada com o comando pathscope. Sem opções, analisa os caminhos do utilizador atual para root. A recolha é só de leitura e não altera o estado do dispositivo.
pathscope
pathscope --json-out=report.json
pathscope --what-if-fix=all
pathscope --baseline=base.json --fail-on=new --notify
pathscope --print-schedule=systemd --interval-min=60
pathscope --export-watch=watch.json --export-auditd=pathscope.rules
pathscope --plain
pathscope --version
pathscope --lang=en
| Opção | Detalhes |
|---|---|
--json-out=<file> | Guarda o resultado como JSON. |
--what-if-fix=all | Volta a analisar, a título de teste, os caminhos que restariam se tudo fosse corrigido como sugerido. Com um número, apenas esse ponto de correção. |
--baseline=<file> --fail-on=new | Compara com um JSON anterior e termina com o código 1 se os caminhos tiverem aumentado. Com --notify, é também apresentada uma notificação no ambiente de trabalho (apenas o número). |
--fail-on=any|new|critical|high|medium | any termina com o código 1 quando há pelo menos um caminho; critical, high e medium fazem-no quando há um ponto de correção com essa prioridade ou superior. |
--print-schedule=launchd|systemd | Mostra um exemplo de configuração de execução periódica. Não a regista. Com --interval-min indica-se o intervalo em minutos. |
--plain | Mostra a apresentação anterior em texto simples em vez de Markdown. Os pressupostos da análise vão então para o erro padrão em vez de constarem do resultado. |
--help / --version | --help (-h) mostra a descrição de todas as opções, os códigos de saída e exemplos. --version (-V) mostra a versão. |
A saída é em Markdown. Depois do título aparecem, por esta ordem, uma tabela de resumo, os caminhos, os pontos de correção (uma tabela com a prioridade, o passo, o motivo e os caminhos afetados e, depois, para cada número, um detalhe com a correspondência ATT&CK, os comandos de correção e um aviso), o âmbito da recolha e os pressupostos da análise. Os pontos de correção só aparecem se tiverem sido encontrados caminhos, e os pressupostos só se houver algo a indicar. Com --what-if-* segue-se uma lista da análise hipotética e, com --baseline, uma lista das alterações desde a execução anterior. Pode colá-la tal como está numa nota ou num ticket. Para obter a apresentação anterior em texto simples, acrescente --plain.
O código de saída é 0 se tudo correr bem, 1 quando uma condição de --fail-on foi cumprida e 2 num erro de utilização ou de entrada/saída. Quando executado como root, recolhe também diretamente os listeners em que o root está à escuta. Os resultados de leitura guardados com a assistência de LLM também são incluídos na análise do comando.
7. Onde ficam os dados e atualizações
| Item | Localização |
|---|---|
| Histórico de resultados da análise | No Mac, ~/Library/Application Support/net.lafine.pathscope/history.sqlite3; no Linux, ~/.local/share/net.lafine.pathscope/history.sqlite3 |
| Definições do LLM | ~/.config/pathscope/settings.json (guardado com permissões que só lhe permitem a si lê-lo e escrevê-lo) |
| Conteúdo guardado pela assistência de LLM | ~/.local/share/pathscope/facts.json |
| A «referência» da verificação periódica | ~/.local/share/pathscope/baseline.json |
O histórico pode ser apagado com «Eliminar tudo» no ecrã do histórico. Os resultados da análise contêm informação sensível sobre a configuração deste dispositivo (nomes de utilizador, caminhos de ficheiros, permissões), pelo que deve limitar onde são guardados e com quem são partilhados. Para usar um comando que não está na lista de LLM, acrescente-o manualmente em profiles no ficheiro de definições. Não é possível alterá-lo a partir da janela.
Atualizar a aplicação
O PathScope no Mac atualiza-se a si próprio, de forma independente do RoamSwitch. Só liga ao lafine.net, para obter a informação da versão mais recente, quando clica em «Procurar atualizações» (não é enviada informação sobre este dispositivo nem sobre os resultados da análise). Se houver uma versão nova, clique em «Instalar a v○○» e, no fim, em «Reiniciar para aplicar». Uma atualização transferida só é instalada depois de a assinatura ser verificada e confirmar que não foi adulterada.
No Linux faz parte do pacote do RoamSwitch, pelo que se atualiza atualizando esse pacote. O separador «Atualizações» também o indica.
Os dados usados na análise, como os das vulnerabilidades conhecidas, vêm incluídos na aplicação. O que for descoberto depois não é verificado até atualizar o PathScope. Quando os dados incluídos ficam antigos, o resultado da análise assinala-o.
8. O que não faz
- Não altera definições nem ficheiros e não executa correções automaticamente. Limita-se a mostrar as correções sugeridas.
- «Não foram encontrados caminhos» é um resultado dentro do que foi possível recolher. Não é prova de segurança.
- Não examina as vulnerabilidades de forma exaustiva. Considera apenas as vulnerabilidades conhecidas exploradas em ataques reais que permitem a um utilizador comum tornar-se root.
- «E se corrigir isto?» só pode ser usado no resultado de uma análise acabada de fazer, não num resultado aberto a partir do histórico.
9. Se algo não funcionar
| Sintoma | O que fazer |
|---|---|
| No Mac, «Dados das definições de privacidade (TCC.db)» aparece entre as áreas não verificadas | No separador «Permissões» de «Definições», clique em «Abrir as definições de Acesso completo ao disco», ative o PathScope nas Definições do Sistema, reinicie o PathScope e analise de novo. As outras análises funcionam mesmo sem esta permissão. |
| Aparece «Não é possível usar o LLM» ou não é possível guardar | Ative-o em «Integração com LLM» nas «Definições» e escolha o LLM a utilizar. Se a lista indicar «Não encontrado», instale o comando. Com opencode, codex ou agy também é necessária a caixa de confirmação. |
| Um LLM para com «Tempo esgotado» | Na lista de «Integração com LLM» em «Definições», aumente o «Limite de tempo (segundos)» desse LLM (de 1 a 900) e guarde. |
| «E se corrigir isto?» não pode ser usado | Não pode ser usado num resultado aberto a partir do histórico. Clique novamente em «Analisar» e use-o depois. |
| A atualização dentro da aplicação não pode ser usada | Se o instalou no Linux a partir de um pacote do RoamSwitch, atualize-o atualizando o pacote. Se não o instalou a partir de um pacote (.deb, .rpm ou AppImage), a atualização dentro da aplicação não pode ser usada, pelo que deve reinstalar o pacote distribuído. |