Forescout NAC 로그 수집
이 문서에서는 Bindplane을 사용하여 Forescout 네트워크 액세스 제어 (NAC) 로그를 Google Security Operations에 수집하는 방법을 설명합니다. 파서는 Forescout NAC의 syslog 및 CEF 형식 로그를 모두 처리합니다. grok 패턴을 사용하여 필드를 추출하고, 통합 데이터 모델 (UDM)에 매핑하고, 키워드와 추출된 필드를 기반으로 이벤트를 분류하여 로그인/로그아웃, 네트워크 연결, 메일 이벤트, 시스템 상태 업데이트를 처리합니다. 심각도 매핑 및 사용자 컨텍스트 보강을 비롯하여 'CounterACT' 및 '가상 방화벽' 이벤트를 처리하기 위한 특정 로직이 구현됩니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Windows 2016 이상 또는
systemd
가 설치된 Linux 호스트 - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있음
- ForeScout CounterAct v8.0 또는 최신 버전이 설치되어 있어야 합니다.
- ForeScout CounterAct 핵심 확장 프로그램 모듈 Syslog 플러그인 v3.5가 설치되어 있어야 합니다.
- Forescout 어플라이언스 및 CounterACT 플러그인에 대한 액세스 권한
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane이 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
다음 안내에 따라 Windows 또는 Linux 운영체제에 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_file_path: '/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: 'FORESCOUT_NAC' 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
CounterACT Syslog 플러그인 설치
- Forescount Base Plugins 페이지로 이동하여 플러그인 .fpi 파일을 다운로드합니다.
- CounterACT Console이 설치된 머신에 파일을 저장합니다.
- CounterACT Console에 로그인합니다.
- 옵션 > 플러그인 > 설치를 선택합니다.
- 저장된 플러그인 FPI 파일을 찾아 선택합니다.
- 설치를 클릭합니다.
- 계속하려면 라이선스 계약에 동의합니다.
- 설치가 완료되면 닫기를 클릭합니다.
- 플러그인 창에서 플러그인을 선택하고 시작을 클릭합니다.
- 플러그인을 시작할 CounterACT 어플라이언스를 선택합니다 (환경의 모든 어플라이언스에서 플러그인을 실행하는 것이 좋습니다).
- 확인을 클릭합니다.
- 닫기를 클릭합니다.
Forescout CounterACT Syslog 플러그인에서 Syslog 구성
- 플러그인 창에서 Syslog > 구성을 클릭합니다.
- 대화상자에서 어플라이언스 또는 Enterprise Manager를 선택하고 OK를 클릭합니다.
- 이벤트를 전송할 위치에서 추가를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 서버 주소: Bindplane 에이전트 IP 주소를 입력합니다.
- 서버 포트: Bindplane 에이전트 포트 번호를 입력합니다 (예: UDP의 경우
514
). - Server Protocol(서버 프로토콜): UDP를 선택합니다.
- ID: syslog 메시지를 식별하는 자유 텍스트 필드입니다.
- 선택사항: 시설: 메시지 우선순위 필드의 일부로 전송되는 Syslog 메시지 시설입니다. 기능 값이 언급되지 않으면
local5
으로 설정됩니다. - 심각도: 정보를 선택합니다.
- Syslog Trigger 탭으로 이동합니다.
- 'Syslog에 메시지 보내기' 작업으로 생성된 메시지만 보내기 체크박스를 선택하지 마세요.
- 모든 메시지에 타임스탬프 및 CounterACT 기기 식별자 포함 체크박스만 선택합니다.
- 옵션을 클릭하여 syslog 메시지를 트리거하는 이벤트 유형을 정의합니다.
- NAC 정책 로그를 포함합니다.
- NAC 정책 일치-불일치 이벤트를 포함합니다.
- 사용 가능한 경우 다른 이벤트를 선택합니다.
- 기본 작업 구성 탭으로 이동합니다.
- 다음 구성 세부정보를 제공합니다.
- 서버 주소: Bindplane 에이전트 IP 주소를 입력합니다.
- 서버 포트: Bindplane 에이전트 포트 번호를 입력합니다 (예: UDP의 경우
514
). - Server Protocol(서버 프로토콜): UDP를 선택합니다.
- 메시지 ID: Syslog 메시지를 식별하기 위한 자유 텍스트 필드입니다.
- 선택사항: 시설: 메시지 우선순위 필드의 일부로 전송되는 Syslog 메시지 시설입니다. 시설 값이 언급되지 않으면
local5
으로 설정됩니다. - 심각도: 정보를 선택합니다.
- 확인을 클릭합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
act |
security_result.action_details |
CEF 로그의 act 필드에서 직접 매핑됩니다. |
app |
network.application_protocol |
CEF 로그의 app 필드에서 직접 매핑됩니다. |
Available_memory |
additional.fields |
event_type 이 '시스템 통계'인 경우 kv_data 에서 추출됩니다. 키는 '사용 가능한 메모리'이고 값은 추출된 문자열입니다. |
Available_swap |
additional.fields |
event_type 이 '시스템 통계'인 경우 kv_data 에서 추출됩니다. 키는 'Available swap'이고 값은 추출된 문자열입니다. |
application_status |
additional.fields |
event_type 이 'Application status'인 경우 kv_data 에서 추출됩니다. 키는 'Application status'이고 값은 추출된 문자열입니다. |
Assigned_hosts |
additional.fields |
event_type 이 'Application status'인 경우 kv_log_data 에서 추출됩니다. 키는 'Assigned hosts'이고 값은 추출된 문자열입니다. |
Category |
security_result.description |
et_lower 이 'nac policy log'인 경우 security_result.description 의 일부입니다. 다른 세부정보와 연결됩니다. |
command |
principal.process.command_line |
'command:'로 시작하는 경우 CEF 로그의 rnmsg 필드에서 추출됩니다. |
Connected_clients |
additional.fields |
event_type 이 'Application status'인 경우 kv_log_data 에서 추출됩니다. 키는 '연결된 클라이언트'이고 값은 추출된 문자열입니다. |
CPU_usage |
additional.fields |
event_type 이 '시스템 통계'인 경우 kv_data 에서 추출됩니다. 키는 'CPU 사용량'이고 값은 추출된 문자열입니다. |
cs1 |
additional.fields |
CEF 로그의 cs1 필드에서 직접 매핑됩니다. 키는 '규정 준수 정책 이름'입니다. |
cs2 |
additional.fields |
CEF 로그의 cs2 필드에서 직접 매핑됩니다. 키는 '규정 준수 정책 하위 규칙 이름'입니다. |
cs3 |
additional.fields |
CEF 로그의 cs3 필드에서 직접 매핑됩니다. 키는 '호스트 규정 준수 상태'입니다. |
cs4 |
additional.fields |
CEF 로그의 cs4 필드에서 직접 매핑됩니다. 키는 'Compliancy Event Trigger'입니다. |
data |
security_result.description |
파서의 다양한 부분에서 정보를 추출하고 최종 UDM 필드에 기여하는 데 사용됩니다. 단일 UDM 필드에 직접 매핑되지 않습니다. |
details |
security_result.description |
'로그' 이벤트 및 사용자 세션 변경사항을 파싱하는 경우를 비롯한 여러 경우에 security_result.description 를 채우는 데 사용됩니다. 특정 정보를 위해 추가로 파싱될 수 있습니다. |
Destination |
target.ip , target.hostname |
kv_data 또는 data 에서 파싱됩니다. IP 주소로 변환할 수 있는 경우 target.ip 에 매핑됩니다. 그렇지 않으면 target.hostname 에 매핑됩니다. |
deviceExternalId |
about.asset.asset_id |
CEF 로그의 deviceExternalId 필드에서 직접 매핑되며 'Forescout.CommandCenter:'가 앞에 붙습니다. |
dhost |
target.hostname |
CEF 로그의 dhost 필드에서 직접 매핑됩니다. |
dmac |
target.mac |
CEF 로그의 dmac 필드에서 직접 매핑됩니다. |
dntdom |
target.administrative_domain |
CEF 로그의 dntdom 필드에서 직접 매핑됩니다. |
dst |
target.ip |
CEF 로그의 dst 필드에서 직접 매핑됩니다. |
dpt |
target.port |
CEF 로그의 dpt 필드에서 직접 매핑됩니다. |
duser |
target.user.user_display_name |
CEF 로그의 duser 필드에서 직접 매핑됩니다. |
dvc |
about.ip |
CEF 로그의 dvc 필드에서 직접 매핑됩니다. |
dvchost |
about.hostname |
CEF 로그의 dvchost 필드에서 직접 매핑됩니다. |
EM_connection_status |
additional.fields |
event_type 이 'Application status'인 경우 kv_log_data 에서 추출됩니다. 키는 'EM 연결 상태'이고 값은 추출된 문자열입니다. |
Engine_status |
additional.fields |
event_type 이 'Application status'인 경우 kv_log_data 에서 추출됩니다. 키는 '엔진 상태'이고 값은 추출된 문자열입니다. |
event_type |
metadata.description , security_result.summary |
로그 메시지에서 파싱되었습니다. UDM 이벤트 유형 및 기타 필드를 결정하는 데 사용됩니다. 이벤트가 'GENERIC_EVENT'인 경우 설명에도 사용됩니다. |
eventtype |
additional.fields |
CEF 로그의 eventtype 필드에서 직접 매핑됩니다. 키는 'eventtype'입니다. |
externalId |
metadata.product_log_id |
CEF 로그의 externalId 필드에서 직접 매핑됩니다. |
from\[...\] to\[...\] |
principal.ip , target.ip |
'from[...] to[...]' 패턴에서 소스 및 대상 IP를 추출합니다. |
Host |
principal.ip , principal.hostname |
et_lower 이 '이벤트 차단'인 경우 kv_data 에서 파싱됩니다. IP로 변환할 수 있는 경우 principal.ip 에 매핑되고, 그렇지 않으면 principal.hostname 에 매핑됩니다. |
Hostname |
principal.hostname , principal.asset.hostname |
속성 변경 감지 이벤트에 있는 경우 principal.hostname 및 principal.asset.hostname 에 매핑됩니다. |
Installed_Plugins |
additional.fields |
event_type 이 'Application status'인 경우 kv_log_data 에서 추출됩니다. 키는 'Installed Plugins'이고 값은 추출된 문자열입니다. |
iporhost |
intermediary.ip , intermediary.hostname |
header_data 에서 파싱됨 IP로 변환할 수 있는 경우 intermediary.ip 에 매핑되고, 그렇지 않으면 intermediary.hostname 에 매핑됩니다. |
Is Virtual Firewall blocking rule |
security_result.action , security_result.rule_name |
'true'인 경우 security_result.action 를 'BLOCK'으로 설정하고 security_result.rule_name 를 'Virtual Firewall blocking'으로 설정합니다. |
log_description |
security_result.summary |
있는 경우 security_result.summary 에 직접 매핑됩니다. |
log_type |
metadata.log_type |
상수 값 'FORESCOUT_NAC'로 설정합니다. |
MAC |
principal.mac |
속성 변경 감지 이벤트의 kv_data 에서 파싱되고 MAC 주소로 형식이 지정됩니다. |
mail_from |
network.email.from |
mail_details 에서 추출한 mail_from 필드에서 직접 매핑됩니다. |
mail_subject |
network.email.subject |
mail_details 에서 추출한 mail_subject 필드에서 직접 매핑됩니다. |
mail_to |
network.email.to |
mail_details 에서 추출한 mail_to 필드에서 직접 매핑됩니다. |
Match |
security_result.rule_name |
et_lower 이 'nac policy log'인 경우 Match 필드에서 직접 매핑됩니다. |
metadata.event_type |
metadata.event_type |
로그 메시지에 특정 필드와 키워드가 있는지 등 파서의 다양한 조건에 따라 결정됩니다. 기본값은 GENERIC_EVENT 이며, 파싱된 데이터를 기반으로 업데이트됩니다. 예로는 USER_LOGIN , USER_LOGOUT , NETWORK_CONNECTION , SCAN_NETWORK , STATUS_UPDATE , EMAIL_TRANSACTION , USER_UNCATEGORIZED 가 있습니다. |
metadata.product_name |
metadata.product_name |
대부분의 이벤트에 대해 'FORESCOUT NAC'로 설정하거나 product 필드가 있는 경우 해당 값으로 설정합니다. CEF 이벤트의 경우 'CounterAct'로 설정됩니다. |
metadata.vendor_name |
metadata.vendor_name |
대부분의 이벤트에 대해 'FORESCOUT'로 설정됩니다. CEF 이벤트의 경우 cs1Label 필드가 있으면 이 필드에서 가져오고, 없으면 'ForeScout Technologies'로 설정됩니다. |
msg |
metadata.description |
CEF 로그의 msg 필드에서 직접 매핑됩니다. |
pid |
intermediary.process.pid |
header_data 에서 추출한 pid 필드에서 직접 매핑됩니다. |
policy_details |
security_result.description |
et_lower 이 'nac policy log'인 경우 security_result.description 의 일부입니다. 다른 세부정보와 연결됩니다. |
product |
metadata.product_name |
있는 경우 metadata.product_name 에 직접 매핑됩니다. |
proto |
network.ip_protocol |
CEF 로그의 proto 필드에서 직접 매핑됩니다. |
Reason |
security_result.description |
et_lower 이 '이벤트 차단'인 경우 Reason 필드에서 직접 매핑됩니다. |
resource |
principal.resource.name |
CEF 로그의 resource 필드에서 직접 매핑됩니다. |
rnmsg |
security_result.description , principal.process.command_line |
'command:'로 시작하는 경우 'command:' 뒤의 부분이 principal.process.command_line 에 매핑됩니다. 그렇지 않으면 security_result.description 에 매핑됩니다. |
rt |
metadata.event_timestamp |
CEF 로그의 rt 필드에서 직접 매핑되며 타임스탬프로 변환됩니다. |
Rule |
security_result.rule_id |
et_lower 이 'nac policy log'인 경우 Rule 필드에서 직접 매핑됩니다. |
security_result.severity |
security_result.severity |
severity_level 필드에서 파생됩니다. 0~3은 LOW에 매핑되고, 4~6은 MEDIUM에 매핑되고, 7~8은 HIGH에 매핑되고, 9~10은 CRITICAL에 매핑됩니다. |
security_result.severity_details |
security_result.severity_details |
CEF 로그의 severity 필드에서 직접 매핑됩니다. |
Service |
target.port , network.ip_protocol |
포트와 프로토콜을 추출하기 위해 파싱됩니다. 포트는 target.port 에 매핑되고 프로토콜은 network.ip_protocol 에 매핑됩니다. |
session_id |
network.session_id |
session_id 필드에서 직접 매핑됩니다. |
severity |
security_result.severity_details |
CEF 로그의 severity 필드에서 직접 매핑됩니다. |
severity_level |
security_result.severity |
security_result.severity 를 결정하는 데 사용됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.