Python

pip-audit과 GitHub Actions를 활용한 취약 라이브러리 탐지 파이프라인 구축하기

검정비니 2023. 10. 9. 20:05
728x90
반응형

흔히 파이썬을 사용해서 개발을 하다보면 `pip install`을 사용해서 다양한 라이브러리들을 설치하게 된다. 그리고 이렇게 설치한 라이브러리들에서 취약점이 발견되고, 이에 대해서 신규 패치가 나왔을 때, 이를 자동으로 탐지하고 취약점이 있는 라이브러리가 현재 프로젝트 내에서 사용 중인지 여부를 자동적으로 알려주는 기능의 필요성을 개발을 진행하면서 여러차례 느끼게 되었다.

물론, 비슷한 기능을 가진 GitHub DependencyBot이 있으나, dependency bot를 사용해서 의존성 업데이트를 진행할 때에는 가끔씩 의존성 충돌 문제로 인해 업데이트가 실패하는 등의 문제가 발생할 수 있다. 또한, 취약점 패키지를 발견했을때 즉시 알림을 주는 기능 역시 활성화를 시켜도 가끔씩 제대로 작동을 안하는 경우가 있었기 때문에, 새로운 자동 취약점 탐색 파이프라인을 구축해야할 필요성을 느끼게 되었다.

이러한 기능을 가진 라이브러리가 있는지에 대해서 탐색하던 중, https://pypi.org/project/pip-audit/의 존재에 대해서 알게 되었다. pip-audit npm audit처럼 현재 사용 중인 라이브러리들 중 잘 알려진 취약점을 가진 라이브러리가 있는지에 대해서 오픈 데이터베이스 탐색을 통해 점검을 해주는 기능을 가진 툴이다.

name: pip-audit check for dependency audit analysis

on:
  push:
    branches: [ "main", "dev" ]
  pull_request:
    branches: [ "main", "dev" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install pip-audit
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
        pip install -r server/requirements.txt
    - name: Static code analysis with pip-audit
      run: |
        cd server
        pip-audit

매번 코드를 푸시하거나 branch merge 등을 진행할 때, 위의 Action을 통해 취약점 점검을 진행하고, 취약점이 발견되어서 Action이 실패하게 되면 연결된 이메일 계정으로 알림을 보내도록 설정하였다.

위의 파이프라인 구축 후, Flask나 Werkzeug 등 프로젝트에 사용되는 핵심 라이브러리들의 취약 버전에 대한 패치 정보를 여러차례 확인할 수 있었고, poetry를 사용해서 의존성 충돌 없이 패키지 버전 업데이트를 안정적으로 진행할 수 있었다.

 

반응형