Arkose Protect
DISCLAIMER: Arkose Protect는 GitLab.com에서 사용되며 Self-Managed GitLab 인스턴스에서는 지원되지 않습니다. 아래는 GitLab.com에서 Arkose Protect를 유지하는 내부 요구 사항을 문서화한 것입니다. 이 기능은 이론상으로는 Self-Managed 인스턴스에서 사용할 수 있지만 현재 추천하지는 않습니다.
GitLab은 Arkose Protect를 통해 악의적인 사용자가 계정을 생성하는 것을 막습니다.
작동 방식
Arkose Protect는 사용자가 의심스러운 경우, 로그인
버튼 아래에 대화형 도전을 제시합니다. 도전은 로그인 시 진행되어야 하며, 사용자가 신뢰받는 경우에는 도전이 투명한 모드로 실행되어 별도의 조치 없이 보통대로 로그인할 수 있습니다.
악의적인 가입 시도 처리 방법
받은 위험 점수에 따라 사용자는 신원 확인을 최대 세 단계까지 수행해야 할 수 있습니다.
구성
Arkose Protect를 활성화하려면:
- ArkoseLabs를 라이선스 구매합니다.
- ArkoseLabs 포털에서 공개 및 비공개 API 키를 가져옵니다.
-
ArkoseLabs 로그인 도전을 활성화합니다. 다음 명령을 Rails 콘솔에서 실행하고
<your_public_api_key>
및<your_private_api_key>
를 고유한 API 키로 대체합니다.Feature.enable(:arkose_labs_signup_challenge) ApplicationSetting.current.update(arkose_labs_public_api_key: '<your_public_api_key>') ApplicationSetting.current.update(arkose_labs_private_api_key: '<your_private_api_key>')
ArkoseLabs 문제 분석 및 디버깅
ArkoseLabs에서 발생한 문제를 분석하고 디버깅할 수 있습니다.
- GitLab 프로덕션 로그 사용
- Arkose 로깅 서비스 사용
사용자 세션의 ArkoseLabs Verify API 응답 확인
사용자의 ArkoseLabs Verify API 응답을 확인하려면 다음 KQL을 사용하여 GitLab 프로덕션 로그를 쿼리합니다.
KQL: json.message:"Arkose verify response" AND json.username:replace_username_here
쿼리가 유효하면 결과에는 사용자 세션에 대한 디버그 정보가 포함됩니다:
응답 | 설명 |
---|---|
json.response.session_details.suppressed
| 사용자에게 도전이 표시되지 않은 경우 값은 true 입니다. 사용자가 허용 목록에 있는 경우 항상 true 입니다.
|
json.arkose.risk_band
|
낮음 , 중간 , 또는 높음 일 수 있습니다. 로그인에서는 무시됩니다. 신원 확인 문제를 디버깅하는 데 사용합니다.
|
json.response.session_details.solved
| 사용자가 도전을 해결했는지 여부를 나타냅니다. 사용자가 허용 목록에 있는 경우 항상 true 입니다.
|
json.response.session_details.previously_verified
| 토큰이 재사용된 경우를 나타냅니다. 기본값은 false 입니다. true 인 경우 악의적인 활동일 수 있습니다.
|
사용자가 ArkoseLabs 도전에 실패했는지 확인
사용자가 ArkoseLabs 도전을 해결하지 못해 로그인에 실패했는지 확인하려면 다음 KQL을 사용하여 GitLab 프로덕션 로그를 쿼리합니다.
KQL: json.message:"Challenge was not solved" AND json.username:replace_username_here`
허용 목록
스테이징 및 프로덕션에서 엔드 투 엔드 QA 테스트 스위트가 통과하도록 보장하기 위해 GITLAB_QA_USER_AGENT를 허용 목록에 추가했습니다. 각 QA 사용자는 ALLOWLIST
위험 범주를 받습니다.
Arkose::VerifyResponse
클래스에서 허용 목록의 사용 방법을 찾을 수 있습니다. (https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/arkose/verify_response.rb#L38)
피드백 작업
Arkose의 보호 서비스를 개선하기 위해, 우리는 우리에 의해 차단된 사용자 목록을 Arkose에게 보내는 매일 백그라운드 작업을 생성했습니다.
이 작업은 Arkose::BlockedUsersReportWorker
클래스에 의해 수행됩니다.
통합 테스트
- GitLab 16.8에서 도입된 데이터 교환(Data Exchange)을 사용하여 특정 동작을 요청합니다. 이를 위해
arkose_labs_signup_data_exchange
라는 플래그가 있으며, 기본적으로 비활성화되어 있습니다.
스테이징 및 개발 환경에서만 도전을 억제하거나 강제로 표시할 수 있습니다. 특정 위험 등급을 받고 싶다면 이 기능을 사용할 수 있습니다.
도전을 강제로 표시하려면 브라우저 사용자 에이전트 문자열을 변경하십시오. 적절한 문자열은 1Password에서 찾을 수 있습니다.
또는, 특정 동작을 요청하려면 arkose_labs_signup_data_exchange
기능 플래그를 활성화하고 데이터 교환 페이로드를 포함하여 다음 값 중 하나를 가진 interactive
필드를 수정하십시오:
-
'true'
- 도전을 강제로 표시합니다. -
'false'
- 도전을 억제합니다. 도전을 억제하면 ArkoseLabs는 세션이 안전하다고 간주합니다.
예를 들어, 다음 diff는 도전을 억제하도록 페이로드를 업데이트합니다:
diff --git a/ee/lib/arkose/data_exchange_payload.rb b/ee/lib/arkose/data_exchange_payload.rb
index 191ae0b5cf82..b2d888b98c95 100644
--- a/ee/lib/arkose/data_exchange_payload.rb
+++ b/ee/lib/arkose/data_exchange_payload.rb
@@ -35,6 +35,7 @@ def json_data
now = Time.current.to_i
data = {
+ interactive: 'false',
timestamp: now.to_s, # required to be a string
"HEADER_user-agent" => request.user_agent,
"HEADER_origin" => request.origin,
추가 리소스
안티-남용 팀이 ArkoseLabs Protect 기능을 소유하고 있습니다. Slack의 ArkoseLabs/GitLab 협업 채널인 #ext-gitlab-arkose에 참여할 수 있습니다.
ArkoseLabs는 다음 리소스를 유지하고 있습니다: