രഹസ്യ വിവരങ്ങളുടെ വ്യാപനം: 412 ചോർന്ന API ടോക്കണുകൾ ഞങ്ങൾ എങ്ങനെ പരിഹരിച്ചു
മാർച്ച് 3-ന് പുലർച്ചെ 2:13-ന് ഒരു CI പൈപ്പ്ലൈൻ പരാജയപ്പെട്ടു. 37 റെപ്പോസിറ്ററികളിലായി 412 ചോർന്ന API ടോക്കണുകൾ ഞങ്ങൾ കണ്ടെത്തി. ഈ പിശക് 1.2 മില്യൺ ഡോളറിന്റെ സാധ്യമായ സുരക്ഷാ ലംഘന ചെലവുകൾക്ക് (breach costs) കാരണമായേക്കാമായിരുന്നു.
ഒരു Vault എല്ലാ പ്രശ്നങ്ങളും പരിഹരിക്കുമെന്ന് മിക്ക ടീമുകളും കരുതുന്നു. എന്നാൽ യഥാർത്ഥത്തിൽ, ലേറ്റൻസി (latency) ഉണ്ടാക്കുന്ന ഒരു പ്രധാന കാരണമായി Vault മാറാം. ടോക്കണുകൾ Vault-ന് പുറത്ത് നിലനിൽക്കുമ്പോൾ, അവ ഹാർഡ്-കോഡഡ് വാല്യൂസോ (hard-coded values) എൻവയോൺമെന്റ് വേരിയബിളുകളോ (environment variables) ഉപയോഗിക്കുന്നു. ഇത്തരം സാഹചര്യങ്ങൾ ഓഡിറ്റ് ലോഗുകളിൽ (audit logs) കാണപ്പെടില്ല.
ഈ വ്യാപനത്തിന്റെ ആഘാതം ഞങ്ങളുടെ മെട്രിക്സുകൾ കാണിച്ചുതന്നു:
- സാധാരണ സീക്രട്ട് റീട്രീവൽ (secret retrieval): ഓരോ റിക്വസ്റ്റിനും 48 ms.
- ചോർച്ച നടന്ന സമയത്ത്: ഓരോ റിക്വസ്റ്റിനും 187 ms.
ബിൽഡ് ഏജന്റുകൾ (Build agents) ദൂരെയുള്ള ഒരു Vault ക്ലസ്റ്ററിൽ നിന്ന് ഓരോ ജോബിനും 12 ടോക്കണുകൾ വീതം എടുക്കുന്നുണ്ടായിരുന്നു. ഇത് ടൈമൗട്ടുകൾക്ക് (timeouts) കാരണമാവുകയും ഡെവലപ്പർമാരെ മാറ്റങ്ങൾ മാനുവലായി റോളബാക്ക് ചെയ്യാൻ നിർബന്ധിതരാക്കുകയും ചെയ്തു. ലേറ്റൻസി എന്നത് വെറുമൊരു സാവധാനത്തിലുള്ള പ്രക്രിയ മാത്രമല്ല. അത് ക്ലൗഡ് ബില്ലുകൾ വർദ്ധിപ്പിക്കുകയും ഡെവലപ്പർമാരുടെ വേഗത കുറയ്ക്കുകയും ചെയ്യുന്ന ഒരു സാമ്പത്തിക ബാധ്യതയാണ്.
ഒരു സ്റ്റേജിംഗ് റെപ്പോസിറ്ററിയിൽ (staging repo) നിന്ന് ചോർന്ന ഒരു AWS കീ ഒരു അറ്റാക്കർ ഉപയോഗിക്കുകയാണെങ്കിൽ മണിക്കൂറിന് 120 ഡോളർ വരെ ചെലവ് വന്നേക്കാം. ഒരു മണിക്കൂർ നീണ്ടുനിൽക്കുന്ന ദുരുപയോഗം ഒരു ക്വാർട്ടർലി സെക്യൂരിറ്റി ഓഡിറ്റിനേക്കാൾ വലിയ ചെലവ് വരുത്തിവെക്കും.
സ്റ്റാറ്റിക് സ്കാനറുകൾ (Static scanners) ഞങ്ങളെ സഹായിച്ചില്ല. അവ ഞങ്ങളുടെ ടോക്കണുകളിൽ 78% കണ്ടുപിടിക്കുന്നതിൽ പരാജയപ്പെട്ടു. എന്തുകൊണ്ട്? കാരണം ആ ടോക്കണുകൾ ഓൺ ദി ഫ്ലൈ (on the fly) ആണ് നിർമ്മിക്കപ്പെട്ടത്, അവ സോഴ്സ് കോഡിലല്ല, മറിച്ച് ബിൽഡ് ആർട്ടീഫാക്റ്റുകളിലാണ് (build artifacts) നിലനിന്നിരുന്നത്. ഒരു GitHub Actions സ്റ്റെപ്പ് ഒരു ടോക്കൺ ഒരു Docker ലെയറിലേക്ക് എഴുതിച്ചേർത്തു. സ്കാനറിന് ഒന്നും കണ്ടെത്താനായില്ല, എന്നാൽ ആ ടോക്കൺ ആഴ്ചകളോളം ഞങ്ങളുടെ രജിസ്ട്രിയിൽ തുടർന്നു.
നിങ്ങൾക്ക് വെറുമൊരു സ്റ്റാറ്റിക് ഇൻസ്പെക്ഷൻ (static inspection) മാത്രമല്ല, റൺടൈം വിസിബിലിറ്റിയും (runtime visibility) ആവശ്യമാണ്.
ഇത് പരിഹരിക്കാൻ ഞങ്ങൾ ഒരു Lambda എഞ്ചിൻ നിർമ്മിച്ചു. ഇത് പുതിയ സീക്രട്ടുകൾക്കായി CloudTrail നിരീക്ഷിക്കുകയും അവ ഞങ്ങളുടെ Vault-മായി താരതമ്യം ചെയ്യുകയും ചെയ്യുന്നു. പുതിയ വർക്ക്ഫ്ലോ ഇതാ:
- ഒരു വെബ്ഹുക്ക് (webhook) വഴി സീക്രട്ട് കണ്ടെത്തുക.
- മെറ്റാഡാറ്റയ്ക്കായി Vault-ൽ ക്വറി ചെയ്യുക.
- പ്രൊവൈഡർ API വഴി ടോക്കൺ ഇന്വാലിഡേറ്റ് (invalidate) ചെയ്യുക.
- ഫയലിൽ നിന്ന് സീക്രട്ട് നീക്കം ചെയ്യുന്നതിനായി ഒരു PR തുറക്കുക.
- CI പാസ്സായാൽ PR ഓട്ടോമാറ്റിക്കായി മെർജ് ചെയ്യുക.
ഈ എഞ്ചിൻ 27 മിനിറ്റിനുള്ളിൽ 99.97% വിജയ നിരക്കോടെ 412 ടോക്കണുകൾ റൊട്ടേറ്റ് ചെയ്തു.
ഞങ്ങൾ ഇപ്പോൾ സീക്രട്ടിന്റെ പഴക്കം (secret age) ട്രാക്ക് ചെയ്യുന്നു. ഒരു ടോക്കൺ 30 ദിവസത്തിൽ കൂടുതൽ പഴക്കമുള്ളതാണെങ്കിൽ ബിൽഡ് പരാജയപ്പെടും. ഈ ലളിതമായ നിയമം ഒരു ക്വാർട്ടറിൽ പുതിയ ചോർച്ചകൾ 62% കുറച്ചു. വിചിത്രമായ ഉപയോഗ രീതികൾ (usage patterns) തിരിച്ചറിയാൻ ഞങ്ങൾ ഒരു isolation-forest മോഡലും ഉപയോഗിക്കുന്നു. ഒരു പുതിയ IP-യിൽ നിന്ന് ഒരു ടോക്കൺ പ്രത്യക്ഷപ്പെട്ടാൽ, സിസ്റ്റം അത് ഉടൻ തന്നെ റൊട്ടേറ്റ് ചെയ്യുന്നു.
ടോക്കണുകളെ വെറും ഫയലുകളായി കാണുന്നത് നിർത്തുക. സീക്രട്ടിന്റെ പഴക്കവും റീട്രീവൽ ലേറ്റൻസിയും (retrieval latency) പ്രധാന മെട്രിക്സുകളായി പരിഗണിക്കുക. നിങ്ങൾ ഇത് ചെയ്താൽ, ഈ വ്യാപനം കുറയും.
Optional learning community: https://t.me/GyaanSetuAi
