MASTG-TECH-0133: Análise de Composição de Software (SCA) de Dependências iOS por meio da Varredura de Artefatos do Package Manager
O iOS possui vários gerenciadores de dependências, onde os mais populares são:
As dependências são integradas ao projeto durante o processo de build e, em seguida, compiladas no arquivo IPA. No entanto, as informações de versão das dependências podem ser removidas durante a compilação, o que significa que não podemos escanear o arquivo IPA. Felizmente, podemos escanear os artefatos produzidos pelos gerenciadores de dependências.
Ferramentas como Verificação de Dependências (dependency-check) podem escanear arquivos criados pelos três gerenciadores de dependências. Esses arquivos listam as dependências como Common Platform Enumeration (CPE) e suas versões. O CPE será incluído no aplicativo iOS. Essas ferramentas então buscam vulnerabilidades conhecidas, ou CVEs (Common Vulnerability and Exposure), nas dependências, verificando-as em um banco de dados de vulnerabilidades, como o National Vulnerability Database (NVD).
Observe que Verificação de Dependências (dependency-check) oferece suporte a Carthage, CocoaPods e SwiftPM, mas esses analisadores são considerados experimentais. Embora esses analisadores possam ser úteis e fornecer resultados válidos, mais testes devem ser concluídos para garantir que as taxas de falsos negativos/positivos sejam aceitáveis.
Para testar com Verificação de Dependências (dependency-check), precisamos recuperar o arquivo correspondente do gerenciador de dependências:
- Para Carthage, é o arquivo
Cartfile.resolved. - Para CocoaPods, é o arquivo
*.podspecouPodfile.lock - Para SwiftPM, é o arquivo
Package.SwiftouPackage.resolved
Lembre-se de que os desenvolvedores podem usar mais de um gerenciador de dependências, portanto, pode ser necessário realizar mais de uma verificação. Ao escanear com Verificação de Dependências (dependency-check), escanear o arquivo criado pelo gerenciador de dependências é suficiente; você não precisa ter acesso ao projeto completo do Xcode ou ao código-fonte.
Antes de executar a verificação, obtenha uma chave de API para o NVD. Essa chave é usada para recuperar as informações mais recentes de CVE. Você pode solicitar a chave de API para acessar a API do NVD em https://nvd.nist.gov/developers/request-an-api-key.
- Para iniciar uma verificação para um projeto usando SwiftPM, execute o seguinte comando para escanear o
Package.SwiftouPackage.resolved:
$ dependency-check --enableExperimental -f SARIF --nvdApiKey <SUA-CHAVE-API> -s Package.resolved
- Para iniciar uma verificação para um projeto usando CocoaPods, execute o seguinte comando para escanear o
Podfile.lockou*.podspec:
$ dependency-check --enableExperimental -f SARIF --nvdApiKey <SUA-CHAVE-API> -s Podfile.lock
- Para iniciar uma verificação para um projeto usando Carthage, execute o seguinte comando para escanear o
Cartfile.resolved.:
$ dependency-check --enableExperimental -f SARIF --nvdApiKey <SUA-CHAVE-API> -s Cartfile.resolved
A saída é sempre um arquivo SARIF, que pode ser visualizado usando o plugin visualizador de Sarif no Visual Studio Code (vscode). Quaisquer vulnerabilidades conhecidas encontradas serão listadas com seu número CVE e descrição.
Você só pode escanear um arquivo por vez. Ao escanear para CocoaPods ou Carthage, use o mesmo comando, mas escaneie o arquivo correspondente do gerenciador de dependências.