Preguntas más frecuentesFrequently asked questions

Nota

A partir del 1 de marzo de 2022, se retirará la extensión de seguridad de Code Analysis de Microsoft (MSCA).Effective March 1, 2022, the Microsoft Security Code Analysis (MSCA) extension will be retired. Los clientes existentes de MSCA conservarán su acceso a la extensión hasta el 1 de marzo de 2022.Existing MSCA customers will retain their access to MSCA through March 1, 2022. Consulte en el artículo sobre herramientas de análisis de código fuente de OWASP las opciones alternativas en Azure DevOps.Please refer to the OWASP Source Code Analysis Tools for alternative options in Azure DevOps. Los clientes que planean migrar a GitHub pueden consultar el artículo sobre la seguridad avanzada de GitHub.For customers planning to migrate to GitHub, you can check out GitHub Advanced Security.

¿Tiene alguna pregunta?Got questions? Consulte estas Preguntas más frecuentes para más información.Check out the following FAQ for more information.

Preguntas más frecuentes generalesGeneral FAQ

¿La extensión se puede instalar en la instancia de Visual Studio Team Foundation Server en lugar de hacerlo en una instancia de Azure DevOps?Can I install the extension on my Visual Studio Team Foundation Server instance instead of on an Azure DevOps instance?

No.No. La extensión no está disponible para descargarla e instalarla en Visual Studio Team Foundation Server.The extension isn't available for downloading and installation for Visual Studio Team Foundation Server.

¿Tengo que ejecutar Análisis de código de seguridad de Microsoft con mi compilación?Do I have to run Microsoft Security Code Analysis with my build?

Es posible.Maybe. Depende del tipo de herramienta de análisis.It depends on the type of analysis tool. Es posible que el código fuente sea lo único necesario o puede que se necesite la salida de la compilación.The source code might be the only thing that's required, or the build output might be required.

Por ejemplo, Credential Scanner (CredScan) analiza los archivos dentro de la estructura de carpetas del repositorio de código.For example, Credential Scanner (CredScan) analyzes files within the folder structure of the code repository. Debido a este análisis, puede ejecutar las tareas de compilación de CredScan y Publish Security Analysis Logs en una compilación independiente para obtener los resultados.Because of this analysis, you can run the CredScan and Publish Security Analysis Logs build tasks in a standalone build to get results.

En el caso de otras herramientas que analizan los artefactos posteriores a la compilación, como BinSkim, primero necesita la compilación.For other tools like BinSkim that analyze post-build artifacts, the build is required first.

¿Puedo interrumpir mi compilación cuando se encuentren los resultados?Can I break my build when results are found?

Sí.Yes. Puede introducir una interrupción de la compilación cuando cualquier herramienta informe de un problema en el archivo de registro.You can introduce a build break when any tool reports an issue or problem in its log file. Simplemente agregue la tarea de compilación Post-Analysis y active la casilla de la herramienta para la que quiere interrumpir la compilación.Just add the Post-Analysis build task, and select the checkbox for any tool for which you want to break the build.

En la UI de la tarea Post-Analysis, puede optar por interrumpir la compilación cuando alguna herramienta notifique solo errores o tanto errores como advertencias.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.

¿En qué se diferencian los argumentos de la línea de comandos de Azure DevOps de los argumentos de las herramientas de escritorio independientes?How do the command-line arguments in Azure DevOps differ from those arguments in the standalone desktop tools?

Por lo general, las tareas de compilación de Azure DevOps son contenedores directos para los argumentos de la línea de comandos de las herramientas de seguridad.For the most part, the Azure DevOps build tasks are direct wrappers around the command-line arguments of the security tools. Puede pasar como argumentos a una tarea de compilación todo lo que normalmente pasa a una herramienta de línea de comandos.You can pass as arguments to a build task anything you normally pass to a command-line tool.

Diferencias perceptibles:Noticeable differences:

  • Las herramientas se ejecutan desde la carpeta de origen del agente $(Build.SourcesDirectory) o desde %BUILD_SOURCESDIRECTORY%.Tools run from the source folder of the agent $(Build.SourcesDirectory) or from %BUILD_SOURCESDIRECTORY%. Un ejemplo es C:\agent_work\1\s.An example is C:\agent_work\1\s.
  • Las rutas de acceso de los argumentos pueden ser relativas a la raíz del directorio de origen que se mostró anteriormente.Paths in the arguments can be relative to the root of the source directory previously listed. Las rutas de acceso también pueden ser absolutas.Paths can also be absolute. Las rutas de acceso absolutas se obtienen mediante el uso de las variables de compilación de Azure DevOps o a través de la ejecución de un agente local con ubicaciones de implementación conocidas de recursos locales.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.
  • Las herramientas proporcionan automáticamente una carpeta o una ruta de acceso de archivo de salida.Tools automatically provide an output file path or folder. Si proporciona una ubicación de salida para una tarea de compilación, esa ubicación se reemplaza por una ruta de acceso a nuestra ubicación conocida de registros en el agente de compilación.If 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
  • Algunos argumentos de la línea de comandos adicionales se modifican para algunas herramientas.Some additional command-line arguments are changed for some tools. Un ejemplo es agregar o quitar opciones que garantizan que no se inicie ninguna GUI.One example is the addition or removal of options that ensure no GUI is launched.

¿Puedo ejecutar una tarea de compilación como Credential Scanner en varios repositorios en una compilación de Azure DevOps?Can I run a build task like Credential Scanner across multiple repositories in an Azure DevOps Build?

No.No. No se admite la ejecución de las herramientas de desarrollo seguro en varios repositorios en una sola canalización.Running the secure development tools across multiple repositories in a single pipeline isn't supported.

El archivo de salida que especifiqué no se está creando o no encuentro el archivo de salida especificadoThe output file I specified isn't being created, or I can’t find the output file I specified

Las tareas de compilación filtran algunas de las entradas del usuario.The build tasks filter some user input. Para esta pregunta en concreto, actualizan la ubicación del archivo de salida generado para que sea una ubicación común en el agente de compilación.For this question specifically, they update the location of the generated output file to be a common location on the build agent. Para obtener más información acerca de esta ubicación, consulte las siguientes preguntas.For more information on this location, see the following questions.

¿Dónde se guardan los archivos de salida generados por las herramientas?Where are the output files generated by the tools saved?

Las tareas de compilación agregan automáticamente las rutas de acceso de los resultados a esta ubicación conocida en el agente de compilación $(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 estandarizamos esta ubicación, todos los equipos que generan o consumen registros de análisis de código tienen acceso a la salida.Because we standardize on this location, all teams that produce or consume code-analysis logs have access to the output.

¿Se puede poner en cola una compilación para ejecutar estas tareas en un agente de compilación hospedado?Can I queue a build to run these tasks on a hosted build agent?

Sí.Yes. Todas las tareas y herramientas de la extensión se pueden ejecutar en un agente de compilación hospedado.All tasks and tools in the extension can be executed on a hosted build agent.

Nota

La tarea de compilación Anti-Malware Scanner requiere un agente de compilación con Windows Defender habilitado.The Anti-Malware Scanner build task requires a build agent with Windows Defender enabled. Tanto Visual Studio 2017 hospedado como las versiones posteriores proporcionan ese agente.Hosted Visual Studio 2017 and later provide such an agent. La tarea de compilación no se ejecutará en el agente hospedado de Visual Studio 2015.The build task won't run on the Visual Studio 2015 hosted agent.

Aunque las firmas no se pueden actualizar en estos agentes, siempre deben tener una antigüedad inferior a tres horas.Although signatures can't be updated on these agents, signatures should always be less than three hours old.

¿Puedo ejecutar estas tareas de compilación como parte de una canalización de versión (en lugar de una canalización de compilación)?Can I run these build tasks as part of a release pipeline as opposed to a build pipeline?

En la mayoría de los casos, sí.In most cases, yes.

Sin embargo, Azure DevOps no admite la ejecución de tareas dentro de canalizaciones de versión cuando esas tareas publican artefactos.However, Azure DevOps doesn't support running tasks within release pipelines when those tasks publish artifacts. Esta falta de compatibilidad impide que la tarea Publish Security Analysis Logs se ejecute correctamente en una canalización de versiones.This lack of support prevents the Publish Security Analysis Logs task from running successfully in a release pipeline. En su lugar, la tarea genera un mensaje de error descriptivo.The task instead fails with a descriptive error message.

¿Desde dónde descargan las herramientas las tareas de compilación?From where do the build tasks download the tools?

Las tareas de compilación pueden descargar los paquetes NuGet de las herramientas de la fuente de administración de paquetes de Azure DevOps.Build tasks can download the tools' NuGet packages from the Azure DevOps Package Management feed. Las tareas de compilación también pueden usar el administrador de paquetes de Node, que se debe preinstalar en el agente de compilación.Build tasks can also use Node Package Manager, which must be preinstalled on the build agent. Un ejemplo de este tipo de instalación es el comando npm install tslint.An example of such installation is the command npm install tslint.

¿Qué efecto tiene la instalación de la extensión en mi organización de Azure DevOps?What effect does installing the extension have on my Azure DevOps organization?

Tras su instalación, las tareas de compilación de seguridad que proporciona la extensión estarán disponibles para todos los usuarios de la organización.Upon their installation, the security build tasks provided by the extension becomes available to all users in your organization. Al crear o editar una canalización de Azure, estas tareas están disponibles en la lista de colecciones build-task.When you create or edit an Azure Pipeline, these tasks are available from the build-task collection list. Sin embargo, la instalación de la extensión en la organización de Azure DevOps no tiene ningún impacto.Otherwise, installing the extension in your Azure DevOps organization has no effect. La instalación no modifica ninguna configuración de cuenta, configuración de proyecto ni canalizaciones.The installation doesn't modify any account settings, project settings, or pipelines.

¿La instalación de la extensión modifica mi instancia existente de Azure Pipelines?Does installing the extension modify my existing Azure Pipelines?

No.No. La instalación de la extensión hace que las tareas de compilación de seguridad estén disponibles para agregarlas a las canalizaciones.Installing the extension makes the security build tasks available for addition to your pipelines. De todos modos es necesario agregar o actualizar las definiciones de compilación para que las herramientas puedan trabajar con el proceso de compilación.You're still required to add or update build definitions, so that the tools can work with your build process.

Preguntas más frecuentes específicas sobre las tareasTask-specific FAQ

En esta sección se enumeran las preguntas específicas sobre las tareas de compilación.Questions specific to build tasks are listed in this section.

Credential ScannerCredential Scanner

¿Cuáles son escenarios y ejemplos comunes de eliminación?What are common suppression scenarios and examples?

A continuación se muestran detalles de dos de los escenarios de eliminación más comunes.Here are details of two of the most common suppression scenarios.

Eliminar todas las repeticiones de un secreto determinado dentro de la ruta de acceso especificadaTo suppress all occurrences of a given secret within the specified path

Como se muestra en el ejemplo siguiente, se necesita la clave hash del secreto ubicada en el archivo de salida de CredScan.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."
    }
  ]
}

Advertencia

La clave hash se genera mediante una parte del valor coincidente o del contenido del archivo.The hash key is generated by a portion of the matching value or file content. Cualquier revisión de código fuente puede cambiar la clave hash y deshabilitar la regla de eliminación.Any source-code revision can change the hash key and disable the suppression rule.

Para eliminar todos los secretos de un archivo especificado o para eliminar el archivo de secretosTo suppress all secrets in a specified file or to suppress the secrets file itself

La expresión de archivo puede ser un nombre de archivo.The file expression can be a file name. También puede ser la parte del nombre base de una ruta de acceso completa o un nombre de archivo.It can also be the basename part of a full file path or a file name. No se admiten caracteres comodín.Wildcards are not supported.

En los ejemplos siguientes se muestra cómo eliminar el archivo <InputPath>\src\JS\lib\angular.jsThe following examples show how to suppress the file <InputPath>\src\JS\lib\angular.js

Ejemplos de reglas de eliminación válidas:Examples of valid suppression rules:

  • <InputPath>\src\JS\lib\angular.js: elimina el archivo en la ruta de acceso especificada<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: elimina cualquier archivo con el mismo nombreangular.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"
    }
  ]
}

Advertencia

Todos los secretos futuros que se agreguen al archivo también se eliminarán automáticamente.All future secrets added to the file will also be suppressed automatically.

Los recursos siguientes lo ayudarán a administrar de manera segura los secretos y a acceder a información confidencial desde dentro de sus aplicaciones:The following resources help you securely manage secrets and access sensitive information from within your applications:

Para más información, consulte la entrada de blog sobre la administración de secretos de manera segura en la nube.For more information, see the blog post Managing Secrets Securely in the Cloud.

¿Puedo escribir mis propios buscadores personalizados?Can I write my own custom searchers?

Credential Scanner se basa en un conjunto de buscadores de contenido que se suelen definir en el archivo buildsearchers.xml.Credential Scanner relies on a set of content searchers that are commonly defined in the buildsearchers.xml file. El archivo contiene una matriz de objetos serializados en XML que representan un objeto ContentSearcher.The file contains an array of XML serialized objects that represent a ContentSearcher object. El programa se distribuye con un conjunto de buscadores totalmente probados.The program is distributed with a set of well-tested searchers. Pero también puede implementar sus propios buscadores personalizados.But you can implement your own custom searchers too.

Un buscador de contenido se define de la siguiente manera:A content searcher is defined as follows:

  • Name: el nombre descriptivo del buscador que se usará en el archivo de salida de Credential Scanner.Name: The descriptive searcher name to be used in Credential Scanner output files. Se recomienda usar la convención de nomenclatura en mayúsculas y minúsculas para los nombres de los buscadores.We recommended you use the camel-case naming convention for searcher names.

  • RuleId: el identificador opaco estable del buscador:RuleId: The stable opaque ID of the searcher:

    • A un buscador predeterminado de Credential Scanner se asigna le asigna un valor RuleId como CSCAN0010, CSCAN0020 o CSCAN0030.A Credential Scanner default searcher is assigned a RuleId value like CSCAN0010, CSCAN0020, or CSCAN0030. El último dígito se reserva para la combinación o la división posible de grupos de buscadores a través de expresiones regulares (regex).The last digit is reserved for potentially merging or dividing searcher groups via regular expressions (regex).
    • El valor RuleId de un buscador personalizado debe tener su propio espacio de nombres.The RuleId value for a customized searcher should have its own namespace. Entre los ejemplos se incluyen CSCAN-<Namespace>0010, CSCAN-<Namespace>0020 y CSCAN-<Namespace>0030.Examples include CSCAN-<Namespace>0010, CSCAN-<Namespace>0020, and CSCAN-<Namespace>0030.
    • Un nombre completo de buscador es la combinación de un valor RuleId y un nombre de buscador.A fully qualified searcher name is the combination of a RuleId value and a searcher name. Algunos ejemplos son CSCAN0010.KeyStoreFiles y CSCAN0020.Base64EncodedCertificate.Examples include CSCAN0010.KeyStoreFiles and CSCAN0020.Base64EncodedCertificate.
  • ResourceMatchPattern: regex de las extensiones de archivo que se deben comprobar respecto del buscador.ResourceMatchPattern: Regex of file extensions to check against the searcher.

  • ContentSearchPatterns: matriz de cadenas que contienen las instrucciones de expresión regular que deben coincidir.ContentSearchPatterns: An array of strings containing regex statements to match. Si no se han definido patrones de búsqueda, se devolverán todos los archivos que coincidan con el valor ResourceMatchPattern.If no search patterns are defined, all files matching the ResourceMatchPattern value are returned.

  • ContentSearchFilters: matriz de cadenas que contienen instrucciones de expresión regular para filtrar falsos positivos específicos del buscador.ContentSearchFilters: An array of strings containing regex statements to filter searcher-specific false positives.

  • MatchDetails: mensaje descriptivo, instrucciones de mitigación (o ambos) que se van a agregar a cada coincidencia del buscador.MatchDetails: A descriptive message, mitigation instructions, or both to be added for each match of the searcher.

  • Recomendación: proporciona el contenido del campo de sugerencias para las coincidencias con el formato de informe PREfast.Recommendation: The suggestions-field content for a match using the PREfast report format.

  • Gravedad: un entero que refleja el nivel de gravedad de un problema.Severity: An integer that reflects the severity level of an issue. El nivel de gravedad más alto tiene el valor 1.The highest severity level has the value 1.

    Código XML que muestra la configuración de Credential Scanner

Analizadores basados en RoslynRoslyn Analyzers

¿Cuáles son errores comunes cuando se usa la tarea de analizadores basados en Roslyn?What are common errors when using the Roslyn Analyzers task?

El proyecto se restauró con una versión incorrecta de Microsoft.NETCore.AppThe project was restored using a wrong Microsoft.NETCore.App version

El mensaje de error completo:The full error message:

"Error: El proyecto se restauró con la versión de Microsoft.NETCore.App x.x.x, pero con la configuración actual se usaría la versión y.y.y."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 solucionar este problema, asegúrese de que se usa la misma configuración para la restauración y para las operaciones posteriores como compilar o publicar.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 puede producirse si la propiedad RuntimeIdentifier se establece durante la compilación o publicación, en lugar de durante la restauración".Typically this issue can occur if the RuntimeIdentifier property is set during build or publish but not during restore."

Como las tareas de analizadores basados en Roslyn se ejecutan como parte de la compilación, el árbol de origen de la máquina de compilación debe estar en un estado que pueda compilarse.Because Roslyn Analyzers tasks run as part of compilation, the source tree on the build machine needs to be in a buildable state.

Es posible que un paso entre los pasos de la compilación principal y los analizadores basados en Roslyn haya puesto el árbol de origen en un estado que impide la compilación.A step between your main build and Roslyn Analyzers steps might have put the source tree into a state that prevents building. Este paso adicional probablemente sea dotnet.exe publish.This extra step is probably dotnet.exe publish. Intente duplicar el paso que realiza una restauración de NuGet justo antes del paso de los analizadores basados en Roslyn.Try duplicating the step that does a NuGet restoration just before the Roslyn Analyzers step. Este paso duplicado podría volver a poner el árbol de origen en un estado que permita la compilación.This duplicated step might put the source tree back in a buildable state.

csc.exe no puede crear una instancia del analizadorcsc.exe can't create an analyzer instance

El mensaje de error completo:The full error message:

""csc.exe" se cerró con el código de error 1: no se puede crear una instancia del analizador AAAA desde C:\BBBB.dll : No se puede cargar el archivo o ensamblado "Microsoft.CodeAnalysis, Version=X.X.X.X, Culture=neutral, PublicKeyToken=31bf3856ad364e35" o alguna de sus dependencias."'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. El sistema no encuentra el archivo especificado."The system cannot find the file specified."

Asegúrese de que el compilador admite los analizadores basados en Roslyn.Ensure your compiler supports Roslyn Analyzers. La ejecución del comando csc.exe /version debe notificar un valor de versión de 2.6 o posterior.Running the command csc.exe /version should report a version value of 2.6 or later.

En algunas ocasiones, un archivo .csproj individual puede invalidar la instalación de Visual Studio de la máquina de compilación al hacer referencia a un paquete de Microsoft.Net.Compilers.Sometimes a .csproj file can override the build machine's Visual Studio installation by referencing a package from Microsoft.Net.Compilers. Si no pretende usar una versión específica del compilador, quite las referencias a Microsoft.Net.Compilers.If you don't intend to use a specific version of the compiler, remove references to Microsoft.Net.Compilers. De lo contrario, asegúrese de que la versión del paquete al que se hace referencia también sea 2.6 o posterior.Otherwise, make sure the version of the referenced package is also 2.6 or later.

Intente obtener la ruta de acceso del registro de errores, que se especifica en la opción csc.exe /errorlog.Try to get the error-log path, which is specified in the csc.exe /errorlog option. La opción y la ruta de acceso aparecen en el registro de la tarea de compilación de los analizadores basados en Roslyn.The option and path appear in the log for the Roslyn Analyzers build task. Puede tener un aspecto similar a /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

La versión del compilador de C# no es lo suficientemente recienteThe C# compiler version isn't recent enough

Para obtener las versiones más recientes del compilador de C#, vaya a Microsoft.Net.Compilers.To get the latest versions of the C# compiler, go to Microsoft.Net.Compilers. Para saber cuál es la versión instalada, ejecuta csc.exe /version en un símbolo del sistema.To get your installed version, run csc.exe /version at a command prompt. Asegúrese de hacer referencia a un paquete NuGet de Microsoft.Net.Compilers de la versión 2.6 o posterior.Ensure that you reference a Microsoft.Net.Compilers NuGet package that is version 2.6 or later.

No se encuentran los registros de MSBuild ni VSBuildMSBuild and VSBuild logs aren't found

La tarea de compilación de los analizadores basados en Roslyn necesita consultar a Azure DevOps para obtener el registro de MSBuild de la tarea de compilación de MSBuild.The Roslyn Analyzers build task needs to query Azure DevOps for the MSBuild log from the MSBuild build task. Si la tarea del analizador se ejecuta inmediatamente después de la tarea MSBuild, el registro todavía no estará disponible.If the analyzer task runs immediately after the MSBuild task, the log won't yet be available. Coloque otras tareas entre la tarea MSBuild y la tarea de los analizadores basados en Roslyn.Place other tasks between the MSBuild task and the Roslyn Analyzers task. Entre los ejemplos de otras tareas se incluyen BinSkim y Anti-Malware Scanner.Examples of other tasks include BinSkim and Anti-Malware Scanner.

Pasos siguientesNext steps

Si necesita ayuda adicional, el soporte técnico para el Análisis de código de seguridad de Microsoft está disponible de lunes a viernes de las 9:00 a. m. a las 5:00 p. m. hora estándar del 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.