Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cfn_nag — Strumento di linting per template CloudFormation | Kitploit
Strumenti/GitHubGitHub/stelligent/cfn_nag
Analisi Statica del Codice (SAST)Audit di ConfigurazioneSicurezza CloudDevSecOpsRilevamento SegretiConfigurazione ErrataTop in Audit di Configurazione n.20Top in Configurazione Errata n.20
GitHub
1.3k208444 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
stelligent/cfn_nag

cfn_nag

Strumento di linting per template CloudFormation

Vedi Repository

cfn_nag

Contesto

Lo strumento cfn-nag cerca nei modelli CloudFormation pattern che potrebbero indicare infrastrutture non sicure. In parole povere, cerca:

  • Regole IAM troppo permissive (wildcard)
  • Regole per i security group troppo permissive (wildcard)
  • Log di accesso non abilitati
  • Crittografia non abilitata
  • Literal di password

Per ulteriori informazioni sullo strumento, consulta questo articolo sul blog di Stelligent:

Trovare problemi di sicurezza nelle fasi iniziali del processo di sviluppo di un modello CloudFormation con "cfn-nag"

Installazione

Installazione tramite Gem

Supponendo che Ruby >= 2.5.x sia installato, l'installazione è solo una questione di:

gem install cfn-nag

Installazione tramite Brew

Su MacOS o Linux puoi anche installare con brew:

brew install ruby brew-gem
brew gem install cfn-nag

CodePipeline

Per eseguire cfn_nag come azione in CodePipeline, puoi eseguire il deploy tramite l'AWS Serverless Application Repository.

Utilizzo

Per eseguire:

cfn_nag_scan --input-path <path to cloudformation json>

Il percorso può essere una directory o un modello specifico. Se è una directory, tutti i file .json, .template, .yml e .yaml verranno elaborati, inclusa la ricorsione nelle sottodirectory.

Il formato di output predefinito è testo libero, ma l'output JSON può essere selezionato con il flag --output-format json.

Facoltativamente, un flag --debug scaricherà informazioni sugli interni del caricamento delle regole.

Esegui con --help per un elenco completo delle opzioni supportate.

Per vedere un elenco di tutte le regole attualmente supportate da cfn-nag, esiste un'utilità a riga di comando che le invia a stdout:

cfn_nag_rules

Risultati

  • I risultati vengono inviati a stdout
  • Una violazione grave (failure) restituisce un codice di uscita diverso da zero.
  • Un avviso (warning) restituisce un codice di uscita zero/successo.
  • Una violazione fatale interrompe l'analisi (per file) perché il modello è malformato in qualche modo grave

Esecuzione in Docker

È fornito un Dockerfile per comodità. È pubblicato su DockerHub come stelligent/cfn_nag.

https://hub.docker.com/r/stelligent/cfn_nag

Puoi anche crearlo localmente.

docker build -t stelligent/cfn_nag .

Puoi montare una directory locale contenente i modelli nel container Docker e quindi chiamare cfn_nag all'interno del container. Questo esempio utilizza i modelli di test usati negli unit test di cfn_nag:

$ docker run -v `pwd`/spec/test_templates:/templates -t stelligent/cfn_nag /templates/json/efs/filesystem_with_encryption.json
{
  "failure_count": 0,
  "violations": [

  ]
}
$ docker run -v `pwd`/spec/test_templates:/templates -t stelligent/cfn_nag /templates/json/efs/filesystem_with_no_encryption.json
{
  "failure_count": 1,
  "violations": [
    {
      "id": "F27",
      "type": "FAIL",
      "message": "EFS FileSystem should have encryption enabled",
      "logical_resource_ids": [
        "filesystem"
      ]
    }
  ]
}

Esecuzione come GitHub Action

cfn_nag_scan può essere eseguito come parte di un GitHub Workflow per valutare il codice durante le pipeline di integrazione continua.

Nel tuo file GitHub Workflow, crea uno step che utilizza l'Action cfn_nag:

- name: Simple test
  uses: stelligent/cfn_nag@master
  with:
    input_path: tests

Maggiori informazioni sulla GitHub Action sono disponibili qui.

Filtraggio dei risultati

Profili

cfn-nag supporta il concetto di "profilo" che è di fatto una lista di consentiti (allow list) delle regole da applicare. Il profilo è un file di testo che deve contenere un identificatore di regola per riga. Quando viene specificato tramite l'argomento da riga di comando --profile-path, cfn-nag restituirà SOLO le violazioni di quelle specifiche regole.

La motivazione alla base della creazione di un "profilo" è che diversi sviluppatori potrebbero interessarsi a regole diverse. Ad esempio, uno "sviluppatore di infrastrutture" potrebbe preoccuparsi delle regole IAM, mentre uno "sviluppatore di applicazioni" potrebbe non essere nemmeno in grado di creare risorse IAM e quindi non interessarsi a quelle regole.

Ecco un esempio di profilo:

F1
F2
F27
W3
W5

Lista di diniego globale

La deny list è sostanzialmente l'opposto del profilo: è un elenco di regole da NON applicare MAI. Quando viene specificata tramite l'argomento da riga di comando --deny-list-path, cfn-nag non restituirà MAI violazioni dalle regole specificate nel file.

Nel caso in cui una regola sia specificata in entrambi, la deny list avrà priorità sul profilo e la regola non verrà applicata.

Il formato è il seguente. Gli unici due campi salienti sono RulesToSuppress e l'id per ogni elemento. La reason non verrà interpretata da cfn-nag, ma è consigliato giustificare e documentare il motivo per cui la regola non dovrebbe mai essere applicata.

RulesToSuppress:
- id: W3
  reason: W3 is something we never care about at enterprise X

Soppressione delle regole per singola risorsa

Nel caso in cui esista una regola che desideri sopprimere, è possibile aggiungere una chiave Metadata di cfn_nag alla risorsa interessata per dire a cfn_nag di non generare un errore o un avviso per quella regola.

Ad esempio, se stai configurando un ELB pubblico aperto alle connessioni in ingresso da internet con risorse come le seguenti:

public_alb.yaml

# Partial template
PublicAlbSecurityGroup:
  Properties:
    GroupDescription: 'Security group for a public Application Load Balancer'
    VpcId:
      Ref: vpc
  Type: AWS::EC2::SecurityGroup
PublicAlbSecurityGroupHttpIngress:
  Properties:
    CidrIp: 0.0.0.0/0
    FromPort: 80
    GroupId:
      Ref: PublicAlbSecurityGroup
    IpProtocol: tcp
    ToPort: 80
  Type: AWS::EC2::SecurityGroupIngress

cfn_nag genererà avvisi come i seguenti:

$ cfn_nag_scan -i public_alb.yaml
------------------------------------------------------------
public_alb.yaml
------------------------------------------------------------------------------------------------------------------------
| WARN W9
|
| Resources: ["PublicAlbSecurityGroup"]
|
| Security Groups found with ingress cidr that is not /32
------------------------------------------------------------
| WARN W2
|
| Resources: ["PublicAlbSecurityGroup"]
|
| Security Groups found with cidr open to world on ingress.  This should never be true on instance.  Permissible on ELB

Failures count: 0
Warnings count: 2

Aggiungendo i metadati, questi avvisi possono essere soppressi:

public_alb_with_suppression.yaml

Scarica lo strumento