
Forked from https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
Alpine의 보안 수정 사항을 추적하는 Flask 웹 애플리케이션입니다.
Alpine secdb를 사용하면 어떤 CVE가 수정되었고 수정되지 않았는지 일반적으로 추론할 수 있습니다. 패키지 관리자가 오탐(false positive)을 표시할 수 있도록 secfixes 보고 스키마에 일부 확장이 추가될 예정입니다.
가까운 시일 내에 상태 변경 사항은 엔진이 처리할 때 보안 공지 목록에 보고될 것입니다.
일반적인 방식으로 virtualenv를 생성한 다음 pip3 install -r requirements.txt를 실행해야 합니다.
sqlite 외의 다른 데이터베이스를 사용하려면 해당 데이터베이스용 드라이버를 설치해야 합니다(예: pip3 install psycopg2).
마지막으로 구성 파일을 작성해야 합니다. 예제 파일을 복사하여 필요에 맞게 수정하세요.
그런 다음 다음 환경 변수를 유용한 값으로 설정해야 합니다:
SECFIXES_TRACKER_CONFIG: 구성 파일 경로FLASK_APP: 앱 이름, secfixes_tracker완료되면 flask init-db로 데이터베이스를 초기화합니다.
선택적으로 make를 실행하여 secfixes-cli를 빌드할 수 있습니다. 이를 위해서는 go가 설치되어 있어야 합니다.
환경이 구성되면 다양한 작업을 실행할 수 있습니다:
flask run웹서버를 실행합니다. gunicorn 등으로도 실행할 수 있지만, 여기서는 다루지 않습니다.
flask init-db데이터베이스를 초기화합니다.
flask import-apkindex [repo]구성된 저장소를 가져옵니다.
flask import-secfixes [repo]구성된 secdb 피드를 가져옵니다.
flask import-nvd [feed-name]2021 또는 recent와 같은 NVD 피드를 가져옵니다.
연간 피드를 가져온 후에는 매일 recent 피드만 가져오면 됩니다.
./secfixes-cli import-vulnrichhttps://github.com/cisagov/vulnrichment에서 CVE 세부 정보를 가져옵니다.
flask update-states [repo]secfixes, NVD 및 apkindex 피드의 현재 내용을 기반으로 다양한 VulnerabilityState 항목을 업데이트합니다. 위의 가져오기 작업 후 매시간 실행해야 합니다.
재작성기 규칙은 Alpine infra/docker/secfixes-tracker에서 동기화됩니다. 파일 구조는 config/README.md를 참조하세요.
Flask 앱은 secfixes_tracker/application.cfg의 Python CUSTOM_REWRITERS를 사용합니다(config/prod.settings.py에 미러링됨). 규칙은 cpe_vendor:source_pkgname 또는 cpe_vendor:*로 매칭되는 lambda 함수입니다.
같은 파일의 PACKAGE_EXCLUSIONS는 오탐 CVE가 누적되는 패키지(예: bridge)를 제외합니다.
secfixes-cli는 config/application.toml의 expr 기반 규칙을 사용합니다(config/prod.application.toml에 미러링됨). 규칙은 expr을 기반으로 합니다.
예제 규칙은 다음과 같습니다:
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
predicate는 규칙이 적용되는지 여부를 결정하고, rewrite_rule은 CPE가 어떻게 재작성되어야 하는지 결정합니다. field라는 선택적 세 번째 옵션은 CPE의 어떤 필드가 재작성될지 지정합니다. 제공되지 않으면 기본값은 product입니다.
표현식 환경에서 다음 변수를 사용할 수 있습니다:
vendorproducttarget_swversionfmt는 fmt.Sprintf로 구현되지만 인수를 2개만 받습니다. 첫 번째 인수는 문자열 또는 슬라이스입니다. 이를 통해 파이프와 함께 사용할 수 있습니다.
가져오기 작업을 실행한 다음 update-states 작업을 실행하면 됩니다. 그게 전부입니다.
이메일 기능은 추적 엔진 구현 방식에 더 잘 맞도록 재설계 중입니다. 설정 지침이 준비되면 이 공간을 주목하세요.
현재 데이터베이스 스키마는 불안정합니다. 이 소프트웨어를 업그레이드할 때 데이터베이스를 다시 구축해야 합니다. 버전 1.0에 도달하면 데이터베이스 스키마는 안정적이 될 것입니다.