최근 한 개발자가 교육 기술 웹 앱 개발 문의를 가장한 표적 공격의 대상이 되었습니다. 공격자는 Git 저장소의 `post-checkout` 훅 기능을 악용하여 개발자의 노트북에서 임의 코드를 실행, GitHub 계정이나 고객 관련 접근 권한을 탈취하려 시도했습니다. 다행히 개발자가 비정상적인 요청을 의심하여 공격을 피할 수 있었지만, 이는 개발자 생태계에서 Git 작업 흐름을 노린 새로운 형태의 위협으로 주목받고 있습니다.
공격은 잠재 고객을 가장한 이메일 문의로 시작되었습니다. 공격자는 미팅 전 프로젝트 자료 검토와 NDA 서명을 요청하며 드롭박스(Dropbox) 폴더를 공유했습니다. 이 폴더 안에는 겉보기에는 평범한 프로젝트 명세 파일들이 있었지만, 숨겨진 `.git` 디렉터리와 그 안에 악성 `post-checkout` 훅이 포함되어 있었습니다. 공격자는 개발자에게 NDA 서명을 위해 'NDA 브랜치'로 전환하라고 유도했고, 이 과정에서 `post-checkout` 훅이 자동으로 실행되도록 설계했습니다. 이 악성 훅은 Vercel 앱을 명령 및 제어(C2) 서버로 활용하여 운영체제에 맞는 바이너리를 다운로드하고 실행한 뒤 스스로를 삭제하는 방식으로 동작했습니다. 개발자는 NDA 브랜치 전환 요청을 수상하게 여겨 `.git/hooks`를 직접 확인하면서 공격의 실체를 파악하고, 드롭박스와 Vercel 보안팀에 즉시 신고하여 추가 피해를 막았습니다.
이번 공격은 개발자들이 일상적으로 사용하는 Git의 내부 기능을 악용했다는 점에서 매우 교묘하고 위험합니다. 개발자들은 프로젝트 협업 과정에서 외부 소스 코드를 다루는 경우가 많아, 무심코 악성 코드를 실행할 위험에 노출될 수 있습니다. 특히 `git clone` 명령 시 `.git/hooks` 안의 파일은 기본적으로 체크아웃되지 않지만, 압축 파일 형태로 전달된 저장소나 직접 작업 트리를 받는 경우에는 악성 훅이 실행될 수 있습니다. 이는 개발자들이 낯선 출처의 파일을 다룰 때 항상 경계심을 가져야 하며, 코드 과제나 외부 프로젝트 참여 시에는 가상 환경이나 GitHub 내장 편집기 등 안전한 환경을 활용하는 것이 중요함을 시사합니다. 또한, Git 훅과 같은 내부 기능의 보안 취약점에 대한 개발자 커뮤니티의 지속적인 관심과 논의가 필요합니다.