개요

클라우드 보안 관리 위협(CSM 위협)은 워크로드 수준에서 발생하는 의심스러운 활동을 모니터링합니다. 그러나 경우에 따라 사용자의 특정 환경 설정으로 인해 정상 활동이 비정상 활동으로 플래그 지정되는 경우도 있습니다. 정상으로 여겨지는 활동이 시그널을 트리거하는 경우 해당 활동의 트리거를 억제하여 노이즈를 제한할 수 있습니다.

본 지침에서는 시그널 억제를 미세 조정하는 모범 사례와 단계에 관한 고려 사항을 살펴봅니다.

억제 전략

정상 패턴을 억제하기 전에 탐지 활동 유형에 따른 시그널의 일반적인 특성을 파악합니다. 속성의 조합이 구체적일수록 더 정밀하게 억제할 수 있습니다.

위험 관리 관점에서 볼 때, 적은 수의 속성을 기반으로 억제 조건을 설정하면 실제 비정상 활동을 조정할 가능성이 더욱 높아집니다. 비정상 활동의 적용 범위를 침범하지 않고도 효과적으로 미세 조정하려면 다음의 활동 유형별로 분류된 일반적인 주요 속성 목록을 고려합니다.

프로세스 작업

공통 키:

  • @process.args
  • @process.executable.name
  • @process.group
  • @process.args
  • @process.envs
  • @process.parent.comm
  • @process.parent.args
  • @process.parent.executable.path
  • @process.executable.user
  • @process.ancestors.executable.user
  • @process.ancestors.executable.path
  • @process.ancestors.executable.envs

프로세스가 합법적인지 평가할 때 과거 프로세스를 점검하면 실행 플로우를 맥락화하는 데 도움이 됩니다. 프로세스 조상 트리(ancestry tree)는 프로세스의 본래 출처까지 추적합니다.

일반적으로 부모 프로세스 및 원치 않는 프로세스 속성에 모두 기반하여 억제하는 것으로 충분합니다.

조합 예시:

  • @process.args
  • @process.executable.group
  • @process.parent.executable.comm
  • @process.parent.executable.args
  • @process.user

폭넓은 타임프레임을 억제하기로 결정한 경우, 값이 변경되면 억제가 중단되므로 임시 값을 지닌 인수가 있는 프로세스를 사용하지 않습니다.

예를 들어, 특정 프로그램은 재부팅 또는 실행 시 임시 파일(/tmp)을 사용합니다. 이러한 값에 기반한 억제 설정은 유사한 활동이 감지되는 이벤트에는 효과가 없습니다.

컨테이너에서 특정 활동의 모든 시그널의 노이즈를 완전히 억제하고 싶다고 가정해 봅니다. 프로세스 트리 내에서 프로세스를 시작할 전체 명령을 선택하여 컨테이너를 스핀업합니다. 작업을 실행하는 동안 해당 프로세스는 컨테이너가 실행되는 동안 존재하는 파일에 접근합니다. 타겟팅하려는 동작이 워크로드 로직에 연결된 경우, 임시 프로세스 인스턴스를 기반으로 한 억제 정의는 다른 컨테이너의 유사한 활동을 조정하는 데는 효과적이지 않습니다.

파일 작업

워크로드, 문제의 파일 및 파일에 접근하는 프로세스에 대한 식별 정보를 반영하는 속성에 기반하여 파일 작업과 관련한 억제를 구체화합니다.

공통 키:

  • 워크로드 태그:
    • kube_container_name
    • kube_service
    • host
    • env
  • 프로세스:
    • @process.args
    • @process.executable.path
    • @process.executable.user
    • @process.group
    • @process.args
    • @process.parent.comm
    • @process.parent.args
    • @process.parent.executable.path
    • @process.user
  • 파일:
    • @file.path
    • @file.inode
    • @file.mode

시그널을 검사하는 동안 실제 잘못된 활동을 확인하려면, 프로세스가 파일에 접근하고 이를 수정하는 컨텍스트가 예상되는지 확인합니다. 인프라스트럭처 전반에서 파일에 대한 의도된 동작을 억제하지 않으려면 항상 상기 명시한 공통 키에서 관련 컨텍스트 정보를 모두 수집하는 조합을 사용해야 합니다.

조합 예시:

  • @process.args
  • @process.executable.path
  • @process.user
  • @file.path
  • kube_service
  • host
  • kube_container_name

네트워크 DNS 기반 활동

네트워크 활동 모니터링으로 DNS 트래픽을 점검하고 네트워크 서버를 손상시킬 수 있는 의심스러운 동작을 탐지하는 것을 목표로 합니다. 특정 IP가 DNS 서버에 전송한 쿼리를 확인하는 동안 비공개 네트워크 IP 또는 클라우드 네트워크 IP 등 알려진 IP 주소 집합에서 정상적으로 접근하는 경우 트리거할 수 있습니다.

공통 키:

  • 프로세스:
    • @process.args
    • @process.executable.group
    • @process.executable.path
    • @process.parent.executable.comm
    • @process.parent.executable.args
    • @process.user
  • 네트워크/DNS 관련:
    • @dns.question.name
    • @network.destination.ip/port
    • @network.ip/port

로컬 애플리케이션이 연결하여 DNS 이름을 확인할 때마다 가장 먼저 확인해야 하는 특성은 조회를 유도한 IP의 목록과 DNS 쿼리입니다.

조합 예시:

  • @network.ip/port
  • @network.destination.ip/port
  • @dns.question.*

커널 작업

커널 관련 시그널의 경우, 노이즈는 일반적으로 워크로드 로직이나 특정 커널 버전과 관련된 취약성에서 발생합니다. 억제 항목을 결정하기 전에 다음 속성을 고려합니다.

공통 키:

  • 프로세스
    • @process.args
    • @process.executable.group
    • @process.executable.path
    • @process.parent.executable.comm
    • @process.parent.executable.args
    • @process.user
  • 파일
    • @file.path
    • @file.inode
    • @file.mode

해당 유형 작업에 대한 조합을 정의하는 것은 파일링 또는 프로세스 작업과 유사하지만 공격에 사용된 시스템 호출과 관련된 몇 가지 추가 특이점이 있습니다.

예를 들어 더티 파이프 취약점 공격(Dirty Pipe exploitation)은 권한 상승 취약점입니다. 로컬 사용자가 이 공격을 활용하여 시스템에 대한 권한을 상승시키면 치명적이므로, 예상 프로세스를 실행하는 루트 사용자로 인해 발생하는 노이즈를 억제하는 것이 좋습니다.

  • @process.executable.user
  • @process.executable.uid

아울러, 일부 시스템이 패치된 커널 버전(예: 더티 파이프 취약점 공격에 대해 패치된 Linux 버전 5.16.11, 5.15.25, 5.10)을 실행 중인 경우에도 시그널이 생성되는 것을 확인할 수 있습니다. 이 경우 host, kube_container_name 또는 kube_service와 같은 워크로드 수준 태그를 조합에 추가합니다. 그러나 워크로드 수준 속성 또는 태그를 사용하는 경우 광범위한 항목에 적용되므로 탐지 표면과 적용 범위가 줄어든다는 점에 유의하세요. 이를 방지하려면 항상 워크로드 수준 태그를 프로세스 또는 파일 기반 속성과 결합하여 보다 세분화된 억제 기준을 정의하세요.

시그널에서 억제 추가하기

CSM 위협 탐지 규칙이 보고한 잠재적 위협을 조사하는 프로세스에서 고객님의 환경에 특정된 ‘알려진 정상 동작’을 경고하는 몇 가지 시그널을 찾을 수 있습니다.

자바(Java) 프로세스 유틸리티 취약점 공격을 살펴봅니다. 공격자는 의도적으로 자바(Java) 프로세스를 실행하는 애플리케이션 코드의 취약점을 표적으로 삼습니다. 이러한 공격은 자체 자바(Java) 셸 유틸리티를 생성하여 애플리케이션에 대한 지속적인 접근을 수반합니다.

이러한 경우 CSM 위협 규칙이 예상되는 활동을 감지할 수도 있습니다. 예를 들어, 보안 팀이 애플리케이션의 견고성을 평가하는 침투 세션을 실행하는 경우를 들 수 있습니다. 해당 경우 보고된 알림의 정확성을 평가하고 노이즈를 억제할 수 있습니다.

시그널 세부 정보 사이드 패널을 열고 하나의 탭에서 다른 패널로 이동하여 명령줄 인수, 환경 변수 키와 같은 주요 프로세스 메타데이터를 포함한 컨텍스트를 확인합니다. 컨테이너화된 워크로드의 경우, 해당 정보에는 관련 이미지, 포드(pod), 쿠버네티스(Kubernetes) 클러스터 등이 포함됩니다.

시그널과 관련된 이벤트, 로그, 기타 데이터를 표시하는 단일 사이드 패널.

억제 기준을 정의하려면 속성 값을 클릭하고 다음에 대해 신호를 트리거하지 않음을 선택합니다.

본 예시에서는 해당 환경 변수의 사용이 프로세스 조상 트리(ancestry tree) 내에서 권한을 상승시키는 작업에 의해 실제로 선행되었는지 평가합니다. 태그는 인프라스트럭처에서 작업이 발생한 위치를 나타내고 심각도를 낮추도록 도와줍니다. 모든 정보를 바탕으로 해당 환경 변수를 상속한 프로세스에 대한 규칙을 조정할 수 있습니다.

규칙을 조정하기로 한 경우, 시그널의 특정 속성을 조합하면 억제 정밀도가 개선됩니다. 일반적으로 다음 공통 키를 사용하는 것이 가장 적절하며, 이는 억제 효율성을 증진합니다.

  • @process.parent.comm: 시그널을 담당하는 프로세스가 호출된 컨텍스트입니다. 본 키는 실행이 예상된 작업인지 평가할 수 있도록 도와드립니다. 일반적으로 부모 프로세스는 실행을 컨텍스트화하므로 비슷한 정상 동작을 조정하기에 좋은 선택지입니다.
  • @process.parent.path: 마찬가지로 부모 프로세스의 해당 바이너리 경로를 추가하면 위치를 지정하여 억제를 보완할 수 있습니다.
  • host: 문제의 호스트가 취약한 환경, 예를 들어 스테이징 환경에서 실행되고 있지 않다면 이벤트에서 시그널이 전송될 때마다 트리거되지 않도록 억제할 수 있습니다.
  • container.id: 워크로드와 관련된 속성이 혼합되어 있는 경우 억제하는 것이 더 효과적입니다. 컨테이너가 정상 활동 전용이라는 것을 인지하고 있다면 관련된 이름이나 ID를 추가하여 노이즈를 크게 경감하세요.
  • @user.id: 사용자가 아는 팀원임을 식별한 경우, 해당 사용자와 관련된 활동을 억제할 수 있습니다.

추가 세분화를 목적으로, 다음 속성은 실행 체인을 리어셈블링할 때 과거 프로세스에 대한 정보를 제공합니다. 다음 @process.ancestors.* 접두사에서 찾을 수 있습니다.

  • file.name
  • args
  • file.path

규칙 편집기에서 억제 추가하기

시그널은 보안 알림에서 관련 컨텍스트를 표시합니다. 이벤트 데이터를 억제 필터에 활용할 수 있지만, 탐지 규칙이 설정되어 있는 통합 가시성 데이터가 더 효과적인 수정 선택지를 제공할 수도 있습니다.

CSM 위협에서 런타임 에이전트 로그는 수집한 커널 이벤트에서 생성됩니다. 컨텍스트 전환 없이도 시그널 사이드 패널에서 로그를 미리 볼 수 있습니다.

  1. 선택한 시그널 세부정보 사이드 패널로 이동하여 이벤트 탭을 클릭합니다.
  2. 로그 탐색기 보기를 클릭하여 로그 관리로 이동합니다. 해당 시그널을 생성하는 로그의 전체 목록이 표시됩니다. 로그가 많을 수도 있으므로, 시그널 사이드 패널은 해당 로그와 공유 속성을 JSON 구조로 조합합니다.
  3. 이벤트 탭으로 돌아가서 패널 끝까지 스크롤합니다. JSON 드롭다운을 클릭하여 런타임 에이전트 이벤트에 포함된 모든 로그 속성에 접근합니다.
  4. @process.args, @process.group, @process.ancestors.comm 또는@process.ancestors.args를 포함한 공통 키로 시그널을 억제할 키 값 쌍을 식별합니다.
  5. 규칙 편집기와 억제 쿼리를 사용하여 정상 활동 제외에서 규칙을 엽니다. 유용한 값으로 식별된 키 값 쌍의 목록을 추가합니다.

예를 들어, 다음의 속성 조합을 억제하려는 Java process spawned shell/utility 규칙이 있다고 가정합니다.

  • @process.args:+x
  • @process.executable.group:exec
  • @process.ancestors.executable.comm:root
  • @process.ancestors.executable.args:init

본 규칙과 매칭되는 경우 시그널을 생성하지 않습니다에 해당 키 값을 입력하여 원치 않는 시그널을 억제합니다.

이와 반대로 올바른 속성 집합을 식별하여 특정 조건에서 시그널을 발생시키려면 매칭되는 경우에만 시그널 발생 조합을 지정합니다.