Text size
പരീക്ഷിച്ചറിഞ്ഞത്7 മിനിറ്റ് വായന

യഥാർത്ഥ ആക്രമണത്തിനു ശേഷം ഗിറ്റ്ഹബ് പ്രവർത്തനങ്ങൾ പൂട്ടുന്നു

ഒരു അപഹാസ്യമായ പ്രവര് ത്തനം ആയിരക്കണക്കിന് റെ റിപ്പോകളില് നിന്നും രഹസ്യങ്ങള് ചോര് ന്നു. എന് റെ കാര്യത്തില് ഞാന് എന്തെല്ലാം മാറ്റങ്ങള് വരുത്തി.

Locking down GitHub Actions after real attacks
AI ഉപയോഗിച്ച് സൃഷ്ടിച്ച ചിത്രീകരണം

വളരെക്കാലം ഞാൻ ഗിറ്റ്ഹബ് ആക്ഷനുകളുടെ വർക്ക്ഫ്ലോകളെ പൈപ്പ് ലൈൻ ആയി കണക്കാക്കി. ഒരു README ൽ നിന്നും വർക്ക്ഫ്ലോ പകർത്തുക, ചേർക്കുക uses: some-org/some-action@v3, മുന്നോട്ട് പോകുക. നമ്മളിൽ മിക്കവരും അങ്ങനെ ചെയ്തിട്ടുണ്ട്.

2025 മാർച്ചില് ജനപ്രിയമായ tj-actions/changed-files ആക്ഷന് ഹാക്ക് ചെയ്യപ്പെട്ടു. ആക്രമണകാരികൾ അതിന്റെ പതിപ്പ് ടാഗ് മാറ്റി, അത് കോഡ് കാണിച്ചു, അത് ഐ. ഐ രഹസ്യങ്ങൾ ബിൽഡ് ലോഗുകളിലേക്ക് ചോർത്തുന്നു. ആയിരക്കണക്കിന് റിപ്പോകൾ അത് ഉപയോഗിച്ചു. പലതിലും പൊതു രേഖകളുണ്ടായിരുന്നു. ഇത് ഒരു ഉണർവ്വിനുള്ള വിളിയായിരുന്നു. ഞങ്ങളുടെ പൈപ്പ്ലൈനുകൾക്ക് മൂന്നാം കക്ഷി കോഡുകൾ ഉണ്ട്, ഞങ്ങളുടെ ഏറ്റവും സെൻസിറ്റീവ് ക്രെഡൻഷ്യലുകളിലേക്ക് പ്രവേശനം ഉണ്ട്, ഞങ്ങൾ അതിനെക്കുറിച്ച് വളരെ അപൂർവ്വമായി ചിന്തിക്കുന്നു.

ഇതാ ഞാൻ മാറ്റിയത്, ആക്ഷനുകൾ ഉപയോഗിക്കുന്ന ആർക്കും ഞാൻ ശുപാർശ ചെയ്യുന്നത്.

സംഭവിച്ചത്, ലളിതമായി

നീ എഴുതിയാൽ uses: tj-actions/changed-files@v45, v45 ഒരു ഗിറ്റ് ടാഗ് ആണ്. ടാഗ് നീക്കാൻ കഴിയും. ആക്രമണകാരിക്ക് ആക്ഷന്റെ റിപ്പോസിറ്ററിയിൽ എഴുതാനുള്ള ആക്സസ് ലഭിച്ചാൽ, നിലവിലുള്ള ടാഗുകൾ ഒരു ക്ഷുദ്രകരമായ കമിറ്റിലേക്ക് നയിക്കാൻ കഴിയും. ആ ടാഗ് ഉപയോഗിക്കുന്ന ഓരോ വർക്ക്ഫ്ലോയും പുതിയ കോഡ് അതിന്റെ അടുത്ത റണ്ണിൽ പ്രവർത്തിപ്പിക്കുന്നു, നിങ്ങളുടെ റിപ്പോസിറ്ററിയിൽ മാറ്റങ്ങളൊന്നും വരുത്താതെ.

പിന്നീട് അന്വേഷണം നടത്തിയപ്പോൾ ഹാക്ക് മറ്റൊരു ഹാക്ക് ആക്ഷനുമായി ബന്ധപ്പെട്ടതാണെന്ന് കണ്ടെത്തി. വിതരണ ശൃംഖല ആക്രമണ ശൃംഖല.

നിങ്ങളുടെ പൈപ്പ് ലൈനിന് അത്രമാത്രം വിശ്വാസ്യതയുണ്ട് അത് പ്രവർത്തിപ്പിക്കുന്ന ഏറ്റവും കുറഞ്ഞ വിശ്വാസ്യതയുള്ള പ്രവർത്തനം.

1. ഒരു പാരമ്പര്യം ഒരു പൂർണ്ണമായ commit SHA-ലേക്ക് പ്രവർത്തനങ്ങളെ പിൻ ചെയ്യുക

ഒരു ടാഗിന് പകരം, കൃത്യമായ commit റഫറൻസ് ചെയ്യുക:

# Before
- uses: actions/checkout@v4

# After
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

ഒരു കംപൈറ്റ് ഷാ നീക്കാൻ കഴിയില്ല. ഈ പതിപ്പ് ഒരു കമന്റായി സൂക്ഷിക്കുക, അങ്ങനെ മനുഷ്യർക്ക് അത് വായിക്കാൻ കഴിയും, ആശ്രിതൻ അല്ലെങ്കില് പുതുക്കുക പുതിയ പതിപ്പ് പുറത്തിറങ്ങുമ്പോൾ SHA (അല്ലെങ്കിൽ കമന്റ്) അപ്ഡേറ്റ് ചെയ്യുക, സാധാരണ pull request വഴി നിങ്ങൾക്ക് അവലോകനം ചെയ്യാം.

ഗിറ്റ്ഹബ് സംഘടനകളെ അവരുടെ അനുവദനീയമായ പ്രവർത്തന നയത്തിൽ SHA പിൻ ചെയ്യാനും അനുവദിക്കുന്നു, അതിനാൽ പിൻ ചെയ്യാത്ത പ്രവർത്തനങ്ങൾ പരാജയപ്പെടുന്നു.

2. GITHUB_TOKEN പരിമിതപ്പെടുത്തുക

ഓരോ വർക്ക്ഫ്ലോയും ഒരു ഓട്ടോമാറ്റിക് GITHUB_TOKEN. അതിന്റെ സ്ഥിര അനുമതികൾ നിങ്ങളുടെ ക്രമീകരണങ്ങളെ ആശ്രയിച്ചിരിക്കുന്നു, പഴയ റിപ്പോസിറ്ററികളിൽ അവ പലപ്പോഴും വളരെ വിശാലമാണ്.

സംഘടന അല്ലെങ്കിൽ റിപ്പോസിറ്ററി സ്ഥിരസ്ഥിതി വായന മാത്രം ആയി സജ്ജമാക്കുക, ഓരോ വർക്ക്ഫ്ലോയ്ക്കും ആവശ്യമുള്ളത് മാത്രം അനുവദിക്കുക:

permissions:
  contents: read

jobs:
  release:
    permissions:
      contents: write   # only this job can push tags

ഒരു ചോർന്ന വായന-മാത്രം ടോക്കൺ ഒരു ചോർന്ന എഴുതൽ ടോക്കണിനേക്കാൾ വളരെ ചെറിയ പ്രശ്നമാണ്.

3. ഒരു കല്ല് ദീർഘകാല ക്ലൌഡ് കീകൾ സംഭരിക്കുന്നതു് നിർത്തുക

ഈ ആക്രമണങ്ങളിൽ ചോർന്ന രഹസ്യങ്ങൾ പലപ്പോഴും ക്ലൌഡ് ആക്സസ് കീകളായിരുന്നു. ആരെങ്കിലും അവയെ മാറ്റുന്നതുവരെ അവ സാധുതയുള്ളവയാണ്. പകരം ഒഐഡിസി: വർക്ക്ഫ്ലോ ഒരു ഹ്രസ്വകാല ടോക്കൺ ഗിറ്റ്ഹബിൽ നിന്നും ആവശ്യപ്പെടുന്നു, നിങ്ങളുടെ ക്ലൌഡ് പ്രൊവൈഡർ അത് താൽക്കാലിക ക്രെഡൻഷ്യലുകൾക്ക് കൈമാറ്റം ചെയ്യുന്നു, പക്ഷേ നിങ്ങൾ അനുവദിക്കുന്ന പ്രത്യേക റിപ്പോസിറ്ററി, ബ്രാഞ്ച് എന്നിവയ്ക്കായി മാത്രം.

permissions:
  id-token: write
  contents: read

steps:
  - uses: aws-actions/configure-aws-credentials@<sha> # v4
    with:
      role-to-assume: arn:aws:iam::123456789012:role/deploy-shop
      aws-region: eu-central-1

AWS, Azure, ഗൂഗിൾ ക്ലൌഡ്, ഹാഷി കോർപ് വോൾട്ട് തുടങ്ങിയവയെല്ലാം ഇതിനെ പിന്തുണയ്ക്കുന്നു. മോഷ്ടിക്കാൻ രഹസ്യമില്ല, ടോക്കൺ മിനിറ്റുകൾക്കകം കാലഹരണപ്പെടും.

4. അപകടകരമായ ട്രിഗറുകളില് ശ്രദ്ധിക്കുക

pull_request_target ഒപ്പം workflow_run രഹസ്യങ്ങള് ക്ക് ആക്സസ് ഉള്ളവര് ക്ക് പോലും, ഫോര് ക്ക്സിന്റെ പിൻവലിക്കല് ആവശ്യങ്ങള് ക്കുള്ളവ. ട്രോൾ അഭ്യർത്ഥനയിലെ വിശ്വസനീയമല്ലാത്ത കോഡ് പരിശോധിക്കുന്നതുമായി ചേര് ത്ത്, രഹസ്യങ്ങൾ മോഷ്ടിക്കാനുള്ള ആക്രമണകാരികളുടെ ഒരു സാധാരണ മാർഗമാണിത്. അപകടസാധ്യതയെക്കുറിച്ച് നന്നായി മനസ്സിലാക്കുന്നില്ലെങ്കിൽ അവ ഒഴിവാക്കുക.

കൂടാതെ ശ്രദ്ധിക്കുക സ്ക്രിപ്റ്റ് കുത്തിവയ്പ്പ്: ഒരു ട്രസ്റ്റ് ചെയ്യാത്ത ഇൻപുട്ട് ഉപയോഗിച്ച് ഒരു pull request title നേരിട്ട് ഒരു run: പടിപടിയായി.

# Dangerous: the title can contain shell commands
- run: echo "${{ github.event.pull_request.title }}"

# Safer: pass it through an environment variable
- env:
    TITLE: ${{ github.event.pull_request.title }}
  run: echo "$TITLE"

5. ഏത് പ്രവർത്തനങ്ങളാണ് പ്രവർത്തിപ്പിക്കാന് കഴിയുക എന്ന് പരിമിതപ്പെടുത്തുക

സംഘടനയുടെ ക്രമീകരണങ്ങളിൽ, ഇനിപ്പറയുന്നവ മാത്രം അനുവദിക്കുകഃ

  • ഗിറ്റ്ഹബ് സൃഷ്ടിച്ച പ്രവർത്തനങ്ങൾ
  • പരിശോധിച്ച സ്രഷ്ടാക്കളുടെ പ്രവർത്തനങ്ങൾ
  • നിങ്ങൾ അവലോകനം ചെയ്ത പ്രവർത്തനങ്ങളുടെ ഒരു പ്രത്യേക അനുമതി പട്ടിക

മൂന്നാം കക്ഷികളുടെ കുറവ് പ്രവർത്തനങ്ങൾ, അപഹരിക്കപ്പെടാവുന്ന കുറവ് കാര്യങ്ങളെയാണ് അർത്ഥമാക്കുന്നത്. ലളിതമായ ജോലികള് ക്ക്, ഒരു പ്രവര് ത്തനത്തേക്കാളും സുരക്ഷിതമാണ് ചില വരികള് .

6. നിങ്ങളുടെ വർക്ക്ഫ്ലോ പരിശോധിക്കുന്ന ഉപകരണങ്ങൾ ഉപയോഗിക്കുക

  • സിസ്മോര്: ഗിറ്റ്ഹബ് പ്രവർത്തനങ്ങളുടെ സ്റ്റാറ്റിക് വിശകലന ഉപകരണമാണ്. ഇത് അൺപിൻ ചെയ്ത പ്രവർത്തനങ്ങളും, ഇൻജക്ഷൻ അപകടങ്ങളും, അപകടകരമായ ട്രിഗറുകളും, അനുമതികളുടെ അളവ് കൂടുതലുള്ളതും കണ്ടെത്തുന്നു.
  • ഓപ്പൺ എസ് എസ് എഫ് സ്കോർകാർഡ്: നിങ്ങളുടെ റിപ്പോസിറ്ററിയുടെ സുരക്ഷാ രീതികൾ, വർക്ക്ഫ്ലോ ശുചിത്വം എന്നിവ വിലയിരുത്തുന്നു.
  • സ്റ്റെപ്പ് സുരക്ഷ ഹാർഡ് റണ്ണർ: നിങ്ങളുടെ റണ്ണറുകളിൽ നിന്നുള്ള നെറ്റ്വർക്ക് ആക്സസ് നിയന്ത്രിക്കാനും കഴിയും, അത് പല എക്സിഫിൽട്രേഷൻ ശ്രമങ്ങളും തടഞ്ഞു.
  • Dependabot / പുതുക്കുക അപ്ഡേറ്റ് ചെയ്ത പ്രവര് ത്തനങ്ങള് നിലനിര് ത്താന് .

നിങ്ങളുടെ ഐസില് സിസ്മോര് ചേര് ത്ത് അത് കണ്ടെത്തിയതിനെ ശരിയാക്കൂ. ഇത് ഒരു കണ്ണുതുറക്കുന്ന ആദ്യ റൺ ആണ്.

7. ഓടുന്നവരെ സംരക്ഷിക്കുക.

  • ഇഷ്ടം ഗിറ്റ്ഹബ് ഹോസ്റ്റുചെയ്തത് അല്ലെങ്കില് സ്വയം ഹോസ്റ്റുചെയ്ത റണ്ണേഴ്സ് (ഓരോ ജോലിക്കും പുതിയ ഒരു വിഎം അല്ലെങ്കിൽ കണ്ടെയ്നർ). സ്വയം ഹോസ്റ്റുചെയ്ത നിരന്തര ഓട്ടക്കാർക്ക് ഒരു ദുഷിച്ച ജോലി വിഷം കഴിച്ച് അടുത്തതിനെ ബാധിക്കാം.
  • പൊതു റിപ്പോസിറ്ററികൾക്കായി സ്വയം ഹോസ്റ്റുചെയ്ത റണ്ണറുകൾ ഒരിക്കലും ഉപയോഗിക്കരുത്, അവിടെ ആർക്കും ഒരു പിൻ അഭ്യർത്ഥന തുറക്കാൻ കഴിയും.

എവിടെ നിന്നാണ് ഞാൻ തുടങ്ങേണ്ടത്?

ഈ ആഴ്ച നിങ്ങൾ മൂന്നു കാര്യങ്ങൾ മാത്രം ചെയ്താൽ: സ്ഥിരസ്ഥിതി ടോക്കൺ വായന മാത്രമായി സജ്ജമാക്കുക, നിങ്ങളുടെ മൂന്നാം കക്ഷി പ്രവർത്തനങ്ങൾ ഷാ-കളിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുന്നതിനായി പുതുക്കുക, ഒരു ദീർഘകാല ക്ലൌഡ് കീ OIDC ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക. പിന്നെ സിസ്മോര് ഓടിച്ചു ലിസ്റ്റില് നോക്ക്.

എന്റെ അഭിപ്രായത്തില് , എല്ലാത്തിനും താക്കോല് ഐ. ഐ. പൈപ്പ്ലൈനില് ആണ് . എല്ലാ രോഗങ്ങളും uses: ഒരു ആശ്രിതത്വം പോലെ, കാരണം അത് തന്നെയാണ്.

ഡെസ്ലി