Лично я думаю, что режущие углы неизбежно связаны с тем, как мы работаем как люди. Это все о следующем Желаемый путь Отказ В моей голове я часто говорю по проблеме и ее решениям и в то же время, я считаю компромиссы всех вариантов. Обычно этот процесс состоит в том, чтобы найти правильный баланс между ценностью и усилиями. Например, для одноразовой работы часто не стоит ставить огромные усилия в автоматизацию.
Однако время от времени вы спотыкаетесь на то, что вы думали, что вы хорошо рассмотрели. Через несколько недель, давая ваше решение второй мыслью, вы можете чувствовать, что вы попадаете на молнии.
Давайте прийти к точке
Одна из первых вещей, которые вы узнаете на AWS, это Чтобы следить за стандартным консультированием безопасности предоставления наименее привилегии . Это простое правило, но это не значит, что это легко реализовать. Когда мы начали создавать AWS CodePipelines некоторое время назад, мы придумали следующий код CloudFation, описывающий нашу инфраструктуру:
DeliveryPipeline: Type: AWS::CodePipeline::Pipeline Properties: ArtefactStores: - Region: eu-west-1 ArtifactStore: Location: !Ref ArtefactBucketName Type: S3 Name: some-project-pipeline RoleArn: !GetAtt CodePipelineServicenRole.Arn Stages: - Name: Source Actions: - Name: GitSource ActionTypeId: Category: Source Owner: ThirdParty Provider: GitHub Version: "1" Configuration: Owner: !Ref GitHubOwner Repo: !Ref GitRepo Branch: !Ref GitBranch PollForSourceChanges: False OAuthToken: !Ref GitHubOAuthToken OutputArtifacts: - Name: SourceZip ... - Name: Deploy Actions: - Name: DeployPersistantStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: "1" Configuration: ActionMode: CREATE_UPDATE Capabilities: CAPABILITY_NAMED_IAM RoleArn: !GetAtt CloudFormationExecutionRole.Arn StackName: some-stack-cfn TemplatePath: BuildArtifactAsZip::cfn-template.yaml TemplateConfiguration: BuildArtifactAsZip::dist/config/cloudformation/stack-config.json InputArtifacts: - Name: BuildArtifactAsZip RunOrder: 1 ... CloudFormationExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: Action: - sts:AssumeRole Effect: Allow Principal: Service: - cloudformation.amazonaws.com Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AdministratorAccess
Я думаю, что угла, который был вырезан в код выше, легко найти. А CloudFormationExecutaRole
Наличие АдминистраторCCess
не соответствует наименее правилу привилегии. Причина взять ярлык — в этом случае — это тот факт, что стопки облака часто делают много разных вещей. Применение наименее правила привилегии в этом контексте будет означать долгое и хорошо продуманное политику. Так что для простоты и скорости мы решили порезать угол. Компромисс? Позволяя трубопроводу тапу больше доступа, то он должен, не иметь большого значения, я мог бы жить с этим.
Оборонные линии
Когда дело доходит до безопасности, я думаю, что мы сделали довольно хорошую крепость нашей среды AWS: хороший IDP, AWS WAF, AWS Security Hub, AWS Inspector и бесконечный список других инструментов для закрытия ворот. Мы сделали AWS безопасное место, чтобы пойти. Однако репозиторий Git часто живет за пределами экосистемы AWS. Github, Gitlab и Bitbucket являются наиболее распространенными местами, чтобы поставить свой код. Следующий вопрос: ваш репозиторий Git, как и крепость? Если ответ нет, то позвольте мне создать ужас. Если кто-то может получить доступ к вашему репозитории Git, он может сделать одно из следующих действий, если бы трубопровод был предоставлен АдминистраторCCess
Для облачной информации:
- Измените имя DNS для повторного маршрута трафика (на сайт фишинга)
- Изменить свой Делитицироватьpolicy и выбросить все ваши ресурсы
- Изменить профиль экземпляра или группы безопасности
- Я думаю, что это уже показало вам достаточно ужаса
Если я сейчас повторяю свой вопрос: могу ли я жить с этим? Ответ является полным противоположным. Это большое дело, никак не могу принять это!
Так что это также записка для себя. Всегда думайте дважды при резке углов, особенно если безопасность может подвергаться риску. Иногда нелегко понимать радиус взрывных решений сначала. Чтобы сделать вещи еще хуже: во многих случаях это будет очень сложно или даже невозможно для инструментов безопасности AWS, чтобы определить правильный уровень тяжести. В этом конкретном случае AWS даст вам предупреждение, но не может описать все основные риски.
Мне повезло, что я получил это еще, прежде чем это может превратиться в реальную проблему.
Дополнительное предупреждение: самообслуживание трубопроводов
Хотя я никогда не был фанатом трубопроводов, которые поддерживают себя в этом случае, мне нужно дать дополнительное предупреждение. Для ясности: по самообслуживающим трубопроводами я имею в виду трубопроводы, которые имеют сцену для обновления себя. Наличие такого трубопровода, слушающего Git, означает, что сама политика трубопровода может быть изменена, толкая коммит к Git. Так что, если ваш самообслуживающий трубопровод не имеет АдминистраторCCess
, это легко изменяется, имея доступ к его репозиторию Git. По этой причине я бы удалил логику самообузы от трубопровода. Мы используем Makefiles, которые нуждаются в клиенте для аутентификации, чтобы сделать изменения трубопроводов.
Решение
В конце концов, лучший способ закрыть эту дыру безопасности — применить правило наименее привилегии к вашему конвейеру. Недостатком этого подхода является введение дополнительной работы. Всякий раз, когда кто-то внесет изменения в стек облака, который не понравится изменения контекста безопасности, ему нужно сначала обновить политику трубопровода. Будьте готовы к людям, которые действительно расстроены этим.
Если вы находитесь в ситуации, когда ваша текущая трубопроводная политика слишком расслаблена, вы уже можете рассмотреть вопрос с промежуточного решения. Вы могли бы начать с отрицания всех IAM и маршрута 53 доступа и/или отрицать удаление доступа для всех ресурсов. Хотя это уже более безопасный, этот подход имеет некоторые недостатки. Так что это просто чтобы купить вам немного больше времени до применения наименее привилегированного правила.
Распределение заботятся 😉
До скорого.
ПРИМЕЧАНИЕ. То же самое отверстие безопасности может быть создано на AWS CodeBuild.
Оригинал: «https://dev.to/glnds/the-hidden-git-backdoor-in-aws-codepipeline-and-aws-codebuild-2cb0»