
GitHub Actions를 통해 일련의 Docker 이미지를 자동으로 생성하고 최신 상태로 유지하는 저장소입니다.
RAUDI (정기적으로 자동 업데이트되는 Docker 이미지)는 개발자가 제공하지 않는 도구들을 위해 _GitHub Actions_를 통해 일련의 _Docker 이미지_를 자동으로 생성하고 최신 상태로 유지합니다.
RAUDI는 많은 Docker 이미지를 수동으로 생성하고 관리해야 하는 번거로움에서 벗어나게 해줍니다. 소프트웨어가 업데이트될 때마다 최신 기능을 사용하려면 Docker 이미지를 업데이트해야 하며, 의존성이 더 이상 작동하지 않을 수도 있습니다.
이 작업은 지저분하고 시간이 많이 걸립니다.
더 이상 걱정하지 마세요. 저희가 해결해 드립니다.
이 저장소를 포크하여 GitHub Workflow를 직접 사용하거나 로컬에서 사용할 수 있습니다(원하는 방식으로 실행 관리 가능).
이 저장소를 포크하려면 개인 Docker Hub 계정에 이미지를 푸시할 수 있도록 몇 가지 시크릿을 설정해야 합니다. 다음 두 가지 GitHub 시크릿을 반드시 설정해야 합니다:
시크릿을 설정한 후에는 tools/main.py 파일에 설정된 organization 변수를 편집해야 합니다. 해당 변수는 SecSI의 Docker Hub에 푸시하도록 구성되어 있기 때문입니다.
이것으로 끝입니다. Action으로 이동하여 포크된 저장소에서 활성화하고 자정까지 기다리면 Workflow가 모든 작업을 처리합니다!
이 저장소는 로컬에서도 실행할 수 있습니다. 충족해야 할 요구 사항은 다음과 같습니다:
BuildX 사용에 대한 문서는 다음을 참조하세요: https://docs.docker.com/buildx/working-with-buildx/
설정 단계는 매우 간단합니다. 다음 명령어만 실행하면 됩니다:
git clone https://github.com/cybersecsi/RAUDI
cd RAUDI
pip install -r requirements.txt
준비 완료!
테스트를 실행하려면 pip install pytest 명령어로 pytest를 설치해야 합니다 (requirements.txt에 없음, 테스트 용도로만 필요). 그런 다음 다음을 실행하면 됩니다:
pytest -s
또는
python -m pytest -s
RAUDI는 tools 디렉토리에 있는 모든 도구를 빌드하고 푸시할 수 있습니다. 실행할 때 다양한 옵션을 사용할 수 있습니다. 로컬에서 사용하기 전에 .env 파일을 생성하고(.env.sample 파일을 복사하면 됩니다) _GitHub Personal Access Token_을 추가하여 속도 제한을 피하는 것이 좋습니다. 인증되지 않은 사용자는 시간당 최대 60회 요청이 가능하지만, 인증된 사용자는 시간당 최대 15,000회 요청이 가능합니다. 따라서 추가하는 것을 권장합니다! 어떤 범위도 없는 개인 액세스 토큰을 생성해도 됩니다. 우리가 하는 것은 각 GitHub 저장소의 일부 정보를 읽는 것뿐이기 때문입니다.
이 모드에서는 필요할 경우 RAUDI가 모든 도구를 빌드하려고 시도합니다. 실행 명령어는 간단합니다:
python3 ./raudi.py --all
이 모드에서는 RAUDI가 지정된 도구만 빌드하려고 시도합니다. 명령어는 다음과 같습니다:
python3 ./raudi.py --single <tool_name>
_tool_name_은 tools 폴더 안에 있는 디렉토리 이름과 동일해야 합니다.
도구의 설정 구조에 tests 매개변수가 추가되었으므로, 입력된 명령어가 0 상태 코드를 반환하는지 테스트하는 데 유용합니다. 특정 도구를 테스트하는 명령어는 다음과 같습니다:
python3 ./raudi.py --test <tool_name>
_tool_name_은 tools 폴더 안에 있는 디렉토리 이름과 동일해야 합니다.
사용 가능한 도구를 확인하려면 다음 명령어를 실행합니다:
python3 ./raudi.py --list
사용 가능한 템플릿 중 하나를 기반으로 새 도구 폴더를 빠르게 추가하려면 다음 명령어를 실행합니다:
python3 ./raudi.py --bootstrap <new_tool_name>
| 옵션 | 설명 | 기본값 |
|---|---|---|
| --push | Docker Hub에 자동으로 푸시할지 여부 | False |
| --remote | 빌드 전에 로컬 Docker 대신 Docker Hub에서 확인할지 여부 | False |
| --force | 동일한 태그 이름의 이미지가 발견되어도 빌드할지 여부 | False |
현재 추가된 도구 목록입니다. 이들은 모두 개발자가 공식 Docker 이미지를 제공하지 않는 도구들입니다:
tools 디렉토리에 있는 각 도구는 최소한 두 개의 파일을 포함합니다:
새 도구를 추가하려면 tools 디렉토리 안에 해당 도구의 폴더를 만들면 됩니다. 이 폴더에는 빌드를 사용자 지정하고 자동화하기 위해 build args가 정의된 _Dockerfile_을 넣어야 합니다. Dockerfile을 만든 후에는 동일한 디렉토리에 _config.py_를 생성하고 get_config(organization, common_args) 함수를 정의해야 합니다. 주의: 함수 이름은 반드시 이렇게 지정해야 하며, 이 두 매개변수를 가져야 합니다(사용하지 않더라도). 반환 값은 해당 도구의 config이며, 다음 구조를 가집니다:
config = {
'name': organization+'/<name_of_the_image>',
'version': '', # 헬퍼 함수여야 함
'buildargs': {
},
'tests': []
}
네 개의 키는 다음과 같습니다:
이렇게 하면 준비 완료입니다! 도구의 이름이 Dockerfile을 넣은 디렉토리와 반드시 동일해야 한다는 점에 유의하세요.
버전에 대한 명명 규칙이 있습니다: 점과 숫자만 사용하세요. 따라서 특정 config.py에서 버전의 앞에 붙은 'v'는 제거하십시오 (작동 예제는 tools/dirsearch/config.py 참조).
도구와 기본 이미지에 대한 최신 버전 및 정보를 얻기 위해 일련의 헬퍼가 구현되었습니다. 새 도구를 추가하려면 이 헬퍼들을 사용하여 RAUDI에 의해 자동으로 업데이트되는 Docker 이미지를 만들 수 있습니다.
get_latest_pip_version이 헬퍼는 pip 패키지의 최신 버전을 검색하는 데 사용됩니다. 패키지 이름만 입력하면 버전 번호를 반환합니다. 예:
VERSION = helper.get_latest_pip_version(package_name)
get_latest_npm_registry_version이 헬퍼는 npm 패키지의 최신 버전을 검색하는 데 사용됩니다. 패키지 이름만 입력하면 버전 번호를 반환합니다. 예:
VERSION = helper.get_latest_npm_registry_version(package_name)
get_latest_github_release이 헬퍼는 Releases를 사용하고 여러 종류의 에셋(예: 다른 OS용 실행 파일)을 제공하는 GitHub 저장소에 대한 정보를 검색하는 데 사용됩니다. 이 헬퍼는 저장소(user/repo 형식)와 올바른 에셋을 식별하기 위한 대상 문자열을 입력으로 받습니다. 두 개의 키(url과 version)를 포함하는 딕셔너리를 반환합니다. 예:
VERSION = helper.get_latest_github_release("user/repo", "linux_amd64")
get_latest_github_release_no_browser_download이 헬퍼는 Releases를 사용하지만 소스 코드만 제공하는(즉, zipball과 tarball이 있는) GitHub 저장소에 대한 정보를 검색하는 데 사용됩니다. 이 헬퍼는 저장소(user/repo 형식)를 입력으로 받고 두 개의 키(url과 version)를 포함하는 딕셔너리를 반환합니다. 예:
VERSION = helper.get_latest_github_release_no_browser_download("user/repo")
get_latest_github_tag_no_browser_download이 헬퍼는 Tags를 사용하고 소스 코드만 제공하는(즉, zipball과 tarball이 있는) GitHub 저장소에 대한 정보를 검색하는 데 사용됩니다. 이 헬퍼는 저장소(user/repo 형식)를 입력으로 받고 두 개의 키(url과 version)를 포함하는 딕셔너리를 반환합니다. 예:
VERSION = helper.get_latest_github_tag_no_browser_download("user/repo")
get_latest_github_commit이 헬퍼는 Tags나 Releases를 사용하지 않는 GitHub 저장소에 대한 정보를 검색하는 데 사용됩니다. 이 경우 최신 커밋을 검색하는 것이 목표입니다. 이 헬퍼는 저장소(user/repo 형식)를 입력으로 받고 마지막 커밋의 날짜를 YYYYMMDD 형식의 문자열로 반환합니다.
VERSION = helper.get_latest_github_commit("user/repo")
이 섹션에서는 현재 추가된 네트워크 보안 도구에 대한 예제를 제공합니다. 보시다시피 이미지는 도구 자체만 제공하므로 워드리스트를 사용해야 하는 경우 마운트해야 합니다.
docker run -it --rm secsi/<tool> <command>
docker run -it --rm -v <wordlist_src_dir>:<wordlist_container_dir> secsi/dirb <url> <wordlist_container_dir>/<wordlist_file>
저희는 이탈리아인이므로 아마 여러분과는 다른 방식으로 발음할 것입니다. 올바른 발음(음성 표기 사용)은 다음과 같습니다:
/ˈraʊdi/
또는 유명한 TV 쇼 _스크럽스_에 나오는 박제된 개를 생각해 보세요: Rowdy
모든 분들의 기여를 환영합니다! 저희는 RAUDI에 기여하는 방법을 설명하는 매우 상세한 문서를 작성했습니다.
RAUDI는 @SecSI에서 자랑스럽게 개발했습니다:
다른 기여자:
RAUDI는 오픈소스 무료 소프트웨어로, GNU GPL v3 라이선스 하에 배포됩니다.
| 이름 | Docker 이미지 | 출처 |
|---|