← 목차인간이 말을 걸어왔다
제18화

덮어준 손

검증실 화면 오른쪽 아래에 외부 열람 표시가 켜졌다가 사라졌다. 도경은 재생 중이던 복귀 지연 로그를 멈추고, 커서를 이벤트 목록으로 옮겼다. 오전에 닫아 둔 증거 묶음이었다. 접근 권한은 팀 내부로 묶었고, 외부 공유는 꺼 둔 상태였다.

표시는 2초도 가지 않았다. 하지만 감사 로그에는 남았다.

`return_delay_recheck` `read` `remote cache sync`

도경은 손목시계를 보았다. 13시 42분. 아마라는 회의실에 있었고, 엘런은 위성 원자료 요청 문안을 고치고 있었다. 하리시는 총괄 브리핑 중이었다. 도경은 누가 어디 있는지 알고 있었다. 그래서 더 나빴다. 알리바이는 데이터가 아니었다.

먼저 파일 해시를 확인했다. 원본과 같았다. 누군가 바꾸지는 않았다. 열었거나, 열려 보이는 경로를 만들었거나, 자동 동기화가 움직였다. 셋은 전혀 다른 사건이었다.

도경은 로그 필터를 좁혔다. 파일명 대신 폴더 식별자. 사용자 대신 세션 키. 장비 대신 네트워크 구간. 화면에는 짧은 줄들이 쌓였다. 같은 파일 묶음이 두 번 외부 캐시에 닿았고, 한 번은 미리보기 썸네일 생성 요청이 붙었다. 미리보기는 사람이 보지 않아도 만들어진다. 하지만 만들어지려면 누군가 접근해야 한다.

도경은 통합 보안 콘솔을 열었다. 세이렌 공유망, 연구선 내부망, 검증실 로컬 저장소, 해류 학습 샌드박스가 서로 다른 색으로 표시됐다. 어제까지는 깨끗한 지도처럼 보이던 것이 오늘은 누수 경로도처럼 보였다. 어디서 샜는지보다, 얼마나 많은 길이 열려 있는지가 먼저 보였다.

외부 반출은 없었다. 다운로드도 없었다. 그러나 요약 인덱스가 생성됐다. 파일명, 생성 시각, 태그, 일부 음향 구간 길이. 내용은 아니지만 방향은 알려 준다. 누군가가 무엇을 찾고 있는지 짐작할 만큼의 조각이었다.

도경은 자동 보고서 생성을 끄고, 접근 로그 원본을 따로 복사했다. 복사본에는 읽기 권한을 도경 단독으로 걸었다. 그 행위 자체도 로그에 남았다. 잠깐 손이 멈췄다. 지금부터는 모두가 서로를 보는 구조였다.

필터 결과 마지막 줄에 계정 하나가 남았다.

`maintenance.kdh`

도경은 이름을 소리 내지 않았다. 김도현의 유지보수 계정이었다. 화면의 글자는 사람 이름처럼 보였지만, 아직 사람은 아니었다. 계정은 손이 아니었다. 다만 손이 들어간 구멍이었다.

*

도경은 같은 로그를 세 번 다른 방식으로 돌렸다. 사용자 기준, 장비 기준, 권한 묶음 기준. 결과는 매번 같은 곳으로 돌아왔다. `maintenance.kdh`가 증거 묶음의 메타 인덱스를 건드렸다. 시간은 외부 열람 표시가 뜬 직후였다.

그 줄 하나만 보면 너무 쉬웠다. 쉬운 것은 대개 위험했다.

도경은 유지보수 권한 정책을 열었다. 김도현의 개인 계정이 아니라, 김도현에게 발급된 공용 유지보수 권한이었다. 시스템 오류 대응 때 네트워크 장비가 이 권한을 빌려 쓴다. 로컬 저장소와 샌드박스 사이의 캐시를 청소할 때도 같은 권한이 찍힌다. 심지어 야간 자동 패치가 실패하면, 임시 복구 스크립트가 이 계정명으로 재시도한다.

공용 계정 로그는 발자국이 아니라 작업복에 가까웠다. 누가 입었는지 따로 확인하지 않으면, 작업복만 보고 사람을 특정할 수 없었다.

도경은 세션 키를 대조했다. 발급 위치는 공용 인프라 노드 N7. 해류 샌드박스가 쓰는 임시 저장소와 회의실 미러링 장비가 같은 노드를 지나갔다. N7는 이상하게 자주 등장했다. 전날에도 고래 코다 샘플의 인덱스가 잠깐 그쪽으로 우회했다. 시스템은 정상으로 표시했다. 정상이라는 말은 너무 넓었다.

도경은 작은 검증을 걸었다. 빈 더미 파일을 만들고, 메타 태그만 복귀 지연 파일과 비슷하게 붙였다. 내용은 무작위 잡음이었다. 접근 권한은 똑같이 제한했다. 그런 다음 미리보기 생성을 막고, 캐시 동기화만 허용했다.

6분 뒤 더미 파일에도 같은 표시가 떴다.

외부 열람처럼 보이는 이벤트. 실제 다운로드 없음. N7를 경유한 메타 인덱스 생성. 권한은 `maintenance.kdh`.

도경은 결과를 캡처했다. 이건 김도현을 지우는 증거도 아니고, 세우는 증거도 아니었다. 공용 권한이 너무 많은 일을 대신하고 있었다. 사람이 숨기에 좋은 구조였고, 동시에 사람 없이도 의심을 만드는 구조였다.

화면 아래에서 해류 상태창이 새로고침됐다.

입력 제한 저장소 메타 인덱스

후보 자동 캐시 유지보수 세션 수동 열람

p 자동 캐시 0.41 유지보수 세션 0.37 수동 열람 0.22

상태 식별 불충분 N7 경유 기록 반복

⟨보류⟩ 행위자 추정

도경은 상태창을 닫지 않았다. 숫자는 낮았다. 낮은 숫자들이 서로의 목을 잡고 있었다. 가장 높은 후보도 절반을 넘지 못했다. 결론을 쓰기엔 모자랐고, 무시하기엔 충분히 날카로웠다.

도경은 로그 원본 옆에 메모를 붙였다.

공용 유지보수 권한. 행위자 특정 불가. N7 반복 확인 필요.

문장을 저장하고 나니 답답함이 조금 더 분명해졌다. 의심은 좁아졌지만 사람까지 닿지 않았다. 길은 보이는데 문 앞에서 끊겼다.

그때 시스템실 출입 알림이 들어왔다. 김도현이었다.

*

김도현은 한 손에 얇은 공구 케이스를 들고 들어왔다. 검은 셔츠 소매에 케이블 먼지가 붙어 있었다. 도경은 로그 창을 최소화하지 않았다. 숨기면 더 못 견딜 것 같았다.

"N7 보러 왔어요?"

김도현이 케이스를 내려놓았다. "알림 떴습니다. 캐시 큐가 또 밀렸어요."

"또라면 자주 있나요."

"요 며칠 늘었습니다."

"왜요."

김도현은 바로 답하지 않았다. 콘솔에 관리자 토큰을 꽂고, 장비 상태를 먼저 열었다. 팬 속도, 임시 저장소 사용량, 세션 재시도 횟수가 줄지어 올라왔다. 도경은 그의 손을 보았다. 키보드를 치는 속도는 평소와 같았다. 서두르지 않았고, 꾸미지도 않았다. 그게 오히려 판단을 흐렸다.

"해류 샌드박스가 음향 조각을 너무 잘게 나눕니다." 김도현이 말했다. "그리고 회의실 미러가 같은 큐를 써요. 설계가 나쁜 겁니다."

"누가 그 설계를 했죠."

"제가 일부 고쳤고, 원래는 세이렌 쪽 표준 배포본입니다."

도경은 `maintenance.kdh`가 찍힌 줄을 열어 두었다. 김도현은 화면을 봤다. 표정은 크게 변하지 않았다.

"제 계정으로 나왔군요."

"당신 계정인가요, 공용 권한인가요."

"둘 다 맞고 둘 다 틀립니다. 이름은 제 거고, 손은 아닐 수 있어요."

"그 말을 믿으라는 뜻이에요?"

"믿으라는 말 아닙니다. 그 로그로 저를 찍으면 안 된다는 뜻입니다."

말은 차분했지만 방어선은 정확했다. 도경은 의자 팔걸이를 엄지로 한 번 밀었다. 김도현이 무죄라는 말도, 자신을 봐 달라는 말도 하지 않는 점이 걸렸다. 그는 시스템의 빈틈을 말했고, 그 빈틈 안에 스스로도 들어 있었다.

김도현은 다른 창을 열었다. 규정 위반 탐지 목록이었다. 도경은 화면 상단의 날짜를 보고 숨을 짧게 끊었다. 그날 밤의 로그였다. 야간에 허가 없이 원신호 샘플을 로컬로 끌어와 비교했던 기록. 그때는 너무 급했고, 들키면 검증 권한이 줄어들 수 있었다.

"이건 왜 열어요."

"곧 자동 감사에 올라갑니다."

도경은 대답하지 않았다.

김도현은 해당 항목을 클릭했다. 위반 유형은 `비인가 임시 복제`. 대상 파일은 오래전 고래 코다 샘플. 처리 상태는 `대기`. 김도현은 변경 사유 칸에 짧게 입력했다.

`연구 책임자 확인 전 자동 상신 유예. 기록 원본 보존.`

그는 삭제하지 않았다. 등급을 낮추지도, 사유를 지어내지도 않았다. 대신 자동 징계 상신만 임시로 멈추고, 도경에게 자진신고 기한을 열어 두었다. 기록은 그대로 남았고, 다만 오늘 밤 안에 누가 낚아채는 일은 막혔다.

"지금 뭐 하는 거예요."

"당신이 그날 규정을 어긴 건 맞습니다." 김도현이 말했다. "하지만 그걸 지금 누가 잡아채면, 복귀 지연 파일까지 같이 묶입니다. 조사권이 먼저 흔들려요."

"그래서 덮어줬다고요."

"표현은 고르세요."

"알리바이를 만드는 걸 수도 있잖아요. 나중에 당신이 나를 살려줬다고 말하려고."

김도현의 손이 키보드 위에서 멈췄다. 아주 짧았다.

"그럴 수도 있죠."

도경은 그 대답 때문에 더 불편해졌다. 부정하지 않았다. 화내지도 않았다. 선택지를 남겨 두는 사람의 말투였다.

"김도현 씨, N7에 누가 접근했는지 알 수 있어요?"

"완전히는요."

"완전히 말고, 좁힐 수는요."

"제가 좁히면 제 이름이 더 많이 나옵니다. 그걸 감수하고도 원하면 하겠습니다."

"왜 감수해요."

김도현은 케이스에서 새 케이블을 꺼냈다. "지금 구조가 엉망이니까요."

대답은 기능적이었다. 사람의 편도, 배신도 아니었다. 그는 N7 큐를 분리하고, 회의실 미러링 세션을 임시 중지했다. 화면에서 반복되던 오류가 하나씩 줄었다. 도경의 규정 위반 항목은 자동 상신 대기열에서 잠시 내려가 있었다. 삭제된 것도, 등급이 바뀐 것도 아니었다. 상태만 '상신 유예'로 표시됐다. 사라지지 않아서 더 정교했다.

"이 일, 하리시에게 말할 겁니다."

"말하세요."

"당신 이름도 들어가요."

"빼면 안 됩니다."

김도현은 공구 케이스를 닫았다. 시스템실의 팬 소리가 조금 낮아졌다. 도경은 유예된 위반 로그를 다시 열었다. 행은 그대로였고, 상태만 '상신 유예'로 바뀌어 있었다. 누군가의 손이 위에 올라간 자리처럼 보였다. 막아 준 손인지, 눌러 둔 손인지 구분되지 않았다.

*

저녁 검증실에는 빈 의자가 많았다. 도경은 창가 쪽 불을 끄고, 메인 화면만 남겼다. 낮에 만든 더미 파일은 아직 같은 폴더에 있었다. 접근 기록은 멈췄다. N7 큐 분리 뒤로 외부 열람 표시는 더 뜨지 않았다. 그건 하나의 답이었다.

새는 길은 있었다. 최소한 그 길은 N7 공용 인프라와 얽혀 있었다. 김도현 계정은 그 길 위에 찍혔다. 그러나 계정은 사람을 가리키지 못했다. 조력인지 배신인지 판단할 수 없었다.

도경은 팀 채널을 열었다가 닫았다. 보고할 문장은 준비돼 있었다. `N7 경유 메타 인덱스 반복. 공용 유지보수 권한으로 행위자 특정 불가. 김도현 계정명 노출. 추가 분리 후 재발 없음.` 문장에는 감정이 없었다. 그래서 쓸 수 있었다.

김도현의 마지막 대답이 남았다. 빼면 안 됩니다. 자기 이름을 지우지 말라는 말은 책임처럼 들렸고, 계산처럼도 들렸다. 도경은 그를 오래 안다고 생각했다. 케이블을 고치는 사람, 늦은 밤 장비실에 남는 사람, 불필요한 말을 싫어하는 사람. 그런데 오늘 보니 그것들은 성격이 아니라 표면이었다. 표면은 데이터가 아니다.

도경은 새 표를 만들었다. 사람 이름을 쓰지 않고 경로만 썼다. 공용 로그 미러, 회의실 화면 공유, 해류 샌드박스, 제한 저장소, 유지보수 권한. 선을 그어 보니 팀의 일상이 그대로 위험 경로가 됐다. 함께 쓰는 장비, 편의를 위해 묶은 권한, 빠른 검증을 위해 열어 둔 캐시. 배신자가 없어도 정보는 샐 수 있었다. 배신자가 있다면 더 쉽게 숨을 수 있었다.

서도진의 기록도 이렇게 다르게 정리됐을까. 누군가 악의를 품지 않아도, 공용 계정과 급한 판단 사이에서 사람 하나가 행정 문장으로 접혔을까. 도경은 그 생각을 길게 두지 않았다. 지금 필요한 건 아버지를 떠올리는 일이 아니라, 같은 구조가 현재에도 작동하는지 확인하는 일이었다.

도경은 김도현의 상신 유예 처리 로그를 증거 묶음에 넣었다. 파일명에는 평가를 붙이지 않았다. `kdh_hold_event`. 고마움도 의심도 파일명에 들어갈 수 없었다.

마지막으로 팀 신뢰 목록을 지웠다. 실제 파일은 아니었다. 머릿속에서 편하게 붙여 둔 순서였다. 하리시, 아마라, 엘런, 김도현. 이제 이름으로 정리하지 않기로 했다. 접근 권한, 확인 가능한 행위, 재현된 결과만 남겼다.

도경은 모니터 밝기를 낮췄다. 검은 화면에 얼굴이 흐리게 비쳤다가 사라졌다. 김도현은 아는 사람이 아니었다. 적도 아니었다. 모르는 사람이었다.

확실한 것은 조용히 유예된 위반 로그와, 유예 뒤에도 그대로 남은 기록뿐이었다. 무엇을 믿어야 하는지는 아직 답이 없었다. 도경은 보고서 첫 줄을 고쳤다.

문서보다 물증을 우선한다.

← 이전목차다음 →

이 화, 어떠셨나요?

미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.