
OpenAPI 기반 API를 위한 자동화된 인증 보안 스캐너. 다중 자격 증명 세트를 사용하여 GET 엔드포인트를 테스트하고 차등 응답 분석을 통해 권한 상승 및 손상된 접근 제어 버그를 탐지합니다.
최신 웹 애플리케이션의 인가 보안 문제는 보안 스캐너로 쉽게 탐지되지 않습니다. Shopify, LINE, NordVPN의 몇 가지 예시가 있습니다. 그 이유 중 하나는 보안 스캐너가 주로 SQLi, XSS, RCE를 찾고 인가 보안 버그는 찾지 않으며, 일반적으로 웹 애플리케이션이 어떻게 동작해야 하는지에 대한 지식이 부족하기 때문입니다. 그래서 대부분의 인가 버그는 현재 주로 수동으로 발견됩니다. OpenAPI Security Scanner는 자동화와 수동 검토 모두를 통해 인가 보안 문제를 발견하는 데 도움을 주기 위해 만들어졌습니다. 이는 외부 단위 테스트 도구처럼 작동하여 모든 것이 의도한 대로 동작하는지 확인합니다.
이 비디오를 시청하거나 계속 읽어보세요.
이 프로젝트를 포크하거나 클론하고 아래 지침을 따라 시작하세요.
이 스캐너를 사용하는 워크플로는 다음과 같습니다:
개발자의 경우, 이 도구를 사용하면 API가 내부 및 외부에서 예상대로 동작한다는 추가적인 확신을 얻을 수 있습니다. 또한 코드 배포 시마다 파이프라인을 트리거하여 스캐너를 실행할 수 있습니다.
버그 바운티 헌터의 경우, 이 도구를 사용하면 대상 API에 대한 최신 상태를 항상 유지할 수 있습니다. 특정 엔드포인트가 이전에는 취약하지 않았더라도 다양한 이유로 나중에 취약해질 수 있기 때문입니다. 따라서 이 도구를 사용하여 수동 버그 헌팅 부분을 자동화하는 것이 더 쉽습니다.
대상 API를 스캔할 권한이 있는지 확인하세요.
웹 애플리케이션의 OpenAPI yaml 파일이 필요하며, 이를 리포지토리의 api.yaml 내용과 교체하세요.
api.yaml의 내용을 대상의 OpenAPI yaml 파일로 교체하고, GitLab 프로젝트의 Settings -> CI/CD -> Variables 확장으로 이동하여 아래 형식으로 변수를 입력하세요.
여기에 제공된 자격 증명은 Authorization: Bearer 헤더 형식으로 API 호출에 전달됩니다. 적어도 두 개의 다른 권한을 가진 사용자 계정의 액세스 토큰을 준비하는 것이 좋으며, 각 사용자 계정에 대해 하나 이상의 액세스 토큰을 생성하여 다양한 범위의 액세스 토큰에 대한 올바른 동작을 테스트할 수 있습니다.
{
"<user_a>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
},
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
],
"<user_b>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
]
}
여기에 제공된 엔드포인트는 GET 기반 API 호출이어야 하며, JSON 본문에 쿼리를 포함할 수도 있습니다. 아래 예시에서 엔드포인트는 /org/{orgs}/repos이고 쿼리는 type=all입니다. /repos/{owner}/{repo} 엔드포인트의 경우 쿼리가 없습니다.
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
경로 변수는 여기에 제공할 수 있으며, 스캐너는 경로 변수의 값에서 모든 조합을 생성합니다.
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
이 경우 다음과 같은 조합의 API 호출이 생성되며, 이들은 OPENAPI_CREDS에 제공된 다양한 자격 증명 세트에 의해 모두 호출됩니다.
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
https://gitlab.com/-/profile/personal_access_tokens로 이동하여 api 액세스 토큰을 생성하고 여기 값을 교체하세요. 이 GitLab 액세스 토큰은 GitLab 러너에서 스캔 결과를 다운로드하는 데 사용됩니다.
<YOU_GITLAB_API_ACCESS_TOKEN>
이 값은 API 서버의 기본 URL 값이어야 합니다.
https://example.com/api/v3
API 변경 감지 시 슬랙 알림 스크린샷
아티팩트 내 스캔 결과 스크린샷
샘플 보고서: https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET 기반 엔드포인트만 테스트할 수 있습니다./users/{user_id}/activities와 같은 일부 API 엔드포인트는 호출할 때마다 응답이 달라지므로 이러한 유형의 API 변경을 감지하는 것은 의미가 없습니다.기여는 오픈 소스 커뮤니티를 배우고, 영감을 얻고, 창조하는 놀라운 장소로 만드는 요소입니다. 여러분의 모든 기여는 매우 감사히 여겨집니다.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)MIT 라이선스에 따라 배포됩니다. 자세한 정보는 LICENSE를 참조하세요.
Ron Chan - @ngalongc
프로젝트 링크: https://gitlab.com/ngalog-gitlab/openapi_security_scanner