이 페이지의 내용
사용자 지정 작업 추가
사용자 지정 규칙에 스크립트를 첨부하여 네트워크 이벤트에 대응하여 특정 작업을 수행합니다. 사용자 지정 작업 창을 사용하여 사용자 지정 작업 스크립트를 관리할 수 있습니다.
사용자 지정 작업을 사용하여 스크립트 및 결과 작업에 전달되는 값을 선택하거나 정의합니다.
다음 예제는 스크립트에 값을 전달한 결과인 사용자 지정 작업입니다.
-
사용자 및 도메인을 차단합니다.
-
외부 시스템에서 워크플로우 및 업데이트를 시작합니다.
-
위협의 STIX 표현으로 TAXI 서버를 업데이트합니다.
사용자 지정 작업은 볼륨이 적은 사용자 지정 규칙 이벤트와 응답 제한기 값이 낮은 사용자 지정 규칙에 가장 적합합니다.
-
탐색 메뉴()
에서 관리자를 클릭합니다. -
사용자 지정 작업 섹션에서 사용자 지정 작업 정의를 클릭합니다.
-
스크립트를 업로드하려면 추가를 클릭합니다. 제품이 지원하는 프로그래밍 언어 버전은 인터프리터 목록에 나열됩니다.
배포 보안을 위해 JSA 는 Python, Perl 또는 Bash 언어에서 제공하는 모든 스크립팅 기능을 지원하지 않습니다.
-
업로드한 스크립트에 전달할 매개 변수를 지정합니다.
표 1: 사용자 지정 작업 매개 변수 매개변수
설명
고정 속성
사용자 지정 작업 스크립트에 전달되는 값입니다.
이러한 속성은 이벤트 또는 플로우 자체를 기반으로 하는 것이 아니라 스크립트를 사용하여 작업할 수 있는 다른 정의된 값을 포함합니다.
예를 들어, 타사 시스템의 고정 속성 사용자 이름 및 암호를 스크립트에 전달하여 SMS 경고를 보냅니다.
값 암호화 확인란을 선택하여 고정 속성을 암호화합니다.
네트워크 이벤트 속성
이벤트에 의해 생성되는 동적 Ariel 속성입니다. 속성 목록에서 선택합니다.
예를 들어 네트워크 이벤트 속성 sourceip 은 트리거된 이벤트의 소스 IP 주소와 일치하는 매개 변수를 제공합니다.
Ariel 속성에 대한 자세한 내용은 주니퍼 보안 분석 Ariel 쿼리 언어 가이드를 참조하십시오.
매개 변수는 사용자 지정 작업 정의 대화 상자에서 추가한 순서대로 스크립트에 전달됩니다.
사용자 정의 조치 스크립트가 실행되면 /opt/qradar/bin/ca_jail/ 디렉토리에 chroot jail이 설정됩니다. /opt/qradar/bin/ca_jail/ 디렉토리의 컨텐츠는 스크립트로 수정하고 쓸 수 있습니다. 사용자 지정 작업 사용자의 홈 디렉터리(/home/customactionuser)를 수정할 수 있습니다.
스크립트는 JSA 실행 환경을 방해하지 않도록 jail 환경 내부에서만 실행할 수 있습니다.
사용자 정의 조치 실행 중 모든 파일 액세스는 /opt/qradar/bin/ca_jail/ 디렉토리를 기준으로 합니다.
사용자 지정 작업 사용자 계정에는 방화벽에 로그인하고 IP 주소를 차단하는 것과 같은 후속 명령을 실행할 수 있는 권한이 없을 수 있습니다. 스크립트를 규칙과 연결하기 전에 스크립트가 성공적으로 실행되는지 테스트합니다.
구현하는 사용자 지정 작업의 유형은 네트워크 인프라 및 해당 구성 요소에 따라 다릅니다. 예를 들어, Cisco 디바이스에서 REST API를 구성하여 의심스러운 IP 주소를 차단할 수 있습니다. 다른 타사 벤더는 REST 인터페이스를 제공하지 않을 수 있으므로 사용자 지정 작업을 실행하기 위해 자체 웹 서비스 솔루션을 개발해야 할 수 있습니다.
Windows 또는 DOS 시스템에서 생성되는 스크립트에서 dos2unix 유틸리티를 실행해야 합니다. Windows 또는 DOS 시스템은 일반적으로 제어 문자를 추가합니다. JSA에서 스크립트 테스트 실행 함수를 사용하여 사용자 지정 작업 스크립트를 성공적으로 테스트하려면 제어 문자를 제거해야 합니다.
사용자 지정 작업 테스트
스크립트를 규칙과 연결하기 전에 스크립트가 성공적으로 실행되고 의도한 결과가 나타났는지 테스트합니다.
사용자 지정 작업 스크립트는 프로덕션 환경에서 격리된 JSA 관리형 호스트의 테스트 환경 내에서 실행됩니다. 사용자 지정 작업 스크립트는 일반적으로 이벤트 프로세서를 실행하는 관리되는 호스트에서 실행됩니다. 그러나 올인원 어플라이언스가 있는 경우 사용자 지정 작업은 JSA 콘솔에서 실행됩니다.
테스트 실행 은 JSA 콘솔 에서만 지원되며 관리되는 호스트에서는 지원되지 않습니다.
사용자 지정 작업 스크립트에서 디스크에 써야 하는 경우 /home/customactionuser 디렉터리를 사용해야 합니다.
-
탐색 메뉴()
에서 관리자를 클릭합니다. -
사용자 지정 작업 섹션에서 작업 정의를 클릭합니다.
-
목록에서 사용자 정의 작업을 선택하고 실행 테스트>실행 을 클릭하여 스크립트를 테스트합니다. 테스트 결과와 스크립트에서 생성된 모든 출력이 반환됩니다.
-
사용자 지정 작업을 구성하고 테스트한 후 규칙 마법사 를 사용하여 새 이벤트 규칙을 만들고 사용자 지정 작업을 연결합니다.
이벤트 규칙에 대한 자세한 내용은 주니퍼 보안 분석 사용자 가이드를 참조하십시오.
사용자 지정 작업 스크립트에 매개 변수 전달
Bash, Python 및 Perl의 샘플 스크립트는 사용자 지정 작업 스크립트에 매개 변수를 전달하는 방법을 보여줍니다.
다음의 단순 샘플 스크립트는 제공된 오펜스 소스 IP 주소를 사용하여 자산에 대한 자산 모델 API를 조회하는 방법을 보여줍니다. 이 예제를 위해 스크립트는 엔드포인트에서 반환되는 JSON을 출력합니다.
스크립트에는 세 가지 매개 변수가 필요합니다.
-
콘솔 IP 주소
-
API 토큰
-
공격 소스 IP 주소
이러한 매개 변수는 사용자 지정 작업 정의 창 의 스크립트 매개 변수 영역에서 구성됩니다.
각 매개 변수는 사용자 지정 작업 정의 창에 추가된 순서대로 스크립트에 전달됩니다. 이 경우:
-
console_ip
-
api_token
-
offense_source_ip
각 샘플 스크립트의 시작 부분에 정의된 변수는 사용자 정의 작업 정의 창에 추가된 샘플 매개 변수 이름을 사용합니다.
#!/bin/bash console_ip=$1 api_token=$2 offense_source_ip=$3 auth_header="SEC:$api_token" output=$(curl -k -H $auth_header https://$console_ip/console/restapi/api/ asset_model/assets?filter=interfaces%20contains%20%20ip_addresses %20contains%20%20value%20%3D%20%22$offense_source_ip%22) # Basic print out of the output of the command echo $output
#!/usr/bin/python
import sys
import requests
console_ip = sys.argv[1]
api_token = sys.argv[2]
offense_source_ip = sys.argv[3]
auth_header = {’SEC’ : api_token }
endpoint = "https://{0}/console/restapi/api/asset_model/
assets?filter=interfaces%20contains%20%20ip_addresses
%20contains%20%20value%20%3D%20%22{1}%22"
.format(console_ip, offense_source_ip)
response = requests.get(endpoint, headers=auth_header, verify=False)
# Basic print out of the output of the command
print(response.json())
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $console_ip = $ARGV[0];
my $api_token = $ARGV[1];
my $offense_source_ip = $ARGV[2];
my $endpoint = "https://$console_ip/console/restapi/api/asset_model/
assets?filter=interfaces%20contains%20%20ip_addresses
%20contains%20%20value%20%3D%20%22$offense_source_ip%22";
my $client = LWP::UserAgent -> new(ssl_opts => { verify_hostname => 0 });
my $response = $client -> get($endpoint, "SEC" => $api_token);
# Basic print out of the output of the command
print $response -> decoded_content;