
GitHub Actions 워크플로우를 위한 단계적 정적 오염 분석 프레임워크입니다. 오염 추적 및 영향 분류기를 사용하여 코드 인젝션 취약점을 탐지하고, CI/CD 보안을 위해 SARIF 보고서를 출력합니다.
이 저장소는 USENIX Security '23 논문 "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions"의 코드를 포함하고 있습니다. Argus는 GitHub Actions를 대상으로 특별히 설계된 포괄적인 보안 분석 도구입니다. CI/CD 워크플로우의 보안을 강화하기 위해 개발된 Argus는 오염 추적 기법과 영향 분류기를 사용하여 GitHub Action 워크플로우에서 잠재적인 취약점을 탐지합니다.
자세한 내용은 웹사이트 secureci.org를 방문하세요.
오염 추적 (Taint-Tracking): Argus는 고급 알고리즘을 사용하여 GitHub Actions 워크플로우 내에서 특정 소스에서 보안이 중요한 지점(sink)으로 잠재적으로 신뢰할 수 없는 데이터의 흐름을 추적합니다. 이를 통해 코드 주입 공격으로 이어질 수 있는 취약점을 식별할 수 있습니다.
영향 분류기 (Impact Classifier): Argus는 식별된 취약점을 높음(High), 중간(Medium), 낮음(Low) 심각도로 분류하여 각 취약점의 잠재적 영향을 더 명확히 이해할 수 있도록 합니다. 이는 완화 노력의 우선순위를 정하는 데 중요합니다.
이 Python 스크립트는 GitHub 저장소 및 GitHub Actions와 상호작용하기 위한 명령줄 인터페이스를 제공합니다.
python argus.py --mode [mode] --url [url] [--output-folder path_to_output] [--config path_to_config] [--verbose] [--branch branch_name] [--commit commit_hash] [--tag tag_name] [--action-path path_to_action] [--workflow-path path_to_workflow]
--mode: 작동 모드입니다. 'repo' 또는 'action' 중에서 선택하세요. 이 매개변수는 필수입니다.--url: GitHub URL입니다. 비공개 저장소의 경우 USERNAME:TOKEN@URL을 사용하세요. 이 매개변수는 필수입니다.--output-folder: 출력 폴더입니다. 기본값은 '/tmp'입니다. 이 매개변수는 선택 사항입니다.--config: 설정 파일입니다. 이 매개변수는 선택 사항입니다.--verbose: 상세 모드입니다. 이 옵션을 지정하면 로깅 수준이 DEBUG로 설정됩니다. 그렇지 않으면 INFO로 설정됩니다. 이 매개변수는 선택 사항입니다.--branch: 브랜치 이름입니다. --branch, --commit, --tag 중 정확히 하나를 제공해야 합니다. 이 매개변수는 선택 사항입니다.--commit: 커밋 해시입니다. --branch, --commit, --tag 중 정확히 하나를 제공해야 합니다. 이 매개변수는 선택 사항입니다.--tag: 태그입니다. --branch, --commit, --tag 중 정확히 하나를 제공해야 합니다. 이 매개변수는 선택 사항입니다.--action-path: 작업(action)의 (상대) 경로입니다. repo 모드에서는 --action-path를 제공할 수 없습니다. 이 매개변수는 선택 사항입니다.--workflow-path: 워크플로우의 (상대) 경로입니다. action 모드에서는 --workflow-path를 제공할 수 없습니다. 이 매개변수는 선택 사항입니다.이 스크립트를 사용하여 GitHub 저장소와 상호작용하려면 다음과 같은 명령어를 실행할 수 있습니다.
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
이 명령은 지정된 저장소의 master 브랜치에서 repo 모드로 스크립트를 실행합니다.
Argus는 Docker 컨테이너 내에서 실행할 수 있습니다. 방법은 다음과 같습니다:
results 폴더에서 확인할 수 있습니다.SARIF 결과는 온라인 뷰어 또는 Visual Studio Code (VSCode) 확장 프로그램을 통해 볼 수 있습니다.
온라인 뷰어: SARIF Web Viewer는 SARIF 파일을 시각화할 수 있는 온라인 도구입니다. SARIF 파일(argus_report.sarif)을 웹사이트에 직접 업로드하여 결과를 확인할 수 있습니다.
VSCode 확장 프로그램: VSCode를 선호하는 경우 SARIF Viewer 확장 프로그램을 설치할 수 있습니다. 확장 프로그램을 설치한 후 VSCode에서 SARIF 파일(argus_report.sarif)을 열면 SARIF Explorer 창에 결과가 표시됩니다. 이 창은 결과를 상세하고 탐색하기 쉬운 보기로 제공합니다.
SARIF 파일은 코드베이스의 민감한 정보를 포함할 수 있으므로 주의해서 다루십시오.
실행을 위해 GitHub 인증이 필요한 문제가 있는 경우 GITHUB_CREDS 환경 변수에 username:TOKEN을 제공할 수 있습니다. 이는 GitHub에 대한 모든 요청에 사용됩니다. 이 정보를 저장하지 않으며 GitHub 계정에 어떤 것도 생성하지 않습니다. 저장소를 클론하는 데만 사용됩니다.
Argus는 오픈 소스 프로젝트이며 커뮤니티의 기여를 환영합니다. 버그 신고, 기능 제안, 코드 작성 등 여러분의 기여는 항상 감사합니다!
연구에서 Argus를 사용하신다면 다음 논문을 인용해 주세요:
@inproceedings{muralee2023Argus,
title={ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions},
author={S. Muralee, I. Koishybayev, A. Nahapetyan, G. Tystahl, B. Reaves, A. Bianchi, W. Enck,
A. Kapravelos, A. Machiry},
booktitle={32st USENIX Security Symposium (USENIX Security 23)},
year={2023},
}
Argus는 GPL 라이선스에 따라 제공됩니다.