안녕하세요
한국 IBM 원유현입니다.
Sub-Playbook이라는 재사용 가능한 플레이북이 SOAR v45에서부터 제공이 됨을 알려드리며, 간단히 해당 기능에 대하여 소개를 하도록 하겠습니다.
이제 디자이너는 하위 플레이북을 만들어 다른 플레이북 내에서 사용할 반복 가능한 활동을 정의할 수 있습니다.
하위 플레이북은 플레이북에 넣을 수 있는 패키지 활동 세트입니다. 하위 플레이북이 생성되면 복잡성을 최소화하고 재사용성을 최대화하기 위해 일반 플레이북의 모든 개체를 포함할 수 있습니다. 플레이북 디자이너는 하위 플레이북을 사용하여 복잡한 프로세스를 여러 개별 구성 요소로 분할하여 사용자가 개별 문제에 집중할 수 있도록 할 수 있습니다.
플레이북 내에서 하위 플레이북을 사용하려면 먼저 다음 방식으로 하위 플레이북(입력, 캔버스 구성 및 출력 참조)을 구성해야 합니다.
-하위 플레이북의 입력(필드, 개체 유형, 출력 참조) 선언
-캔버스에 하위 플레이북 구축 및 트리거 플레이북에서 데이터 조작
-엔드 포인트에서 서브 플레이북 결과 출력 정의
하위 플레이북이 생성된 후 플레이북 내에서 하위 플레이북 노드를 추가 및 구성할 수 있으므로 시작하는 플레이북이 데이터를 입력으로 전달하고 하위 플레이북 출력에서 데이터를 가져올 수 있습니다.
1. 하위 플레이북을 생성하면 시작 지점 패널이 표시됩니다. 하위 플레이북이 시작될 때 상위 플레이북에서 입력 데이터를 전달하기 위해 입력 양식 요소로 artifact_value를 추가합니다. 객체 유형으로 아티팩트를 선택합니다. 개체 유형은 상위 플레이북의 입력 데이터 유형을 정의합니다.
2. 여기에서 MD5 해시 아티팩트만 스캔하기를 원하므로 조건점을 생성하고 Artifact Type = built-in artifact type [Malware MD5 hash]를 조건으로 설정합니다.
3. 입력 양식 요소 playbook.inputs.artifact_value에서 아티팩트 유형 및 값을 전달하도록 VirusTotal 함수 입력을 구성합니다.
4. VirusTotal 함수 결과를 처리합니다. VT의 감지율(외부 TI) 및 아티팩트 속성(로컬 기록 참조)으로 구성된 python3 제품 내 스크립트를 통해 Hit 게시 기준을 만듭니다. 이것은 스캔 결과에서 히트 카드를 추가하는 기능 기반 보강을 기반으로 합니다. 적중 기준을 탐지율 >= 60%로 설정
## Construct artifact hit card from VirusTotal scan result
def add_hit_card():
hit = [
{
"name": "Positives",
"type": "string",
"value": "{} out of {}".format(playbook.functions.results.report.scan.get('positives'), playbook.functions.results.report.scan.get('total'))
},
{
"name": "Scan Date",
"type": "string",
"value": "{}".format(playbook.functions.results.report.scan.get('scan_date'))
},
{
"name": "Scan Report",
"type": "uri",
"value": "{}".format(playbook.functions.results.report.scan.get('permalink'))
}
]
artifact.addHit("VT Function hits added", hit)
msg = u"<p>Artifact: {}</p>".format(artifact.value)
## Determine wheather to add artifact hit if positives scan is returned
if playbook.functions.results.report.scan.get('positives') is not None:
## Define hit threshold and calculate detection rate
HIT_THRESHOLD = 0.6
detection_rate = float(playbook.functions.results.report.scan.get('positives'))/float(playbook.functions.results.report.scan.get('total'))
## Add artifact hit if detection rate >= 60%
if detection_rate >= HIT_THRESHOLD:
add_hit_card()
5. Config End point 스크립트, 상위 플레이북에서 해당 결과를 사용할 수 있도록 하는 스크립트를 작성해야 합니다. 여기에서 계산된 탐지율과 보고서의 영구 링크로 스캔 요약을 만듭니다. 결과는 playbook.results에 저장됩니다. 끝점에는 시작하는 데 도움이 되도록 주석 처리된 줄이 있는 기본 스크립트가 있습니다. 결과를 보낼 필요가 없으면 playbook.results = None 행의 주석 처리를 제거합니다.
def mk_report(link):
return u"<a target='blank' href='{}'>VirusTotal Report</a></p>".format(link)
if playbook.functions.results.report.scan.get('positives') is not None:
## Calculate detection rate
detection_rate = float(playbook.functions.results.report.scan.get('positives'))/float(playbook.functions.results.report.scan.get('total'))
msg = u"<p>Artifact: {}</p>".format(playbook.inputs.artifact_value)
msg = msg + u"<p>Positives: <span style='color:red'>{}</span> out of {} (detection rate is {:.2f}) </p> <p>{}</p>".format(playbook.functions.results.report.scan.get('positives'), playbook.functions.results.report.scan.get('total'), detection_rate, mk_report(playbook.functions.results.report.scan.get('permalink')))
playbook.results = {'msg': msg}
else:
playbook.results = None
6. 상위 플레이북에서 하위 플레이북 노드를 구성합니다. 필드 또는 스크립트를 사용하여 수동/프로그래밍 방식으로 입력을 정의할 수 있습니다. 여기에서 아티팩트 값을 서브 플레이북의 입력 입력으로 전달합니다. 서브 플레이북 입력 형식으로 정의된 아티팩트_값입니다. 자세한 내용은 입력 스크립트 및 플레이북 작업을 참조하세요.
7. playbook.subplaybooks.results.vt_scan_result에서 하위 플레이북 출력 결과를 가져와 사건 메모에 추가합니다.
result = playbook.subplaybooks.results.vt_scan_result
if result is not None:
incident.addNote(helper.createRichText(u"<div>{}</div>".format(result['msg'])))
8. 하위 플레이북과 상위 플레이북을 활성화하고 악성 MD5 해시 아티팩트를 생성한 다음 하위 플레이북으로 플레이북을 실행합니다. Hit 카드가 추가되고 스캔 결과 요약이 Incident Note에 게시됩니다.
하위 플레이북 기능을 통해 플레이북 디자이너는 플레이북에서 작업, 스크립트, 기능, 조건 포인트 및 하위 플레이북 컬렉션을 구축 및 재사용하여 활동을 표준화하고 플레이북 개발 프로세스를 가속화할 수 있기를 바랍니다.
더 자세한 정보는 아래 링크를 확인 바랍니다.
https://www.ibm.com/docs/en/sqsp/45?topic=playbook-sub
감사합니다.