
Salesforce 정책 편차 검사기
NCC Group Plc가 오픈소스로 공개 - https://www.nccgroup.com/
Jerome Smith(@exploresecurity)가 개발 Stephen Tomkinson(@neonbunny9)에게 감사
https://www.github.com/nccgroup/SFPolDevChk
AGPL 라이선스로 배포됨 - 자세한 내용은 LICENSE를 참조하세요.
Salesforce에서는 최상위 Organization 레벨에서 설정된 비밀번호 정책과 세션 설정이 Profile 레벨의 설정으로 재정의될 수 있습니다. 이는 의도된 설계이지만, Profile 내에서 이러한 영역을 변경하면(나중에 Organization 설정과 일치하도록 되돌리더라도) 해당 Profile이 Organization과 동기화되지 않는 상태가 됩니다. 즉, 이후 Organization 레벨에서 비밀번호 정책과 세션 설정이 변경되어도 더 이상 이러한 Profile에는 전파되지 않습니다. 시간이 지나면서 Profile이 추가되고 복사됨에 따라 특정 사용자 집합에 대해 의도하지 않은 잘못된 구성이 발생할 수 있습니다. SFPolDevChk는 이러한 방식으로 동기화가 해제된 Profile을 식별하고, 각 Profile의 비밀번호 정책과 세션 설정을 검토하여 Organization 레벨에서 설정된 값과의 차이점을 강조 표시합니다.
요구 사항:
requests 모듈(requirements.txt에 포함됨)자격 증명이 콘솔 기록에 남지 않도록 JSON 구성 파일을 생성하세요:
{
"hostname": "somewhere.my.salesforce.com",
"username": "",
"password": "",
"token": "<optional token>"
"debug": <optional debug level (0, 1 or 2)>
}
그런 다음 실행하세요:
git clone https://github.com/nccgroup/SFPolDevChk
pip install -r requirements.txt
python3 sfpoldevchk.py <config_file>

위 예시에서 'Read Only' Profile의 행은 나머지 항목이 비어 있습니다. 이는 이 Profile의 비밀번호 정책이 당시 Organization에 설정된 정책과 동일했기 때문입니다. 그러나 Organization 설정이 변경되면 이 Profile에 할당된 사용자는 수정된 비밀번호 정책을 자동으로 적용받지 못합니다(도구를 다시 실행하면 그때 차이점이 표시됩니다).
이 도구는 읽기 전용 작업을 수행합니다. 따라서 이 도구를 실행하는 데 사용되는 계정의 요구 사항에 'Modify Metadata Through Metadata API Functions'가 포함된 것은 다소 의외일 수 있습니다. 하지만 이 글을 작성하는 시점에서는 Metadata API에 대해 읽기 전용 권한만 가진 계정을 구성하는 것이 가능하지 않은 것으로 보입니다. 다음은 https://developer.salesforce.com/docs/atlas.en-us.226.0.api_meta.meta/api_meta/meta_quickstart_prereqs.htm에서 가져온 내용입니다:
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'를 최소 요구 사항으로 사용하는 것이 더 바람직해 보였습니다. (참고로, 'View All Data' 권한을 사용하여 테스트 케이스를 실행해 보았지만 실패했습니다.)