Java Security¶
이 가이드에서는 Beacon Java 1.3.4를 사용합니다. 보안은 1.1.0부터 전체 에이전트 JAR을 포함합니다. Java 제로 코드 가이드에서와 동일한 -javaagent 구성을 계속 사용하십시오. 별도의 보안 JAR을 설치하거나 유지 관리할 필요가 없습니다.
먼저 Security 수신기 설정에 따라 DataKit 로그 파이프라인을 준비합니다. 수신측 검증은 실제 수신된 기록을 기반으로 해야 합니다.
보안 활성화¶
활성화하기 전에 1.3.4 Release에서 전체 에이전트 JAR을 다운로드하고 이름을 beacon-javaagent.jar로 지정하세요.
export BEACON_SECURITY_ENABLED=true
export OTEL_SERVICE_NAME=orders
export OTEL_RESOURCE_ATTRIBUTES=service.namespace=shop
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:9529/otel
java -javaagent:./beacon-javaagent.jar -jar orders.jar
에이전트는 OpenTelemetry 로그를 통해 보안 탐지 결과 및 런타임 종속성 매니페스트를 내보냅니다. 로컬 CycloneDX 파일은 진단 출력을 명시적으로 활성화해야 합니다. 보안은 기본적으로 꺼져 있습니다. 보안 결과는 확인된 취약점이 아니라 모델링된 런타임 관찰 또는 후보 위험을 나타냅니다.
보안 탐지 결과 및 분석¶
Java 1.3.0는 처음으로 요청별 로깅 및 요청 수준 공격 증거를 지원합니다. Java 1.3.3는 스키마 v2를 사용합니다. occurrence_id는 evidence_id를 대체하고 온라인 누적 개수를 제거하며 빈 증거 배열을 생략할 수 있도록 허용합니다. Java 1.3.0 A/B/C 예제, v1 필드, v2 마이그레이션, 상태 의미 및 전달 제한 사항은 보안 탐지 결과와 증거를 참조하세요. 요청 기록 내보내기, 상세한 증거 샘플링, OpenTelemetry Trace 샘플링은 서로 독립적입니다.
SQL 분석을 명시적으로 활성화해야 합니다. SQL 호환성만을 위해 BEACON_SECURITY_ANALYSIS_SQL_DIALECT=ansi를 설정합니다. 기본값은 unknown입니다. 제한된 어휘 하위 집합은 작은따옴표로 묶인 문자열, 큰따옴표 이스케이프, 따옴표 붙은 식별자, 십진수, 연산자, 괄호 및 주석을 지원합니다. 이는 완전한 SQL 파서가 아니며 키워드 탐지기도 아닙니다. 백슬래시 이스케이프, 달러 인용, 역따옴표, 대괄호 인용, 닫히지 않은 인용, 오염에만 영향을 받는 식별자는 모두 unknown로 유지됩니다. 고정된 템플릿은 매개변수 값을 별도로 바인딩하는데, 이는 문을 준비하기 전에 신뢰할 수 없는 SQL을 접합하는 것과 다릅니다. 일반 바인딩 값은 SQL 템플릿 삽입 검색을 발생시키지 않습니다.
쉘 분석은 따옴표, 이스케이프 및 제어 구분 기호를 포함하여 sh, bash, dash, ksh, zsh에 독립 매개변수로 전달되는 간단한 POSIX 스크립트를 지원합니다. 확장, 대체, 리디렉션, 복합 구문, Windows Shell 및 Runtime.exec(String)에서 다시 빌드된 스크립트는 unknown로 유지됩니다. 일반 argv 입력은 셸 주입으로 분류되지 않지만 여전히 애플리케이션별 인수 위험이 있을 수 있습니다.
분석은 최대 8,192개의 UTF-16 코드 단위와 64개의 정확한 오염 범위를 처리합니다. 지원되지 않는 입력, 부정확한 범위 및 예산 소진은 모두 불확실성을 유지합니다. 분석에서는 익스플로잇 재생, 네트워크 검색, JDBC 메타데이터 쿼리 또는 파일 시스템 구문 분석을 수행하지 않습니다. Java 1.3.4에는 네트워크 허용 목록이나 파일 시스템 루트 디렉터리 정책이 없습니다. 경계 정책에 의존하는 SSRF, 실행 파일 선택 및 경로 판단은 여전히 unknown이며 정규화는 보안을 의미하지 않습니다. 릴리스된 분석 참조를 참조하세요.
매개변수 참조¶
| 환경 변수 | 기본값 | 용도 |
|---|---|---|
BEACON_SECURITY_ENABLED |
false |
Security 수명 주기와 런타임 관측을 활성화합니다. |
BEACON_SECURITY_EXPORT_NO_EVIDENCE_ENABLED |
false |
true로 설정한 다음 attack_evidence.status=no_evidence의 보안 탐지 결과을 내보냅니다. |
BEACON_SECURITY_SBOM_ENABLED |
true |
Security가 활성화되면 런타임 SBOM을 수집합니다. |
BEACON_SECURITY_LOCAL_OUTPUT_ENABLED |
false |
프로세스 로컬 진단 스냅샷을 활성화합니다. |
BEACON_SECURITY_OUTPUT |
./beacon-security-output/<instance-id> |
진단 스냅샷 디렉터리를 설정합니다. |
BEACON_SECURITY_FINDINGS_SAMPLE_SECONDS |
300 |
요청 로깅 또는 추적 샘플링을 제어하지 않고 검색당 전체 증거 샘플링 간격(초)입니다. |
BEACON_SECURITY_ANALYSIS_SQL_DIALECT |
unknown |
지원되는 SQL 어휘의 하위 집합을 활성화하려면 ansi로 설정합니다. |
BEACON_SECURITY_EVIDENCE_FILE |
설정되지 않음 | 선택적 진단 JSONL 파일을 설정합니다. |
일반 OpenTelemetry 변수로 리소스 식별, 전송 및 인증을 설정합니다. 로컬 출력은 진단용이며 영구 저장 또는 클러스터 수준 전송 수단이 아닙니다.
보안 탐지 결과 내보내기 정책¶
attack_evidence.status=no_evidence인 보안 탐지 결과는 기본적으로 내보내지 않습니다. unknown, suspected 및 SBOM의 내보내기 대상 여부는 바뀌지 않습니다. 이전 동작을 복원하려면 BEACON_SECURITY_EXPORT_NO_EVIDENCE_ENABLED=true를 설정하세요. 이 스위치는 OpenTelemetry Logs와 증거 JSONL에 영향을 주지만 내부 탐지, 로컬 탐지 스냅샷, Span 요약을 비활성화하지 않으며 동일 요청 내 증거 갱신도 막지 않습니다. 공통 내보내기 정책를 참조하세요.
Java는 JVM 매개변수 -Dbeacon.security.export.no-evidence.enabled=true를 통해 활성화될 수도 있습니다. 매개변수를 -jar 앞에 배치하십시오.
Kubernetes¶
정식 릴리스의 전체 Agent JAR을 애플리케이션 이미지에 포함하거나 고정 버전 initContainer 예제를 참조하세요. 공개 이미지는 ghcr.io/beacon-observability/beacon-java:1.3.4를 사용하고 프로덕션 요구 사항에 맞게 이미지 다이제스트를 고정하세요. init container가 동일한 JAR을 emptyDir에 복사하며 애플리케이션은 JAVA_TOOL_OPTIONS로 이를 로드합니다. 일반 워크로드에서는 로컬 출력을 비활성화된 상태로 유지하세요.
일반 제로 코드 원격 측정을 유지하면서 보안을 끄려면 BEACON_SECURITY_ENABLED를 제거하거나 false로 설정하십시오.