Juniper Junos 로그 수집
이 문서에서는 Google Security Operations 전달자를 사용하여 Juniper Junos 로그를 수집하는 방법을 설명합니다.
자세한 내용은 Google Security Operations에 데이터 수집을 참조하세요.
수집 라벨은 원시 로그 데이터를 구조화된 UDM 형식으로 정규화하는 파서를 식별합니다. 이 문서의 정보는 JUNIPER_JUNOS
수집 라벨이 있는 파서에 적용됩니다.
Juniper Networks SRX 기기의 구조화된 로깅 구성
구조화된 로그 형식은 로그 메시지에서 정보를 추출합니다. 로그 형식은 Syslog 프로토콜을 준수합니다.
- 관리 IP 주소에 SSH를 사용하여 Juniper SRX CLI에 로그인합니다.
- 셸 프롬프트에
CLI
를 입력하고 Enter 키를 누릅니다. configure
를 입력하고 Enter 키를 눌러 기기의 구성 모드로 이동합니다.- 연락처 세부정보 또는 고객 참조점을 입력합니다.
필드를 사용자 계정에 매핑하려면 다음 명령어를 실행합니다.
set system syslog host FORWARDER_IP_ADDRESS any info set system syslog host FORWARDER_IP_ADDRESS structured-data
FORWARDER_IP_ADDRESS
를 Google Security Operations 전달자의 IP 주소로 바꿉니다.보안 로그에 구조화된 로깅을 사용 설정하려면 다음 명령어를 사용합니다.
set security log mode stream set security log source-address SRC_IP_ADDRESS set security log stream SYSLOG_STREAM_NAME host FORWARDER_IP_ADDRESS set security log stream SYSLOG_STREAM_NAME format sd-syslog
다음을 바꿉니다.
SRC_IP_ADDRESS
: Juniper SRX 기기의 IP 주소입니다.SYSLOG_STREAM_NAME
: syslog 서버에 할당된 이름입니다.FORWARDER_IP_ADDRESS
: Google Security Operations 전달자의 IP 주소입니다.
모든 보안 정책에 로깅이 사용 설정되어 있는지 확인합니다. 로깅을 사용 설정하려면 다음 명령어를 실행합니다.
set security policies from-zone <zone-name1> to-zone <zone-name2> policy <policy-name> then log session-close set security policies from-zone <zone-name1> to-zone <zone-name2> policy <policy-name> then log session-init
다음 명령어를 사용하여 기기에서 호스트 이름을 구성합니다.
set system host-name HOSTNAME
HOSTNAME
를 할당된 Juniper Networks SRX 기기로 바꿉니다.commit
를 입력하여 실행된 명령어를 구성에 저장합니다.
Juniper Junos 로그를 수집하도록 Google Security Operations 전달자 및 syslog 구성
- SIEM 설정 > 전달자를 선택합니다.
- 새 전달자 추가를 클릭합니다.
- 전달자 이름 입력란에 고유한 이름을 입력합니다.
- 제출을 클릭한 다음 확인을 클릭합니다. 전달자가 추가되고 수집기 구성 추가 창이 표시됩니다.
- 수집기 이름 입력란에 수집기의 고유한 이름을 입력합니다.
- 로그 유형으로 Juniper Junos를 선택합니다.
- 수집기 유형으로 Syslog를 선택합니다.
- 다음 입력 매개변수를 구성합니다.
- 프로토콜: 프로토콜을 UDP로 지정합니다.
- 주소: 수집기가 상주하고 syslog 데이터를 리슨하는 대상 IP 주소 또는 호스트 이름을 지정합니다.
- 포트: 수집기가 상주하고 syslog 데이터를 리슨하는 대상 포트를 지정합니다.
- 제출을 클릭합니다.
Google Security Operations 전달자에 대한 자세한 내용은 Google Security Operations 전달자 문서를 참고하세요. 각 전달자 유형의 요구사항은 유형별 전달자 구성을 참고하세요. 전달자를 만들 때 문제가 발생하면 Google Security Operations 지원팀에 문의하세요.
필드 매핑 참조
이 파서는 Juniper JUNOS syslog 메시지에서 필드를 추출하여 키-값 형식과 키-값 외 형식을 모두 처리합니다. grok 패턴을 사용하여 방화벽 로그, SSH 활동, 명령어 실행을 비롯한 다양한 메시지 구조를 일치시킨 후 추출된 필드를 UDM에 매핑합니다. 또한 파서는 include 파일을 사용하여 CEF 형식의 로그를 처리하고 IP 주소와 사용자 이름을 적절한 UDM 필드로 병합하는 등 메시지 콘텐츠를 기반으로 특정 작업을 실행합니다.
UDM 매핑 표
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
DPT |
target.port |
네트워크 연결의 대상 포트로, 정수로 변환됩니다. |
DST |
target.ip |
네트워크 연결의 대상 IP 주소입니다. |
FLAG |
additional.fields{}.key : 'FLAG', additional.fields{}.value.string_value : FLAG 의 값 |
네트워크 연결과 연결된 TCP 플래그입니다. |
ID |
additional.fields{}.key : 'ID', additional.fields{}.value.string_value : ID 의 값 |
IP 식별 필드 |
IN |
additional.fields{}.key : 'IN', additional.fields{}.value.string_value : IN 의 값 |
수신 네트워크 인터페이스입니다. |
LEN |
additional.fields{}.key : 'LEN', additional.fields{}.value.string_value : LEN 의 값 |
IP 패킷의 길이입니다. |
MAC |
principal.mac |
MAC 필드에서 추출된 MAC 주소입니다. |
OUT |
additional.fields{}.key : 'OUT', additional.fields{}.value.string_value : OUT 의 값 |
발신 네트워크 인터페이스입니다. |
PREC |
additional.fields{}.key : 'PREC', additional.fields{}.value.string_value : PREC 의 값 |
IP 헤더의 우선순위 필드입니다. |
PROTO |
network.ip_protocol |
네트워크 연결에 사용되는 IP 프로토콜입니다. |
RES |
additional.fields{}.key : 'RES', additional.fields{}.value.string_value : RES 값 |
TCP 헤더의 예약된 필드입니다. |
SPT |
principal.port |
네트워크 연결의 소스 포트로, 정수로 변환됩니다. |
SRC |
principal.ip |
네트워크 연결의 소스 IP 주소입니다. |
TOS |
additional.fields{}.key : 'TOS', additional.fields{}.value.string_value : TOS 의 값 |
IP 헤더의 서비스 유형 필드입니다. |
TTL |
network.dns.additional.ttl |
부호 없는 정수로 변환된 TTL(수명) 값입니다. |
URGP |
additional.fields{}.key : 'URGP', additional.fields{}.value.string_value : URGP 의 값 |
TCP 헤더의 긴급 포인터 필드 |
WINDOW |
additional.fields{}.key : 'WINDOW_SIZE', additional.fields{}.value.string_value : WINDOW 의 값 |
TCP 창 크기입니다. |
action |
security_result.action |
CEF 메시지에서 추출된 방화벽에서 취한 조치입니다. |
agt |
observer.ip |
상담사의 IP 주소입니다. |
amac |
target.mac |
타겟의 MAC 주소로, 소문자로 변환되고 하이픈이 콜론으로 대체됩니다. |
app |
target.application |
이벤트와 관련된 애플리케이션입니다. |
artz |
observer.zone |
관찰자 시간대입니다. |
atz |
target.location.country_or_region |
대상 시간대입니다. |
categoryBehavior |
additional.fields{}.key : '카테고리 동작', additional.fields{}.value.string_value : 슬래시가 삭제된 categoryBehavior 의 값 |
카테고리 동작 |
categoryDeviceGroup |
additional.fields{}.key : '카테고리 기기 그룹', additional.fields{}.value.string_value : 슬래시가 삭제된 categoryDeviceGroup 값 |
카테고리 기기 그룹입니다. |
categoryObject |
additional.fields{}.key : '카테고리 객체', additional.fields{}.value.string_value : 슬래시가 삭제된 categoryObject 의 값 |
카테고리 객체입니다. |
categoryOutcome |
additional.fields{}.key : '카테고리 결과', additional.fields{}.value.string_value : 슬래시가 삭제된 categoryOutcome 값 |
카테고리 결과입니다. |
categorySignificance |
additional.fields{}.key : '카테고리 중요도', additional.fields{}.value.string_value : categorySignificance 의 값 |
카테고리 중요도입니다. |
command |
target.process.command_line |
명령어가 실행되었습니다. |
cs1Label |
additional.fields{}.key : cs1Label , additional.fields{}.value.string_value : 해당 CEF 필드의 값 |
CEF 메시지의 맞춤 문자열 필드 1 라벨 및 값입니다. |
cs2Label |
additional.fields{}.key : cs2Label , additional.fields{}.value.string_value : 해당 CEF 필드의 값 |
CEF 메시지의 맞춤 문자열 필드 2 라벨 및 값입니다. |
cs3Label |
additional.fields{}.key : cs3Label , additional.fields{}.value.string_value : 해당 CEF 필드의 값 |
CEF 메시지의 맞춤 문자열 필드 3 라벨 및 값입니다. |
cs4Label |
additional.fields{}.key : cs4Label , additional.fields{}.value.string_value : 해당 CEF 필드의 값 |
CEF 메시지의 맞춤 문자열 필드 4 라벨 및 값입니다. |
cs5Label |
additional.fields{}.key : cs5Label , additional.fields{}.value.string_value : 해당 CEF 필드의 값 |
CEF 메시지의 맞춤 문자열 필드 5 라벨 및 값입니다. |
cs6Label |
additional.fields{}.key : cs6Label , additional.fields{}.value.string_value : 해당 CEF 필드의 값 |
CEF 메시지의 맞춤 문자열 필드 6 라벨 및 값입니다. |
dhost |
target.hostname |
대상 호스트 이름 |
deviceCustomString1 |
additional.fields{}.key : cs1Label , additional.fields{}.value.string_value : deviceCustomString1 값 |
기기 맞춤 문자열 1. |
deviceCustomString2 |
additional.fields{}.key : cs2Label , additional.fields{}.value.string_value : deviceCustomString2 값 |
기기 맞춤 문자열 2 |
deviceCustomString3 |
additional.fields{}.key : cs3Label , additional.fields{}.value.string_value : deviceCustomString3 값 |
기기 맞춤 문자열 3 |
deviceCustomString4 |
additional.fields{}.key : cs4Label , additional.fields{}.value.string_value : deviceCustomString4 값 |
기기 맞춤 문자열 4 |
deviceCustomString5 |
additional.fields{}.key : cs5Label , additional.fields{}.value.string_value : deviceCustomString5 값 |
기기 맞춤 문자열 5입니다. |
deviceCustomString6 |
additional.fields{}.key : cs6Label , additional.fields{}.value.string_value : deviceCustomString6 값 |
기기 맞춤 문자열 6 |
deviceDirection |
network.direction |
네트워크 트래픽의 방향입니다. |
deviceEventClassId |
additional.fields{}.key : 'eventId', additional.fields{}.value.string_value : deviceEventClassId 의 값 |
기기 이벤트 클래스 ID입니다. |
deviceFacility |
observer.product.subproduct |
기기 시설 |
deviceProcessName |
about.process.command_line |
기기 프로세스 이름입니다. |
deviceSeverity |
security_result.severity |
기기 심각도입니다. |
deviceTimeZone |
observer.zone |
기기 시간대입니다. |
deviceVendor |
metadata.vendor_name |
기기 공급업체입니다. |
deviceVersion |
metadata.product_version |
기기 버전입니다. |
dpt |
target.port |
대상 포트입니다. |
dst |
target.ip |
대상 IP 주소입니다. |
duser |
target.user.user_display_name |
대상 사용자입니다. |
eventId |
additional.fields{}.key : 'eventId', additional.fields{}.value.string_value : eventId 의 값 |
이벤트 ID |
event_time |
metadata.event_timestamp |
메시지에서 파싱된 이벤트 발생 시간입니다. |
firewall_action |
security_result.action_details |
취해진 방화벽 작업입니다. |
host |
principal.hostname , intermediary.hostname |
로그를 생성하는 기기의 호스트 이름입니다. 다양한 경우에 원인 제공자와 중개자 모두에 사용됩니다. |
msg |
security_result.summary |
보안 결과의 요약으로 사용되는 이벤트와 연결된 메시지입니다. |
name |
metadata.product_event_type |
이벤트 이름입니다. |
process_name |
additional.fields{}.key : 'process_name', additional.fields{}.value.string_value : process_name 의 값 |
프로세스의 이름입니다. |
p_id |
target.process.pid |
문자열로 변환된 프로세스 ID입니다. |
sha256 |
principal.process.file.sha256 |
SSH2 키 정보에서 추출된 파일의 SHA256 해시입니다. |
shost |
principal.hostname |
소스 호스트 이름 |
source_address |
principal.ip |
소스 IP 주소입니다. |
source_port |
principal.port |
소스 포트로, 정수로 변환됩니다. |
src |
principal.ip |
소스 IP 주소입니다. |
src_ip |
principal.ip |
소스 IP 주소입니다. |
src_port |
principal.port |
소스 포트로, 정수로 변환됩니다. |
ssh2 |
security_result.detection_fields{}.key : 'ssh2', security_result.detection_fields{}.value : ssh2 의 값 |
SSH2 키 정보 |
subtype |
metadata.product_event_type |
이벤트의 하위유형입니다. |
task_summary |
security_result.description |
보안 결과에 대한 설명으로 사용되는 작업 요약입니다. |
timestamp |
metadata.event_timestamp |
이벤트의 타임스탬프입니다. |
user |
target.user.userid |
이벤트와 연결된 사용자입니다. |
username |
principal.user.userid |
이벤트와 연결된 사용자 이름입니다. |
user_name |
principal.user.userid |
사용자 이름입니다. |
metadata.vendor_name |
'Juniper Firewall'로 하드코딩됨 'Juniper Firewall'로 하드코딩됩니다. 'JUNIPER_JUNOS'로 하드코딩됩니다. 로그 콘텐츠를 기반으로 파서 로직에 의해 결정됩니다. CEF 메시지가 아니고 다른 특정 이벤트 유형이 식별되지 않으면 기본값은 'STATUS_UPDATE'입니다. CEF 메시지의 경우 'NETWORK_HTTP'로 설정합니다. desc 필드가 없는 경우 이 필드는 원시 로그 메시지에서 추출된 message_description 로 채워집니다. |
변경사항
2024-05-02
- Enhancement-
- 새로운 SYSLOG + KV 형식 로그를 지원하도록 Grok 패턴을 추가했습니다.
2023-10-25
- Enhancement-
- 파싱되지 않은 로그를 파싱하는 Grok 패턴을 추가했습니다.
- 'source_port'가 'principal.port'에 매핑되었습니다.
- 'source_address'가 'principal.ip'에 매핑되었습니다.
- 'user_name'이 'target.user.userid'에 매핑되었습니다.
- 'application_name'이 'target.application'에 매핑되었습니다.
- 'p_id'가 'target.process.pid'에 매핑되었습니다.
- KV 매핑 전에 'invalid_pattern' 검사를 추가했습니다.
- 'description_present'가 false인 경우 'security_result.description'을 매핑하는 Grok 패턴을 추가했습니다.
2023-08-17
- Enhancement-
- 파싱되지 않은 로그를 파싱하는 Grok 패턴을 추가했습니다.
- 'msg'가 'security_result.summary'에 매핑되었습니다.
- 'src_ip'가 'principal.ip'에 매핑되었습니다.
- 'user'가 'target.user.userid'에 매핑되었습니다.
- 'username'이 'principal.user.userid'에 매핑되었습니다.
- 'command'가 'target.process.command_line'에 매핑되었습니다.
- 'src_port'가 'principal.port'에 매핑되었습니다.
- 'ssh2'가 'security_result.detection_fields'에 매핑되었습니다.
- 'sha256'이 'principal.process.file.sha256'에 매핑되었습니다.
- 'desc'가 'sec_result.summary'에 매핑되었습니다.
- 'mac-address'가 'principal.mac'에 매핑되었습니다.
- event_type이 'STATUS_UPDATE'인 경우 'host'가 'principal.hostname'에 매핑되었습니다.
2023-01-15
- Enhancement-
- 'UI_CMDLINE_READ_LINE', 'UI_COMMIT_PROGRESS', 'UI_CHILD_START' 유형이 포함된 파싱되지 않은 로그를 지원하도록 Grok 패턴을 수정했습니다.
- "UI_CFG_AUDIT_OTHER", "UI_LOGIN_EVENT", "UI_CHILD_STATUS", "UI_LOGOUT_EVENT", "UI_LOAD_EVENT",
- "JTASK_IO_CONNECT_FAILED", "UI_AUTH_EVENT", "UI_NETCONF_CMD", "UI_COMMIT_NO_MASTER_PASSWORD", "UI_CFG_AUDIT_SET", "UI_JUNOSCRIPT_CMD",
- "SNMPD_AUTH_FAILURE", "UI_CFG_AUDIT_NEW", "UI_COMMIT" , "LIBJNX_LOGIN_ACCOUNT_LOCKED", "UI_COMMIT_COMPLETED",
- "PAM_USER_LOCK_LOGIN_REQUESTS_DENIED", "RTPERF_CPU_USAGE_OK", "RTPERF_CPU_THRESHOLD_EXCEEDED", "LIBJNX_LOGIN_ACCOUNT_UNLOCKED",
- 'JSRPD_SET_OTHER_INTF_MON_FAIL', 'JSRPD_SET_SCHED_MON_FAILURE', 'UI_CHILD_WAITPID', 'UI_DBASE_LOGIN_EVENT'.
2022-05-02
- 새로운 기본 파서