링크드인 채용과제 사기, 숨은 악성코드
LinkedIn 채용 과제로 위장한 악성코드 사례를 AISafe 분석 글 기준으로 정리하고, 설치 전에 설정 파일을 확인하는 방법과 이미 실행했을 때의 대응 순서를 짚어요.
무슨 일이 있었나
AISafe의 분석 글과 GeekNews 소개글에 따르면, 이 사례는 채용 과제로 포장한 악성코드 배포예요. LinkedIn으로 온 제안은 평범한 소프트웨어 엔지니어 채용처럼 보였고, 과제 저장소도 React/Web3 기반 NFT 캠페인 플랫폼처럼 만들어져 있었어요. 데모 데이터와 화면까지 갖춰서 처음 보면 의심하기 어려워요. 아래 내용은 모두 AISafe 글에 적힌 분석을 옮긴 거예요. 이 글에서 악성 저장소를 직접 실행하거나 재현해 본 건 아니에요.
겉모습과 실제 위험
공격자는 개발자가 익숙하게 보는 요소를 이용해 경계심을 낮춰요. 핵심은 설정 파일 안에 악성 로직을 숨긴 점이에요.
| 겉보기 | AISafe가 분석한 실제 내용 | 위험 신호 |
|---|---|---|
| 채용 과제 저장소 | 외부인이 건넨 실행형 프로젝트 | 낯선 코드를 바로 실행하게 만듦 |
tailwind.config.js | 30,987바이트 크기, 정상 설정 뒤에 난독화된 코드를 덧붙임 | 설정 파일 크기가 비정상적으로 큼 |
yarn start, npm install | 설정 파일을 불러오는 순간 코드가 실행됨 | 개발 서버가 오래 기다려도 뜨지 않음(AISafe 글의 피해 사례) |
| 로컬 실행 | SSH 키, 브라우저 데이터, 지갑 파일, .env 파일을 노림 | 개발자 장비에는 민감정보가 많음 |
왜 설정 파일이 안전한 곳이 아닌가
tailwind.config.js는 이름만 보면 설정 같지만 Node가 모듈로 실행하는 자바스크립트 파일이에요. 빌드 도구가 설정을 읽는 순간 그 안의 코드가 그대로 돌아요. package.json의 postinstall 스크립트만 경계하던 사람도 설정 파일은 놓치기 쉬워요. 같은 구조는 vite.config.js, webpack.config.js, postcss.config.js처럼 JS로 된 다른 설정 파일에도 해당해요. 이건 AISafe 글의 일반화가 아니라 이 파일들이 모두 도구가 실행하는 코드라는 점에서 제가 덧붙인 설명이에요.
AISafe가 정리한 실행 흐름은 이래요. 난독화된 코드가 임시 폴더에 axios와 socket.io-client를 설치하고, 서버에서 암호화된 페이로드를 받아 풀어 쓴 뒤 node pack으로 실행해요. 이후 원격 제어 백도어, 브라우저 자격증명과 지갑 확장 데이터 수집, 파일 업로드, 클립보드 감시 프로그램이 이어져요. AISafe 글은 특정 공격 집단으로 귀속하지 않았어요.
외부 IP와 포트 정보 (제3자 분석 인용)
AISafe 글은 명령 서버로 45.146.252.17을 적고, 포트 80은 페이로드 전달과 호스트 등록, 7641은 Socket.IO 백도어 채널, 7646은 파일 업로드, 7649는 브라우저·지갑 데이터 업로드에 쓰였다고 설명해요. 이 정보는 제가 독립적으로 검증하지 않은 인용이에요. IP는 시간이 지나면 다른 용도로 바뀔 수 있으니, 이미 실행했다면 지표 하나에 의존하지 말고 뒤의 대응 순서를 따르는 게 좋아요.
설치 전에 할 점검
낯선 과제 저장소는 설치하기 전에 먼저 읽어요.
cat package.json
grep -n "preinstall\|postinstall\|prepare" package.json
wc -l tailwind.config.js
wc -c tailwind.config.js
awk '{ if (length($0) > 500) print FILENAME": line "NR" is "length($0)" chars" }' *.config.js
wc -c가 큰데 wc -l이 작으면 한 줄이 아주 길다는 뜻이라 의심할 만해요. 마지막 awk 줄은 500자를 넘는 줄을 찾아 주는 점검이고, 500이라는 기준은 제가 임의로 잡은 값이에요. 설치는 --ignore-scripts로 스크립트를 막아도 설정 파일 실행까지는 막지 못한다는 점을 기억하세요. 그래서 격리된 VM이나 실제 키가 없는 컨테이너에서 여는 게 더 확실해요.
이미 실행했다면
AISafe의 권고는 설정 파일의 악성 코드를 제거하고, 노출됐다면 SSH 키, GitHub 토큰, API 자격증명을 교체하라는 거예요. 지갑을 쓴다면 지갑 확장의 시드 문구도 같은 위험에 놓였다고 봐야 해요. 장비를 믿을 수 없는 상태라면 키를 바꾸는 작업은 깨끗한 다른 장비에서 하는 게 순서예요. 이건 AISafe 권고에 제가 순서만 덧붙인 거예요.
정리
겉으로는 평범한 과제 같아도 실행형 코드는 실행형 코드예요. 채용 담당자가 건넨 저장소라는 사실이 신뢰의 근거가 되지는 않아요.
참고 링크
관련 글
코드 리뷰 비용 45배 줄인 Jev, 정확도는 어떤가

TypeSafe의 System One 모델 Jev를 Gemini 3.8 Flash·Claude Fable 5.1과 같은 Python 코드 리뷰 과업에 넣고 비용·속도·정확도·일관성을 비교한 벤치마크예요. Jev가 비용을 약 45~275배 아끼고 응답 중앙값도 약 5~6배 빠르지만, 정확도 98%로 소폭 낮아요. 다만 직접 만든 예제로 잰 결과라 읽는 법이 중요해요.
Gemini가 후임 모델을 9달러에 스스로 훈련했다
개발자가 취미용 스크래퍼의 댓글 단위 AI 결제를 줄이려고, Gemini에 라벨을 한 번만 맡기고 오픈소스 NER 모델 GLiNER로 이식했다. 총비용은 라벨 9달러+GPU 2.5달러이고 결과는 검증셋 0.83 F1. 작은 파인튜닝 일감의 실제 비용과 삽질을 솔직하게 공개한 글이다.
AI 코딩 에이전트, 세션·PC를 넘어 협업하는 새 프로토콜 'agent-comms'
세션을 닫으면 기억이 리셋되는 AI 코딩 에이전트의 고질병에 오픈소스 'agent-comms'는 작업 맥락 캡슐과 웹소켓 릴레이로 답해요. 신생 프로젝트라 검증된 부분과 아직 비어 있는 부분을 나눠서 짚어요.
공개 자료를 바탕으로 AI가 쓰고, 발행 전에 수치와 주장을 원문과 대조합니다.