ਇਸ ਹਫ਼ਤੇ ਇੱਕ ਫਰਜ਼ੀ ਕਲਾਇੰਟ ਨੇ ਮੇਰੇ ਇਨਬੌਕਸ ਵਿੱਚ ਇੱਕ ਮਾਲੀਸ਼ੀਅਸ GitHub ਰੈਪੋਜ਼ੀਟਰੀ ਭੇਜ ਦਿੱਤੀ, ਅਤੇ ਸਿਰਫ਼ ਸਟਾਰਟਰ ਸਕ੍ਰਿਪਟ ਚਲਾਉਣ ਨਾਲ ਦੋ ਦਿਨਾਂ ਦਾ ਕੰਮ ਖ਼ਤਮ ਹੋ ਗਿਆ ਅਤੇ ਮੇਰੇ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਸੇਵ ਕੀਤੇ ਸਾਰੇ ਪਾਸਵਰਡ ਖ਼ੁਲਾਸੇ ਹੋ ਗਏ।

ਉਸ "ਕਲਾਇੰਟ" ਨੇ ਇੱਕ ਉੱਚੀ ਤਨਖਾਹ ਵਾਲੀ ਸੀਨੀਅਰ-ਇੰਜੀਨੀਅਰ ਦੀ ਭਰਤੀ ਦਾ ਇਸ਼ਤਿਹਾਰ ਪਾਇਆ, ਜਲਦੀ ਮੈਸੇਜ ਕੀਤਾ, ਅਤੇ ਇੱਕ ਬਹੁਤ ਹੀ ਵਧੀਆ ਦਿਖਣ ਵਾਲੀ ਰੈਪੋ (repo) ਭੇਜੀ। ਮੰਗ ਬਹੁਤ ਸਧਾਰਨ ਸੀ: ਕਲੋਨ (clone) ਕਰੋ, npm run dev ਚਲਾਓ, ਅਤੇ ਇਹ ਸਾਬਤ ਕਰਨ ਲਈ ਇੱਕ ਸਕ੍ਰੀਨਸ਼ੌਟ ਭੇਜੋ ਕਿ ਡੈਮੋ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ—ਕੋਈ ਕੰਟਰੈਕਟ ਨਹੀਂ, ਕੋਈ ਬੈਕਗ੍ਰਾਊਂਡ ਚੈੱਕ ਨਹੀਂ। ਜਿਵੇਂ ਹੀ ਡੈਵ ਸਰਵਰ (dev server) ਸ਼ੁਰੂ ਹੋਇਆ, ਇੱਕ ਕੌਂਫਿਗਰੇਸ਼ਨ ਫਾਈਲ ਵਿੱਚ ਲੁਕੇ ਹੋਏ ਕੋਡ ਨੇ ਕਮਾਂਡ-ਐਂਡ-ਕੰਟਰੋਲ (C2) ਸਰਵਰ ਨਾਲ ਸੰਪਰਕ ਕੀਤਾ, ਦੂਜੇ ਪੜਾਅ ਦਾ ਪੇਲੋਡ (payload) ਡਾਊਨਲੋਡ ਕੀਤਾ ਅਤੇ ਲੋਕਲ ਮਸ਼ੀਨ ਤੋਂ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ (credentials) ਚੋਰੀ ਕਰਨੀ ਸ਼ੁਰੂ ਕਰ ਦਿੱਤੀ।

ਹਮਲਾ ਕਿਵੇਂ ਹੋਇਆ

ਮਾਲੀਸ਼ੀਅਸ ਪੇਲੋਡ postcss.config.js ਵਿੱਚ ਸੀ, ਇੱਕ ਅਜਿਹੀ ਫਾਈਲ ਜਿਸ ਵੱਲ ਜ਼ਿਆਦਾਤਰ ਡਿਵੈਲਪਰ ਧਿਆਨ ਨਹੀਂ ਦਿੰਦੇ ਕਿਉਂਕਿ ਇਸ ਵਿੱਚ ਆਮ ਤੌਰ 'ਤੇ ਕੁਝ ਸਧਾਰਨ CSS ਪ੍ਰੋਸੈਸਿੰਗ ਨਿਯਮ ਹੁੰਦੇ ਹਨ। ਇਸ ਮਾਮਲੇ ਵਿੱਚ, ਹਮਲਾਵਰ ਨੇ ਇੱਕ ਜਾਇਜ਼ ਸਟੇਟਮੈਂਟ ਦੇ ਬਹੁਤ ਸੱਜੇ ਪਾਸੇ ਇੱਕ ਓਬਫਸਕੇਟਡ (obfuscated) JavaScript ਲਾਈਨ ਜੋੜ ਦਿੱਤੀ ਸੀ, ਜਿਸ ਨੂੰ ਮਿਲਾਉਣ ਲਈ ਸਪੇਸ ਨਾਲ ਭਰ ਦਿੱਤਾ ਗਿਆ ਸੀ। ਜਦੋਂ npm run dev ਕਮਾਂਡ ਨੇ PostCSS ਪਾਈਪਲਾਈਨ ਨੂੰ ਚਲਾਇਆ, ਤਾਂ ਉਹ ਲੁਕੀ ਹੋਈ ਲਾਈਨ ਬਿਨਾਂ ਕਿਸੇ ਦੇ ਨੋਟਿਸ ਕੀਤੇ ਚੱਲ ਗਈ।

ਮਾਲਵੇਅਰ ਨੇ ਤੇਜ਼ੀ ਨਾਲ ਤਿੰਨ ਕਦਮ ਚੁੱਕੇ:

  • C2 ਸੰਪਰਕ – ਇਸਨੇ ਹਮਲਾਵਰ ਦੇ ਕੰਟਰੋਲ ਵਾਲੇ ਸਰਵਰ ਨਾਲ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਖੋਲ੍ਹਿਆ ਅਤੇ ਕੰਪ੍ਰੋਮਾਈਜ਼ਡ ਹੋਸਟ (compromised host) ਦੀ ਸੂਚਨਾ ਦਿੱਤੀ।
  • ਦੂਜੇ ਪੜਾਅ ਦਾ ਡਾਊਨਲੋਡ – ਇਸਨੇ ਵਾਧੂ ਕੋਡ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਿਸ ਵਿੱਚ ਅਸਲ ਡਾਟਾ-ਐਕਸਫਿਲਟਰੇਸ਼ਨ (data-exfiltration) ਲੌਜਿਕ ਸੀ।
  • ਬ੍ਰਾਊਜ਼ਰ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਚੋਰੀ – macOS 'ਤੇ ਇਸਨੇ ਸਿਸਟਮ ਕੀਚੇਨ (keychain) ਵਿੱਚ ਸਟੋਰ ਕੀਤੇ Chrome Safe Storage ਕੀਅ ਦੀ ਪੁੱਛਗਿੱਛ ਕੀਤੀ। ਜੇਕਰ ਯੂਜ਼ਰ ਨੇ ਕੀਚੇਨ ਪ੍ਰੋਂਪਟ ਨੂੰ ਮਨਜ਼ੂਰੀ ਦੇ ਦਿੱਤੀ, ਤਾਂ ਹਮਲਾਵਰ ਨੇ Chrome ਵਿੱਚ ਸੇਵ ਕੀਤੇ ਹਰ ਪਾਸਵਰਡ ਨੂੰ ਚੋਰੀ ਕਰ ਲਿਆ।

ਤੁਰੰਤ ਚੋਰੀ ਤੋਂ ਇਲਾਵਾ, ਪੇਲੋਡ ਨੇ ਆਪਣੇ ਆਪ ਨੂੰ ਕਈ ਆਮ ਡਿਵੈਲਪਰ ਟੂਲਸ—VS Code, npm, Discord— ਵਿੱਚ ਲਿਖ ਦਿੱਤਾ, ਤਾਂ ਜੋ ਉਹਨਾਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਭਵਿੱਖ ਵਿੱਚ ਚਲਾਉਣ 'ਤੇ ਮਾਲੀਸ਼ੀਅਸ ਕੋਡ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇ। ਸਿਰਫ਼ ਰੀਬੂਟ ਕਰਨ ਨਾਲ ਇਨਫੈਕਸ਼ਨ ਖ਼ਤਮ ਨਹੀਂ ਹੋਈ; ਅਗਲੀ ਵਾਰ npm install ਕਰਨ ਜਾਂ ਐਡੀਟਰ ਖੋਲ੍ਹਣ ਨਾਲ ਬੈਕਡੋਰ (backdoor) ਦੁਬਾਰਾ ਸਰਗਰਮ ਹੋ ਗਿਆ।

ਲਾਲ ਝੰਡੀਆਂ (Red flags) ਜਿਨ੍ਹਾਂ ਵੱਲ ਅਕਸਰ ਧਿਆਨ ਨਹੀਂ ਜਾਂਦਾ

  • ਕੋਈ ਕੰਟਰੈਕਟ ਸਾਈਨ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਕੋਡ ਚਲਾਉਣ ਦੀਆਂ ਬੇਨਤੀਆਂ। ਜਾਇਜ਼ ਭਰਤੀ ਪ੍ਰਕਿਰਿਆਵਾਂ ਵਿੱਚ ਆਮ ਤੌਰ 'ਤੇ ਕੋਈ ਵੀ ਪ੍ਰੋਪਰਾਈਟਰੀ ਕੰਮ ਸਾਂਝਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ ਰਸਮੀ ਸਮਝੌਤਾ ਹੁੰਦਾ ਹੈ।
  • "ਪ੍ਰੋਜੈਕਟ ਬ੍ਰੀਫ" ਦੇ ਰੂਪ ਵਿੱਚ ਭੇਜੀਆਂ ਗਈਆਂ ਕੰਪ੍ਰੈੱਸਡ ਫਾਈਲਾਂ। Zip ਜਾਂ RAR ਆਰਕਾਈਵਸ ਐਗਜ਼ੀਕਿਊਟੇਬਲ ਸਕ੍ਰਿਪਟਾਂ ਜਾਂ ਮਾਲੀਸ਼ੀਅਸ ਬਾਈਨਰੀਜ਼ ਨੂੰ ਲੁਕਾ ਸਕਦੇ ਹਨ।
  • "ਪਲੇਟਫਾਰਮ ਫਿਲਟਰਾਂ ਨੂੰ ਬਾਈਪਾਸ ਕਰਨ" ਲਈ ਨਿੱਜੀ ਈਮੇਲ ਪਤੇ ਦੀ ਮੰਗ ਕਰਨਾ। ਇਹ ਚਾਲ ਗੱਲਬਾਤ ਨੂੰ ਸੁਰੱਖਿਅਤ ਪਲੇਟਫਾਰਮ ਤੋਂ ਬਾਹਰ ਲੈ ਜਾਣ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ ਜਿੱਥੇ ਦੁਰਵਰਤੋਂ ਦੀ ਰਿਪੋਰਟ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।
  • ਨੌਕਰੀ ਦੇ ਵੇਰਵੇ ਜਿਨ੍ਹਾਂ ਵਿੱਚ ਉਮੀਦਵਾਰ ਨੂੰ ਕ੍ਰਿਪਟੋ ਵਾਲਿਟ ਫੰਡ ਕਰਨ ਜਾਂ ਟੈਸਟ ਟੋਕਨ ਖਰੀਦਣ ਲਈ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। ਅਜਿਹੀਆਂ ਮੰਗਾਂ ਅਸਲ ਡਿਵੈਲਪਮੈਂਟ ਕੰਮ ਲਈ ਅਸਧਾਰਨ ਹਨ।

ਸੁਰੱਖਿਅਤ ਰਹਿਣ ਲਈ ਵਿਵਹਾਰਕ ਕਦਮ

  1. ਕਦੇ ਵੀ ਜਾਂਚ ਕੀਤੇ ਬਿਨਾਂ ਕਿਸੇ ਅਣਜਾਣ ਦਾ ਕੋਡ ਨਾ ਚਲਾਓ। ਰੈਪੋਜ਼ੀਟਰੀ ਨੂੰ ਰੀਡ-ਓਨਲੀ ਵਿਊ (ਜਿਵੇਂ ਕਿ GitHub 'ਤੇ raw ਫਾਈਲ ਵਿਊ ਰਾਹੀਂ) ਵਿੱਚ ਖੋਲ੍ਹੋ ਅਤੇ ਹਰ ਸਕ੍ਰਿਪਟ, ਖਾਸ ਕਰਕੇ ਕੌਂਫਿਗਰੇਸ਼ਨ ਫਾਈਲਾਂ ਅਤੇ package.json scripts ਐਂਟਰੀਆਂ ਦੀ ਜਾਂਚ ਕਰੋ।
  2. ਸਾਰੀਆਂ ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ ਪਲੇਨ ਟੈਕਸਟ ਵਾਂਗ ਸਮਝੋ। ਜੇਕਰ ਕੋਈ zip ਫਾਈਲ ਭੇਜੀ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਇਸਨੂੰ ਇੱਕ ਸੈਂਡਬਾਕਸਡ (sandboxed) ਵਾਤਾਵਰਣ ਵਿੱਚ ਐਕਸਟਰੈਕਟ ਕਰੋ ਅਤੇ ਕੁਝ ਵੀ ਖੋਲ੍ਹਣ ਤੋਂ ਪਹਿਲਾਂ ਸਮੱਗਰੀ ਦੀ ਜਾਂਚ ਕਰੋ।
  3. ਬ੍ਰਾਊਜ਼ਰ ਸਟੋਰੇਜ ਦੀ ਬਜਾਏ ਇੱਕ ਸਮਰਪਿਤ ਪਾਸਵਰਡ ਮੈਨੇਜਰ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਭਾਵੇਂ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਕੀਚੇਨ ਨਾਲ ਛੇੜਛਾੜ ਹੋ ਜਾਵੇ, ਮੈਨੇਜਰ ਦਾ ਵੌਲਟ (vault) ਅਲੱਗ ਰਹਿੰਦਾ ਹੈ।
  4. ਅਣਵਿਸ਼ਵਾਸਯੋਗ ਕੋਡ ਨੂੰ ਬਿਨਾਂ ਨੈੱਟਵਰਕ ਐਕਸੈਸ ਵਾਲੀ ਇੱਕ ਅਲੱਗ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਜਾਂ ਕੰਟੇਨਰ ਵਿੱਚ ਚਲਾਓ। ਇਹ ਹਮਲਾਵਰ ਦੀ C2 ਸਰਵਰ ਤੱਕ ਪਹੁੰਚਣ ਦੀ ਸਮਰੱਥਾ ਨੂੰ ਰੋਕਦਾ ਹੈ।
  5. ਸਾਰੇ ਖਾਤਿਆਂ 'ਤੇ ਟੂ-ਫੈਕਟਰ ਅਥੈਂਟੀਕੇਸ਼ਨ (2FA) ਚਾਲੂ ਕਰੋ। ਜੇਕਰ ਪਾਸਵਰਡ ਚੋਰੀ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਦੂਜਾ ਫੈਕਟਰ ਅਣਅਧਿਕਾਰਤ ਲੌਗਇਨ ਨੂੰ ਰੋਕਦਾ ਹੈ।
  6. ਡਿਵੈਲਪਰ ਟੂਲਸ ਨੂੰ ਅਪ-ਟੂ-ਡੇਟ ਰੱਖੋ ਅਤੇ ਜਿੱਥੇ ਉਪਲਬਧ ਹੋਵੇ ਉੱਥੇ ਆਟੋਮੈਟਿਕ ਇੰਟੈਗਰਿਟੀ ਚੈੱਕ ਚਾਲੂ ਕਰੋ। ਕੁਝ ਐਡੀਟਰ ਹੁਣ ਚੇਤਾਵਨੀ ਦਿੰਦੇ ਹਨ ਜਦੋਂ ਕੋਰ ਫਾਈਲਾਂ ਵਿੱਚ ਅਚਾਨਕ ਬਦਲਾਅ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।

ਜੇਕਰ ਤੁਹਾਨੂੰ ਸ਼ੱਕ ਹੈ ਕਿ ਤੁਸੀਂ ਮਾਲੀਸ਼ੀਅਸ ਕੋਡ ਚਲਾਇਆ ਹੈ