Perguntas mais frequentesFrequently asked questions

Nota

A partir de 1 de março de 2022, a extensão do Código de Segurança da Microsoft (MSCA) será retirada.Effective March 1, 2022, the Microsoft Security Code Analysis (MSCA) extension will be retired. Os clientes MSCA existentes manterão o seu acesso à MSCA até 1 de março de 2022.Existing MSCA customers will retain their access to MSCA through March 1, 2022. Consulte as Ferramentas de Análise de Código Fonte OWASP para obter opções alternativas em Azure DevOps.Please refer to the OWASP Source Code Analysis Tools for alternative options in Azure DevOps. Para clientes que planeiam migrar para o GitHub, você pode verificar GitHub Advanced Security.For customers planning to migrate to GitHub, you can check out GitHub Advanced Security.

Tem perguntas?Got questions? Consulte as seguintes FAQ para mais informações.Check out the following FAQ for more information.

FAQs GeraisGeneral FAQ

Posso instalar a extensão no meu servidor da Fundação Visual Studio Team em vez de num caso de Azure DevOps?Can I install the extension on my Visual Studio Team Foundation Server instance instead of on an Azure DevOps instance?

N.ºNo. A extensão não está disponível para download e instalação para Visual Studio Team Foundation Server.The extension isn't available for downloading and installation for Visual Studio Team Foundation Server.

Tenho de executar a Microsoft Security Code Analysis com a minha construção?Do I have to run Microsoft Security Code Analysis with my build?

Talvez sim.Maybe. Depende do tipo de ferramenta de análise.It depends on the type of analysis tool. O código-fonte pode ser a única coisa que é necessária, ou a saída de construção pode ser necessária.The source code might be the only thing that's required, or the build output might be required.

Por exemplo, o Scanner Credencial (CredScan) analisa ficheiros dentro da estrutura da pasta do repositório de código.For example, Credential Scanner (CredScan) analyzes files within the folder structure of the code repository. Devido a esta análise, pode executar os Registos de Análise de Segurança credScan e Publicação, construir tarefas numa construção autónoma para obter resultados.Because of this analysis, you can run the CredScan and Publish Security Analysis Logs build tasks in a standalone build to get results.

Para outras ferramentas como BinSkim que analisam artefactos pós-construção, a construção é necessária primeiro.For other tools like BinSkim that analyze post-build artifacts, the build is required first.

Posso quebrar a minha construção quando os resultados forem encontrados?Can I break my build when results are found?

Sim.Yes. Pode introduzir uma rutura de construção quando qualquer ferramenta reporta um problema ou problema no seu ficheiro de registo.You can introduce a build break when any tool reports an issue or problem in its log file. Basta adicionar a tarefa de construção pós-análise e selecionar a caixa de verificação para qualquer ferramenta para a qual pretende quebrar a construção.Just add the Post-Analysis build task, and select the checkbox for any tool for which you want to break the build.

Na UI da tarefa De Pós-Análise, pode optar por quebrar a construção quando qualquer ferramenta reporta erros apenas ou erros e avisos.In the UI of the Post-Analysis task, you can choose to break the build when any tool reports either errors only or both errors and warnings.

Como é que os argumentos da linha de comando em Azure DevOps diferem dos argumentos nas ferramentas de ambiente de trabalho autónomas?How do the command-line arguments in Azure DevOps differ from those arguments in the standalone desktop tools?

Na maior parte das vezes, as tarefas de construção do Azure DevOps são invólucros diretos em torno dos argumentos da linha de comando das ferramentas de segurança.For the most part, the Azure DevOps build tasks are direct wrappers around the command-line arguments of the security tools. Pode passar como argumentos para uma tarefa de construção qualquer coisa que normalmente passe para uma ferramenta de linha de comando.You can pass as arguments to a build task anything you normally pass to a command-line tool.

Diferenças percetíveis:Noticeable differences:

  • As ferramentas são executadas a partir da pasta de origem do agente $(Build.SourcesDirectory) ou de %BUILD_SOURCESDIRECTORY%.Tools run from the source folder of the agent $(Build.SourcesDirectory) or from %BUILD_SOURCESDIRECTORY%. Um exemplo é C:\agente _ trabalho\1\s.An example is C:\agent_work\1\s.
  • Os caminhos dos argumentos podem ser relativos à raiz do diretório de origem anteriormente listado.Paths in the arguments can be relative to the root of the source directory previously listed. Os caminhos também podem ser absolutos.Paths can also be absolute. Obtém caminhos absolutos, quer utilizando variáveis de construção de devOps Azure DevOps, quer executando um agente no local com locais de implantação conhecidos de recursos locais.You get absolute paths either by using Azure DevOps Build Variables or by running an on-premises agent with known deployment locations of local resources.
  • As ferramentas fornecem automaticamente um caminho ou uma pasta de ficheiro de saída.Tools automatically provide an output file path or folder. Se fornecer uma localização de saída para uma tarefa de construção, essa localização é substituída por um caminho para a nossa conhecida localização de registos no agente de construçãoIf you provide an output location for a build task, that location is replaced with a path to our well-known location of logs on the build agent
  • Alguns argumentos adicionais da linha de comando são alterados para algumas ferramentas.Some additional command-line arguments are changed for some tools. Um exemplo é a adição ou remoção de opções que garantem o lançamento de nenhum GUI.One example is the addition or removal of options that ensure no GUI is launched.

Posso executar uma tarefa de construção como o Scanner Credencial através de vários repositórios numa Construção de DevOps Azure?Can I run a build task like Credential Scanner across multiple repositories in an Azure DevOps Build?

N.ºNo. Executar as ferramentas de desenvolvimento seguras através de vários repositórios num único oleoduto não é suportado.Running the secure development tools across multiple repositories in a single pipeline isn't supported.

O ficheiro de saída que especifiquei não está a ser criado, ou não consigo encontrar o ficheiro de saída que especifiquei.The output file I specified isn't being created, or I can’t find the output file I specified

As tarefas de construção filtram algumas entradas do utilizador.The build tasks filter some user input. Para esta questão especificamente, eles atualizam a localização do ficheiro de saída gerado para ser uma localização comum no agente de construção.For this question specifically, they update the location of the generated output file to be a common location on the build agent. Para mais informações sobre este local, consulte as seguintes questões.For more information on this location, see the following questions.

Onde estão os ficheiros de saída gerados pelas ferramentas guardadas?Where are the output files generated by the tools saved?

As tarefas de construção adicionam automaticamente caminhos de saída a este local bem conhecido no agente de construção: $(Agent.BuildDirectory) _ sdt\logs.The build tasks automatically add output paths to this well-known location on the build agent: $(Agent.BuildDirectory)_sdt\logs. Como nós normalizamos neste local, todas as equipas que produzem ou consomem registos de análise de código têm acesso à saída.Because we standardize on this location, all teams that produce or consume code-analysis logs have access to the output.

Posso fazer fila para executar estas tarefas num agente de construção hospedado?Can I queue a build to run these tasks on a hosted build agent?

Sim.Yes. Todas as tarefas e ferramentas da extensão podem ser executadas num agente de construção hospedado.All tasks and tools in the extension can be executed on a hosted build agent.

Nota

A tarefa de construção do Scanner Anti-Malware requer um agente de construção com o Windows Defender ativado.The Anti-Malware Scanner build task requires a build agent with Windows Defender enabled. Acolheu o Visual Studio 2017 e mais tarde forneceu tal agente.Hosted Visual Studio 2017 and later provide such an agent. A tarefa de construção não será executada no Visual Studio 2015 agente hospedado.The build task won't run on the Visual Studio 2015 hosted agent.

Embora as assinaturas não possam ser atualizadas sobre estes agentes, as assinaturas devem ter sempre menos de três horas de idade.Although signatures can't be updated on these agents, signatures should always be less than three hours old.

Posso executar estas tarefas de construção como parte de um oleoduto de libertação em vez de um oleoduto de construção?Can I run these build tasks as part of a release pipeline as opposed to a build pipeline?

Na maioria dos casos, sim.In most cases, yes.

No entanto, a Azure DevOps não suporta tarefas de execução dentro dos oleodutos de lançamento quando essas tarefas publicam artefactos.However, Azure DevOps doesn't support running tasks within release pipelines when those tasks publish artifacts. Esta falta de suporte impede que a tarefa de Publish Security Analysis Logs seja feita com sucesso num oleoduto de lançamento.This lack of support prevents the Publish Security Analysis Logs task from running successfully in a release pipeline. Em vez disso, a tarefa falha com uma mensagem de erro descritiva.The task instead fails with a descriptive error message.

De onde as tarefas de construção descarregam as ferramentas?From where do the build tasks download the tools?

As tarefas de construção podem descarregar os pacotes NuGet das ferramentas a partir do feed de Gestão de Pacotes Azure DevOps.Build tasks can download the tools' NuGet packages from the Azure DevOps Package Management feed. As tarefas de construção também podem utilizar o Node Package Manager, que deve ser pré-instalado no agente de construção.Build tasks can also use Node Package Manager, which must be preinstalled on the build agent. Um exemplo de tal instalação é o comando npm instalar tslint.An example of such installation is the command npm install tslint.

Que efeito tem a instalação da extensão na minha organização Azure DevOps?What effect does installing the extension have on my Azure DevOps organization?

Após a sua instalação, as tarefas de construção de segurança fornecidas pela extensão ficam disponíveis para todos os utilizadores da sua organização.Upon their installation, the security build tasks provided by the extension becomes available to all users in your organization. Quando cria ou edita um Pipeline Azure, estas tarefas estão disponíveis na lista de recolha de tarefas de construção.When you create or edit an Azure Pipeline, these tasks are available from the build-task collection list. Caso contrário, a instalação da extensão na sua organização Azure DevOps não tem qualquer efeito.Otherwise, installing the extension in your Azure DevOps organization has no effect. A instalação não modifica quaisquer definições de conta, definições de projeto ou oleodutos.The installation doesn't modify any account settings, project settings, or pipelines.

A instalação da extensão modifica os meus gasodutos Azure existentes?Does installing the extension modify my existing Azure Pipelines?

N.ºNo. A instalação da extensão disponibiliza as tarefas de construção de segurança para a adição aos seus oleodutos.Installing the extension makes the security build tasks available for addition to your pipelines. Você ainda é obrigado a adicionar ou atualizar definições de construção, para que as ferramentas possam trabalhar com o seu processo de construção.You're still required to add or update build definitions, so that the tools can work with your build process.

FAQ específico de tarefasTask-specific FAQ

Nesta secção estão listadas questões específicas para construir tarefas.Questions specific to build tasks are listed in this section.

Scanner credencialCredential Scanner

O que são cenários e exemplos comuns de supressão?What are common suppression scenarios and examples?

Aqui estão os detalhes de dois dos cenários de supressão mais comuns.Here are details of two of the most common suppression scenarios.

Para suprimir todas as ocorrências de um dado segredo dentro do caminho especificadoTo suppress all occurrences of a given secret within the specified path

A chave de haxixe do segredo do ficheiro de saída credScan é necessária como mostrado na amostra seguinte.The hash key of the secret from the CredScan output file is required as shown in the following sample.

{
    "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 correspondente ou do conteúdo do ficheiro.The hash key is generated by a portion of the matching value or file content. Qualquer revisão do código de origem pode alterar a tecla de haxixe e desativar a regra de supressão.Any source-code revision can change the hash key and disable the suppression rule.

Para suprimir todos os segredos num ficheiro especificado ou para suprimir os segredos em siTo suppress all secrets in a specified file or to suppress the secrets file itself

A expressão do ficheiro pode ser um nome de ficheiro.The file expression can be a file name. Também pode ser a parte base de um caminho de arquivo completo ou um nome de arquivo.It can also be the basename part of a full file path or a file name. Não são suportados carateres universais.Wildcards are not supported.

Os exemplos a seguir mostram como suprimir o ficheiro <InputPath>\src\JS\lib\angular.jsThe following examples show how to suppress the file <InputPath>\src\JS\lib\angular.js

Exemplos de regras válidas de supressão:Examples of valid suppression rules:

  • <InputPath>\src\JS\lib\angular.js - suprime o ficheiro no caminho especificado<InputPath>\src\JS\lib\angular.js - suppresses the file in the specified path
  • \src\JS\lib\angular.js\src\JS\lib\angular.js
  • \JS\lib\angular.js\JS\lib\angular.js
  • \lib\angular.js\lib\angular.js
  • angular.js - suprime qualquer ficheiro com o mesmo nomeangular.js - suppresses any file with the same name
{
    "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.All future secrets added to the file will also be suppressed automatically.

Os seguintes recursos ajudam-no a gerir de forma segura segredos e a aceder a informações sensíveis a partir das suas aplicações:The following resources help you securely manage secrets and access sensitive information from within your applications:

Para mais informações, consulte o post de blog Managing Secrets Securely in the Cloud.For more information, see the blog post Managing Secrets Securely in the Cloud.

Posso escrever os meus próprios pesquisadores personalizados?Can I write my own custom searchers?

O Scanner Credencial baseia-se num conjunto de pesquisadores de conteúdo que são geralmente definidos no ficheiro buildsearchers.xml.Credential Scanner relies on a set of content searchers that are commonly defined in the buildsearchers.xml file. O ficheiro contém uma matriz de objetos serializados XML que representam um objeto ContentSearcher.The file contains an array of XML serialized objects that represent a ContentSearcher object. O programa é distribuído com um conjunto de pesquisadores bem testados.The program is distributed with a set of well-tested searchers. Mas também pode implementar os seus próprios pesquisadores personalizados.But you can implement your own custom searchers too.

Um pesquisador de conteúdos é definido da seguinte forma:A content searcher is defined as follows:

  • Nome: O nome do pesquisador descritivo a ser utilizado nos ficheiros de saída do Scanner Credencial.Name: The descriptive searcher name to be used in Credential Scanner output files. Recomendamos que use a convenção de nomeação de camelo para nomes de pesquisadores.We recommended you use the camel-case naming convention for searcher names.

  • RuleId: O ID opaco estável do pesquisador:RuleId: The stable opaque ID of the searcher:

    • Um pesquisador padrão do Scanner Credencial é atribuído a um valor RuleId como CSCAN0010, CSCAN0020 ou CSCAN0030.A Credential Scanner default searcher is assigned a RuleId value like CSCAN0010, CSCAN0020, or CSCAN0030. O último dígito é reservado para grupos de pesquisadores potencialmente fundidos ou divididos através de expressões regulares (regex).The last digit is reserved for potentially merging or dividing searcher groups via regular expressions (regex).
    • O valor RuleId para um pesquisador personalizado deve ter o seu próprio espaço de nome.The RuleId value for a customized searcher should have its own namespace. Exemplos incluem CSCAN- <Namespace> 0010, <Namespace> CSCAN-0020 e CSCAN-0030. <Namespace>Examples include CSCAN-<Namespace>0010, CSCAN-<Namespace>0020, and CSCAN-<Namespace>0030.
    • Um nome de pesquisador totalmente qualificado é a combinação de um valor RuleId e um nome de pesquisador.A fully qualified searcher name is the combination of a RuleId value and a searcher name. Exemplos incluem CSCAN0010. KeyStoreFiles e CSCAN0020. Base64EncodedCertificate.Examples include CSCAN0010.KeyStoreFiles and CSCAN0020.Base64EncodedCertificate.
  • ResourceMatchPattern: Regex de extensões de ficheiros para verificar contra o pesquisador.ResourceMatchPattern: Regex of file extensions to check against the searcher.

  • ConteúdoSearchPatterns: Uma variedade de cordas que contêm declarações de regex para combinar.ContentSearchPatterns: An array of strings containing regex statements to match. Se não forem definidos padrões de pesquisa, todos os ficheiros correspondentes ao valor ResourceMatchPattern são devolvidos.If no search patterns are defined, all files matching the ResourceMatchPattern value are returned.

  • ConteúdoSearchFiltros: Uma série de cordas que contêm declarações de regex para filtrar falsos positivos específicos do pesquisador.ContentSearchFilters: An array of strings containing regex statements to filter searcher-specific false positives.

  • MatchDetails: Uma mensagem descritiva, instruções de mitigação ou ambos a serem adicionados para cada partida do pesquisador.MatchDetails: A descriptive message, mitigation instructions, or both to be added for each match of the searcher.

  • Recomendação: O conteúdo do campo de sugestões para uma correspondência utilizando o formato de relatório PREfast.Recommendation: The suggestions-field content for a match using the PREfast report format.

  • Gravidade: Um número inteiro que reflete o nível de gravidade de um problema.Severity: An integer that reflects the severity level of an issue. O nível de severidade mais elevado tem o valor 1.The highest severity level has the value 1.

    XML mostrando configuração do Scanner Credencial

Analisadores RoslynRoslyn Analyzers

Quais são os erros comuns ao utilizar a tarefa Roslyn Analyzers?What are common errors when using the Roslyn Analyzers task?

O projeto foi restaurado usando uma versão Microsoft.NETCore.App erradaThe project was restored using a wrong Microsoft.NETCore.App version

A mensagem de erro completa:The full error message:

"Erro: O projeto foi restaurado utilizando Microsoft.NETCore.App versão x.x.x, mas com as definições atuais, a versão y.y.y seria usada em vez disso."Error: The project was restored using Microsoft.NETCore.App version x.x.x, but with current settings, version y.y.y would be used instead. Para resolver este problema, certifique-se de que as mesmas definições são utilizadas para restauro e para operações subsequentes, tais como construção ou publicação.To resolve this issue, make sure the same settings are used for restore and for subsequent operations such as build or publish. Normalmente, este problema pode ocorrer se a propriedade RuntimeIdentifier for definida durante a construção ou publicação, mas não durante a restauração."Typically this issue can occur if the RuntimeIdentifier property is set during build or publish but not during restore."

Como as tarefas da Roslyn Analyzers funcionam como parte da compilação, a árvore-fonte da máquina de construção precisa de estar num estado construível.Because Roslyn Analyzers tasks run as part of compilation, the source tree on the build machine needs to be in a buildable state.

Um passo entre a sua construção principal e os passos de Roslyn Analyzers pode ter colocado a árvore de origem num estado que impede a construção.A step between your main build and Roslyn Analyzers steps might have put the source tree into a state that prevents building. Este passo extra é provavelmente dotnet.exe publicar.This extra step is probably dotnet.exe publish. Tente duplicar o passo que faz uma restauração NuGet pouco antes do passo roslyn Analisers.Try duplicating the step that does a NuGet restoration just before the Roslyn Analyzers step. Este passo duplicado pode colocar a árvore de origem de volta em um estado construível.This duplicated step might put the source tree back in a buildable state.

csc.exe não pode criar um exemplo de analisadorcsc.exe can't create an analyzer instance

A mensagem de erro completa:The full error message:

"'csc.exe' saído com código de erro 1 -- Uma instância do analisador AAAA não pode ser criada a partir de C: \ BBBB.dll : Não foi possível carregar ficheiro ou montagem 'Microsoft.CodeAnalysis, Versão=X.X.X,X, Cultura=neutro, PublicKeyToken=31bf3856ad364e35' ou uma das suas dependências."'csc.exe' exited with error code 1 -- An instance of analyzer AAAA cannot be created from C:\BBBB.dll : Could not load file or assembly 'Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. O sistema não consegue encontrar o ficheiro especificado."The system cannot find the file specified."

Certifique-se de que o seu compilador suporta Roslyn Analyzers.Ensure your compiler supports Roslyn Analyzers. Executar o comando csc.exe /versão deve reportar um valor de versão de 2.6 ou mais tarde.Running the command csc.exe /version should report a version value of 2.6 or later.

Por vezes, um ficheiro .csproj pode sobrepor-se à instalação do Estúdio Visual da máquina de construção, fazendo referência a um pacote do Microsoft.Net.Compilers.Sometimes a .csproj file can override the build machine's Visual Studio installation by referencing a package from Microsoft.Net.Compilers. Se não pretender utilizar uma versão específica do compilador, remova as referências ao Microsoft.Net.Compilers.If you don't intend to use a specific version of the compiler, remove references to Microsoft.Net.Compilers. Caso contrário, certifique-se de que a versão do pacote referenciado também é 2.6 ou mais tarde.Otherwise, make sure the version of the referenced package is also 2.6 or later.

Tente obter o caminho de registo de erros, que é especificado na opção csc.exe/errorlog.Try to get the error-log path, which is specified in the csc.exe /errorlog option. A opção e o caminho aparecem no log para a tarefa de construção de Roslyn Analyzers.The option and path appear in the log for the Roslyn Analyzers build task. Podem parecer algo como /errorlog:F:\ts-services-123 _ work\456\s\Some\Project\Code\Code.csproj.sarifThey might look something like /errorlog:F:\ts-services-123_work\456\s\Some\Project\Code\Code.csproj.sarif

A versão do compilador C# não é recente o suficienteThe C# compiler version isn't recent enough

Para obter as versões mais recentes do compilador C#, vá ao Microsoft.Net.Compilers.To get the latest versions of the C# compiler, go to Microsoft.Net.Compilers. Para obter a sua versão instalada, execute csc.exe /versão num pedido de comando.To get your installed version, run csc.exe /version at a command prompt. Certifique-se de que faz referência a um pacote NuGet Microsoft.Net.Compilers que é a versão 2.6 ou posterior.Ensure that you reference a Microsoft.Net.Compilers NuGet package that is version 2.6 or later.

Os registos MSBuild e VSBuild não são encontradosMSBuild and VSBuild logs aren't found

A tarefa de construção de Roslyn Analyzers precisa de consultar a Azure DevOps para o registo MSBuild a partir da tarefa de construção do MSBuild.The Roslyn Analyzers build task needs to query Azure DevOps for the MSBuild log from the MSBuild build task. Se a tarefa do analisador for executado imediatamente após a tarefa MSBuild, o registo ainda não estará disponível.If the analyzer task runs immediately after the MSBuild task, the log won't yet be available. Coloque outras tarefas entre a tarefa MSBuild e a tarefa Roslyn Analyzers.Place other tasks between the MSBuild task and the Roslyn Analyzers task. Exemplos de outras tarefas incluem BinSkim e Anti-Malware Scanner.Examples of other tasks include BinSkim and Anti-Malware Scanner.

Passos seguintesNext steps

Se precisar de assistência adicional, o Microsoft Security Code Analysis Support está disponível de segunda a sexta-feira das 9:00 às 17:00 horas do Pacífico.If you need additional assistance, Microsoft Security Code Analysis Support is available Monday to Friday from 9:00 AM to 5:00 PM Pacific Standard Time.