ಈ ವಾರ ಒಬ್ಬ ನಕಲಿ ಕ್ಲೈಂಟ್ ನನ್ನ ಇನ್ಬಾಕ್ಸ್ಗೆ ಒಂದು ಹಾನಿಕಾರಕ GitHub ರೆಪೊಸಿಟರಿಯನ್ನು ಕಳುಹಿಸಿದನು, ಮತ್ತು ಕೇವಲ ಸ್ಟಾರ್ಟರ್ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ರನ್ ಮಾಡಿದ್ದರಿಂದ ನನ್ನ ಎರಡು ದಿನಗಳ ಕೆಲಸ ಅಳಿಸಿಹೋಯಿತು ಮತ್ತು ನನ್ನ ಬ್ರೌಸರ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಪಾಸ್ವರ್ಡ್ಗಳು ಬಹಿರಂಗಗೊಂಡವು.
ಆ "ಕ್ಲೈಂಟ್" ಹೆಚ್ಚಿನ ಸಂಬಳದ ಸೀನಿಯರ್-ಎಂಜಿನಿಯರ್ ಹುದ್ದೆಯ ಬಗ್ಗೆ ಪೋಸ್ಟ್ ಮಾಡಿ, ಶೀಘ್ರವಾಗಿ ಸಂದೇಶ ಕಳುಹಿಸಿ, ಮತ್ತು ನೋಡಲು ಅತ್ಯಂತ ಸುಸಜ್ಜಿತವಾಗಿ ಕಾಣುವ ರೆಪೊಸಿಟರಿಯನ್ನು ಕಳುಹಿಸಿದನು. ಅವರ ವಿನಂತಿ ಸರಳವಾಗಿತ್ತು: ಕ್ಲೋನ್ ಮಾಡಿ, npm run dev ರನ್ ಮಾಡಿ, ಮತ್ತು ಡೆಮೊ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಎಂದು ಸಾಬೀತುಪಡಿಸಲು ಸ್ಕ್ರೀನ್ಶಾಟ್ ಕಳುಹಿಸಿ—ಯಾವುದೇ ಒಪ್ಪಂದವಿಲ್ಲ, ಯಾವುದೇ ಹಿನ್ನೆಲೆ ಪರಿಶೀಲನೆಯೂ ಇಲ್ಲ. ಡೆವ್ ಸರ್ವರ್ ಪ್ರಾರಂಭವಾದ ಕ್ಷಣದಲ್ಲೇ, ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ನಲ್ಲಿ ಅಡಗಿದ್ದ ಕೋಡ್ ಕಮಾಂಡ್-ಅಂಡ್-ಕಂಟ್ರೋಲ್ (C2) ಸರ್ವರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ, ಎರಡನೇ ಹಂತದ ಪೇಲೋಡ್ ಅನ್ನು ಪಡೆದು, ಸ್ಥಳೀಯ ಯಂತ್ರದಿಂದ (local machine) ಕ್ರೆಡೆನ್ಶಿಯಲ್ಗಳನ್ನು ಕದಿಯಲು ಪ್ರಾರಂಭಿಸಿತು.
ದಾಳಿ ಹೇಗೆ ನಡೆಯಿತು
ಆ ಹಾನಿಕಾರಕ ಪೇಲೋಡ್ postcss.config.js ನಲ್ಲಿ ಅಡಗಿತ್ತು. ಹೆಚ್ಚಿನ ડેವಲಪರ್ಗಳು ಈ ಫೈಲ್ ಅನ್ನು ಕೇವಲ ಮೇಲ್ನೋಟಕ್ಕೆ ನೋಡುತ್ತಾರೆ ಏಕೆಂದರೆ ಇದರಲ್ಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಕೆಲವು ಸರಳ CSS ಪ್ರೊಸೆಸಿಂಗ್ ನಿಯಮಗಳು ಮಾತ್ರ ಇರುತ್ತವೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ದಾಳಿಕಾರನು ಒಂದು ಕಾನೂನುಬದ್ಧ ಸ್ಟೇಟ್ಮೆಂಟ್ನ ಬಹಳ ಬಲಗಡೆಗೆ ಅಸ್ಪಷ್ಟವಾದ (obfuscated) JavaScript ಸಾಲನ್ನು ಸೇರಿಸಿದ್ದನು, ಅದು ಇತರ ಸಾಲುಗಳೊಂದಿಗೆ ಬೆರೆತುಹೋಗಲು ಸಾಕಷ್ಟು ಸ್ಪೇಸ್ಗಳನ್ನು ಬಳಸಲಾಗಿತ್ತು. npm run dev ಕಮಾಂಡ್ PostCSS ಪೈಪ್ಲೈನ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿದಾಗ, ಆ ಅಡಗಿದ್ದ ಸಾಲು ಯಾರಿಗೂ ತಿಳಿಯದಂತೆ ರನ್ ಆಯಿತು.
ಆ ಮಾಲ್ವೇರ್ ಮೂರು ಹಂತಗಳನ್ನು ಸತತವಾಗಿ ನಿರ್ವಹಿಸಿತು:
- C2 contact – ಇದು ದಾಳಿಕಾರರ ನಿಯಂತ್ರಣದಲ್ಲಿರುವ ಸರ್ವರ್ಗೆ ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ತೆರೆಯಿತು ಮತ್ತು ಕಳಂಕಿತ ಹೋಸ್ಟ್ (compromised host) ಬಗ್ಗೆ ಮಾಹಿತಿ ನೀಡಿತು.
- Second-stage download – ಇದು ನಿಜವಾದ ಡೇಟಾ-ಎಕ್ಸ್ಫಿಲ್ಟ್ರೇಶನ್ (data-exfiltration) ತರ್ಕವನ್ನು ಹೊಂದಿರುವ ಹೆಚ್ಚುವರಿ ಕೋಡ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿತು.
- Browser credential theft – macOS ನಲ್ಲಿ ಇದು ಸಿಸ್ಟಮ್ ಕೀಚೇನ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾದ Chrome Safe Storage ಕೀಯನ್ನು ವಿಚಾರಿಸಿತು. ಬಳಕೆದಾರರು ಕೀಚೇನ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ಅನುಮೋದಿಸಿದರೆ, ದಾಳಿಕಾರನು Chrome ನಲ್ಲಿ ಉಳಿಸಲಾದ ಪ್ರತಿಯೊಂದು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಕದಿಯುವನು.
ತಕ್ಷಣದ ಕಳ್ಳತನದ ಹೊರತಾಗಿ, ಆ ಪೇಲೋಡ್ VS Code, npm, Discord ನಂತಹ ಹಲವಾರು ಸಾಮಾನ್ಯ ડેವಲಪರ್ ಟೂಲ್ಗಳಲ್ಲಿ ತನ್ನನ್ನು ತಾನು ಬರೆದುಕೊಂಡಿತು—ಹೀಗಾಗಿ ಆ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಮುಂದಿನ ಬಾರಿ ಪ್ರಾರಂಭಿಸಿದಾಗಲೂ ಆ ಹಾನಿಕಾರಕ ಕೋಡ್ ಮತ್ತೆ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತಿತ್ತು. ಕೇವಲ ರೀಬೂಟ್ ಮಾಡುವುದರಿಂದ ಸೋಂಕನ್ನು ಹೋಗಲಾಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಮುಂದಿನ npm install ಅಥವಾ ಎಡಿಟರ್ ಅನ್ನು ತೆರೆಯುವ ಮೂಲಕ ಆ ಬ್ಯಾಕ್ಡೋರ್ ಮತ್ತೆ ಸಕ್ರಿಯಗೊಂಡಿತು.
ಗಮನಕ್ಕೆ ಬಾರದ ಎಚ್ಚರಿಕೆಯ ಸೂಚನೆಗಳು (Red flags)
- ಯಾವುದೇ ಒಪ್ಪಂದಕ್ಕೆ ಸಹಿ ಹಾಕುವ ಮೊದಲು ಕೋಡ್ ರನ್ ಮಾಡಲು ವಿನಂತಿಸುವುದು. ಕಾನೂನುಬದ್ಧ ನೇಮಕಾತಿ ಪ್ರಕ್ರಿಯೆಗಳಲ್ಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಯಾವುದೇ ಮಾಲೀಕತ್ವದ ಕೆಲಸವನ್ನು ಹಂಚಿಕೊಳ್ಳುವ ಮೊದಲು ಔಪಚಾರಿಕ ಒಪ್ಪಂದವಿರುತ್ತದೆ.
- “ಪ್ರೊಜೆಕ್ಟ್ ಬ್ರೀಫ್ಸ್” ಎಂದು ನಟಿಸುವ ಕಂಪ್ರೆಸ್ಡ್ ಫೈಲ್ಗಳು. Zip ಅಥವಾ RAR ಆರ್ಕೈವ್ಗಳು ಎಕ್ಸಿಕ್ಯೂಟಬಲ್ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಅಥವಾ ಹಾನಿಕಾರಕ ಬೈನರಿಗಳನ್ನು ಅಡಗಿಸಿಡಬಹುದು.
- “ಪ್ಲಾಟ್ಫಾರ್ಮ್ ಫಿಲ್ಟರ್ಗಳನ್ನು ಬೈಪಾಸ್ ಮಾಡಲು” ವೈಯಕ್ತಿಕ ಇಮೇಲ್ ವಿಳಾಸಗಳ ವಿನಂತಿ. ಈ ತಂತ್ರವು ವಂಚನೆಯನ್ನು ವರದಿ ಮಾಡಬಹುದಾದ ಸುರಕ್ಷಿತ ಪ್ಲಾಟ್ಫಾರ್ಮ್ನಿಂದ ಚರ್ಚೆಯನ್ನು ಹೊರಗೆ ಕೊಂಡೊಯ್ಯುತ್ತದೆ.
- ಕ್ರಿಪ್ಟೋ ವಾಲೆಟ್ಗೆ ಹಣ ತುಂಬಲು ಅಥವಾ ಟೆಸ್ಟ್ ಟೋಕನ್ಗಳನ್ನು ಖರೀದಿಸಲು ಅಭ್ಯರ್ಥಿಯನ್ನು ಕೇಳುವ ಉದ್ಯೋಗ ವಿವರಣೆಗಳು. ಇಂತಹ ಬೇಡಿಕೆಗಳು ನೈಜ ಅಭಿವೃದ್ಧಿ ಕೆಲಸಗಳಿಗೆ ಅಸಹಜವಾಗಿವೆ.
ಸುರಕ್ಷಿತವಾಗಿರಲು ಪ್ರಾಯೋಗಿಕ ಕ್ರಮಗಳು
- ಪರಿಶೀಲನೆ ನಡೆಸದೆ ಅಪರಿಚಿತರ ಕೋಡ್ ಅನ್ನು ಎಂದಿಗೂ ರನ್ ಮಾಡಬೇಡಿ. ರೆಪೊಸಿಟರಿಯನ್ನು ರೀಡ್-ಓನ್ಲಿ ವ್ಯೂನಲ್ಲಿ (ಉದಾಹರಣೆಗೆ, GitHub ನಲ್ಲಿನ raw file view ಮೂಲಕ) ತೆರೆಯಿರಿ ಮತ್ತು ಪ್ರತಿಯೊಂದು ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು, ವಿಶೇಷವಾಗಿ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗಳು ಮತ್ತು
package.jsonscriptsಎಂಟ್ರಿಗಳನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ. - ಎಲ್ಲಾ ಅಟ್ಯಾಚ್ಮೆಂಟ್ಗಳನ್ನು ಪ್ಲೇನ್ ಟೆಕ್ಸ್ಟ್ ಎಂದು ಪರಿಗಣಿಸಿ. ಒಂದು ವೇಳೆ zip ಫೈಲ್ ಕಳುಹಿಸಲ್ಪಟ್ಟರೆ, ಅದನ್ನು ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ಡ್ ಎನ್ವಿರಾನ್ಮೆಂಟ್ನಲ್ಲಿ ಎಕ್ಸ್ಟ್ರಾಕ್ಟ್ ಮಾಡಿ ಮತ್ತು ಏನನ್ನೂ ತೆರೆಯುವ ಮೊದಲು ಅದರ ಒಳಗಿನ ವಿಷಯಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ.
- ಬ್ರೌಸರ್ ಸ್ಟೋರೇಜ್ ಬದಲಿಗೆ ಮೀಸಲಾದ ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ ಬಳಸಿ. ಬ್ರೌಸರ್ನ ಕೀಚೇನ್ ಕಳಂಕಿತಗೊಂಡರೂ ಸಹ, ಮ್ಯಾನೇಜರ್ನ ವಾಲ್ಟ್ (vault) ಪ್ರತ್ಯೇಕವಾಗಿರುತ್ತದೆ.
- ನೆಟ್ವರ್ಕ್ ಪ್ರವೇಶವಿಲ್ಲದ ಪ್ರತ್ಯೇಕ ವರ್ಚುವಲ್ ಮೆಷಿನ್ ಅಥವಾ ಕಂಟೇನರ್ನಲ್ಲಿ ನಂಬಲಾರದ ಕೋಡ್ ಅನ್ನು ರನ್ ಮಾಡಿ. ಇದು ದಾಳಿಕಾರನು C2 ಸರ್ವರ್ ಅನ್ನು ತಲುಪುವ ಸಾಮರ್ಥ್ಯವನ್ನು ತಡೆಯುತ್ತದೆ.
- ಎಲ್ಲಾ ಖಾತೆಗಳಲ್ಲಿ ಟೂ-ಫ್ಯಾಕ್ಟರ್ ಅಥೆಂಟಿಕೇಶನ್ (2FA) ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. ಪಾಸ್ವರ್ಡ್ ಕಳುವಾದರೆ, ಎರಡನೇ ಹಂತವು ಅನಧಿಕೃತ ಲಾಗಿನ್ಗಳನ್ನು ತಡೆಯುತ್ತದೆ.
- ಡೆವಲಪರ್ ಟೂಲ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಆಗಿ ಇರಿಸಿ ಮತ್ತು ಲಭ್ಯವಿರುವಲ್ಲಿ ಆಟೋಮ್ಯಾಟಿಕ್ ಇಂಟೆಗ್ರಿಟಿ ಚೆಕ್ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. ಕೆಲವು ಎಡಿಟರ್ಗಳು ಕೋರ್ ಫೈಲ್ಗಳು ಅನಿರೀಕ್ಷಿತವಾಗಿ ಮಾರ್ಪಡಿಸಿದಾಗ ಈಗ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತವೆ.
ನೀವು ಹಾನಿಕಾರಕ ಕೋಡ್ ಅನ್ನು ರನ್ ಮಾಡಿದ್ದೀರಿ ಎಂದು ಶಂಕಿಸಿದರೆ, ಸಿಸ್ಟಮ್ ಕಳಂಕಿತವಾಗಿದೆ ಎಂದು ಭಾವಿಸಿ. ಅಗತ್ಯ ಡೇಟಾವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ, ಡ್ರೈವ್ ಅನ್ನು ವೈಪ್ ಮಾಡಿ ಮತ್ತು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಿ (reinstall). ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಫೈಲ್ಗಳನ್ನು ಮರುಬರೆಯುವ ಪರ್ಸಿಸ್ಟೆನ್ಸ್ ಮೆಕ್ಯಾನಿಸಂ ಅನ್ನು (persistence mechanism) ಕೇವಲ ರೀಬೂಟ್ ಮಾಡುವುದರಿಂದ ಹೋಗಲಾಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
ಸಾರಾಂಶ: ಒಂದು ಅಡಗಿರುವ JavaScript ಸಾಲು ಸಾಮಾನ್ಯ ಡೆಮೊವನ್ನು ಸಂಪೂರ್ಣ ಕ್ರೆಡೆನ್ಶಿಯಲ್ ಕಳ್ಳತನದ ಕಾರ್ಯಾಚರಣೆಯನ್ನಾಗಿ ಬದಲಾಯಿಸಬಹುದು. ನೀವು ಅದನ್ನು ಪರಿಶೀಲಿಸುವವರೆಗೆ ಪ್ರತಿಯೊಂದು ರೆಪೊಸಿಟರಿಯನ್ನು ನಂಬಲಾರದಂತೆ ಪರಿಗಣಿಸಿ ಮತ್ತು ಐಸೊಲೇಶನ್ ಅನ್ನು (isolation) ನಿಮ್ಮ ವರ್ಕ್ಫ್ಲೋದ ಡಿಫಾಲ್ಟ್ ಭಾಗವನ್ನಾಗಿ ಮಾಡಿಕೊಳ್ಳಿ. ಒಂದು ಕ್ಷಣದ ಅವಸರದ ಬೆಲೆ, ಫೈಲ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಪರಿಶೀಲಿಸಲು ಮಾಡುವ ಪ್ರಯತ್ನಕ್ಕಿಂತ ಬಹಳ ದೊಡ್ಡದಾಗಿರುತ್ತದೆ.
