
이스트시큐리티 시큐리티대응센터(ESRC)는 파이썬 공식 패키지 저장소인 PyPI(Python Package Index)에서 신용카드 사기, 이른바 카딩(Carding)을 위한 크라임웨어가 정상 패키지의 형태로 배포되고 있는 사례를 확인했습니다.
해당 패키지의 이름은 saeka이며, 패키지 페이지만으로는 실제 용도를 짐작할 수 없도록 설명이 비어 있는 상태로 등록되어 있습니다. 그러나 내부 코드는 도용된 카드의 유효성 확인부터 해외 온라인 쇼핑몰에서의 결제 시도, 결과 분류와 저장까지 카딩의 핵심 단계를 하나의 명령줄 도구로 수행하도록 설계되어 있습니다.
참고하세요 | 카딩(Carding)
피싱, 정보 유출, 스키밍 등으로 탈취되어 다크웹이나 텔레그램 등 지하 시장을 통해 유통되는 신용카드 정보의 사용 가능 여부를 확인한 뒤, 유효한 카드로 상품을 부정 구매하거나 카드 정보를 재판매하는 금융 사기 행위를 말합니다.

PyPI와 npm 등 오픈소스 패키지 저장소를 겨냥한 위협은 그동안 주로 개발자를 피해자로 삼는 형태로 나타났습니다. 유명 패키지와 유사한 이름을 사용하는 타이포스쿼팅(Typosquatting), 설치 과정에서 정보 탈취 코드를 실행하는 악성 패키지 등이 대표적인 유형입니다.
이번에 확인된 saeka는 성격이 다릅니다. 설치한 사용자를 감염시키는 것이 목적이 아니라, 범죄에 가담하려는 사용자가 스스로 찾아 설치하는 '도구'에 해당합니다. 다시 말해 PyPI가 악성코드의 감염 경로가 아니라 크라임웨어의 유통 플랫폼으로 기능한 사례로 볼 수 있습니다.
이러한 형태는 기존 위협 모델로 포착하기 어렵다는 특징이 있습니다. 설치 시점에 사용자 시스템을 공격하는 행위가 없어 정적 검사만으로는 악성 여부를 판단하기 어렵고, 피해는 패키지가 설치된 시스템이 아니라 카드 소유자와 온라인 판매자에게 발생하기 때문입니다.
참고하세요 | 크라임웨어(Crimeware)
금전적 이익을 목적으로 하는 범죄 행위에 특화되어 제작·배포되는 소프트웨어를 통칭합니다. 뱅킹 트로이목마, 랜섬웨어, 피싱 키트와 함께 카딩 자동화 도구 역시 대표적인 크라임웨어 유형에 포함됩니다.
saeka는 PyPI에 일반 패키지와 동일한 형식으로 등록되어 있으며, 설치가 완료되면 전용 실행 명령어가 시스템에 등록됩니다. README 파일에는 짧은 제목 한 줄만 기재되어 있어 패키지 페이지만으로는 용도를 파악하기 어렵습니다.
실행 시에는 비밀번호 입력을 요구하며, 코드 내부에 Base64로 인코딩된 복수의 비밀번호가 하드코딩되어 있는 것이 확인됩니다. 이는 일반 사용자의 우발적 실행을 차단하는 동시에, 특정 커뮤니티 내에서 비밀번호를 공유하는 방식으로 이용자를 관리하려는 의도로 분석됩니다. 공개 저장소에 코드를 올려 두면서도 접근 통제 장치를 둔 것은 크라임웨어 유통에서 반복적으로 관찰되는 운영 방식입니다.
또한 해당 패키지는 연관 GitHub 저장소의 최신 릴리스를 조회해 새 버전이 존재할 경우 자동으로 업데이트한 뒤 프로세스를 재시작합니다. 제작자는 이 구조를 통해 PyPI를 배포 채널로, GitHub를 버전 관리 채널로 활용하며 도구 기능을 지속적으로 보완할 수 있습니다. 현재 공개된 버전이 15.0에 이른다는 점 역시 일회성 공개가 아닌 지속적인 개발 대상이었음을 시사합니다.
실제로 릴리즈 이력을 확인해 보면 특정 일자에 10개 이상의 버전이 연속적으로 공개된 정황도 확인되며, 이는 공격자가 PyPI를 상시 운용 가능한 배포 창구로 활용하고 있음을 보여줍니다.

saeka는 입력된 카드 목록을 받아 외부 유효성 조회 → 결제 대행사 토큰 생성 → 쇼핑몰 실제 결제의 세 단계로 사용 가능 여부를 판단하는 구조입니다. 앞의 두 단계는 외부 API를 호출해 상태 값만 받아오는 조회 수준의 처리이며, 그 자체만으로는 금전 피해가 발생하지 않습니다. 그러나 이 과정에서 걸러진 카드만을 다음 단계로 넘겨 실제 결제까지 자동 진행하기 때문에, 마지막 단계가 진행되는 순간 카드 소유자와 쇼핑몰 사업자에게 실질적인 피해가 발생합니다.
따라서 saeka의 핵심 악성 행위는 세 번째 단계인 Shopify 쇼핑몰에서의 자동 결제 시도입니다. 전통적인 카드 테스팅(Card Testing)이 외부 유효성 검증 API에 상태 값을 조회하는 수준에 머물렀다면, saeka는 결제가 완료되는 지점까지 공격 흐름을 끌고 간다는 점에서 피해의 성격이 다릅니다. 아래에서는 이 결제 자동화 단계를 중심으로 주요 구성 요소를 정리합니다.

결제 과정에 사용할 배송 정보로 미국 주요 도시의 우편번호 체계를 바탕으로 가짜 이름, 주소, 전화번호, 이메일을 생성합니다. 실제 지역 코드를 조합한 전화번호와 보편적인 메일 도메인을 사용해 배송지 검증을 통과하도록 만들어져 있습니다.
코드 내부에는 패션, 뷰티, 전자기기, 리빙 등 다양한 분야의 Shopify 기반 해외 쇼핑몰 도메인 200여 개가 하드코딩되어 있습니다. 각 쇼핑몰의 상품 API에서 구매 가능한 상품을 수집한 뒤, Playwright 브라우저 자동화를 이용해 결제 페이지에 접근하고 카드 정보를 입력합니다. 결제 결과 페이지의 URL과 문구를 확인해 성공(charged), 거절(declined), 3DS 인증 요구(3ds), CAPTCHA 차단(captcha) 네 가지 범주로 분류합니다. 거절(declined) 범주 안에는 잔액 부족, 카드 만료 등 세부 사유가 메시지로 함께 기록됩니다.

참고하세요 | 3D Secure
온라인 결제 시 카드 발급사가 추가 인증을 요구하는 국제 표준 방식으로, 비밀번호나 일회용 인증번호(OTP) 입력을 통해 소지자 본인 여부를 확인합니다. 자동화 도구가 통과하기 어려운 대표적인 보안 장치입니다.
브라우저 자동화 환경에서 노출되는 자동화 탐지 신호를 감추는 설정이 포함되어 있으며, SOCKS와 HTTP 프록시를 순환 사용해 출발지 IP를 은닉합니다. 이러한 설정은 쇼핑몰의 이상 거래 탐지 체계를 피해 결제가 끝까지 진행되도록 하기 위한 장치입니다.

결제 성공 카드, 유효 카드 목록, 체크아웃 URL 등을 범주별 파일로 자동 저장합니다. 특히 결제가 성사된 카드 정보는 이후 재판매나 추가 사기에 활용될 수 있습니다.

saeka에서 주목할 또 다른 지점은 공격 인프라를 자체적으로 구축하지 않고 합법적인 외부 서비스를 조합해 운영한다는 점입니다. 패키지 배포에는 PyPI를, 버전 관리와 원격 업데이트에는 GitHub를, 결제 유효성 교차 검증에는 결제 대행사 API를, 발급 정보 확인에는 공개 BIN 조회 서비스를 활용합니다.
이러한 접근 방식은 공격자가 유지해야 할 자체 자산을 최소화하는 동시에, 정상 서비스로 향하는 트래픽에 공격 활동을 섞어 탐지를 어렵게 만듭니다. 보안 관점에서는 특정 악성 도메인이나 서버 하나를 차단한다고 해서 공격이 중단되지 않는 구조라는 점에서 대응 난이도가 높아집니다.
saeka는 설치한 사용자의 시스템을 직접 공격하지 않습니다. 그러나 도구가 실제로 사용될 경우 복수의 주체가 피해에 노출됩니다.
| 피해 주체 | 피해 내용 |
|---|---|
| 카드 소유자 | 도용된 카드 정보로 인한 무단 결제 및 금전 피해 |
| 온라인 쇼핑몰 사업자 | 부정 주문에 따른 상품 손실, 차지백(Chargeback) 수수료 부담, 사기율 상승에 따른 결제 서비스 제한 위험 |
| 결제 대행사 | 결제 인프라의 무단 사용 및 사기 거래 처리 비용 발생 |
| 도구 사용자 | 외부 검증 서버 운영자에게 보유 카드 정보가 재수집될 가능성 |
[표 1] saeka 운용 과정에서 발생 가능한 이해관계자별 피해 구조
이처럼 공급망 상단에서는 아무런 감염이 일어나지 않지만, 하단에서는 다수의 금전 피해가 발생하는 비대칭 구조가 나타납니다. 공개 저장소 사업자, 결제 대행사, 쇼핑몰 운영사가 각기 다른 관점에서 이상 징후를 포착해야 전체 흐름을 차단할 수 있는 이유도 여기에 있습니다.
참고하세요 | 차지백(Chargeback)
카드 소유자가 부정 결제나 분쟁 사유로 결제 취소를 요청할 때, 카드사가 판매자로부터 결제 금액을 회수해 소비자에게 환급하는 절차입니다. 사기 거래 비율이 일정 기준을 넘으면 결제 대행사가 가맹점 자격을 제한하거나 수수료를 인상할 수 있습니다.
이번에 확인된 saeka는 PyPI가 단순히 개발자를 노리는 공격 지점에 머무르지 않고, 범죄 도구 자체가 유통되는 창구로 악용될 수 있음을 보여줍니다. 설치한 사용자의 시스템을 감염시키는 전통적인 악성 패키지와 달리, saeka는 사이버 범죄를 시도하려는 사용자가 스스로 설치해 사용하는 '도구'로 설계되어 있으며, 설치 시점에는 어떤 악성 행위도 노출하지 않습니다. 이는 PyPI가 단순한 악성코드 유포 경로를 넘어, 크라임웨어(Crimeware) 유통 플랫폼으로 작동할 수 있음을 시사하는 대표적인 사례라 할 수 있습니다.
이러한 유형의 위협은 기존 공급망 보안 관점만으로는 포착이 어렵습니다. 공개 저장소 운영사, 결제 대행사, 쇼핑몰 사업자, 카드 사용자가 각자의 관점에서 이상 징후를 포착하는 다층 대응이 요구되며, 공개 저장소에 유통되는 도구형 크라임웨어에 대한 심사 기준의 확장 또한 함께 고려될 필요가 있습니다.
IoC
| Indicator | Type | Description | Detection Name |
|---|---|---|---|
| 445AAA39444E8DB8A085505A568B7C75 | MD5 | saeka-15.0.tar.gz | Misc.Riskware.PyCardChecker |
| 63172E7345F31227F9438E80748C0781 | MD5 | chk.py | Misc.Riskware.PyCardChecker |
| GitLab CI/CD 원격 코드 실행 취약점(CVE-2026-97229) 긴급 업데이트 권고 (0) | 2026.10.13 |
|---|---|
| 실제 악용 중인 리눅스 커널 취약점 3종(CVE-2025-39682, CVE-2026-53266, CVE-2025-39964) 긴급 업데이트 권고 (0) | 2026.09.21 |
| 정상 Slack 초대 기능을 악용한 회사 임원 사칭 피싱 메일 주의! (0) | 2026.09.15 |
| GitLab 경로 탐색 취약점(CVE-2026-85706) 긴급 업데이트 권고 (0) | 2026.09.14 |
| 구글 크롬, 원격코드 실행 가능한 제로데이 취약점(CVE-2026-85046) 긴급 업데이트 권고 (0) | 2026.09.07 |
댓글 영역