
Uno strumento per valutare rapidamente le autorizzazioni IAM in AWS.
Principal Mapper (PMapper) è uno script e una libreria per identificare rischi nella configurazione di AWS Identity and Access Management (IAM) per un account AWS o un'organizzazione AWS. Modella i diversi utenti e ruoli IAM in un account come un grafo diretto, consentendo controlli per l'escalation dei privilegi e per percorsi alternativi che un attaccante potrebbe seguire per ottenere accesso a una risorsa o azione in AWS.
PMapper include un meccanismo di interrogazione che utilizza una simulazione locale del comportamento di autorizzazione di AWS. Quando si esegue una query per determinare se un principale ha accesso a una determinata azione/risorsa, PMapper controlla anche se l'utente o il ruolo potrebbe accedere ad altri utenti o ruoli che hanno accesso a quell'azione/risorsa. Questo intercetta scenari come quando un utente non ha il permesso di leggere un oggetto S3, ma può avviare un'istanza EC2 in grado di leggere l'oggetto S3.
Ulteriori informazioni sono disponibili in la wiki del progetto.
Principal Mapper è costruito usando la libreria botocore e Python 3.5+. Principal Mapper richiede anche pydot (disponibile su pip) e graphviz (disponibile su Windows, macOS e Linux da https://graphviz.org/).
pip install principalmapper
Clona il repository:
git clone [email protected]:nccgroup/PMapper.git
Quindi installa con Pip:
cd PMapper
pip install .
(Dopo aver clonato dal sorgente)
cd PMapper
docker build -t $TAG .
docker run -it $TAG
Puoi usare -e|--env o --env-file per passare le variabili d'ambiente AWS_* per le credenziali quando chiami docker run ..., oppure usa -v per montare la tua directory ~/.aws/ e utilizzare le variabili d'ambiente AWS_CONFIG_FILE e AWS_SHARED_CREDENTIALS_FILE. Il Dockerfile attuale dovrebbe portarti in una shell con pmapper -h pronto all'uso e graphviz già installato.
Consulta la Pagina di Introduzione nella wiki per maggiori informazioni su come utilizzare PMapper da riga di comando. Ci sono anche pagine con dettagli completi su tutte le funzioni da riga di comando e sulla libreria.
Ecco un esempio rapido:
# Crea un grafo per l'account, accesso tramite profilo AWS CLI "skywalker"
pmapper --profile skywalker graph create
# [... output di creazione del grafo ...]
# Esegui una query per vedere chi può creare utenti IAM
$ pmapper --profile skywalker query 'who can do iam:CreateUser'
# [... output della query ...]
# Esegui una query per vedere chi può avviare un'istanza EC2 grande e costosa, esclusi gli utenti "admin"
$ pmapper --account 000000000000 argquery -s --action 'ec2:RunInstances' --condition 'ec2:InstanceType=c6gd.16xlarge'
# [... output della query ...]
# Esegui la query preimpostata per escalation privilegi, saltando il report degli utenti "admin" attuali
$ pmapper --account 000000000000 query -s 'preset privesc *'
# [... report privesc ...]
# Crea una rappresentazione SVG degli accessi admin/privesc/inter-principali
$ pmapper --account 000000000000 visualize --filetype svg
# [... output informativo, file creato ...]
Nota l'uso di --profile, che dovrebbe comportarsi come la CLI AWS. Inoltre, le chiamate successive con query/argquery/visualize usano un argomento --account che serve solo a evitare di controllare con quale account lavorare (altrimenti PMapper effettua una chiamata API per determinarlo).
Ecco un esempio della visualizzazione:

E ancora quando si usa --only-privesc:
Benvenuti e apprezzati al 100%. Si prega di coordinarsi tramite issue prima di iniziare e di indirizzare le pull request al branch di sviluppo corrente (tipicamente nella forma vX.Y.Z-dev).
Copyright (c) NCC Group and Erik Steringer 2019. This file is part of Principal Mapper.
Principal Mapper is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Principal Mapper is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Principal Mapper. If not, see <https://www.gnu.org/licenses/>.