🔥 Slack에서 리눅스 재단 리더를 사칭한 피싱, 오픈소스 개발자를 노린다

#보안#오픈소스#소셜엔지니어링#Slack#피싱
925자
12분

content image

Slack 알림이 뜬다. 프로필 사진도 익숙하고 이름도 아는 사람이다. 오픈소스 커뮤니티에서 몇 번 본 이름이니까 별 의심 없이 DM을 열었을 거다. 나라도 그랬을 것 같다. 그런데 그 DM이 악성코드 설치로 이어지는 4단계 함정의 시작이라면? 4월 7일, OpenSSF가 정확히 이런 공격에 대한 고위험 자문을 발표했다.

무슨 일이 있었나

OpenSSF Siren은 오픈소스 보안 재단이 운영하는 위협 인텔리전스 메일링 리스트다. 2024년 XZ Utils 백도어 사건 이후 만들어졌는데, 오픈소스 커뮤니티에 활발한 위협 정보를 공유할 중앙 채널이 없다는 걸 그때서야 깨달았기 때문이다. 취약점 공개(disclosure) 채널은 있었지만, 진행 중인 공격 패턴을 개발자들에게 빠르게 알리는 채널은 없었다.

이번 자문은 OpenSSF의 CTO이자 Chief Security Architect인 Christopher "CRob" Robinson이 작성했다. 내용은 이렇다. 누군가 리눅스 재단의 잘 알려진 커뮤니티 리더를 사칭해서, TODO Group Slack 워크스페이스에서 개발자들에게 DM을 보내고 있다. TODO Group은 리눅스 재단 산하의 오픈소스 프로그램 오피스(OSPO) 실무자 커뮤니티다.

공격자의 미끼는 꽤 그럴듯했다. "오픈소스 프로젝트의 기여 패턴을 분석하는 AI 도구를 만들고 있는데, 아직 비공개로 소수만 공유하고 있다"는 내용이었다. 기여가 리뷰 전에 머지될지 예측할 수 있다니, 오픈소스에 관심 있는 사람이라면 한 번쯤 클릭해 보고 싶을 만한 이야기다.

공격의 해부 — 네 단계 함정

Socket의 엔지니어가 TODO Group Slack에서 이 DM을 실제로 받았고, 덕분에 공격의 전체 흐름이 밝혀졌다.

content image
출처: Socket.dev

content image
출처: Socket.dev

메시지에는 피싱 URL과 가짜 이메일(cra@nmail.biz), 접근 키(CDRX-NM71E8T)가 포함되어 있었다. "소수에게만 공유하고 있다"는 독점성 강조도 전형적인 소셜 엔지니어링 수법이다. 전체 공격은 네 단계로 진행된다.

1단계 — 사칭. 공격자가 리눅스 재단 리더의 이름과 프로필 사진을 복제해 Slack 계정을 만든다. TODO Group 같은 오픈소스 커뮤니티에서는 유명 인사의 DM을 받는 게 특별한 일이 아니기 때문에, 이 단계에서 의심을 품기가 어렵다.

2단계 — 피싱. 피해자가 Google Sites 링크를 클릭하면 가짜 인증 플로우가 시작된다. sites.google.com은 구글의 정식 인프라라서 URL만 봐서는 정상 사이트와 구분이 안 된다. 일부 보안 필터를 우회할 수도 있다.

3단계 — 크레덴셜 수집. 가짜 워크스페이스 가입 화면에서 이메일과 인증 코드를 입력하게 만든다. 여기까지는 흔한 피싱이다.

4단계 — 악성코드 배포. "Google 인증서"를 설치하라는 안내가 나온다. 실제로는 악성 루트 인증서다. macOS에서는 이후 원격 IP(2.26.97.61)에서 gapi라는 바이너리를 다운로드해 실행하는 스크립트가 돌아간다. 이 바이너리가 실행되면 시스템 전체가 장악될 수 있다. Windows에서는 브라우저 신뢰 대화상자를 통해 악성 인증서를 설치하게 만들어, 암호화된 트래픽을 가로채는 MITM 공격이 가능해진다.

개발자 신뢰를 무기로 — 왜 이게 통하는가

이 공격이 무서운 이유는 기술적 정교함이 아니다. 오픈소스 커뮤니티의 작동 방식 자체를 악용한다는 점이다.

TODO Group 같은 커뮤니티에서 개발자들은 프로젝트 리드, 재단 스태프, 커뮤니티 오거나이저로부터 DM을 받는 데 익숙하다. "이거 한번 봐달라", "이 프로젝트에 관심 있으면 연락해" — 이런 메시지가 일상이다. 공격자가 이 사람들 중 하나를 설득력 있게 사칭하면, 악성 링크를 클릭하기 전부터 이미 사회적 우위를 점한 셈이다.

구글 사이트를 피싱 페이지로 쓴 것도 의도적이다. sites.google.com 도메인은 정당한 인프라라서 일부 보안 필터를 우회할 수 있고, 개발자의 눈에도 평범해 보인다. 인증서 설치 프롬프트도 "워크스페이스 설정 단계"처럼 포장했다. 최근에는 구글 사이트를 이용한 피싱 공격이 반복적으로 보고되고 있어서, 이 인프라가 공격자들 사이에서 꽤 인기 있는 수법이 된 것 같다.

XZ Utils에서 Axios, 그리고 Slack까지

이 사건을 단독으로 보면 안 된다. 오픈소스 생태계를 노리는 소셜 엔지니어링 공격의 흐름 속에 있다.

2024년 3월, XZ Utils 백도어가 발견됐다. "Jia Tan"이라는 가명의 인물이 2년 넘게 메인테이너의 신뢰를 쌓아 공동 관리자 지위를 얻은 뒤, SSH 접속을 장악할 수 있는 백도어를 심었다. 보안 전문가들 사이에서 가장 정교한 공급망 공격 중 하나로 꼽히는 사건이다. 이 사건은 OpenSSF Siren 메일링 리스트가 만들어진 중요한 계기 중 하나였다.

2026년 3월 말, Axios npm 패키지가 공급망 공격을 당했다. 주간 다운로드 약 1억 건에 달하는 자바스크립트 HTTP 라이브러리의 메인테이너 계정이 소셜 엔지니어링으로 탈취됐다. 공격자는 정교한 소셜 엔지니어링으로 메인테이너를 가짜 Slack 워크스페이스로 유인했고, 39분 만에 백도어가 심어진 두 개의 버전을 배포했다. Google Threat Intelligence Group(GTIG)은 이 공격을 UNC1069라는 북한 연계 위협 행위자의 소행으로 귀속했다.

같은 시기, Node.js 핵심 메인테이너들을 겨냥한 별도의 캠페인도 보고됐다. Fastify의 Matteo Collina, dotenv의 Scott Motte, Lodash의 John-David Dalton, 그리고 Socket 엔지니어들이 타겟이 됐다. Socket은 이 캠페인이 Mandiant가 추적하는 DPRK 연계 위협 행위자와 관련될 수 있다고 보고했다.

이번 TODO Group Slack 공격이 이 캠페인들과 직접 연결되는지는 아직 확인되지 않았다. 하지만 패턴은 닮아 있다. 신뢰할 수 있는 인물의 사칭, 그럴듯한 미끼, 정당한 인프라의 악용, 그리고 궁극적으로 시스템 장악. 오픈소스 메인테이너와 커뮤니티 구성원이 일하는 플랫폼과 관계를 통해 공격당하고 있다는 게 핵심이다.

IOC (침해 지표)

이번 공격과 관련된 침해 지표다. 자신이 영향을 받았을 수 있다면 즉시 네트워크 연결을 끊고, 새로 설치된 인증서를 제거하고, 엔드포인트 보안 스캔을 실행한 뒤, 모든 크레덴셜(GitHub, SSH 키, 클라우드 접근)을 교체하고 활성 세션과 토큰을 폐기해야 한다.

피싱 URL: https://sites.google.com/view/workspace-business/join
가짜 이메일: cra@nmail.biz
접근 키: CDRX-NM71E8T
원격 IP: 2.26.97.61
macOS 악성 바이너리: gapi
피싱 URL: https://sites.google.com/view/workspace-business/join
가짜 이메일: cra@nmail.biz
접근 키: CDRX-NM71E8T
원격 IP: 2.26.97.61
macOS 악성 바이너리: gapi

나는 오픈소스 Slack 커뮤니티에 여러 개 참여하고 있다. DM이 오면 이름만 보고 대충 응답하는 경우가 솔직히 많았다. 이 기사를 읽고 한동안 내 Slack 설정을 들여다봤다. "아는 사람"이 보낸 메시지라도 링크 클릭 전에 별도 채널로 확인하는 습관, 머리로는 알았지만 실제로 그렇게 하는 사람이 얼마나 될까. 루트 인증서를 설치하라는 요청이 오면 무조건 의심해야 한다. 진짜 서비스는 그런 걸 요구하지 않는다. 그리고 MFA를 아직 안 걸어둔 계정이 있다면 지금이 그걸 할 때다. 나도 이 글 쓰면서 GitHub 토큰 만료 날짜를 확인했다. 괜히 불안해져서.

참고 자료

YouTube 영상

채널 보기
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
BTree 노드의 구조는?
내적의 기하학적 의미와 코사인 유사도 원리 | 선형대수학
스칼라 곱셈과 내적의 기하학적 의미 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
우리가 매일 쓰는 맞춤법 검사기와 라우터 속에 숨겨진 알고리즘은? | Trie 자료구조 이야기
Trie(트라이) 자료구조 원리와 파이썬 클래스 설계 및 구현 | Trie 자료구조 이야기
트라이(Trie)를 이용한 자동 완성 알고리즘 | Trie 자료구조 이야기