ManageEngine ADAudit Plus 로그 수집
이 문서에서는 Bindplane 에이전트를 사용하여 ManageEngine ADAudit Plus 로그를 Google Security Operations로 처리하는 방법을 설명합니다. 파서는 ADAudit Plus의 로그를 처리하여 UDM 형식으로 변환합니다. grok 패턴을 사용하여 SYSLOG (CEF) 및 키-값 형식 메시지에서 필드를 추출하고, 알림 및 보고서 프로필에서 파생된 이벤트 유형을 기반으로 UDM 필드에 매핑하며, 추가 컨텍스트로 데이터를 보강합니다. 또한 파서는 로그인 실패, 사용자 변경, 파일 수정과 같은 특정 시나리오를 처리하여 UDM 매핑을 적절하게 조정합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- Windows 2016 이상을 사용 중이거나
systemd
와 함께 Linux 호스트를 사용하고 있는지 확인합니다. - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
- ManageEngine ADAudit에 대한 권한이 있는지 확인합니다.
Google SecOps 처리 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 처리 인증 파일을 다운로드합니다. Bindplane가 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
Windows 설치
- 관리자 권한으로 명령 프롬프트 또는 PowerShell을 엽니다.
다음 명령어를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
추가 설치 리소스
- 추가 설치 옵션은 이 설치 가이드를 참고하세요.
Syslog를 수집하고 Google SecOps로 전송하도록 Bindplane 에이전트 구성
구성 파일에 액세스합니다.
config.yaml
파일을 찾습니다. 일반적으로 Linux의/etc/bindplane-agent/
디렉터리 또는 Windows의 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
,vi
, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
config.yaml
파일을 수정합니다.receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: ADAUDIT_PLUS raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
인프라에서 필요에 따라 포트와 IP 주소를 바꿉니다.
<customer_id>
를 실제 고객 ID로 바꿉니다.Google SecOps 처리 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로
/path/to/ingestion-authentication-file.json
를 업데이트합니다.
Bindplane 에이전트를 다시 시작하여 변경사항 적용
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart bindplane-agent
Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.
net stop BindPlaneAgent && net start BindPlaneAgent
ManageEngine ADAudit Plus Syslog 구성
- ManageEngine ADAudit Plus 웹 UI에 로그인합니다.
- 관리 > 구성 > SIEM 통합으로 이동합니다.
- 사용 설정을 선택하여 ADAudit Plus 로그를 전송합니다.
- ArcSight (CEF) 형식을 선택합니다.
- 다음 구성 세부정보를 제공합니다.
- IP 주소: Bindplane 에이전트 IP 주소입니다.
- 포트: 바인드플레인 포트 번호입니다. 예를 들어 UDP의 경우
514
입니다. - 타겟 유형: UDP를 선택합니다 (Bindplane 에이전트 구성에 따라 TCP를 선택할 수도 있음).
- 저장을 클릭합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
ACCOUNT_DOMAIN |
principal.administrative_domain |
원시 로그의 ACCOUNT_DOMAIN 값이 이 UDM 필드에 할당됩니다. |
ACCOUNT_NAME |
principal.user.userid |
원시 로그의 ACCOUNT_NAME 값이 이 UDM 필드에 할당됩니다. |
ALERT_PROFILE |
security_result.summary |
원시 로그의 ALERT_PROFILE 값이 이 UDM 필드에 할당됩니다. |
APPLICATION_NAME |
target.resource.name |
원시 로그의 APPLICATION_NAME 값이 이 UDM 필드에 할당됩니다. 또한 target.resource.resource_type 를 TASK 로, has_target_resource 를 true로 설정합니다. |
CALLER_DISPLAY_NAME |
target.user.user_display_name |
원시 로그의 CALLER_DISPLAY_NAME 값이 이 UDM 필드에 할당됩니다. |
CALLER_USER_NAME |
target.user.userid |
원시 로그의 CALLER_USER_NAME 값이 이 UDM 필드에 할당됩니다. |
CALLER_USER_SID |
target.group.windows_sid |
원시 로그의 CALLER_USER_SID 값은 [%,{,}] 문자를 삭제한 후 이 UDM 필드에 할당됩니다. 이는 값이 Windows SID 패턴과 일치하는 경우에만 실행됩니다. |
Category |
metadata.product_event_type |
원시 로그의 Category 값이 이 UDM 필드에 할당됩니다. |
CLIENT_HOST_NAME |
target.hostname , target.asset.hostname |
원시 로그의 CLIENT_HOST_NAME 값이 이러한 UDM 필드에 할당됩니다. |
CLIENT_IP_ADDRESS |
target.ip , target.asset.ip |
원시 로그의 CLIENT_IP_ADDRESS 값은 유효한 IP 주소인지 확인한 후 이러한 UDM 필드에 할당됩니다. |
CLIENT_PORT |
target.port |
원시 로그의 CLIENT_PORT 값은 정수로 변환된 후 이 UDM 필드에 할당됩니다. |
DOMAIN |
target.administrative_domain |
원시 로그의 DOMAIN 값이 이 UDM 필드에 할당됩니다. 이 값은 나중에 ACCOUNT_DOMAIN 에 의해 덮어쓸 수 있습니다(있는 경우). |
FILE_LOCATION |
target.file.full_path |
원시 로그의 FILE_LOCATION 값이 이 UDM 필드에 할당됩니다. |
FILE_NAME |
target.file.full_path |
FILE_LOCATION 가 없는 경우 원시 로그의 FILE_NAME 값이 이 UDM 필드에 할당됩니다. |
FORMAT_MESSAGE |
security_result.description |
원시 로그의 FORMAT_MESSAGE 값이 이 UDM 필드에 할당됩니다. 이 필드의 일부는 다른 UDM 필드를 채우는 데 사용된 후 설명에서 삭제될 수 있습니다. |
IP |
principal.ip , principal.asset.ip |
원시 로그의 IP 값은 유효한 IP 주소인지 확인한 후 이러한 UDM 필드에 할당됩니다. |
loggerHost |
intermediary.hostname , intermediary.asset.hostname |
원시 로그의 메시지 필드에서 추출된 loggerHost 값이 이러한 UDM 필드에 할당됩니다. |
login_name |
target.user.userid , target.user.email_addresses 또는 target.user.user_display_name |
값에 @ 가 포함된 경우 이메일 주소로 처리됩니다. 공백이 포함된 경우 표시 이름으로 취급됩니다. 그렇지 않으면 사용자 ID로 취급됩니다. 또한 event_type 를 USER_LOGIN , extensions.auth.type 를 MACHINE , extensions.auth.mechanism 를 USERNAME_PASSWORD 로 설정합니다. |
RECORD_NUMBER |
principal.process.pid |
원시 로그의 RECORD_NUMBER 값이 이 UDM 필드에 할당됩니다. |
REPORT_PROFILE |
metadata.description |
원시 로그의 REPORT_PROFILE 값이 이 UDM 필드에 할당됩니다. |
SEVERITY |
security_result.severity |
SEVERITY 값에 따라 이 UDM 필드의 값이 결정됩니다. 1은 LOW에 매핑되고 2는 MEDIUM에 매핑되며 3은 HIGH에 매핑됩니다. 또한 SEVERITY 가 3이면 is_significant 를 true로, 그렇지 않으면 false로 설정합니다. |
SOURCE |
principal.hostname , principal.asset.hostname |
원시 로그의 SOURCE 값과 SOURCE 에 도메인 부분이 포함되지 않은 경우 DOMAIN 가 결합되어 이러한 UDM 필드에 할당됩니다. 또한 has_principal_host 를 true로 설정합니다. |
TIME_GENERATED |
metadata.event_timestamp.seconds |
원시 로그의 TIME_GENERATED 값이 이벤트 타임스탬프로 사용됩니다. |
UNIQUE_ID |
metadata.product_log_id |
원시 로그의 UNIQUE_ID 값이 이 UDM 필드에 할당됩니다. |
USERNAME |
principal.user.userid |
ACCOUNT_NAME 가 없는 경우 원시 로그의 USERNAME 값이 이 UDM 필드에 할당됩니다. |
USER_OU_GUID |
metadata.product_log_id |
중괄호를 삭제한 후 원시 로그의 USER_OU_GUID 값은 UNIQUE_ID 가 없는 경우 이 UDM 필드에 할당됩니다. |
access_mode |
security_result.detection_fields.value |
원시 로그의 access_mode 값이 이 UDM 필드에 할당되며 키는 ACCESS_MODE 로 설정됩니다. |
action_name |
security_result.description |
원시 로그의 action_name 값이 이 UDM 필드에 할당됩니다. |
domain_name |
principal.administrative_domain |
원시 로그의 domain_name 값이 이 UDM 필드에 할당됩니다. |
event.idm.is_alert |
event.idm.is_alert |
ALERT_PROFILE 가 Alert , User Account Locked Out 이거나 Unusual Activity.*? 와 일치하는 경우 true로 설정합니다. 그렇지 않으면 false로 설정합니다. |
event.idm.is_significant |
event.idm.is_significant |
SEVERITY 가 3이면 true로 설정합니다. 그렇지 않으면 false로 설정합니다. |
event.idm.read_only_udm.extensions.auth.mechanism |
event.idm.read_only_udm.extensions.auth.mechanism |
login_name 가 있거나 event_type 이 USER_LOGIN 이면 USERNAME_PASSWORD 로 설정합니다. |
event.idm.read_only_udm.extensions.auth.type |
event.idm.read_only_udm.extensions.auth.type |
login_name 가 있거나 event_type 이 USER_LOGIN 이면 MACHINE 로 설정합니다. |
event.idm.read_only_udm.metadata.event_type |
event.idm.read_only_udm.metadata.event_type |
ALERT_PROFILE , REPORT_PROFILE , FORMAT_MESSAGE 값을 기반으로 파서에서 결정합니다. USER_CHANGE_PERMISSIONS , USER_STATS , USER_LOGIN , USER_CHANGE_PASSWORD , SETTING_MODIFICATION , FILE_DELETION , FILE_MODIFICATION , STATUS_SHUTDOWN , SCHEDULED_TASK_CREATION , FILE_READ , NETWORK_CONNECTION , GENERIC_EVENT , USER_UNCATEGORIZED , STATUS_UPDATE 등 여러 값 중 하나일 수 있습니다. |
event.idm.read_only_udm.metadata.log_type |
event.idm.read_only_udm.metadata.log_type |
항상 ADAUDIT_PLUS 로 설정합니다. |
event.idm.read_only_udm.metadata.product_name |
event.idm.read_only_udm.metadata.product_name |
항상 ADAudit Plus 로 설정합니다. |
event.idm.read_only_udm.metadata.vendor_name |
event.idm.read_only_udm.metadata.vendor_name |
항상 Zoho Corporation 로 설정합니다. |
host |
principal.hostname , principal.asset.hostname |
원시 로그의 host 값이 이러한 UDM 필드에 할당됩니다. 또한 has_principal_host 를 true로 설정합니다. |
intermediary.hostname , intermediary.asset.hostname |
intermediary.hostname , intermediary.asset.hostname |
loggerHost 값으로 설정합니다. |
principalHost |
principal.hostname , principal.asset.hostname |
원시 로그의 principalHost 값은 IP인지 확인한 후 이러한 UDM 필드에 할당됩니다. 또한 has_principal_host 를 true로 설정합니다. |
security_result.action |
security_result.action |
outcome 또는 msg_data_2 에 Success 이 포함되어 있거나 FORMAT_MESSAGE 에 Status:Success 가 포함되어 있으면 ALLOW 로 설정합니다. status 에 denied , locked out , incorrect , does not meet 또는 Unable to validate 가 포함된 경우 BLOCK 로 설정합니다. ALERT_PROFILE 가 Logon Failures for Admin Users 이면 BLOCK 로 설정합니다. |
security_result.category |
security_result.category |
event_type 가 USER_STATS 이거나 ALERT_PROFILE 가 Logon Failures for Admin Users 이면 POLICY_VIOLATION 로 설정합니다. |
security_result.rule_name |
security_result.rule_name |
FORMAT_MESSAGE 필드에 Reason: 가 포함된 경우 이 필드에서 추출됩니다. |
status |
security_result.summary |
원시 로그의 status 값이 이 UDM 필드에 할당됩니다. |
targetHost |
target.hostname , target.asset.hostname 또는 target.ip , target.asset.ip |
원시 로그의 targetHost 값은 IP인지 확인한 후 이러한 UDM 필드에 할당됩니다. |
targetUser |
target.user.userid |
원시 로그의 targetUser 값이 이 UDM 필드에 할당됩니다. |
_CNtargetUser |
target.user.user_display_name |
원시 로그의 _CNtargetUser 값이 이 UDM 필드에 할당됩니다. |
_user |
principal.user.userid 또는 target.user.userid |
원시 로그의 _user 값은 event_type 이 USER_CHANGE_PASSWORD 이 아닌 한 principal.user.userid 에 할당되며, event_type 이 USER_CHANGE_PASSWORD 인 경우에는 target.user.userid 에 할당됩니다. |
변경사항
2025-02-19
개선사항:
EVENT_NUMBER
,REMARKS
,EVENT_TYPE
,ATTRIBUTES_NEW_VALUE
,ATTRIBUTES_OLD_VALUE
,OPERATION_TYPE
를additional.fields
에 매핑했습니다.EVENT_TYPE_TEXT
를security_result.detection_fields
에 매핑했습니다.ACCOUNT_NAME
를principal.user.user_display_name
에 매핑했습니다.
2024-05-20
개선사항:
outcome
필드의 값이Success
와 유사하면security_result.action
를ALLOW
로 설정합니다.msg_data
필드의 값이Success
와 유사하면security_result.action
를ALLOW
로 설정합니다.act
,suid
,reason
를 추출하기 위해msg_data
에 Grok 패턴을 추가했습니다.msg_data
를security_result.description
에 매핑했습니다.cs1
,cs3
,cs4
,cs5
,cn1
,cn2
,cn3
를additional.fields
에 매핑했습니다.
2024-01-19
개선사항:
- 파싱되지 않은 로그를 파싱하도록 Grok 패턴을 수정했습니다.
IP
를principal.asset.ip
에 매핑했습니다._PrincipalIP
를principal.asset.ip
에 매핑했습니다.host
를principal.asset.hostname
에 매핑했습니다.principalHost
를principal.asset.hostname
에 매핑했습니다.SOURCE
를principal.asset.hostname
에 매핑했습니다._TargetIP
를target.asset.ip
에 매핑했습니다.CLIENT_IP_ADDRESS
를target.asset.hostname
에 매핑했습니다.CLIENT_HOST_NAME
를target.asset.hostname
에 매핑했습니다.targetHost
를target.asset.hostname
에 매핑했습니다.
2023-10-17
버그 수정:
IP
를principal.ip
에 매핑하기 전에 IP 확인을 추가했습니다.CLIENT_IP_ADDRESS
를target.ip
에 매핑하기 전에 IP 확인을 추가했습니다.principal.group.windows_sid
에 매핑하기 전에ACCOUNT_SID
의 유효성 검사를 추가했습니다.target.group.windows_sid
에 매핑하기 전에CALLER_USER_SID
의 유효성 검사를 추가했습니다.principal
가 있으면event_type
를STATUS_UPDATE
로 설정합니다.- 새 패턴
FORMAT_MESSAGE
에서file_path
를 파싱하도록 Grok 패턴을 수정했습니다. event_type
가SCHEDULED_TASK_CREATION
인 경우has_target_resource
검사를 추가했습니다.
2023-03-17
개선사항:
- CEF 형식 로그를 지원하고 다음 필드를 매핑했습니다.
IP
가principal.ip
에 매핑되었습니다.LOGIN NAME
가target.user.userid or target.user.email_addresses or target.user.user_display_name
에 매핑되었습니다.DOMAIN NAME
가principal.administrative_domain
에 매핑되었습니다.HOST
가principal.hostname
에 매핑되었습니다.ACCESS_MODE
가security_result.detection_fields
에 매핑되었습니다.STATUS
가security_result.summary
에 매핑되었습니다.STATUS
가success
이면security_result.action
가ALLOW
에 매핑되고,STATUS
가denied or incorrect
이면security_result.action
가BLOCK
에 매핑됩니다.
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받아 보세요.