Partilhar via


Perguntas mais frequentes | Azure

Nota

A partir de 31 de dezembro de 2022, a extensão MSCA (Security Code Analysis) da Microsoft foi descontinuada. O MSCA é substituído pela extensão microsoft Security DevOps do Azure DevOps. Siga as instruções em Configurar para instalar e configurar a extensão.

FAQs Gerais

Posso instalar a extensão na minha instância do Azure DevOps Server (anteriormente Visual Studio Team Foundation Server) em vez de numa instância do Azure DevOps?

N.º A extensão não está disponível para transferência e instalação para Azure DevOps Server (anteriormente Visual Studio Team Foundation Server).

Tenho de executar a Análise de Código de Segurança da Microsoft com a minha compilação?

Talvez. Depende do tipo de ferramenta de análise. O código fonte pode ser a única coisa necessária ou a saída da compilação pode ser necessária.

Por exemplo, o Scanner de Credenciais (CredScan) analisa ficheiros na estrutura de pastas do repositório de código. Devido a esta análise, pode executar as tarefas de compilação CredScan e Publish Security Analysis Logs numa compilação autónoma para obter resultados.

Para outras ferramentas como BinSkim que analisam artefactos pós-compilação, a compilação é necessária primeiro.

Posso interromper a minha compilação quando forem encontrados resultados?

Sim. Pode introduzir uma quebra de compilação quando qualquer ferramenta comunica um problema ou um problema no respetivo ficheiro de registo. Adicione a tarefa de compilação Pós-Análise e selecione a caixa de verificação de qualquer ferramenta para a qual pretenda interromper a compilação.

Na IU da tarefa Pós-Análise, pode optar por interromper a compilação quando qualquer ferramenta comunica apenas erros ou erros e avisos.

Como é que os argumentos da linha de comandos no Azure DevOps diferem desses argumentos nas ferramentas de ambiente de trabalho autónomas?

Normalmente, as tarefas de compilação do Azure DevOps são wrappers diretos em torno dos argumentos da linha de comandos das ferramentas de segurança. Pode transmitir como argumentos para uma tarefa de compilação tudo o que normalmente passa para uma ferramenta de linha de comandos.

Diferenças visíveis:

  • As ferramentas são executadas a partir da pasta de origem do agente $(Build.SourcesDirectory) ou de %BUILD_SOURCESDIRECTORY%. Um exemplo é C:\agent_work\1\s.
  • Os caminhos nos argumentos podem ser relativos à raiz do diretório de origem listado anteriormente. Os caminhos também podem ser absolutos. Obtém caminhos absolutos através das Variáveis de Compilação do Azure DevOps ou ao executar um agente no local com localizações de implementação conhecidas de recursos locais.
  • As ferramentas fornecem automaticamente um caminho ou pasta de ficheiro de saída. Se fornecer uma localização de saída para uma tarefa de compilação, essa localização será substituída por um caminho para a nossa localização conhecida dos registos no agente de compilação
  • Alguns outros argumentos da linha de comandos são alterados para algumas ferramentas. Um exemplo é a adição ou remoção de opções que garantem que não é iniciada nenhuma GUI.

Posso executar uma tarefa de compilação como o Scanner de Credenciais em vários repositórios numa Compilação do Azure DevOps?

N.º A execução das ferramentas de desenvolvimento segura em vários repositórios num único pipeline não é suportada.

O ficheiro de saída que especificei não está a ser criado ou não consigo encontrar o ficheiro de saída que especificei

As tarefas de compilação filtram algumas entradas de utilizador. Para esta pergunta especificamente, atualizam a localização do ficheiro de saída gerado para ser uma localização comum no agente de compilação. Para obter mais informações sobre esta localização, veja as seguintes perguntas.

Onde estão guardados os ficheiros de saída gerados pelas ferramentas?

As tarefas de compilação adicionam automaticamente caminhos de saída a esta localização conhecida no agente de compilação: $(Agent.BuildDirectory)_sdt\logs. Uma vez que uniformizamos nesta localização, todas as equipas que produzem ou consomem registos de análise de código têm acesso à saída.

Posso colocar uma compilação em fila para executar estas tarefas num agente de compilação alojado?

Sim. Todas as tarefas e ferramentas na extensão podem ser executadas num agente de compilação alojado.

Nota

A tarefa de compilação Do Scanner Antimalware requer um agente de compilação com Windows Defender ativado. O Visual Studio 2017 alojado e posteriormente fornecem esse agente. A tarefa de compilação não será executada no agente alojado do Visual Studio 2015.

Embora as assinaturas não possam ser atualizadas nestes agentes, as assinaturas devem ter sempre menos de três horas.

Posso executar estas tarefas de compilação como parte de um pipeline de versão em oposição a um pipeline de compilação?

Na maioria dos casos, sim.

No entanto, o Azure DevOps não suporta a execução de tarefas em pipelines de versão quando essas tarefas publicam artefactos. Esta falta de suporte impede que a tarefa Publicar Registos de Análise de Segurança seja executada com êxito num pipeline de versão. Em vez disso, a tarefa falha com uma mensagem de erro descritiva.

A partir de onde é que as tarefas de compilação transferem as ferramentas?

As tarefas de compilação podem transferir os pacotes NuGet das ferramentas a partir do feed de Gestão de Pacotes do Azure DevOps. As tarefas de compilação também podem utilizar o Gestor de Pacotes de Nós, que tem de ser pré-instalado no agente de compilação. Um exemplo dessa instalação é o comando npm install tslint.

Que efeito tem a instalação da extensão na minha organização do Azure DevOps?

Após a instalação, as tarefas de compilação de segurança fornecidas pela extensão ficam disponíveis para todos os utilizadores na sua organização. Quando cria ou edita um Pipeline do Azure, estas tarefas estão disponíveis na lista de coleções de tarefas de compilação. Caso contrário, a instalação da extensão na sua organização do Azure DevOps não tem qualquer efeito. A instalação não modifica definições de conta, definições de projeto ou pipelines.

A instalação da extensão modifica os meus Pipelines do Azure existentes?

N.º A instalação da extensão disponibiliza as tarefas de compilação de segurança para adição aos pipelines. Ainda é necessário adicionar ou atualizar definições de compilação, para que as ferramentas possam funcionar com o processo de compilação.

FAQ específicas da tarefa

As perguntas específicas para criar tarefas estão listadas nesta secção.

Scanner de Credenciais

O que são cenários e exemplos comuns de supressão?

Eis os detalhes de dois dos cenários de supressão mais comuns.

Para suprimir todas as ocorrências de um determinado segredo no caminho especificado

A chave hash do segredo do ficheiro de saída CredScan é necessária como mostrado no exemplo seguinte.

{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "hash": "CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=",
        "_justification": "Secret used by MSDN sample, it is fake."
    }
  ]
}

Aviso

A chave hash é gerada por uma parte do valor ou conteúdo de ficheiro correspondente. Qualquer revisão do código fonte pode alterar a chave hash e desativar a regra de supressão.

Para suprimir todos os segredos num ficheiro especificado ou para suprimir o próprio ficheiro de segredos

A expressão de ficheiro pode ser um nome de ficheiro. Também pode ser a parte do nome base de um caminho de ficheiro completo ou de um nome de ficheiro. Não são suportados carateres universais.

Os exemplos seguintes mostram como suprimir o ficheiro <InputPath>\src\JS\lib\angular.js

Exemplos de regras de supressão válidas:

  • <InputPath>\src\JS\lib\angular.js - suprime o ficheiro no caminho especificado
  • \src\JS\lib\angular.js
  • \JS\lib\angular.js
  • \lib\angular.js
  • angular.js - suprime qualquer ficheiro com o mesmo nome
{
    "tool": "Credential Scanner",
    "suppressions": [
    {
        "file": "\\files\\AdditonalSearcher.xml", 
        "_justification": "Additional CredScan searcher specific to my team"
    },
    {
        "file": "\\files\\unittest.pfx", 
        "_justification": "Legitimate UT certificate file with private key"
    }
  ]
}

Aviso

Todos os segredos futuros adicionados ao ficheiro também serão suprimidos automaticamente.

Quais são as diretrizes recomendadas para gerir segredos?

Os seguintes recursos ajudam-no a gerir segredos de forma segura e a aceder a informações confidenciais a partir das suas aplicações:

Para obter mais informações, consulte a publicação de blogue Gerir Segredos De forma Segura na Cloud.

Posso escrever os meus próprios searchers personalizados?

O Scanner de Credenciais baseia-se num conjunto de pesquisa de conteúdos que são normalmente definidos no ficheiro de buildsearchers.xml. O ficheiro contém uma matriz de objetos serializados XML que representam um objeto ContentSearcher . O programa é distribuído com um conjunto de pesquisas bem testadas. Mas também pode implementar os seus próprios searchers personalizados.

Um searcher de conteúdos é definido da seguinte forma:

  • Nome: o nome do searcher descritivo a utilizar nos ficheiros de saída do Scanner de Credenciais. Recomendamos que utilize a convenção de nomenclatura de casos de camelo para nomes de pesquisa.

  • RuleId: O ID opaco estável do searcher:

    • Um searcher predefinido do Scanner de Credenciais tem um valor RuleId como CSCAN0010, CSCAN0020 ou CSCAN0030. O último dígito está reservado para grupos de pesquisa potencialmente intercaladores ou divididos através de expressões regulares (regex).
    • O valor RuleId de um searcher personalizado deve ter o seu próprio espaço de nomes. Os exemplos incluem CSCAN-Namespace<> 0010, CSCAN-Namespace>< 0020 e CSCAN-Namespace<> 0030.
    • Um nome de pesquisa completamente qualificado é a combinação de um valor RuleId e um nome de pesquisa. Os exemplos incluem CSCAN0010. KeyStoreFiles e CSCAN0020. Base64EncodedCertificate.
  • ResourceMatchPattern: Regex de extensões de ficheiros para verificar o searcher.

  • ContentSearchPatterns: uma matriz de cadeias que contém instruções regex para corresponder. Se não forem definidos padrões de pesquisa, serão devolvidos todos os ficheiros que correspondam ao valor ResourceMatchPattern .

  • ContentSearchFilters: uma matriz de cadeias que contém instruções regex para filtrar falsos positivos específicos do searcher.

  • MatchDetails: uma mensagem descritiva, instruções de mitigação ou ambas a serem adicionadas para cada correspondência do searcher.

  • Recomendação: o conteúdo do campo sugestões para uma correspondência com o formato de relatório PREfast.

  • Gravidade: um número inteiro que reflete o nível de gravidade de um problema. O nível de gravidade mais elevado tem o valor 1.

    XML a mostrar a configuração do Scanner de Credenciais

Analisadores Roslyn

Quais são os erros comuns ao utilizar a tarefa Analisadores Roslyn?

O projeto foi restaurado com uma versão Microsoft.NETCore.App errada

A mensagem de erro completa:

"Erro: o projeto foi restaurado com Microsoft.NETCore.App versão x.x.x, mas com as definições atuais, a versão y.y.y seria utilizada. Para resolver este problema, certifique-se de que as mesmas definições são utilizadas para restaurar e para operações subsequentes, como compilação ou publicação. Normalmente, este problema pode ocorrer se a propriedade RuntimeIdentifier estiver definida durante a compilação ou publicação, mas não durante o restauro."

Uma vez que as tarefas do Roslyn Analyzers são executadas como parte da compilação, a árvore de origem na máquina de compilação tem de estar num estado compilável.

Um passo entre a sua compilação principal e os passos de Roslyn Analyzers pode ter colocado a árvore de origem num estado que impede a construção. Este passo adicional é provavelmente dotnet.exe publicar. Experimente duplicar o passo que faz um restauro NuGet imediatamente antes do passo Analisadores Roslyn. Este passo duplicado pode colocar a árvore de origem novamente num estado compilável.

csc.exe não consegue criar uma instância de analisador

A mensagem de erro completa:

"'csc.exe' saiu com o código de erro 1 -- Não é possível criar uma instância do analisador AAAA a partir de C:\BBBB.dll: Não foi possível carregar o ficheiro ou a assemblagem "Microsoft.CodeAnalysis, Version=X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35" ou uma das suas dependências. O sistema não consegue localizar o ficheiro especificado."

Certifique-se de que o compilador suporta Os Analisadores Roslyn. Executar o comando csc.exe /version deve comunicar um valor de versão de 2.6 ou posterior.

Por vezes, um ficheiro .csproj pode substituir a instalação do Visual Studio da máquina de compilação ao referenciar um pacote de Microsoft.Net.Compilers. Se não pretender utilizar uma versão específica do compilador, remova as referências a Microsoft.Net.Compilers. Caso contrário, certifique-se de que a versão do pacote referenciado também é 2.6 ou posterior.

Tente obter o caminho de registo de erros, especificado na opção csc.exe /errorlog . A opção e o caminho aparecem no registo da tarefa de compilação Roslyn Analyzers. Podem ter um aspeto semelhante a /errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif

A versão do compilador C# não é suficientemente recente

Para obter as versões mais recentes do compilador C#, aceda a Microsoft.Net.Compilers. Para obter a sua versão instalada, execute csc.exe /version numa linha de comandos. Certifique-se de que faz referência a um pacote NuGet Microsoft.Net.Compilers que é a versão 2.6 ou posterior.

Os registos MSBuild e VSBuild não foram encontrados

A tarefa de compilação Roslyn Analyzers tem de consultar o Azure DevOps para o registo MSBuild a partir da tarefa de compilação MSBuild. Se a tarefa do analisador for executada imediatamente após a tarefa MSBuild, o registo ainda não estará disponível. Coloque outras tarefas entre a tarefa MSBuild e a tarefa Roslyn Analyzers. Exemplos de outras tarefas incluem BinSkim e Scanner Antimalware.

Passos seguintes

Se precisar de assistência adicional, o Suporte de Análise de Código de Segurança da Microsoft estará disponível de segunda a sexta-feira das 09:00 às 17:00 Hora Padrão do Pacífico.