BeyondTrust Secure Remote Access 로그 수집

다음에서 지원:

이 문서에서는 Bindplane을 사용하여 BeyondTrust Secure Remote Access 로그를 수집하는 방법을 설명합니다. 파서는 두 가지 syslog 형식을 처리합니다. 첫 번째 형식은 구조화된 메시지 내에서 키-값 쌍을 사용하는 반면, 두 번째 형식은 파이프 구분자 필드를 사용합니다. 파서는 두 형식에서 관련 필드를 추출하여 UDM에 매핑합니다. 또한 추출된 키워드를 기반으로 이벤트 유형 분류를 실행하고 로그인/로그아웃 이벤트 및 인증 유형에 관한 특정 로직을 처리합니다.

시작하기 전에

  • Google Security Operations 인스턴스가 있는지 확인합니다.
  • Windows 2016 이상 또는 systemd를 사용하는 Linux 호스트를 사용하고 있는지 확인합니다.
  • 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
  • BeyondTrust Secure Remote Access에 대한 액세스 권한이 있는지 확인합니다.

Google SecOps 처리 인증 파일 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 수집 에이전트로 이동합니다.
  3. 처리 인증 파일을 다운로드합니다. Bindplane가 설치될 시스템에 파일을 안전하게 저장합니다.

Google SecOps 고객 ID 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정 > 프로필로 이동합니다.
  3. 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.

Bindplane 에이전트 설치

Windows 설치

  1. 관리자 권한으로 명령 프롬프트 또는 PowerShell을 엽니다.
  2. 다음 명령어를 실행합니다.

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux 설치

  1. 루트 또는 sudo 권한으로 터미널을 엽니다.
  2. 다음 명령어를 실행합니다.

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

추가 설치 리소스

Syslog를 수집하고 Google SecOps로 전송하도록 Bindplane 에이전트 구성

  1. 구성 파일에 액세스합니다.

    1. config.yaml 파일을 찾습니다. 일반적으로 Linux의 /etc/bindplane-agent/ 디렉터리 또는 Windows의 설치 디렉터리에 있습니다.
    2. 텍스트 편집기 (예: nano, vi, 메모장)를 사용하여 파일을 엽니다.
  2. 다음과 같이 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: BEYONDTRUST_REMOTE_ACCESS
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. 인프라에서 필요에 따라 포트와 IP 주소를 바꿉니다.

  4. <customer_id>를 실제 고객 ID로 바꿉니다.

  5. /path/to/ingestion-authentication-file.jsonGoogle SecOps 처리 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로 업데이트합니다.

Bindplane 에이전트를 다시 시작하여 변경사항 적용

  • Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.

    sudo systemctl restart bindplane-agent
    
  • Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.

    net stop BindPlaneAgent && net start BindPlaneAgent
    

BeyondTrust 원격 지원 구성

  1. BeyondTrust 웹 UI에 로그인합니다.
  2. 기기 > 보안 > 기기 관리를 선택합니다.
  3. Syslog 섹션에서 다음을 수행합니다.
    • 메시지 형식: 기존 BSD 형식을 선택합니다.
    • 원격 syslog 서버: Bindplane IP 주소 및 포트를 입력합니다.
  4. 제출을 클릭합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
datetime metadata.event_timestamp when 필드가 없는 경우 RFC3 339 형식을 사용하여 datetime 필드에서 타임스탬프가 파싱됩니다.
deviceHost target.hostname deviceHost 값은 target.hostname에 직접 매핑됩니다.
dstHost target.ip dstHost 값은 유효한 IP 주소로 확인된 후 target.ip에 직접 매핑됩니다.
dstPriv additional.fields.[key=dstPriv].value.string_value dstPriv 값은 dstPriv 키와 함께 additional 필드에 배치됩니다.
dstUid target.user.userid dstUid 값은 target.user.userid에 직접 매핑됩니다.
dstUser target.user.user_display_name dstUser 값은 target.user.user_display_name에 직접 매핑됩니다.
eventName metadata.event_type eventNamelogin이면 (대소문자 구분 안 함) metadata.event_typeUSER_LOGIN로 설정됩니다. eventNamelogout이면 (대소문자 구분 안 함) metadata.event_typeUSER_LOGOUT로 설정됩니다. 그 외의 경우 eventName이 비어 있지 않으면 metadata.event_typeUSER_UNCATEGORIZED로 설정됩니다. eventName가 비어 있고 메시지가 두 번째 grok 패턴과 일치하면 metadata.event_typeGENERIC_EVENT로 설정됩니다. eventName가 비어 있고 메시지가 첫 번째 grok 패턴과 일치하면 metadata.event_typeGENERIC_EVENT로 설정됩니다. srcUid, userid 또는 who가 비어 있지 않으면 metadata.event_typeUSER_CHANGE_PERMISSIONS로 설정됩니다. deviceHost 또는 site가 비어 있지 않으면 metadata.event_typeUSER_UNCATEGORIZED로 설정됩니다. 그 외의 경우에는 metadata.event_typeGENERIC_EVENT로 설정됩니다.
event_name additional.fields.[key=event_name].value.string_value event_name 값은 event_name 키와 함께 additional 필드에 배치됩니다.
event_name metadata.product_event_type event_name 값은 id 필드와 함께 사용하여 metadata.product_event_type[id] -event_name`` 형식으로 채웁니다.
externalKeyLabel additional.fields.[key=externalKeyLabel].value.string_value externalKeyLabel 값은 externalKeyLabel 키와 함께 additional 필드에 배치됩니다.
id metadata.product_event_type id 값은 event_name 필드와 함께 사용하여 metadata.product_event_type[id] -event_name`` 형식으로 채웁니다.
jumpGroupId additional.fields.[key=jumpGroupId].value.string_value jumpGroupId 값은 jumpGroupId 키와 함께 additional 필드에 배치됩니다.
jumpGroupName additional.fields.[key=jumpGroupName].value.string_value jumpGroupName 값은 jumpGroupName 키와 함께 additional 필드에 배치됩니다.
jumpGroupType additional.fields.[key=jumpGroupType].value.string_value jumpGroupType 값은 jumpGroupType 키와 함께 additional 필드에 배치됩니다.
jumpointId additional.fields.[key=jumpointId].value.string_value jumpointId 값은 jumpointId 키와 함께 additional 필드에 배치됩니다.
jumpointName additional.fields.[key=jumpointName].value.string_value jumpointName 값은 jumpointName 키와 함께 additional 필드에 배치됩니다.
kv_data 다양한 UDM 필드 kv_data 필드는 키-값 쌍으로 파싱된 후 키를 기반으로 다양한 UDM 필드 (예: eventName, when, who, who_ip, site, target, status, reason).
kvdata 다양한 UDM 필드 kvdata 필드는 키-값 쌍으로 파싱된 후 키를 기반으로 다양한 UDM 필드 (예: msg, srcUser, srcUid, srcHost, dstUser, dstUid, dstHost, sessionId, jumpointId, jumpointName, jumpGroupId, jumpGroupName, jumpGroupType, externalKeyLabel, dstPriv).
message 다양한 UDM 필드 message 필드는 grok 패턴을 사용하여 파싱되어 다양한 필드를 추출한 후 UDM 필드에 매핑됩니다.
msg metadata.description msg 값은 metadata.description에 직접 매핑됩니다.
product_event_type metadata.product_event_type product_event_type 값은 metadata.product_event_type에 직접 매핑됩니다.
product_log_id metadata.product_log_id product_log_id 값은 metadata.product_log_id에 직접 매핑됩니다.
process_id principal.process.pid process_id 값은 principal.process.pid에 직접 매핑됩니다.
reason security_result.description reason 값은 security_result.description에 직접 매핑됩니다.
segment_number additional.fields.[key=segment_number].value.string_value segment_number 값은 segment_number 키와 함께 additional 필드에 배치됩니다.
sessionId network.session_id sessionId 값은 network.session_id에 직접 매핑됩니다.
site target.hostname site 값은 target.hostname에 직접 매핑됩니다.
site_id additional.fields.[key=site_id].value.string_value site_id 값은 site_id 키와 함께 additional 필드에 배치됩니다.
srcHost principal.ip srcHost 값은 유효한 IP 주소로 확인된 후 principal.ip에 직접 매핑됩니다.
srcUid principal.user.userid srcUid 값은 principal.user.userid에 직접 매핑됩니다.
srcUser principal.user.user_display_name srcUser 값은 principal.user.user_display_name에 직접 매핑됩니다.
status security_result.action statusfailure이면 (대소문자 구분 안 함) security_result.actionBLOCK로 설정됩니다. 그 외의 경우에는 security_result.actionALLOW로 설정됩니다.
status security_result.action_details status 값은 security_result.action_details에 직접 매핑됩니다.
target target.application target 값은 target.application에 직접 매핑됩니다. rep_clientRepresentative Console로 대체되고 web/loginWeb/Login로 대체됩니다.
target extensions.auth.type targetrep_client이면 extensions.auth.typeMACHINE로 설정됩니다. targetweb/login이면 extensions.auth.typeSSO로 설정됩니다. 그 외의 경우에는 extensions.auth.typeAUTHTYPE_UNSPECIFIED로 설정됩니다.
timestamp metadata.event_timestamp datetimewhen도 없는 경우 원시 로그의 timestamp가 대체로 사용됩니다.
total_segments additional.fields.[key=total_segments].value.string_value total_segments 값은 total_segments 키와 함께 additional 필드에 배치됩니다.
device_product additional.fields.[key=device_product].value.string_value device_product 값은 device_product 키와 함께 additional 필드에 배치됩니다.
device_vendor additional.fields.[key=device_vendor].value.string_value device_vendor 값은 device_vendor 키와 함께 additional 필드에 배치됩니다.
device_version metadata.product_version device_version 값은 metadata.product_version에 직접 매핑됩니다.
when metadata.event_timestamp 타임스탬프는 있는 경우 UNIX 형식을 사용하여 when 필드에서 파싱됩니다.
who principal.user.userid who 필드가 정규식 패턴과 일치하면 추출된 useridprincipal.user.userid에 매핑됩니다. 그렇지 않으면 전체 who 필드가 principal.user.userid에 매핑됩니다.
who principal.user.user_display_name who 필드가 정규식 패턴과 일치하면 추출된 user_display_nameprincipal.user.user_display_name에 매핑됩니다.
who_ip principal.ip who_ip 값은 principal.ip에 직접 매핑됩니다.
(파서 로직) metadata.log_type 로그 유형이 BEYONDTRUST_REMOTE_ACCESS로 설정됩니다.
(파서 로직) metadata.product_name 제품 이름이 BeyondTrust Secure Remote Access로 설정됩니다.
(파서 로직) metadata.vendor_name 공급업체 이름이 BeyondTrust로 설정됩니다.
(파서 로직) security_result.summary 값은 User %{eventName} 형식을 사용하여 파생됩니다.
(파서 로직) extensions.auth.mechanism methodusing password가 포함된 경우 메커니즘은 USERNAME_PASSWORD로 설정됩니다. methodusing elevate가 포함된 경우 메커니즘은 REMOTE로 설정됩니다.

변경사항

2022-09-30

개선사항:

  • 파싱되지 않은 syslog를 파싱하는 Grok를 작성했습니다.
  • device_vendoradditional.fields에 매핑했습니다.
  • event_nameadditional.fields에 매핑했습니다.
  • device_productadditional.fields에 매핑했습니다.
  • externalKeyLabeladditional.fields에 매핑했습니다.
  • dstPrivadditional.fields에 매핑했습니다.
  • filePathtarget.file.full_path에 매핑했습니다.
  • fsizetarget.file.size에 매핑했습니다.

2022-07-14

  • 파서를 새로 만들었습니다.

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받으세요.