Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
raccoon — Salesforce 객체 접근 감사 도구 | Kitploit
도구/GitHubGitHub/nccgroup/raccoon
Cloud Infrastructure SecurityVulnerability AnalysisConfiguration AuditingCloud SecurityIdentity & Access Management (IAM)MisconfigurationDatabase Security
GitHubnccgroup/raccoon

raccoon

Salesforce 객체 접근 감사 도구

저장소 보기
118753년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Raccoon: Salesforce 객체 접근 감사 도구

NCC Group Plc가 오픈소스로 공개했습니다 - https://www.nccgroup.com/

Jerome Smith 개발 @exploresecurity (Viktor Gazdag @wucpi에게 감사드립니다)

https://www.github.com/nccgroup/raccoon

AGPL 라이선스로 배포됩니다 - 자세한 내용은 LICENSE를 참조하세요.

설명

이 도구는 유효 공유 및 객체 설정을 기반으로, 지정된 객체 집합의 모든 레코드에 대해 읽기/편집/삭제 권한의 일부 조합을 가진 프로필 및 권한 세트(활성 사용자가 있는)를 식별합니다. 이 출력을 통해 민감한 데이터를 보유한 객체에 과도한 접근을 허용할 수 있는 잘못된 구성을 조사할 수 있습니다. 배경 정보는 관련 블로그 게시물 https://research.nccgroup.com/2021/06/28/are-you-oversharing-in-salesforce 를 참조하세요.

결과는 Salesforce 구성을 직접 참조하거나 영향을 받는 프로필 및 권한 세트를 테스트하여 수동으로 검증하는 것이 좋습니다. 불일치 사항이 발견되면 가능한 한 자세히 이슈를 등록해 주시기 바랍니다.

사용법

요구 사항:

  • Python 3
  • Python requests 모듈 (requirements.txt에 포함됨)
  • 다음 최소 권한이 있는 계정:
    • 'API Enabled'
    • 'View Setup and Configuration'
    • 'Modify Metadata Through Metadata API Functions' ('Account permissions' 참고)
    • 감사할 모든 객체에 대한 읽기 권한 ('View All Data' 부여 가능)

인증을 위해 username + password + (선택) token 또는 sessionId 중 하나를 제공하세요 (자세한 내용은 인증 섹션 참조).

JSON 구성 파일을 만들고(또는 config.json을 템플릿으로 사용) 필요에 따라 작성합니다:

root@kitploit:~
{
	"hostname": "somewhere.my.salesforce.com",
	"username": "",
	"password": "",
	"token": "<optional token>",
	"sessionId": "",
	"objects": ["Account", "Contact"],
	"checkLimits": true,
	"debug": <optional debug level (0, 1 or 2)>
}

objects는 관심 있는 Salesforce 객체의 목록입니다(즉, 가장 중요하게 생각하는 데이터). 공식 API 이름을 사용하는 것이 가장 확실한 방법이지만, 일치하는 항목이 없으면 Raccoon은 예를 들어 표시 레이블을 기준으로 몇 가지 간단한 일치를 시도합니다. Raccoon이 여전히 일치 항목을 찾지 못하면 프로그램은 계속 진행하되 출력에 이를 표시합니다.

checkLimits를 사용하면 조사 중인 인스턴스에 대해 24시간 이동 기간 내 남은 API 호출 허용량을 확인할 수 있습니다. Raccoon은 객체당 비교적 적은 호출을 수행하지만(실행당 고정된 횟수에 추가로), 진행 전에 한도를 확인할 수 있는 편의 기능입니다. 기본값은 true입니다. 체크포인트에서 남은 가능한 총 요청 수는 정확하지 않습니다. 호출 수는 'Controlled by Parent' 공유 모델을 가진 객체 수에 따라 달라지기 때문입니다. 표시된 숫자는 모든 객체가 그런 경우를 가정하므로 최대치입니다.

실행:

root@kitploit:~
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>

인증

사용자 이름과 비밀번호를 사용하는 경우 정의된 네트워크 액세스 범위 밖의 IP 주소에서 접근한다면 보안 토큰도 필요할 수 있습니다. 자세한 내용은 이 문서를 참조하세요.

세션 ID를 사용하는 대안은 여러 경우에 유용합니다:

  • 싱글 사인온, 즉 Salesforce에 직접 로그인이 불가능한 경우
  • MFA가 적용된 경우
  • (필요할 때) API 토큰을 받기 어려운 경우
  • 자격 증명이 파일에 실수로 남는 것을 방지할 수 있는 경우

세션 ID를 얻으려면:

  • Salesforce에 로그인하고 필요하면 Classic 모드로 전환합니다
  • 브라우저의 Inspect 도구를 사용하여 쿠키를 표시합니다
  • 때로는 여러 개의 sid 쿠키가 있습니다: Domain 속성에 my.salesforce.com 또는 cloudforce.com이 포함된 쿠키를 가져와야 합니다.

출력

샘플(축약 및 익명화) 출력:

root@kitploit:~
Raccoon - Salesforce object access auditor
- version 1.0
- https://www.github.com/nccgroup/raccoon
* Refer to README for usage notes including important limitations *

Target instance: somewhere.my.salesforce.com
- Login successful

4,969,529 API requests can be sent to this instance from a 24-hour limit of 5,000,000
- Up to 33 further requests are required to complete (3 requests sent so far)
- Do you want to continue? Enter 'y' to proceed: y

Validating objects
- Found object 'Accounts' with API name 'Account'
- Found object 'Contact' with API name 'Contact'
- Found object 'Quotes' with API name 'Quote__c'
- Found object 'Quote Lines' with API name 'QuoteLine__c'

Evaluating 28 Profiles and 104 Permission Sets
- Profiles with active users: 15
- Permission Sets with active users: 67
- Ignoring 50 unused Profiles and Permission Sets

Global Sharing Overrides (ALL records for ALL objects)
------------------------------------------------------

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - System Administrator                              61/91                    [I]

  READ
  Profiles
  - Integration User                         [C]      1/1                      [I]
  - Analytics Cloud Integration User                  1/1                      [I]

Object Sharing (ALL records for EACH object)
--------------------------------------------

Account:
  Organization-wide default sharing
  - Internal: Public Read Only
  - External: <Undefined>

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Integration User                         [C]      1/1                      [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

  READ
  Profiles
  - Read Only                                [C]      192/199                  [I]
  - Sales User                               [C]      192/248                  [I]
  - Finance User                             [C]      16/20                    [I]
  - Standard User                                     6/3075                   [I]
  Permission Sets (* Groups)
  * Accounts PS Group                        [C]      36/39                    [I]
  - Sales Operations                         [C]      24/26                    [I]
  - SharePoint User                          [C]      3/4                      [I]

  Sharing Rules (manual check required):
  - Criteria-based rules configured
  - Ownership-based rules configured

Contact:
  Organization-wide default sharing
  - Internal: Controlled by Parent
  - External: <Undefined>
  Parent object: 'Account'
  - Internal: Public Read Only
  - External: <Undefined>

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Integration User                                  1/1                      [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

  READ
  Profiles
  - Read Only                                [C]      192/199                  [I]
  - Sales User                               [C]      192/248                  [I]
  - Finance User                             [C]      16/20                    [I]
  - Standard User                                     6/3075                   [I]
  Permission Sets (* Groups)
  - Sales Operations                         [C]      24/26                    [I]

Quote__c:
  Organization-wide default sharing
  - Internal: Public Read/Write
  - External: <Undefined>

  READ/EDIT                                  [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Sales User                               [C]      192/248                  [I]

  READ
  Profiles
  - Finance User                             [C]      16/20                    [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

QuoteLine__c:
  Organization-wide default sharing
  - Internal: Controlled by Parent
  - External: <Undefined>
  Parent object: 'Quote__c'
  - Internal: Public Read/Write
  - External: <Undefined>

  READ/EDIT/DELETE                           [C]ustom Active/Total [G]uest[E]xt[I]nt
  Profiles
  - Sales User                               [C]      192/248                  [I]

  READ
  Profiles
  - Finance User                             [C]      16/20                    [I]
  Permission Sets (* Groups)
  - Mulesoft Integration                     [C]      2/2                      [I]

Total API requests sent: 31

Raccoon은 출력의 장황함을 줄이기 위해 활성 사용자가 있는 프로필과 권한 세트만 검사합니다. 이에 대한 정보가 표시된 후 다음이 수행됩니다:

  • 'View All Data' 및 'Modify All Data' 권한이 있는 프로필과 권한 세트는 모든 객체에 대한 권한을 가지므로 Global Sharing Overrides가 먼저 표시됩니다.
  • 그런 다음 각 객체를 차례로 감사하며, 먼저 읽기+편집+삭제 권한을 고려하고, 그다음 읽기+편집, 마지막으로 읽기만 고려합니다. 프로필 또는 권한 세트는 출력에 한 번만 나열됩니다(가장 높은 유효 권한 집합을 포함하는 섹션에서). 이는 반복을 피하기 위한 것입니다. 예를 들어, 'Modify All Data' 권한이 있는 프로필은 지정된 모든 객체에 대해 읽기+편집+삭제 권한이 있음을 암시하므로 "Global Sharing Overrides" 아래에만 표시되고 각 객체 결과에는 나열되지 않습니다. 유일한 예외는 전역 'View All Data' 권한이 있는 프로필 또는 권한 세트가 객체 수준에서 추가 편집/삭제 권한을 활성화한 경우입니다.
  • 각 객체에 대해 공유 규칙의 존재는 강조 표시되지만 더 자세한 설명은 제공되지 않습니다.

권한 부여가 단일 권한 세트가 아닌 권한 세트 그룹을 통해 이루어진 경우, 이름 왼쪽의 들여쓰기 표시로 일반적인 하이픈 대신 별표가 표시됩니다(위 샘플 출력의 Accounts PS Group 참조). 또한 프로필 또는 권한 세트가 커스텀인지 여부도 표시됩니다(권한 세트의 경우 커스텀은 "관리자가 생성함"을 의미하고, 그렇지 않은 경우 "표준이며 특정 권한 세트 라이선스와 관련됨"을 의미합니다 [ref]).

전역 공유와 객체 공유 모두에서 프로필과 권한 세트는 관심도가 높을 것으로 예상되는 순서로 정렬됩니다. 첫 번째 정렬 기준은 할당된 사용자 유형입니다 - 'guest'(인증되지 않은 사용자)가 먼저, 그다음 'external'(다양한 유형의 포털 사용자), 마지막으로 'internal'(그 외 모든 사용자) 순입니다. 여기서 'external'은 '외부 공유 모델'의 맥락에서 사용되는 정의와 관련이 있다는 점을 유의하세요 [ref]. 이는 인증되지 않은 사용자 또는 포털 사용자에게 과도한 공유가 발생할 가능성을 강조하기 위한 것입니다. 그러나 Salesforce 문서가 'User' 객체의 유효한 'UserType' 값 목록을 완전히 제공하지 않기 때문에 다소 실험적입니다 [ref]. 그 결과 오분류가 발생할 수 있습니다 - 그러한 경우 이슈를 등록해 주세요. 두 번째 정렬 기준은 활성 사용자 수이며, 많은 순서대로 표시됩니다(할당된 총 사용자 수도 정보 제공용으로 표시됩니다).

참고 사항

Raccoon의 주요 목표는 모든 레코드에 대한 광범위한 접근 사례를 강조하는 것이며, 다음을 다룹니다:

  • 공유가 'Controlled by Parent'인 마스터-세부 관계(단, 마스터-세부 관계가 하나뿐이고 상위 객체가 하위 객체 바로 위에 있는 경우에만 해당, 즉 상위 객체의 공유 모델도 'Controlled by Parent'일 수 없음)
  • Contact/Order/Asset과 상위 Account 간의 특별한 'Controlled by Parent' 관계(일반 마스터-세부 관계와 약간 다르게 동작)
  • 다시 말하지만, 활성 사용자가 있는 프로필 및 권한 세트만 고려됩니다.

레코드의 일부에만 영향을 미치는 다음 요소는 평가 되지 않습니다:

  • 공유 규칙(객체에 대한 존재는 표시되지만)
  • 공유 세트
  • 공유 그룹
  • 역할 계층 구조 기반 공유
  • 개별 레코드에 사용자가 구성한 수동 공유
  • Account의 공유 모델이 Private인 경우 특정 하위 객체에 대한 '암시적'(또는 '기본 제공') 공유
  • Opportunity 레코드의 'private' 필드(및 관련 Quote에 미치는 결과적 영향)

'User' 및 'File'과 같은 일부 객체는 표준 공유 모델에 맞지 않거나 다른 시스템 권한이 적용됩니다. 알려진 인스턴스는 objects 목록에 지정된 경우 출력에 표시됩니다.

프로필과 권한 세트를 합쳐 2,000개가 넘는 인스턴스는 SOQL 문에서 'GROUP BY' 사용에 대한 플랫폼 제한으로 인해 지원되지 않습니다. 이는 넉넉한 허용치이며 극단적인 경우에만 문제가 될 것입니다.

계정 권한

이 도구는 읽기 작업만 수행합니다. 따라서 도구를 실행하는 데 사용되는 계정의 요구 사항으로 'Modify Metadata Through Metadata API Functions'가 있는 것을 보고 놀랄 수도 있습니다. 하지만 이 글을 작성하는 시점에는 Metadata API에 대한 읽기 전용 권한으로 계정을 구성하는 것이 불가능해 보입니다. 문서에서:

API Enabled 권한과 Modify Metadata Through Metadata API Functions 권한 또는 Modify All Data 권한이 있는 사용자를 식별하세요. 이러한 권한은 Metadata API 호출에 접근하는 데 필요합니다. 사용자가 데이터가 아닌 메타데이터에 대한 접근이 필요한 경우 Modify Metadata Through Metadata API Functions 권한을 활성화하세요. 그렇지 않으면 Modify All Data 권한을 활성화하세요.

따라서 'Modify All Data'보다 'Modify Metadata Through Metadata API Functions'를 사용하는 것이 좋습니다.

버그 신고

로그인 문제라면 먼저 호스트 이름, 사용자 이름, 비밀번호 및 보안 토큰(필요한 경우)을 다시 확인하세요. 또한 비밀번호 재설정이 필요한지도 고려하세요(일반적인 Salesforce 웹 로그인을 시도해 보세요). 이 상태는 잘못된 로그인과 구분할 수 없는 오류를 반환하기 때문입니다. 세션 ID를 사용하는 경우 올바른 도메인에 유효한지 확인하세요.

debug를 2로 설정하여 도구를 실행하세요. 자세한 출력이 원인을 파악하는 데 도움이 될 수 있습니다. 이 수준은 또한 출력에 이름이 표시된 파일에 스택 추적을 출력합니다. 이슈를 신고할 때는 콘솔 출력과 스택 추적을 모두 포함해 주세요(필요 시 익명화).

왜 'Raccoon'인가?

객체를 뒤적거리는 것으로 유명합니다.

도구 다운로드