의존성 혼란 공격

Nov 24 2022
개요 종속성 혼동 공격은 공격자가 패키지 관리자를 속여 공급업체의 합법적인 개인 저장소가 아닌 공용 저장소에서 악의적인 패키지를 설치하도록 하는 공격 유형입니다. Dhiyaneshwaran은 자신의 연구와 결과를 설명하는 훌륭한 블로그를 작성했습니다. 아직 읽지 않았다면 그의 블로그를 읽어보는 것이 좋습니다.

개요

종속성 혼동 공격은 공격자가 패키지 관리자를 속여 공급업체의 합법적인 개인 저장소가 아닌 공용 저장소에서 악의적인 패키지를 설치하도록 하는 공격 유형입니다.

Dhiyaneshwaran 은 자신의 연구와 결과를 설명하는 훌륭한 블로그 를 작성 했습니다. 아직 읽지 않았다면 그의 블로그를 읽어보는 것이 좋습니다.

이 블로그에서는 잘못된 구성을 식별하고 악용하는 관점에서 Python 패키지에 중점을 둘 것입니다.

PIP 설명

기본적으로 를 사용하여 Python 패키지를 다운로드하면 pip원하는 패키지의 최신 릴리스에 대한 Pypi 리포지토리 전체를 검색하고 설치하지만 개발자는 패키지를 공개적으로 게시하는 대신 자신의 개인 Pypi 리포지토리를 배포하여 로컬에서 사용자 지정 패키지를 호스팅할 수 있습니다.

로컬 리포지토리에서 패키지를 다운로드하려면 리포지토리 URL을 지정해야 합니다. 이는 다음 두 가지 옵션을 사용하여 수행할 수 있습니다.

  • --extra-index-url
  • --index-url
  • pip3 install --extra-index-url <LOCAL_REPO_URL>/simple/ --trusted-host <LOCAL_REPO_URL> -r requirements.txt
    #OR
    pip3 install --index-url <LOCAL_REPO_URL>/simple/ --trusted-host <LOCAL_REPO_URL> -r requirements.txt
    

패키지 하이재킹

다음 예제 시나리오에서는 공격을 시연할 것입니다.

전제 조건

  • Pypi 에서 계정 만들기
  • 개인 Pypi 리포지토리 생성

다음 리포지토리를 복제합니다.

git clone https://github.com/zAbuQasem/dependecy-confusion-templates
cd dependecy-confusion-templates/python-pip

      
                

mv package_name safepackage

__init_.py그런 다음 파일을 편집하고 package_name원하는 패키지 이름으로 바꿉니다.

패키지 트리거를 수신하려면 파일을 열고 poc.py서버/웹후크 URL을 추가하세요.

마지막으로 패키지를 빌드하고 Pypi 저장소에 업로드합니다.

# Prerequisities
sudo apt install twine -y
sudo apt-get install gcc libpq-dev -y
sudo apt-get install python-dev  python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
pip3 install wheel

# Builing and uploading
python3 setup.py sdist bdist_wheel
twine upload dist/* --verbose

이제 에서 버전을 변경한 다음 위의 명령을 사용하여 패키지 setup.py0.0.1다시 빌드합니다. 그런 다음 아래 그림과 같이 패키지 파일을 로컬 Pypi 서버에 복사합니다.

로컬 Pypi URL을 방문하여 패키지를 확인합니다.

사용 가능한 패키지를 보려면 단순을 클릭하십시오.

다음 명령을 실행하면 개인 리포지토리 URL을 제공했지만 pip가 최신 버전을 설치했음을 알 수 있습니다.

pip3 install --extra-index-url http://example:8080/simple/ --trusted-host example.com safepackage

      
                

python3 -c "import safepackage"

      
                

개선

이제 설치된 패키지를 제거하고 --index-url대신에 다시 설치하십시오.--extra-index-url

Pip은 의도한 대로 개인 저장소에서 패키지를 설치했습니다.

결론

  • 공용 및 개인 리포지토리 모두에서 패키지를 호스팅합니다.
  • 사용을 피하십시오--extra-index-url