보안관제자동화 에이전트 회고 14주차 - Bounded RSI

아키텍처5분English

English version: Security Operations Automation Agent Retro, Week 14 - Bounded RSI

시스템이 참조하는 위협 지표에는 두 가지 출처가 있다. 하나는 외부 검증. 별도 기관이나 커뮤니티가 이미 악성으로 확인해서 등록해 둔 지표다. 다른 하나는 자체 생성. 시스템이 자기 탐지·판정 이력을 보고 “이건 여러 번 관측됐고 실제로 공격으로 확인됐으니 앞으로도 악성으로 취급하자”고 스스로 만들어낸 지표다.

이 구분이 중요한 이유는 자체 생성 지표가 시스템 자신의 과거 판단을 근거로 만들어진다는 데 있다. 외부 검증 지표는 제3자가 독립적으로 확인한 것이지만, 자체 생성 지표는 시스템이 “내가 전에 이렇게 판단했으니 앞으로도 이렇게 판단하겠다”고 스스로에게 근거를 대는 셈이다. 이 자기참조 구조를 통제 없이 방치하면, 한 번의 오판이 다음 판단의 근거가 되고 그 판단이 또 다음 근거가 되는 식으로 검증 없는 확신만 누적될 수 있다.

원칙은 관리 차원에서 먼저 세웠다

자기개선 루프를 설계하는 시점에 이 위험은 숫자 없이도 자명했다. 그래서 개선 후보 생성과 실제 반영을 분리하고, 사람의 승인 없이는 반영되지 않게 하고, 버전을 남겨 롤백 가능하게 만드는 걸 원칙으로 먼저 세웠다. 이 시점엔 “실제로 이만큼 위험하다”를 보여주는 측정치가 없었다. 관리론으로만 세운 원칙이었다.

원칙이 맞았는지는 한 달쯤 뒤, 이 원칙이 아직 모든 경로에 완전히 걸리지 않은 구간을 감사하다가 우연히 확인했다.

측정 대상

자체 생성 지표가 판단에 얼마나 개입하는지 확인하는 질의 두 개를 돌렸다.

Q1: 활성 상태인 자체 생성 지표 수
Q2: 자체 생성 지표 단독 매칭(외부 검증 지표 없음)이 영향을 준 판단 건수

3주 전 같은 질의 결과와 나란히 놓으면 이렇다.

지표3주 전지금배율
Q1: 활성 자체 생성 지표32862.7×
Q2: 단독 매칭 영향 판단1135135×

Q1과 Q2의 배율이 맞지 않는다. 지표 수는 3배 미만으로 늘었는데, 그 지표가 실제 판단에 관여한 횟수는 두 자릿수 배로 늘었다.

원인: 채점 직전에 출처 정보가 사라진다

지표는 저장 시점에 출처 정보(외부 검증 / 자체 생성)를 갖는다. 조회부터 채점까지 세 단계를 거치는데, 이 정보가 두 번째 단계에서 빠진다.

저장소 조회 (출처 정보 있음)
  → 조회 계층: 출처 정보를 읽지 않고 활성 여부만 확인
    → 채점용 객체 변환: 출처 정보를 담을 자리 자체가 없음
      → 강도 판정: 출처를 모른 채 나머지 조건만으로 등급 계산

강도 판정 규칙은 대략 이렇다. 최근에 관측됐고 신뢰도가 높고 공격 유형이 확인되면 최고 강도. 최근에 관측됐거나 서로 다른 여러 출처에서 동시에 관측됐으면 그다음 강도. 자체 생성 지표는 시스템 하나가 만든 단독 출처라 “여러 출처에서 관측됐다”는 조건엔 안 걸리지만, “최근에 관측됐다” 하나만으로 그다음 강도를 받는다. 조건 어디에도 “외부 검증인지 자체 생성인지”를 구분하는 항목이 없으니, 강도 판정 결과만 보고는 두 지표를 구분할 수 없다. 채점 로직 기준으로는 완전히 동급이다.

왜 배율이 어긋났는지

자체 생성 지표를 만드는 로직은 후보를 고를 때 이미 외부에 등재된 지표를 제외한다. 그래서 지표 수 자체는 시간에 비례해 늘어난다. 판단 개입 횟수가 그보다 가파르게 늘어난 이유는 직접 측정하지 않았고, 다음과 같이 추정한다. 개입 총량은 지표 수와 지표당 채점 관여 확률의 곱에 가깝고, 강도 판정에 출처 구분이 없는 이상 지표당 관여 확률도 외부 검증 지표와 같은 수준으로 유지될 것이다. 그렇다면 지표 수가 늘수록 개입 총량은 그보다 빠르게 증가한다. 이 추정을 반박하려면 지표당 관여 확률을 시점별로 따로 재야 하는데, 이번엔 하지 않았다.

135건은 전부 외부 검증 지표가 하나도 없는 단독 매칭이었다. 상한을 두 가지 방식으로 시뮬레이션했다.

안조건영향받는 판단1단계 강등2단계 강등
출처 기준 상한외부 검증 없는 단독 매칭은 등급 무관하게 강도를 최하위로 고정135268
등급 기준 상한확정 등급만 상위 강도 허용, 검증 대기 등급은 최하위로 고정660

등급 기준 상한은 거의 무효과였다. 검증 대기 등급 자체가 6건뿐이고, 그마저 전부 사람이 승인한 지표라 이미 신뢰도가 확보돼 있었기 때문이다. 실효성 있는 쪽은 출처 기준 상한인데, 이건 이미 정탐으로 판정했거나 실제로 대응까지 한 확정 등급 지표까지 강도를 깎는다. 검증된 판단의 정확도와 자기참조를 막는 것, 이 둘을 맞바꾸는 트레이드오프가 남는다.

원칙과 증거는 다른 시점에 온다

이 사례가 자기개선 루프에 경계를 두기로 한 계기는 아니다. 원칙은 이 측정보다 먼저 있었다. 이 측정이 보여준 건 두 가지다. 첫째, 원칙이 상정했던 위험이 실측 가능한 규모로 실재한다(135배). 둘째, 원칙이 모든 구현 경로에 균일하게 내려오지는 않았다(채점 경로의 출처 정보 누락). 설계 원칙을 세우는 것과 그 원칙을 모든 구현 경로에 실제로 관철하는 것은 별개의 작업이다.

판단 기준

자기개선 루프를 설계하는 단계라면 숫자를 먼저 기다릴 필요는 없다. 자기 출력이 검증 없이 다음 판단의 입력이 되는 구조는, 실제로 문제가 될 때까지 기다리지 않고 관리 차원에서 먼저 경계를 두는 게 맞다. 이 사례가 보여준 건 그 경계가 “과잉 대비”가 아니라는 사후 증거일 뿐이다.

이미 그런 루프가 돌고 있다면 원칙을 세웠다는 사실 자체를 안심의 근거로 삼지 않는다. 원칙이 실제 구현 경로 하나하나에 온전히 반영됐는지는 별도로 확인해야 한다. 특히 지표 수 같은 규모 지표와, 그 지표가 실제 의사결정에 관여하는 빈도는 따로 측정해야 한다. 둘의 증가율이 다르면, 그 차이가 경계가 빠진 지점을 가리킨다.