Pentesting CI/CD Methodology
VCS
VCS рдХрд╛ рдЕрд░реНрде рд╣реИ Version Control System, рдпрд╣ рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдирдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрдо git рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдореЗрдВ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдПрдВрдЧреЗ:
Github
Gitlab
Bitbucket
Gitea
рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ (рд╡реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ VCS рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ)
Pipelines
Pipelines рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХреЛрдб рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди (рдирд┐рд░реНрдорд╛рдг, рдкрд░реАрдХреНрд╖рдг, рддреИрдирд╛рддреА... рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП) рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ: рдПрдХ рдкреБрд╢, рдПрдХ PR, рдХреНрд░реЙрди... рд╡реЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЙрддреНрдкрд╛рджрди рддрдХ рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдб рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
VCS Pentesting рдкрджреНрдзрддрд┐
рднрд▓реЗ рд╣реА рдХреБрдЫ VCS рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕ рдЦрдВрдб рдХреЗ рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╣рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рднреАрддрд░ рджреА рдЧрдИ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ VCS рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдорд▓рд╛рд╡рд░ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
Leaks: рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдХрдорд┐рдЯреНрд╕ рдореЗрдВ рд▓реАрдХ рд╣реИрдВ рдФрд░ рд╣рдорд▓рд╛рд╡рд░ рд░реЗрдкреЛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪ рд╣реИ), рддреЛ рд╡рд╣ рд▓реАрдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред
Access: рдпрджрд┐ рд╣рдорд▓рд╛рд╡рд░ VCS рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рднреАрддрд░ рдПрдХ рдЦрд╛рддреЗ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдЕрдзрд┐рдХ рджреГрд╢реНрдпрддрд╛ рдФрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Register: рдХреБрдЫ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдмрд╛рд╣рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред
SSO: рдХреБрдЫ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реИрдз SSO рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдХреЛ рднреА рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ (рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ github рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред
Credentials: Username+Pwd, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯреЛрдХрди, ssh рдХреБрдВрдЬрд┐рдпрд╛рдБ, Oauth рдЯреЛрдХрди, рдХреБрдХреАрдЬрд╝... рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЛрдХрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рд░реЗрдкреЛ рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрд░рд╛ рд╕рдХрддрд╛ рд╣реИред
Webhooks: VCS рдкреНрд▓реЗрдЯрдлреЙрд░реНрдореНрд╕ рд╡реЗрдмрд╣реБрдХреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЧреИрд░-рджреГрд╢реНрдпрдорд╛рди рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рддреЛ рд╣рдорд▓рд╛рд╡рд░ рдЙрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдХреЛрдИ рд░рд╣рд╕реНрдп рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдорд▓рд╛рд╡рд░ рддреГрддреАрдп рдкрдХреНрд╖ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╡реЗрдмрд╣реБрдХ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдпрджрд┐ рд░рд╣рд╕реНрдп URL рдореЗрдВ рд╣реИ, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдкрд╛рд╕ рднреА рд░рд╣рд╕реНрдп рд╣реЛрддрд╛ рд╣реИ
Code compromise: рдпрджрд┐ рдХреЛрдИ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЕрднрд┐рдиреЗрддрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд┐рдЦрд┐рдд рдкрд╣реБрдВрдЪ рд░реЗрдкреЛрд╕ рдкрд░ рд╣реИ, рддреЛ рд╡рд╣ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рд╢рд╛рдЦрд╛ рд╕рдВрд░рдХреНрд╖рдгреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╡рд┐рднрд┐рдиреНрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:
рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрди рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░реЗрдВред
рдореБрдЦреНрдп (рдпрд╛ рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдУрдВ) рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдорд╢реАрдиреЛрдВ рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░реЗрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдЕрдкрдиреА рдорд╢реАрдиреЛрдВ рдореЗрдВ рд░реЗрдкреЛ рдХреЗ рдЕрдВрджрд░ рдкрд░реАрдХреНрд╖рдг, рдЯреЗрд░рд╛рдлреЙрд░реНрдо рдпрд╛ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░реЗрдВ (рдЕрдЧрд▓реЗ рдЦрдВрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ)
Pipelines Pentesting рдкрджреНрдзрддрд┐
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░реЗрдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ CI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЬреЙрдмреНрд╕ рдХреЗ рдХреНрд░рдо, рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╢рд░реНрддреЛрдВ, рдФрд░ рдирд┐рд░реНрдорд╛рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рдпреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕реБрд╕рдВрдЧрдд рдирд╛рдо рдФрд░ рдкреНрд░рд╛рд░реВрдк рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), рдФрд░ GitHub Actions YAML рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ .github/workflows рдХреЗ рддрд╣рдд рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИрдВред рдЬрдм рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЬреЙрдм рдХреЛрдб рдХреЛ рдкреБрд▓ рдХрд░рддрд╛ рд╣реИ рдЪрдпрдирд┐рдд рд╕реНрд░реЛрдд рд╕реЗ (рдЬреИрд╕реЗ рдХрдорд┐рдЯ / рд╢рд╛рдЦрд╛), рдФрд░ CI рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЙрд╕ рдХреЛрдб рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪрд▓рд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдорд▓рд╛рд╡рд░ рдХрд╛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЙрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рдпрд╛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рд╣реИред
PPE - Poisoned Pipeline Execution
Poisoned Pipeline Execution (PPE) рдкрде SCM рд░реЗрдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ CI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХреЗ рдФрд░ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХреЗред рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛ
Last updated