
웹 애플리케이션 권한 부여 범위 스캐닝
웹 애플리케이션 권한 부여 범위 스캐닝.

AuthCov는 미리 정의된 사용자로 로그인한 상태에서 Chrome 헤드리스 브라우저를 사용하여 웹 애플리케이션을 크롤링합니다. 크롤링 단계에서 로드된 페이지뿐만 아니라 API 요청을 가로채서 기록합니다. 다음 단계에서는 다른 사용자 계정(침입자)으로 로그인하여 이전에 발견된 각 API 요청이나 페이지에 접근을 시도합니다. 정의된 각 침입자 사용자에 대해 이 단계를 반복합니다. 마지막으로 발견된 리소스와 침입자 사용자가 해당 리소스에 접근할 수 있는지 여부를 나열하는 상세 보고서를 생성합니다.
로컬 Wordpress 인스턴스를 스캔하여 생성된 예제 보고서:

최신 Node 버전을 설치하세요. 그런 다음 실행:
$ npm install -g authcov
.mjs로 끝나야 합니다]:$ authcov new myconfig.mjs
$ authcov test-login myconfig.mjs --headless=false
$ authcov crawl myconfig.mjs
$ authcov intrude myconfig.mjs
./tmp/report/index.html에서 확인하세요.설정 파일에서 다음 옵션을 설정할 수 있습니다:
로그인 구성
설정 파일에서 로그인을 구성하는 두 가지 방법이 있습니다:
loginConfig 옵션을 다음과 같이 설정하여 구성할 수 있습니다. 이 예제도 참조하세요."loginConfig": {
"url": "http://localhost/login",
"usernameXpath": "input[name=email]",
"passwordXpath": "input[name=password]",
"submitXpath": "#login-button"
}
"loginFunction": async function(page, username, password){
await page.goto('http://localhost:3001/users/sign_in');
await page.waitForSelector('input[type=email]');
await page.waitForSelector('input[type=password]');
await page.type('input[type=email]', username);
await page.type('input[type=password]', password);
await page.tap('input[type=submit]');
await page.waitFor(500);
return;
}
브라우저가 성공적으로 로그인하는지 확인하려면 헤드풀 모드에서 authcov test-login 명령을 실행하는 것을 잊지 마세요.
저장소를 클론하고 npm install을 실행하세요. Node 버전 17.1.0을 사용하는 것이 좋습니다.
단위 테스트
단위 테스트:
$ npm test test/unit
종단간 테스트:
먼저 예제 앱을 다운로드하여 실행하세요. 그런 다음 테스트를 실행합니다:
$ npm test test/e2e
| 옵션 | 유형 | 설명 |
|---|
| baseUrl | string | 사이트의 기본 URL입니다. 크롤러가 여기서부터 시작합니다. |
| crawlUser | object | 사이트를 크롤링할 사용자입니다. 예: {"username": "admin", "password": "1234"} |
| intruders | array | 크롤링 단계에서 발견된 API 엔드포인트와 페이지에 침입할 사용자들입니다. 일반적으로 crawlUser와 동일하거나 낮은 권한을 가진 사용자입니다. 로그인하지 않은 사용자로 침입하려면 사용자 이름이 "Public"이고 암호가 null인 사용자를 추가하세요. 예: [{"username": "john", "password": "4321"}, {"username": "Public", "password": null}] |
| type | string | 단일 페이지 애플리케이션(즉, API 백엔드를 쿼리하는 자바스크립트 프론트엔드)인지 아니면 보다 '전통적인' 다중 페이지 애플리케이션인지 여부입니다. ("mpa" 또는 "spa" 선택). |
| authenticationType | string | 사이트가 브라우저에서 보낸 쿠키를 사용하여 사용자를 인증합니까, 아니면 요청 헤더에 전송된 토큰을 사용합니까? MPA의 경우 거의 항상 "cookie"로 설정됩니다. SPA의 경우 "cookie" 또는 "token" 중 하나일 수 있습니다. |
| authorisationHeaders | array | 사용자를 인증하기 위해 전송해야 하는 요청 헤더는 무엇입니까? authenticationType=cookie인 경우 ["cookie"]로 설정해야 합니다. authenticationType=token인 경우 ["X-Auth-Token"]과 같은 형태입니다. |
| maxDepth | integer | 사이트를 크롤링할 최대 깊이입니다. 1부터 시작하여 더 높은 깊이로 크롤링을 시도하여 크롤러가 충분히 빠르게 완료할 수 있는지 확인하는 것이 좋습니다. |
| verboseOutput | boolean | 상세 수준으로 로깅하며 디버깅에 유용합니다. |
| saveResponses | boolean | API 엔드포인트의 응답 본문을 저장하여 보고서에서 볼 수 있습니다. |
| saveScreenshots | boolean | 크롤링된 페이지의 브라우저 스크린샷을 저장하여 보고서에서 볼 수 있습니다. |
| clickButtons | boolean | (실험적 기능) 크롤링된 각 페이지에서 해당 페이지의 모든 버튼을 클릭하고 발생한 API 요청을 기록합니다. 모달, 팝업 등을 통해 많은 사용자 상호작용이 있는 사이트에서 유용할 수 있습니다. |
| xhrTimeout | integer | 각 페이지를 크롤링하는 동안 XHR 요청이 완료될 때까지 대기할 시간(초)입니다. |
| pageTimeout | integer | 크롤링하는 동안 페이지 로드를 기다릴 시간(초)입니다. |
| headless | boolean | 크롤러가 Chrome 브라우저를 열어 크롤링이 실시간으로 진행되는 것을 볼 수 있도록 false로 설정하세요. |
| unAuthorizedStatusCodes | array | 요청하는 사용자에 대해 API 엔드포인트 또는 페이지가 권한이 있는지 여부를 결정하는 HTTP 응답 상태 코드입니다. 선택적으로 responseIsAuthorised 함수를 정의하여 요청이 승인되었는지 확인할 수 있습니다. 예: [401, 403, 404] |
| ignoreLinksIncluding | array | 이 배열의 문자열을 포함하는 URL은 크롤링하지 마십시오. 예를 들어 ["/logout"]으로 설정하면 http://localhost:3000/logout URL이 크롤링되지 않습니다. 선택적으로 아래에 ignoreLink(url) 함수를 정의하여 URL을 크롤링할지 여부를 결정할 수 있습니다. |
| ignoreAPIrequestsIncluding | array | 이 배열의 문자열을 포함하는 URL에 대한 API 요청을 기록하지 마십시오. 선택적으로 ignoreApiRequest(url) 함수를 정의하여 요청을 기록할지 여부를 결정할 수 있습니다. |
| ignoreButtonsIncluding | array | clickButtons가 true로 설정된 경우, 외부 HTML에 이 배열의 문자열을 포함하는 버튼은 클릭하지 마십시오. 선택적으로 아래에 ignoreButton(url) 함수를 정의하십시오. |
| loginConfig | object | 브라우저가 웹 앱에 로그인하는 방법을 구성합니다. 선택적으로 비동기 함수 loginFunction(page, username, password)을 정의하십시오. (자세한 내용은 아래 참조). |
| cookiesTriggeringPage | string | (선택 사항) authenticationType=cookie인 경우, 침입자가 이 페이지를 탐색한 다음 브라우저에서 쿠키를 캡처하도록 페이지를 설정합니다. 사이트가 쿠키의 경로 필드를 설정하는 경우 유용할 수 있습니다. 기본값은 options.baseUrl입니다. |
| tokenTriggeringPage | string | (선택 사항) authenticationType=token인 경우, 침입자가 이 페이지를 탐색한 다음 가로챈 API 요청에서 authorisationHeaders를 캡처하도록 페이지를 설정합니다. 사이트의 baseUrl이 API 요청을 수행하지 않아 해당 페이지에서 인증 헤더를 캡처할 수 없는 경우 유용할 수 있습니다. 기본값은 options.baseUrl입니다. |