문서API 참조
Documentation

운영 FAQ

관리:

기존 sandfly-setup 폴더를 다른 디렉터리로 이동할 수 있나요?

  • 예, 소프트웨어를 재설치할 필요 없이 수행할 수 있습니다. 이동을 수행하려면 먼저 모든 스케줄을 비활성화하고, Trickle Schedules가 활성화되어 있지 않으며 모든 Task Queues가 비어 있는지 확인합니다. 모두 비어 있으면 shutdown_sandfly.sh 스크립트로 Sandfly를 종료한 뒤 전체 sandfly-setup 폴더를 새 위치로 이동하고, 마지막으로 해당 노드 또는 서버 시작 스크립트를 사용해 Sandfly를 다시 시작합니다.

대량 작업을 수행하는 방법이 있나요?

  • 예, User Interface (UI)에 있는 대부분의 기능은 Sandfly 서버의 REST API (https://docs.sandflysecurity.com/docs/sandfly-api)를 통해서도 제공됩니다. Sandfly 설치 패키지에는 많은 일반 작업에 대한 예제 API 스크립트(위치: sandfly-setup/api_examples/)가 포함되어 있으며, 이를 참고하여 그대로 사용하거나 필요에 맞게 확장할 수 있습니다. 사용 가능한 호출 목록 전체는 공개 API Reference (https://api.sandflysecurity.com/)를 참고하세요.

일부 안티바이러스 소프트웨어에서 Sandfly 패키지에 Sysrv Linux 트로잔이 포함되어 있다고 보고했습니다.

  • 이는 일부 안티바이러스 제품의 휴리스틱 탐지에서 발생하는 오탐입니다. Sandfly는 설치 과정의 일부로 SSL 인증서를 생성하기 위해 악성코드가 아닌 Cloudflare SSL 유틸리티 (https://github.com/cloudflare/cfssl)를 사용하며, Sandfly가 소스에서 빌드합니다. 이 오탐은 저장소의 오픈 이슈로 별도 보고되어 있습니다 (https://github.com/cloudflare/cfssl/issues/1400). 우려 사항이 있으면 Sandfly Support에 문의해 주세요.

자격 증명:

하나의 자산 집합에 둘 이상의 자격 증명을 연결할 수 있나요?

  • 현재 하나의 호스트에 둘 이상의 자격 증명을 할당할 수 없습니다. 과거에도 이 기능 요청이 있었습니다. 복잡한 점은 Sandfly의 시도가 brute forcing으로 보일 수 있어 어떤 형태의 자동 차단이 활성화되는 것을 원치 않는다는 것입니다. 2~3회 시도까지는 괜찮을 수 있지만, 그 이상이 되면 fail2ban 같은 도구로 인해 서비스가 차단될 수 있습니다.

Docker:

Sandfly Docker 컨테이너에서 전체 로그를 가져오려면?

  • Sandfly 서버 또는 노드 호스트의 셸에서 다음 명령을 사용하세요:
  • docker ps # To obtain the id of the target container docker logs #CONTAINER_ID# &> /tmp/sandfly.log

Sandfly가 컨테이너 내부를 스캔할 수 있나요?

  • 현재 Sandfly는 컨테이너를 구동하는 호스트/인프라를 스캔하고, 그 지점에서 해당 호스트에서 실행 중인 모든 컨테이너를 완전히 가시화할 수 있습니다. 우리의 초점과 테스트는 개별 컨테이너가 아니라 컨테이너를 구동하는 기반 인프라에 맞춰져 있습니다.
  • 컨테이너 제공자가 기반 인프라를 대신 운영하고 있어 SSH 접근 권한이 없다면, Sandfly는 해당 컨테이너에 연결하여 스캔할 수 없습니다. 그러나 해당 컨테이너들이 ssh 서버를 실행하고 있다면(드물지만 불가능하진 않음), Sandfly가 그 방식으로 컨테이너 내부에 연결해 스캔할 수 있습니다.

/var/lib/docker/ 내부를 정리해도 되나요?

  • 데이터 삭제 위험 때문에 Sandfly는 /var/lib/docker/ 정리를 위한 자체 방법을 제공하지 않습니다. 그러나 Docker는 'docker system prune' (공식 문서: https://docs.docker.com/engine/reference/commandline/system_prune/) 명령을 제공하며, '--volumes' 플래그를 추가하면 볼륨을 포함해 Sandfly 서버 및/또는 노드에 누적된 사용하지 않는 데이터를 제거할 수 있습니다.
  • ❗️

    중요: 볼륨 정리를 실행하면 데이터베이스가 삭제될 수 있으니 매우 주의하세요!

    If the sandfly-postgres docker container is NOT running, volume pruning will delete your database! Also, if non-Sandfly docker containers are or were on a target host, this process will affect every non-running container unless filters are applied.

  • 명령을 사용하기 전에 먼저 데이터를 백업하는 것을 권장합니다. 그다음 Sandfly 서버 또는 노드 호스트에서 root 권한으로 셸을 엽니다. 서버를 정리(prune)하는 경우, sandfly-postgres라는 컨테이너가 실행 중인지 확인하세요:
  • docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ff3b716aadf quay.io/sandfly/sandfly:5.0.2 "/opt/sandfly/start_…" 10 days ago Up 10 days 0.0.0.0:80->8000/tcp, :::80->8000/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp sandfly-server 1cb5d910cbbc postgres:14.9 "docker-entrypoint.s…" 10 days ago Up 10 days 5432/tcp sandfly-postgres
  • 마지막으로 아래 정리(prune) 명령을 실행하면 사용되지 않는 컨테이너, 네트워크, 이미지(중간/참조 끊김 포함), 그리고 선택적으로 볼륨이 제거됩니다:
  • docker system prune --all # Optionally add '--volumes' to prune volumes

호스트

기존 호스트의 대상 주소를 업데이트하는 방법은?

  • 호스트 추가로 새 대상 주소를 등록하세요. 호스트 식별 데이터가 변경되지 않았다면, 동일한 호스트 ID임을 감지했을 때 Sandfly가 기존 호스트의 대상 주소를 업데이트합니다.

연동:

Sandfly를 Splunk와 연동하려면?

운영 체제(OS):

엔드포인트에서 Sandfly가 사용하는 명령은 무엇인가요?

  • Sandfly가 호스트에 처음 로그인하면, 해당 사용자 권한으로 실행되는 여러 Linux 기본 명령을 사용해 시스템을 조사하여 해당 호스트의 특성을 파악합니다. 아래는 이러한 기본 명령 목록이며, 가능한 경우 전체 경로를 사용합니다:
    • cat
    • chmod
    • echo
    • head
    • id (additionally ran via sudo)
    • ls
    • mkdir
    • pwd
    • rm
    • sh
    • tail
    • tr
    • uname
  • Linux 기본 명령 외에는, Sandfly 바이너리가 연결된 사용자의 홈 디렉터리 내 임의로 생성된 디렉터리에 업로드됩니다. 기본 이름은 'sandfly'이지만, 서버 설정에서 하나 이상의 대체 이름으로 변경할 수 있습니다. 디렉터리 형식은 <timestamp>.<random_chars>이며, 스캔이 끝나면 전체 디렉터리가 제거됩니다.

Sandfly가 보호할 수 있는 Linux 배포판은 무엇인가요?

  • Sandfly는 시장의 어떤 제품보다 가장 넓은 범위의 Linux 시스템을 보호하며, 사실상 모든 Linux 배포판을 보호합니다.
  • 예를 들어, 10년 이상 된 시스템부터 클라우드 제공자의 최신 배포판까지 광범위하게 포괄합니다. Sandfly는 별도의 특별한 수정 없이 Intel, AMD, Arm, MIPS, IBM Power CPU에서 실행되는 Linux 버전에서 동작합니다. 또한 Raspberry Pi와 같은 MIPS 또는 ARM 프로세서를 사용하는 임베디드 시스템도 지원합니다. 기본적으로 agentless 아키텍처이므로, Sandfly가 요구하는 것은 Linux 호스트에서 SSH가 실행 중이어야 한다는 점뿐입니다.
  • Sandfly는 아래의 Linux 배포판들에 대해 테스트되었으며, 이 외의 많은 배포판에서도 동작합니다:
    • Alma
    • Arch
    • CentOS
    • CoreOS
    • Debian
    • Fedora
    • Oracle
    • RedHat
    • Rocky
    • Suse
    • Ubuntu
    • Amazon Linux Images
    • Digital Ocean Linux Images
    • Microsoft Azure Images
    • Raspberry Pi and other embedded systems
    • Customized Distributions

Sandfly가 스캔할 수 있는 가장 오래된 OS 또는 커널은 무엇인가요?

  • Sandfly는 특정 OS 배포판에 종속되지 않으며, 커널의 세대에 좌우됩니다. SSH 접근이 필요하다는 점을 제외하면, 현재 x86 아키텍처에서 커널 버전 2.6.32 이상을 지원합니다. 다른 아키텍처는 더 최신의 커널 버전을 요구할 가능성이 높습니다.

Sandfly가 Mac OS를 스캔할 수 있나요?

  • Mac OS는 Linux와 관련이 없는 커널을 사용합니다. 이는 오래된 BSD Unix 커널을 기반으로 한 대학 연구 프로젝트에서 시작된 Mach 커널로 출발하여, NeXT를 위해 XNU 커널로 발전했고, Apple이 이를 인수하여 Mac OS X의 기반으로 사용했습니다. 또한 Mac OS의 커맨드라인 사용자 공간도 Linux의 GNU 사용자 공간이 아니라 BSD 계열에서 비롯되었습니다.
  • 결론적으로 말해, Sandfly는 Mac OS를 스캔할 수 없습니다. 커맨드라인 인터페이스가 비슷해 보일 수 있으나, 내부적으로 Mac OS는 Linux와 코드 한 줄도 공유하지 않는 완전히 다른 커널을 사용합니다. 또한 Mac OS의 발전 방향은 다른 비-Linux 상용 Unix들과 비교해도 여러 영역에서 더욱 다른 방식을 취하고 있습니다.

Sandflies:

“Sandfly halted with a SIGKILL signal” 오류의 원인은 무엇인가요?

  • SIGKILL은 Linux OOM killer가 프로세스를 종료할 때 사용하는 동작과 일치합니다. 또는 호스트에 악의적인 행위자가 존재할 가능성도 있습니다.
  • Linux OOM killer에 의한 것이라면, dmesg 또는 커널 로그에 관련 항목이 남습니다. 예: dmesg | grep -i 'out of memory' 를 실행하여 Sandfly 관련 프로세스를 종료한 기록이 있는지 확인하세요. 그렇지 않다면 잠재적 보안 사고로 간주하여 조사를 진행해야 합니다.

Sandfly의 타임아웃 시간을 변경하려면?

  • 아래 단계를 따라 원래 Sandfly를 비활성화하고, 향후 스케줄 스캔에 사용할 사용자 정의 버전으로 대체하세요:
  • 📘

    참고: 이 해결책에 관하여...

    • 사용자 정의 Sandfly를 생성할 수 있는 라이선스가 필요합니다.
    • 타임아웃 값의 단위는 초이며, 허용되는 최대 타임아웃은 3600초(1시간)입니다.
  1. 사용자 정의하려는 sandfly의 상세 페이지를 찾아 열어주세요.
  2. 오른쪽 상단에서 sandfly가 활성 상태라면 Deactivate 버튼을 클릭하여 비활성화합니다.
  3. 오른쪽 상단의 Clone 버튼을 클릭하면 사용자 정의 sandfly 편집 폼이 열립니다.
  4. JSON이 표시되는 영역 상단 근처에서 "name"를 찾은 뒤, 값 끝에 고유한 텍스트(예: "_10mTimeout")를 추가하여 sandfly 이름을 용도에 맞게 고유하고 설명적으로 만듭니다.
  5. 동일한 JSON 영역에서 "active"와 "custom" 키를 찾아, 두 값 모두를 false 에서 true 로 변경합니다.
  6. 동일한 JSON 영역에서 "max_timeout"을 찾아 원하는 지속 시간으로 값을 변경합니다.
  7. 페이지 상단 또는 하단의 Save 버튼을 클릭하면 새로운 사용자 정의 Sandfly가 생성됩니다.
  8. 필요에 따라 스케줄, whitelists, 그리고/또는 result profiles를 조정하여 사용자 정의 sandfly를 지원합니다.

제품을 업데이트/개선하면 사용자 정의 Sandfly는 어떻게 되나요?

  • 과거에도 고객의 별도 조치 없이 사용자 정의 sandfly 모듈을 새로운 포맷으로 자동 업데이트해 왔습니다. 당분간 이 방침은 계속될 가능성이 매우 높습니다.

다른 보안 제품에 대해 Sandfly가 경고하는 이유는 무엇인가요?

Sandfly는 Linux 호스트에서 비정상적이거나 의심스러운 활동을 정교하게 탐지하도록 설계되었습니다. 안타깝게도 때때로 다른 보안 제품의 정상적인 활동이 이에 포함되기도 합니다.

sandfly 규칙은 알려진/특정 사례를 무시할 수 있는 기능을 갖추고 있지만, 악성 행위가 해당 환경을 모방하여 보호를 우회할 수 있으므로 기본값으로는 의도적으로 제외하지 않습니다.

이러한 상황에서는 먼저 해당 경고를 면밀히 검토할 것을 권장하며, 정당한 동작으로 판단될 경우 향후 경고를 관리하는 방법으로 다음 두 가지 중 하나를 권합니다:

  • Whitelisting 기능을 사용해, 지정한 시스템 전반의 향후 결과에서 경고를 통과(pass)로 전환할 수 있습니다. 보다 정확한 검사를 위해 규칙에 파일의 해시를 포함하세요. 경로를 포함한 파일명만으로는 상대적으로 쉽게 대체될 수 있습니다.
  • Result Profiles 기능을 사용해 연관된 프로필에 바이너리 해시를 고정할 수 있습니다.

규칙에서 해시를 사용하는 경우, 패치나 파일 업데이트, 악성 활동에 의한 교체 등 어떤 변경이라도 해시 값이 바뀔 수 있습니다. 이로 인해 경고가 다시 나타날 수 있으므로, 해시를 사용할 때에는 주기적인 재검토와 규칙 관리가 필요합니다.

특정 설치 패키지 또는 애플리케이션에 대해 Sandfly가 경고하는 이유는 무엇인가요?

Sandfly는 많은 기본 배포판 설치 환경에서 오탐 없이 테스트되었습니다. 하지만 고객 환경은 각각 다르므로, 환경에 따라 소수의 오탐을 whitelist 처리해야 할 수도 있습니다.

민감 데이터:

전송 중 민감 데이터는 암호화되나요? (예: 시스템↔클라이언트)

  • UI에서 서버로의 모든 상호작용은 암호화됩니다. 또한 조사 대상 시스템과 서버 간의 모든 송수신 데이터, 그리고 서버로 반환되는 데이터 역시 암호화됩니다.

저장 시 민감 데이터는 암호화되나요? (예: 디스크 암호화, at-rest)

  • 서버에 저장되는 모든 자격 증명은 항상 암호화됩니다. 다만 결과 데이터, 서버 구성 등은 데이터베이스 내에서 암호화되지 않습니다.

이 페이지가 도움이 되었나요?