
Облачно-независимый перечислитель разрешений IAM
Многооблачный инструмент для перечисления разрешений IAM. В настоящее время поддерживает:
Cliam — это простой определитель разрешений для облачных сервисов. В CLI есть два основных компонента. Большинство перечисляемых разрешений относятся к list, describe или get.
enumerate — используется для перечисления конкретных разрешений (рекомендуется)Загрузите последний релиз. Теги DEV являются актуальными, но нестабильными.
Чтобы собрать бинарный файл локально, перейдите в каталог cli и выполните make dev
Cliam работает с учётными данными, полученными из общеизвестных переменных окружения сервисов, либо путём передачи часто требуемых флагов через CLI.
Настоятельно рекомендуется настроить автодополнение команд, так как большинство параметров enumerate должны быть конкретными. Для генерации автодополнения используйте cliam completion [shell] и настройте в соответствии с каталогом автодополнения вашей оболочки.
Usage:
cliam [command]
Available Commands:
aws Enumerate AWS credentials for their permissions.
azure Enumerate Azure credentials for their permissions.
completion Generate the autocompletion script for the specified shell
firebase Enumerate Firebase permissions.
gcp Enumerate GCP service accounts for their permissions.
help Help about any command
version Show version and build info
Flags:
-h, --help help for cliam
--max-threads int Maximum number of threads to use. (default 5)
--request-timeout int Timeout for each request in seconds. (default 5)
--save-output Save output to file on success
-v, --verbose Enable verbose output.
Использует REST API AWS для формирования подписанного запроса с переданными учётными данными. Это значительно ускоряет работу, но усложняет добавление новых разрешений. Проблема масштабирования заключается в том, что AWS использует 3-4 разновидности запросов на уровне сервиса.
Поддерживается получение учётных данных из профиля AWS, флагов или стандартных переменных окружения AWS, таких как AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY и опционально AWS_SESSION_TOKEN.
❯❯ cliam aws
Enumerate AWS credentials for their permissions.
Usage:
cliam aws [command]
Available Commands:
enumerate Enumerate permissions for specified AWS resources.
service-group Enumerate permissions for groups of AWS resources.
Flags:
--access-key-id string AWS Access Key ID
-h, --help help for aws
--known-value stringToString AWS Resource Name. When known-resource-name is set, additional permissions where a resource needs to be specified is enumerated. (default [])
--profile string AWS Profile. When profile is set, access-key-id, secret-access-key, and session-token are ignored.
--region string AWS Region (default "us-east-1")
--secret-access-key string AWS Secret Access Key
--session-json string AWS Session JSON file. This flag attempts to read session information from the specified file. Helpful with temporary credentials.
--session-token string AWS Session Token
Global Flags:
--max-threads int Maximum number of threads to use. (default 5)
--request-timeout int Timeout for each request in seconds. (default 5)
-v, --verbose Enable verbose output.
Cliam для AWS также поддерживает перечисление разрешений, требующих известного значения. Например, при использовании awscli мы можем получить функцию с помощью aws lambda get-function --function-name <function_name>.
Это напрямую отображается на cliam, где можно использовать:
cliam aws enumerate lamda --known-value function-name=<function_name>
Это перечислит все разрешения для lambda, которые принимают function-name в качестве допустимого аргумента. Это будет работать и с другими ресурсами AWS.
Перебор всех ресурсов serverless из профиля AWS
❯❯ cliam aws service-group serverless --profile=my-profile
Использование временных токенов сессии для проверки всех разрешений ec2
❯❯ cliam aws enumerate ec2 --session-json=creds.json
Где creds.json содержит
{
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIA...",
"SecretAccessKey" : "...",
"Token" : "...",
}
Перечисление разрешений для s3, iam и ec2
❯❯ cliam aws enumerate s3 iam ec2
GCP поддерживает перечисление из конкретного JSON-файла сервисного аккаунта. Также поддерживаются учётные данные из переменных окружения GCP .GOOGLE_APPLICATION_CREDENTIALS и CLOUDSDK_CORE_PROJECT
Поскольку для GCP существует два режима перечисления, используйте enumerate, если включён cloudresourcemanager, или rest для перечисления конкретных разрешений.
cliam gcp --help
Enumerate GCP service accounts for their permissions.
Usage:
cliam gcp [command]
Available Commands:
bruteforce Enumerate all GCP permissions
enumerate Enumerate specified GCP permissions
rest GCP permissions using the REST API
Flags:
-h, --help help for gcp
--project-id string GCP project id
--region string GCP Region (default "us-central1")
--service-account string GCP service account path
--zone string GCP Zone (default "us-central1-a")
Global Flags:
--max-threads int Maximum number of threads to use. (default 5)
--request-timeout int Timeout for each request in seconds. (default 10)
Use "cliam gcp [command] --help" for more information about a command.
Azure поддерживает различные методы аутентификации, включая субъекты-службы (через идентификатор клиента и секрет), сертификат MSI (через токен MSI) или стандартную аутентификацию. Также поддерживаются все стандартные переменные окружения Azure:
AZURE_CLIENT_ID : идентификатор клиента или имя пользователяAZURE_CLIENT_SECRET : секрет клиентаAZURE_SUBSCRIPTION_ID : идентификатор подпискиAZURE_CLIENT_CERTIFICATE_PATH : путь к сертификатуAZURE_TENANT_ID : идентификатор арендатораCLIAM_AZURE_OAUTH_TOKEN : существующий OAuth-токен❯❯ cliam azure
Enumerate Azure credentials for their permissions.
In most cases, a valid Azure Subscription ID is required. If one
is not provided, the CLI will attempt to lookup available subscriptions
and use the first one.
Usage:
cliam azure [command]
Available Commands:
access-token Get access token to use with REST apis
enumerate Enumerate permissions for specified azure resources.
service Enumerate permissions for a specific group of azure services.
subscriptions List all subscriptions
cliam поддерживает две переменные окружения для вывода отладочной информации:
DEBUG=true (показывает коды состояния запросов)VERBOSE=true (показывает тело запросов)