Cisco Secure ACS 로그 수집
이 문서에서는 Google Security Operations 전달자를 사용하여 Cisco Secure Access Control Server(ACS) 로그를 수집하는 방법을 설명합니다.
자세한 내용은 Google Security Operations에 데이터 수집을 참조하세요.
수집 라벨은 원시 로그 데이터를 구조화된 UDM 형식으로 정규화하는 파서를 식별합니다. 이 문서의 정보는 CISCO_ACS
수집 라벨이 있는 파서에 적용됩니다.
Cisco Secure ACS 구성
- 관리자 사용자 인증 정보를 사용하여 Cisco Secure ACS 콘솔에 로그인합니다.
- Cisco Secure ACS 콘솔에서 시스템 관리 > 구성 > 로그 구성 > 원격 로그 타겟을 선택합니다.
- 만들기를 클릭합니다.
만들기 창에서 다음 필드의 값을 지정합니다.
필드 설명 이름 Google Security Operations 전달자의 이름입니다. 설명 Google Security Operations 전달자 설명 IP 주소 Google Security Operations 전달자의 IP 주소입니다. 고급 syslog 옵션 사용 고급 syslog 옵션을 사용 설정하려면 이 옵션을 선택합니다. 대상 유형 TCP syslog 또는 UDP syslog를 선택합니다. 포트 10514와 같은 높은 포트를 사용합니다. 시설 코드 LOCAL6 (코드 = 22, 기본값) 최대 길이 권장 값은 1024입니다. 제출을 클릭합니다. 새 원격 로그 타겟 구성이 포함된 원격 로그 타겟 창이 나타납니다.
Cisco Secure ACS 콘솔에서 시스템 관리 > 구성 > 로그 구성 > 로깅 카테고리 > 인스턴스별을 선택합니다.
ACS를 선택한 다음 구성을 클릭합니다.
인스턴스별 창에서 로깅 카테고리를 선택한 다음 수정을 클릭합니다.
일반 탭에서 일부 로깅 카테고리의 경우 로깅 심각도를 기본값으로 설정하거나 공급업체에서 제공한 값으로 설정해야 합니다.
Cisco Secure ACS의 경우 AAA 감사 알림, 회계 알림, 행정 및 운영 감사 알림, 시스템 통계 알림과 같이 심각도를 변경할 수 없는 로그 카테고리를 제외한 모든 로그 카테고리의 기본 심각도는 경고입니다.
원격 syslog 대상 탭을 클릭하고 새로 만든 원격 대상을 사용 가능한 대상에서 선택한 대상으로 이동합니다.
제출을 클릭합니다.
다른 로깅 카테고리의 원격 타겟을 구성하려면 8~10단계를 반복합니다.
Cisco Secure ACS 로그를 수집하도록 Google Security Operations 전달자 및 syslog 구성
- SIEM 설정 > 전달자로 이동합니다.
- 새 전달자 추가를 클릭합니다.
- Forwarder Name(운송업체 이름) 입력란에 운송업체의 고유한 이름을 입력합니다.
- 제출을 클릭합니다. 전달자가 추가되고 수집기 구성 추가 창이 표시됩니다.
- 수집기 이름 입력란에 이름을 입력합니다.
- 로그 유형으로 Cisco ACS를 선택합니다.
- 수집기 유형으로 Syslog를 선택합니다.
- 다음 필수 입력 매개변수를 구성합니다.
- 프로토콜: 프로토콜을 지정합니다.
- 주소: 수집기가 상주하고 syslog 데이터의 주소를 지정하는 대상 IP 주소 또는 호스트 이름을 지정합니다.
- 포트: 수집기가 상주하고 syslog 데이터를 리슨하는 대상 포트를 지정합니다.
- 제출을 클릭합니다.
Google Security Operations 전달자에 대한 자세한 내용은 Google Security Operations 전달자 문서를 참고하세요. 각 전달자 유형의 요구사항은 유형별 전달자 구성을 참고하세요. 전달자를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.
필드 매핑 참조
이 파서는 인증, 계정, 진단, 시스템 통계를 비롯한 Cisco ACS 로그를 처리합니다. grok 패턴을 사용하여 다양한 로그 형식 (SYSLOG + KV, LEEF)에서 필드를 추출하고, 타임스탬프와 시간대를 표준화하며, 키 필드를 UDM에 매핑하여 인증 성공/실패, TACACS+ 계정, RADIUS 이벤트에 관한 특정 로직으로 다양한 로그 유형을 처리합니다. 또한 기기 정보 및 인증 세부정보와 같은 추가 필드로 UDM을 보강합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
Acct-Authentic |
additional.fields[].value.string_value |
값은 Acct-Authentic 필드에서 가져옵니다. |
Acct-Delay-Time |
additional.fields[].value.string_value |
값은 Acct-Delay-Time 필드에서 가져옵니다. |
Acct-Input-Octets |
additional.fields[].value.string_value |
값은 Acct-Input-Octets 필드에서 가져옵니다. |
Acct-Input-Packets |
additional.fields[].value.string_value |
값은 Acct-Input-Packets 필드에서 가져옵니다. |
Acct-Output-Octets |
additional.fields[].value.string_value |
값은 Acct-Output-Octets 필드에서 가져옵니다. |
Acct-Output-Packets |
additional.fields[].value.string_value |
값은 Acct-Output-Packets 필드에서 가져옵니다. |
Acct-Session-Id |
additional.fields[].value.string_value |
값은 Acct-Session-Id 필드에서 가져옵니다. |
Acct-Session-Time |
additional.fields[].value.string_value |
값은 Acct-Session-Time 필드에서 가져옵니다. |
Acct-Status-Type |
additional.fields[].value.string_value |
값은 Acct-Status-Type 필드에서 가져옵니다. |
Acct-Terminate-Cause |
additional.fields[].value.string_value |
값은 Acct-Terminate-Cause 필드에서 가져옵니다. |
ACSVersion |
additional.fields[].value.string_value |
값은 ACSVersion 필드에서 가져옵니다. |
AD-Domain |
principal.group.group_display_name |
값은 AD-Domain 필드에서 가져옵니다. |
AD-IP-Address |
principal.ip |
값은 AD-IP-Address 필드에서 가져옵니다. |
Called-Station-ID |
additional.fields[].value.string_value |
값은 Called-Station-ID 필드에서 가져옵니다. |
Calling-Station-ID |
additional.fields[].value.string_value |
값은 Calling-Station-ID 필드에서 가져옵니다. |
Class |
additional.fields[].value.string_value |
값은 Class 필드에서 가져옵니다. |
CmdSet |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
ConfigVersionId |
additional.fields[].value.number_value |
값은 ConfigVersionId 필드에서 가져와서 부동 소수점 수로 변환됩니다. |
DestinationIPAddress |
target.ip , intermediary.ip |
값은 DestinationIPAddress 필드에서 가져옵니다. intermediary.ip 는 Device IP Address 에서 파생됩니다. |
DestinationPort |
target.port |
값은 DestinationPort 필드에서 가져와 정수로 변환됩니다. |
Device IP Address |
intermediary.ip |
값은 Device IP Address 필드에서 가져옵니다. |
Device Port |
intermediary.port |
값은 Device Port 필드에서 가져와 정수로 변환됩니다. |
DetailedInfo |
security_result.summary , security_result.description , security_result.action |
DetailedInfo 이 'Authentication succeed'(인증 성공)이고 security_result.summary 이 'successful login occurred'(로그인 성공)이고 security_result.action 이 ALLOW(허용)인 경우 DetailedInfo 에 '잘못된 사용자 이름 또는 비밀번호가 지정됨'이 포함된 경우 security_result.summary 은 '로그인 실패'이고 security_result.action 은 '차단'입니다. security_result.description 는 log_header 에서 파생됩니다. |
Framed-IP-Address |
principal.ip |
값은 Framed-IP-Address 필드에서 가져옵니다. |
Framed-Protocol |
additional.fields[].value.string_value |
값은 Framed-Protocol 필드에서 가져옵니다. |
NAS-IP-Address |
target.ip |
값은 NAS-IP-Address 필드에서 가져옵니다. |
NAS-Port |
additional.fields[].value.string_value |
값은 NAS-Port 필드에서 가져옵니다. |
NAS-Port-Id |
target.port |
값은 NAS-Port-Id 필드에서 가져와 정수로 변환됩니다. |
NAS-Port-Type |
additional.fields[].value.string_value |
값은 NAS-Port-Type 필드에서 가져옵니다. |
NetworkDeviceName |
target.hostname |
값은 NetworkDeviceName 필드에서 가져옵니다. |
Protocol |
additional.fields[].value.string_value |
값은 Protocol 필드에서 가져옵니다. |
RadiusPacketType |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
Remote-Address |
principal.ip , target.ip |
값은 Remote-Address 필드에서 가져와 IP 주소로 파싱됩니다. 인증 이벤트의 경우 principal.ip 에 매핑되고, 계정 및 진단 이벤트의 경우 target.ip 에 매핑됩니다. |
RequestLatency |
additional.fields[].value.string_value |
값은 RequestLatency 필드에서 가져옵니다. |
Response |
principal.user.userid |
Response 에 'User-Name'이 포함된 경우 사용자 이름이 추출되어 principal.user.userid 에 매핑됩니다. |
SelectedAccessService |
additional.fields[].value.string_value |
값은 SelectedAccessService 필드에서 가져옵니다. |
SelectedAuthenticationIdentityStores |
security_result.detection_fields[].value |
값은 SelectedAuthenticationIdentityStores 필드에서 가져옵니다. |
SelectedAuthorizationProfiles |
security_result.detection_fields[].value |
값은 SelectedAuthorizationProfiles 필드에서 가져옵니다. |
Service-Type |
additional.fields[].value.string_value |
값은 Service-Type 필드에서 가져옵니다. |
Tunnel-Client-Endpoint |
additional.fields[].value.string_value |
값은 Tunnel-Client-Endpoint 필드에서 가져와 IP 주소로 파싱됩니다. |
User |
target.user.userid |
값은 User 필드에서 가져옵니다. |
UserName |
target.user.userid , principal.mac |
UserName 가 MAC 주소인 경우 파싱되어 principal.mac 에 매핑됩니다. 그렇지 않으면 target.user.userid 로 매핑됩니다. |
ac-user-agent |
network.http.user_agent |
값은 ac-user-agent 필드에서 가져옵니다. |
cat |
metadata.description |
값은 cat 필드에서 가져옵니다. |
device-mac |
principal.mac |
값이 device-mac 필드에서 가져와지고 콜론이 추가되며 값이 소문자로 변환됩니다. device-mac 이 '00'이면 '00:00:00:00:00:00'으로 대체됩니다. |
device-platform |
principal.asset.platform_software.platform |
device-platform 이 'win'이면 값 'WINDOWS'가 principal.asset.platform_software.platform 에 할당됩니다. |
device-platform-version |
principal.asset.platform_software.platform_version |
값은 device-platform-version 필드에서 가져옵니다. |
device-public-mac |
principal.mac |
값은 device-public-mac 필드에서 가져오고 하이픈은 콜론으로 대체되며 값은 소문자로 변환됩니다. |
device-type |
principal.asset.hardware.model |
값은 device-type 필드에서 가져옵니다. |
device-uid |
principal.asset.asset_id |
값은 device-uid 필드에서 가져와 'ASSET ID: '로 시작합니다. |
device-uid-global |
principal.asset.product_object_id |
값은 device-uid-global 필드에서 가져옵니다. |
hostname |
principal.hostname |
값은 hostname 필드에서 가져옵니다. |
ip:source-ip |
principal.ip |
값은 ip:source-ip 필드에서 가져옵니다. |
kv.ADDomain |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.Airespace-Wlan-Id |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.AuthenticationIdentityStore |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.AVPair |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.CVPN3000/ASA/PIX7.x-DAP-Tunnel-Group-Name |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.CVPN3000/ASA/PIX7.x-Group-Based-Address-Pools |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.ExternalGroups |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.FailureReason |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.IdentityAccessRestricted |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.IdentityGroup |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.NAS-Identifier |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.SelectedShellProfile |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.ServiceSelectionMatchedRule |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.State |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.Step |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.Tunnel-Medium-Type |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.Tunnel-Private-Group-ID |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.Tunnel-Type |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.UseCase |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.UserIdentityGroup |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.VendorSpecific |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.attribute-131 |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.attribute-89 |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.cisco-av-pair |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
kv.cisco-av-pair:CiscoSecure-Group-Id |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
leef_version |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
log_header |
metadata.description |
값은 log_header 필드에서 가져옵니다. |
log_id |
metadata.product_log_id |
값은 log_id 필드에서 가져옵니다. |
log_type |
metadata.product_event_type |
값은 log_type 필드에서 가져옵니다. |
message_severity |
(매핑되지 않음) | IDM 객체에 매핑되지 않았습니다. |
product |
metadata.product_name |
값은 product 필드에서 가져옵니다. |
product_version |
metadata.product_version |
값은 product_version 필드에서 가져옵니다. |
server_host |
target.hostname |
값은 server_host 필드에서 가져옵니다. |
timestamp |
metadata.event_timestamp |
값은 timestamp 필드와 timezone 필드에서 가져옵니다 (콜론을 삭제한 후). 결합된 값은 타임스탬프로 파싱됩니다. |
url |
network.dns.questions[].name |
값은 url 필드에서 가져옵니다. |
vendor |
metadata.vendor_name |
값은 vendor 필드에서 가져옵니다. 처음에는 'GENERIC_EVENT'로 설정된 후 log_type 및 파싱된 필드를 기반으로 덮어쓸 수 있습니다. 'USER_LOGIN', 'USER_UNCATEGORIZED', 'NETWORK_DNS', 'NETWORK_CONNECTION', 'STATUS_UPDATE' 또는 'STATUS_UNCATEGORIZED'일 수 있습니다. 처음에는 'Cisco'로 설정된 후 vendor 필드에 의해 덮어쓸 수 있습니다. 처음에는 'ACS'로 설정된 후 product 필드에 의해 덮어쓸 수 있습니다. 'CISCO_ACS'로 설정합니다. 'USERNAME_PASSWORD'로 설정합니다. 'TACACS'로 설정합니다. RADIUS 계정 및 진단 이벤트의 경우 'UDP'로 설정합니다. DNS 이벤트의 경우 'DNS'로 설정합니다. 로그인 성공 여부에 따라 설정되는 security_action 필드에서 파생됩니다. 로그인에 성공한 경우 '로그인 완료'로, 로그인에 실패한 경우 '로그인 실패'로 설정합니다. 특정 ID 저장소 진단 이벤트의 경우 '통과'로 설정할 수도 있습니다. 로그인 시도에 실패한 경우 'LOW'로 설정합니다. device-uid 필드 앞에 'ASSET ID: '를 붙여 구성합니다. |
변경사항
2023-09-26
- 개선 -
- 'metadata.event_type'을 'STATUS_UPDATE'로 설정하기 전에 'hostname'을 null로 초기화하고 호스트 이름이 null이 아닌지 확인하는 검사를 추가했습니다.
- UDM 필드에 매핑하기 전에 'kv.DeviceIPAddress', 'kv.Remote-Address'에 유효한 IP 주소 확인을 추가했습니다.
2022-08-19
- 개선 -
- 'User-Name'이 'principal.user.userid'에 매핑되었습니다.
- ip:source-ip'의 이름을 'source_ip'로 바꾸고 'principal.ip'에 매핑했습니다.
- 'kv.audit-session-id'를 'kv.audit_session_id'로 이름을 바꾸고 'network.session_id'에 매핑했습니다.
- 'kv.AuthenticationMethod'가 'additional.fields'에 매핑되었습니다.
- 'kv.SelectedAccessService'가 'additional.fields'에 매핑되었습니다.
- 'kv.SelectedAuthorizationProfiles'가 'security_result.detection_fields'에 매핑되었습니다.
- 'kv.SelectedAuthenticationIdentityStores'가 'security_result.detection_fields'에 매핑되었습니다.
- 'kv.device-uid-global'이 'principal.asset.product_object_id'에 매핑되었습니다.
- 'kv.device-uid'가 'principal.asset.asset_id'에 매핑되었습니다.
- kv.DestinationIPAddress, kv.NAS-IP-Address, kv.NAS-IP-Address, kv.UserName, kv.NetworkDeviceName이 null인 경우 'metadata.event_type'이 'USER_UNCATEGORIZED'에 매핑되었습니다.
- LEEF 형식의 로그 지원을 추가했습니다.
2022-06-14
- 개선사항 - 공백이 여러 개 있어 실패했던 log_type = 'CSCOacs_Passed_Authentications' 로그를 파싱하도록 grok가 수정되었습니다.
- 잘못된 값 (00)인 경우 로그 유형 'CSCOacs_RADIUS_Accounting'의 'device-mac' 값을 더미 값 '00:00:00:00:00:00'으로 대체했습니다.
2022-06-06
- 개선사항 - 로그에 'DestinationIPAddress' 또는 'NAS-IP-Address'가 없는 'CSCOacs_Passed_Authentications' 유형의 로그가 파싱되었습니다.
- 'CSCOacs_Passed_Authentications' 유형의 로그에서 metadata.event_type을 'USER_UNCATEGORIZED'에서 'USER_LOGIN'으로 수정했습니다.
2022-05-05
- 개선사항 - 메시지 코드가 없는 새로 처리된 로그가 파싱되고 삭제됩니다.
2022-04-27
- 개선사항 - log_type=CISE_TACACS_Accounting으로 로그를 파싱했습니다.