부제: 대상 소스를 안 고치고 경계에 프로브를 꽂는다 — 관측과 보안은 한 뿌리다
이 시리즈를 처음 열게 한 질문이 있었다. 관측 도구를 쓰다가 이런 경험을 했다.
각 서비스는 잘 도는데, 모니터링하려고 로그를 남기려면 상식적으로는 모든
서비스의 로깅 함수를 갈아끼우거나 코드를 고쳐야 한다. 그런데 Tempo·Beyla 같은
추적 시스템은 코드를 한 줄도 안 고치고 요청의 흐름을 잡아냈다. 그게 참
편했다.
그때 든 직감이 하나 있었다. "이거, 보안 업계에서 윈도우 메시나 IPC·RPC 통신을
감시하던 기법과 연관 있는 거 아닐까?" 조사해 보니 — 정확히 그랬다. 이번
편(시리즈 C의 마지막)은 그 연결을 정리한다.
한 줄 정의부터
| 개념 | 한 줄 정의 |
|---|---|
| 동적 계측(dynamic instrumentation) | 실행 중인 프로그램을 재컴파일 없이 가로채 관찰·변경하는 것 |
| auto-instrumentation | 앱 코드를 안 고치고 경계에 계측기를 끼워 신호를 뽑는 관측 방식 |
| 후킹(hooking) | 함수·이벤트·통신을 가로채는 기법 — 보안의 전통 무기 |
| eBPF | 커널에 안전한 프로그램을 심어 관찰·필터하는 현대적 커널 프리미티브 |
코드를 안 고치는 세 가지 방법
C1에서 Beyla·Linkerd를 "코드 무수정 관측의 다리"라고 했다. 실제로 앱을 안 고치고
계측하는 방법은 크게 셋이다.
- 바이트코드 에이전트 — 예: OpenTelemetry Java Agent를
-javaagent로 붙이면,
클래스가 로딩되는 순간 바이트코드를 다시 써서 HTTP 클라이언트·DB 드라이버
진입점에 span 생성 코드를 주입한다(Byte Buddy 사용). 소스는 그대로다. - eBPF — Beyla·Pixie는 커널에 프로브를 심어 uprobe/kprobe로 함수 진입과
소켓 송수신을 관찰한다. 에이전트조차 앱에 안 붙고 커널에서 훔쳐본다. - 사이드카/서비스 메시 — Linkerd·Envoy는 Pod 옆 프록시가 트래픽을 가로채
거기서 메트릭·트레이스를 만든다.
셋 다 공통점이 하나다. 대상 소스를 건드리지 않고, 경계(진입점·커널·네트워크)에
프로브를 꽂는다. 그리고 바로 이 발상이 보안 업계의 오래된 무기와 같다.
같은 조상 — 관측과 보안은 한 뿌리다
정리하면 이렇다. 두 세계는 같은 기법을 쓰고, 목적만 다르다.

- 함수 가로채기 — 보안의 Detours 인라인 훅·IAT 후킹(Windows) ↔ 관측의
LD_PRELOAD·uprobe(Linux). 둘 다 "함수 진입을 바꿔치기". - 이벤트 관찰 — ETW(Event Tracing for Windows) ↔ tracepoint·eBPF.
- 네트워크 감시 — WFP(Windows Filtering Platform) ↔ eBPF/XDP.
- EDR/상시 관찰 — 보안 제품(EDR)은 과거 SSDT 커널 훅에서 지금은 커널 콜백·
ETW-Ti로 왔고, 관측의 Beyla·Pixie·Falco는 eBPF로 같은 일을 한다.
여기서 핵심 하나. Beyla·Pixie가 쓰는 uprobe·kprobe·eBPF는, EDR과 루트킷이
쓰던 커널 후킹을 커널이 공식적으로 안전하게 열어 준 판(eBPF) 이다. 문자 그대로
같은 커널 프리미티브를 쓴다. 그리고 OTel Java Agent의 바이트코드 재작성은
인라인 훅의 JVM판이다. 갈리는 건 오직 의도 — 가로채서 관찰하느냐(관측),
조작하거나 탐지하느냐(보안).
RPC/IPC 감시 = 분산 트레이싱의 다른 얼굴
내가 처음 떠올린 "IPC·RPC 감시" 직감이 특히 정확했던 지점이 여기다.

분산 트레이싱은 요청이 서비스 경계를 넘을 때마다 traceparent 헤더(같은
trace-id)를 전파한다. 그러면 서로 다른 프로세스가 남긴 span들이 하나의 요청
으로 묶여, 부모-자식 관계의 호출 그래프(span 트리) 가 된다. "어느 구간이
느린가"가 한눈에 보인다.
보안은 같은 그림을 다른 목적으로 그린다. ETW의 RPC 공급자나 IPC 필터로
프로세스 간 호출을 상관(correlate) 해 호출 그래프를 재구성하고, 거기서
침해·이상 행위를 찾는다. 경계를 넘는 호출을 하나로 잇는다는 문제는 똑같다 —
하나는 병목을 찾으려고, 하나는 공격을 찾으려고.
정리 — 시리즈를 닫으며
- 코드를 안 고치고 추적하는 auto-instrumentation의 정체는 동적 계측이다 —
바이트코드 에이전트·eBPF·사이드카. - 이건 보안 업계의 후킹(Detours·ETW·WFP·EDR)과 같은 조상을 공유한다.
Beyla·Pixie의 eBPF는 EDR 커널 후킹의 안전판, OTel 에이전트는 인라인 훅의
JVM판 — 같은 기법, 다른 의도. - 분산 트레이싱의 span 트리와 보안의 RPC/IPC 호출 그래프는 같은 그림이다.
- 그래서 그때 그 관측이 편했던 건 우연이 아니라, 관측과 보안이 기술적으로 같은
뿌리여서였다.
이렇게 개념 시리즈 A·B·C를 마친다. 컨테이너의 정의(A)에서, 네트워킹·격리의
안쪽(B)을 지나, 관측과 보안의 공통 뿌리(C)까지 — 매 편 "개념마다 한 줄 정의 +
실제로 확인 + 쓰기에 어긋나지 않을 만큼만" 이라는 한 가지 방법으로 걸어왔다.
도구를 만든 의도와 결에 맞게 쓰기 위한, 딱 그만큼의 지도다.
참고
- Grafana Beyla / Pixie Docs — eBPF auto-instrumentation
- OpenTelemetry — Java agent (bytecode instrumentation), W3C Trace Context (traceparent)
- Microsoft — Detours, Event Tracing for Windows (ETW), Windows Filtering Platform
- Linux man-pages —
uprobes,kprobes,bpf(2)
답글 남기기