티스토리 뷰

내가 쓰는 앱이 해킹 통로가 됐다고요? 공급망 공격, 진짜 이게 뭔지 알아야 해요

어제 친구한테서 카톡이 왔어요. "야, 내가 쓰는 쇼핑몰 앱이 갑자기 이상한 거 같아. 비밀번호 바꿔야 하나?" 저도 딱 그 앱 쓰거든요. 근데 사실 그 앱 자체가 문제가 아니라, 그 앱을 만든 개발자들이 쓴 도구에 문제가 생겼을 수도 있는 거예요. 오늘 이야기가 딱 그 케이스거든요.

근데 나는 개발자도 아닌데, 이게 나랑 무슨 상관이에요?

우리가 매일 쓰는 앱이나 웹사이트, 그거 다 누군가가 만든 거잖아요. 그 개발자들은 처음부터 모든 코드를 혼자 짜는 게 아니라 이미 만들어진 부품 같은 걸 가져다 쓰거든요. 이걸 전문용어로 '패키지' 또는 '라이브러리'라고 해요. 쉽게 말하면 레고 블록 같은 거예요. 남이 만들어놓은 블록을 가져다 끼워서 더 빠르게 결과물을 만드는 거죠.

근데 만약 그 레고 블록 안에 몰래 도청 장치가 심어져 있다면 어떻게 될까요? 그걸 가져다 쓴 개발자도 모르고, 그 앱을 쓰는 우리도 모르고, 해커만 신나는 상황이 펼쳐지는 거예요. 이게 바로 공급망 공격(Supply Chain Attack)이에요. 진짜로 무섭죠. 내가 아무리 조심해도 내가 쓰는 서비스 자체가 이미 뚫려 있는 상황이니까요.

TIP '공급망 공격'이란 최종 사용자를 직접 노리지 않고, 그 사람이 쓰는 소프트웨어를 만드는 과정을 공격하는 방식이에요. 마치 식당을 직접 털지 않고, 식재료 납품 업체를 털어서 독을 넣는 것과 같아요.

이번에 터진 사건, 어떤 일이 있었냐면요

최근 보안 연구팀 Socket이 정말 심각한 걸 발견했어요. 'TrapDoor'라는 악성 공격이 개발자들이 패키지를 내려받는 세 군데 대형 저장소, 그러니까 npm, PyPI, Crates.io를 동시에 노렸더라고요. 이 저장소들은 전 세계 개발자들이 매일같이 코드 부품을 가져다 쓰는 곳이에요. 우리나라로 치면 쿠팡이나 네이버 스마트스토어처럼 개발자 세계에선 없어선 안 될 곳들이에요.

공격자들은 여기에 34개의 악성 패키지를 심어놨고, 버전만 따지면 수백 개에 달해요. 이 패키지들 이름이 진짜 교묘하게 정상적인 것처럼 보이게 만들어져 있어서, 개발자들이 깜빡하고 잘못된 걸 설치할 수 있거든요. 이걸 '타이포스쿼팅(Typosquatting)'이라고 해요. 예를 들어 원래 패키지 이름이 'react'인데 're-act'나 'reakt' 같이 살짝 비슷한 이름으로 가짜를 만드는 거예요.

이 악성 패키지가 설치되면 뭘 하냐면요. 암호화폐 지갑 정보, API 키(서비스 접근 비밀번호 같은 것), 클라우드 서버 인증 정보 같은 걸 몰래 빼내요. 특히 암호화폐를 노린다는 점에서 'Crypto Stealer', 즉 암호화폐 탈취기라는 이름이 붙은 거더라고요.

주의 이 공격은 개발자 컴퓨터에서 끝나지 않아요. 감염된 개발자의 CI/CD 파이프라인(앱 자동 배포 시스템)까지 타고 들어가면, 그 개발자가 만든 서비스를 쓰는 일반 사용자들의 정보까지 위험해질 수 있어요.

솔직히 얼마나 위험한 건지 표로 정리해봤어요

이번 사건이 어느 정도 규모인지, 그리고 어떤 정보들이 위험에 처했는지 한눈에 볼 수 있게 정리해봤어요. 숫자로 보면 진짜 실감이 나거든요.

항목 내용
악성 패키지 수 34개
감염된 버전 수 수백 개
공격 대상 저장소 npm (자바스크립트), PyPI (파이썬), Crates.io (러스트)
주요 탈취 대상 암호화폐 지갑 정보, API 키, 클라우드 인증 정보
일반인 피해 가능성 감염된 서비스 이용 시 계정 정보 및 개인정보 유출 위험
발견 기관 Socket 보안 연구팀

사실 이런 공격이 처음은 아니에요. 몇 년 전에도 비슷한 방식으로 수천만 명이 쓰는 서비스들이 동시에 털린 적 있거든요. 근데 이번 건 세 개의 대형 저장소를 동시에 노렸다는 점에서 더 정교하고 규모가 크다는 게 전문가들의 평가예요.

TIP npm, PyPI, Crates.io는 각각 자바스크립트, 파이썬, 러스트 언어 개발자들이 쓰는 패키지 저장소예요. 전 세계 수백만 명의 개발자가 매일 사용하는 곳이라, 여기 하나라도 뚫리면 파급력이 어마어마해요.

그래서 우리가 실제로 할 수 있는 게 뭔데요?

개발자가 아닌 일반인 입장에서 "나는 패키지 같은 거 안 쓰는데 뭘 해야 하지?"라고 생각할 수 있어요. 근데 진짜로 우리도 할 수 있는 것들이 있어요. 완벽한 방어는 못 해도, 피해를 최소화하는 건 충분히 가능하거든요.

1
암호화폐 지갑 비밀키는 절대 온라인에 저장하지 마세요. 이번 공격의 핵심 타깃이 암호화폐 지갑 정보예요. 비밀키나 시드 구문(지갑 복구 문자열)은 인터넷이 연결되지 않은 곳에 따로 보관하는 게 기본 중의 기본이에요. 메모장이나 클라우드 저장은 정말 위험해요.
2
자주 쓰는 서비스 비밀번호를 주기적으로 바꾸고, 2단계 인증을 켜두세요. 설령 서비스가 뚫렸더라도 2단계 인증(OTP, 문자 인증 등)이 켜져 있으면 해커가 비밀번호를 알아도 로그인을 못해요. 솔직히 귀찮다는 거 알아요. 근데 이게 가장 확실한 방어막이에요.
3
개발자라면 패키지 설치 전 이름을 꼼꼼히 확인하세요. 타이포스쿼팅 공격은 이름이 아주 살짝 달라요. 설치하기 전에 공식 문서나 깃허브에서 정확한 패키지 이름을 확인하는 습관이 중요해요. Socket 같은 보안 모니터링 도구를 도입하는 것도 좋은 방법이에요.

결국 이런 공격들이 계속 나오는 이유는 우리가 너무 편리함에 익숙해져 있기 때문이기도 해요. 개발자들은 빠르게 만들어야 하니까 검증 없이 패키지를 가져다 쓰고, 일반인들은 귀찮아서 비밀번호를 하나로 통일해서 쓰고. 해커들은 바로 그 틈을 노리는 거거든요.

주의 이미 감염됐을 수도 있어요. 암호화폐 거래소 계정이나 주요 서비스에서 평소와 다른 로그인 기록, 알 수 없는 출금 내역이 보인다면 즉시 비밀번호를 바꾸고 고객센터에 신고하세요. 빠른 대응이 피해를 줄여줘요.

자주 묻는 질문

Q. 나는 암호화폐도 없고 개발자도 아닌데, 이 공격이 저한테도 영향이 있나요?

A. 직접적인 영향은 적을 수 있어요. 근데 우리가 매일 쓰는 쇼핑몰, 배달앱, 금융앱이 다 개발자들이 만든 거잖아요. 그 개발자들이 이번에 피해를 입었다면 간접적으로 내 개인정보나 계정 정보도 위험해질 수 있어요. 그래서 평소에 2단계 인증 켜두는 게 중요하다는 거예요.

Q. 이런 악성 패키지는 어떻게 발견되는 건가요?

A. Socket 같은 보안 전문 회사들이 오픈소스 저장소를 상시 모니터링하면서 수상한 코드 패턴을 찾아내요. AI와 자동화된 분석 도구를 써서 엄청난 양의 코드를 빠르게 스캔하는 거예요. 이번에도 그렇게 발견됐고, 발견 즉시 npm, PyPI, Crates.io 측에 신고해서 악성 패키지를 내리게 했더라고요.

오늘 이야기 좀 무거웠죠? 근데 솔직히 알고 있으면 무섭지 않아요. 우리가 다 막을 순 없어도, 기본적인 것들만 챙겨도 피해 확률을 훨씬 낮출 수 있거든요. 비밀번호 관리, 2단계 인증, 이 두 가지만 잘 챙겨도 진짜 많이 달라져요. 오늘 이 글 읽은 김에 지금 당장 주요 서비스 2단계 인증 켜러 가봐요. 저도 같이 할게요! 😄

#공급망공격 #보안뉴스 #암호화폐보안 #사이버보안 #개인정보보호 #2단계인증 #오픈소스보안