
YAML 기반 CLI 스캐너로, 웹 엔드포인트에서 노출된 서비스, 파일, 폴더를 탐지합니다. 개발자가 사용자 정의 가능한 시그니처로 CI/CD 파이프라인에 보안 검사를 통합할 수 있도록 설계되었습니다.

ChopChop은 웹 애플리케이션에 대한 동적 애플리케이션 보안 테스트(Dynamic Application Security Testing)를 위한 명령줄 도구로, 처음에는 Michelin CERT가 작성했습니다.
목표는 여러 엔드포인트를 스캔하여 웹루트를 통해 노출된 서비스/파일/폴더를 식별하는 것입니다.
검사/시그니처는 설정 파일(기본값: chopchop.yml)에 선언되며, 완전히 구성 가능하고 특히 개발자에 의해 설정됩니다.

"Chop chop"은 광둥어에서 유래한 표현입니다. "Chop chop"은 "서둘러"라는 뜻이며, 어떤 일을 지금 바로 지체 없이 해야 함을 암시합니다.
우리는 빌드 과정을 최대한 간단하게 만들려고 노력했으며, 바라건대 다음과 같이 간단해야 합니다:
$ go mod download
$ go build .
결과적으로 gochopchop 바이너리가 폴더에 생성되어야 합니다.
Github Container Registry 덕분에 새롭게 빌드된 Docker 이미지를 제공할 수 있습니다!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
하지만 원하신다면 로컬에서도 빌드할 수 있습니다. 아래를 참조하세요:
docker build -t gochopchop .
우리는 goChopChop을 가능한 한 쉽게 만들기 위해 지속적으로 노력하고 있습니다. 이 유틸리티로 호스트를 스캔하는 것은 다음과 같이 간단합니다:
$ ./gochopchop scan https://foobar.com
docker run gochopchop scan https://foobar.com
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
Golang 재작성은 몇 달 전에 이루어졌지만 아직 할 일이 많습니다. 다음은 통합을 계획 중인 몇 가지 기능입니다:
[x] 성능 향상을 위한 스레딩 [x] 동시 스레드 수를 지정하는 기능 [x] 색상 및 더 나은 포맷팅 [x] 검사/시그니처 필터링 기능 [x] Mock 및 단위 테스트 [x] Github CI 그 외에도 더 많은 기능이 있습니다!
chopchop을 빠르게 end-to-end 테스트하기 위해 tests/server.go에 웹 서버를 제공했습니다.
사용해 보려면 go run tests/server.go를 실행한 후, 다음 명령어로 chopchop을 실행하세요: ./gochopchop scan http://localhost:8000 --verbosity Debug.
ChopChop은 "보안 취약점을 찾지 못했습니다"라고 출력해야 합니다.
또한 go test -v ./...로 실행할 수 있는 단위 테스트도 있습니다.
이 테스트들은 github CI 워크플로우에 통합되어 있습니다.
scan 명령어에 사용할 수 있는 플래그는 다음과 같습니다:
관심 가질 만한 고급 사용법 목록입니다.
참고: 후처리를 위해 >와 같은 리디렉터를 사용할 수 있습니다.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins 또는 plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 (4개 워커)$ ./gochopchop plugins --threads 4
--max-severity Medium$ ./gochopchop scan https://foobar.com --max-severity Medium
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
$ ./gochopchop plugins
$ ./gochopchop plugins --severity High
$ ./gochopchop scan --url-file url_file.txt
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
새 검사를 작성하는 것은 다음과 같이 간단합니다:
- endpoint: "/.git/config"
checks:
- name: Git exposed
match:
- "[branch"
remediation: Do not deploy .git folder on production servers
description: Verifies that the GIT repository is accessible from the site
severity: "High"
엔드포인트(예: /.git/config)는 여러 검사에 매핑되므로, X개의 검사에 대해 X개의 요청을 보내지 않아도 됩니다. 단일 HTTP 요청으로 여러 검사를 수행할 수 있습니다.
각 검사는 다음 필드가 필요합니다:
자세한 내용은 third-party.txt 파일을 참조하세요.
ChopChop은 Apache License 2.0으로 출시되었습니다.
자세한 내용은 LICENSE 파일을 참조하세요.
| 플래그 | 전체 플래그 | 설명 |
|---|
-h | --help | 도움말 마법사 |
-v | --verbosity | 로깅 상세 수준 |
-c | --signature | 사용자 정의 시그니처 파일 경로 |
-k | --insecure | SSL 검증 비활성화 |
-u | --url-file | 테스트할 URL이 포함된 파일 경로 |
-b | --max-severity | 지정된 심각도 이상이면 CI 파이프라인 차단 |
-e | --export | 출력 내보내기 유형 (csv 및/또는 json) |
--export-filename | 내보내기 파일의 파일명 지정 | |
-t | --timeout | HTTP 요청 타임아웃 |
--severity-filter | 심각도별 플러그인 필터링 | |
--plugin-filter | 플러그인 이름별 플러그인 필터링 | |
--threads | 동시 스레드 수 |
| 속성 | 타입 | 설명 | 선택 여부 | 예시 |
|---|
| name | 문자열 | 검사 이름 | 아니오 | Git exposed |
| description | 문자열 | 검사에 대한 간단한 설명 | 아니오 | Ensure .git repository is not accessible from the webroot |
| remediation | 문자열 | 이 특정 "문제"에 대한 해결 방법 제공 | 아니오 | Do not deploy .git folder on production servers |
| severity | 열거형("High", "Medium", "Low", "Informational") | 환경에서 트리거될 경우 심각도 평가 | 아니오 | High |
| status_code | 정수 | 반환되어야 하는 HTTP 상태 코드 | 예 | 200 |
| headers | 문자열 목록 | HTTP 응답에 있어야 하는 헤더 목록 | 예 | N/A |
| no_headers | 문자열 목록 | HTTP 응답에 없어야 하는 헤더 목록 | 예 | N/A |
| match | 문자열 목록 | HTTP 응답에 있어야 하는 문자열 목록 | 예 | "[branch" |
| no_match | 문자열 목록 | HTTP 응답에 없어야 하는 문자열 목록 | 예 | N/A |
| query_string | 엔드포인트에 전달할 GET 매개변수 | 문자열 | 예 | query_string: "id=FOO-chopchoptest" |
| 라이브러리 이름 | 링크 | 라이선스 |
|---|
| Viper | https://github.com/spf13/viper | MIT License |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT License |
| Cobra | https://github.com/spf13/cobra | Apache License 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache License 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT License |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Simplified License) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT License |