공급망 공격(Supply Chain Attack)은 소프트웨어나 하드웨어의 개발, 배포, 업데이트 과정에서 악성 코드를 삽입해 최종 사용자를 감염시키는 공격 방식이다.
공급망 공격 유형
| 유형 | 공격 지점 | 사례 |
|---|
| 소스코드 변조 | 소스 저장소 (GitHub) | XZ Utils 백도어 |
| 빌드 시스템 침해 | CI/CD 파이프라인 | SolarWinds |
| 패키지 저장소 | npm, PyPI | event-stream |
| 업데이트 메커니즘 | 자동 업데이트 | ASUS Live Update |
| 하드웨어 변조 | 제조/유통 단계 | Supermicro (주장) |
| 의존성 혼동 | 내부 패키지명 충돌 | dependency confusion |
SolarWinds 공격 분석 (2020)
1. SolarWinds Orion 빌드 환경 침해 (2019~)
2. 악성 DLL(SUNBURST) 정상 업데이트에 삽입
3. 디지털 서명된 정상 패키지로 배포
4. 18,000개 조직에 자동 업데이트 설치
5. 2주 대기 후 C2 연결 (타이머 기반 지연 실행)
6. 미국 정부 부처 포함 수십 개 조직 침투
Dependency Confusion 공격
python
# 공격 원리: 내부 패키지와 동일한 이름을 공개 저장소에 업로드
# 빌드 도구가 공개 저장소의 더 높은 버전을 선택
# 피해자 내부 설정:
# pip install internal-utils==1.0.0 # 내부 저장소
# 공격자:
# PyPI에 internal-utils==9.9.9 업로드 (악성 코드 포함)
# pip은 버전 9.9.9를 선택 → 감염
# 방어:
# pip install internal-utils --index-url https://internal.pypi.company.com
# 해시 고정: pip install internal-utils==1.0.0 --hash=sha256:abc123...
방어 전략
yaml
# SLSA (Supply-chain Levels for Software Artifacts) 프레임워크
SLSA Level 1:
- 빌드 스크립트 존재
- 출처(provenance) 정보 제공
SLSA Level 2:
- 버전 관리된 빌드 스크립트
- 빌드 서비스가 서명된 출처 생성
SLSA Level 3:
- 감사 가능한 빌드 환경
- 소스-빌드 추적성
SLSA Level 4:
- 두 명 이상 리뷰 필수
- 밀폐된(hermetic) 재현 가능 빌드
관련 문서
- •[[zero-day|제로데이 취약점]]
- •[[apt|APT (지능형 지속 위협)]]
- •[[incident-response|인시던트 대응]]
- •[[secure-coding|시큐어 코딩]]