LabHub
배우기 러닝패스 코스

폐쇄망 현장 — 방산·국방 도메인 · 감사에 낼 자료를 미리 만들어 두기 · 이론

감사는 한 일을 묻지 않는다 — 그것을 어떻게 보이는지를 묻는다

LabHub 에서 이어서 보기

한 줄 요약

감사 대응에서 실제로 걸리는 것은 하지 않은 일이 아니라, 한 일과 그것을 증명하는 파일이 이어져 있지 않은 상태다. 요구 한 줄마다 어떤 파일의 어느 부분이 근거인지를 미리 묶어 두는 것(증거 색인)이 대응의 본체이고, 그 색인은 근거 파일의 해시까지 품어야 나중에 스스로 거짓말을 하지 않는다.

왜 이게 필요했나

인도 뒤 첫 감사에서 가장 흔한 장면은 이렇다. 요구사항 한 줄을 읽어 주고 근거를 묻는다. 담당자는 "그건 하고 있습니다" 라고 답한다. 그러면 어디서 볼 수 있느냐는 질문이 돌아오고, 그때부터 서버에 들어가 설정을 열고 로그를 뒤지기 시작한다. 20분이 지나면 그 항목은 넘어가고, 기록에는 근거 미제출로 남는다. 한 일이 없어서가 아니라 한 일과 파일 사이의 길을 아무도 미리 놓아 두지 않아서다.

이 길을 놓는 일은 감사 전날에는 할 수 없다. 근거는 시간이 지나면 바뀌기 때문이다. 설정 파일은 다음 변경 때 덮이고, 로그는 회전으로 사라지고, 점검 결과는 다음 점검이 덮어쓴다. 그래서 색인은 경로만 적어서는 쓸모가 없고 그때 그 파일이 무엇이었는지를 함께 못박아야 한다. 해시가 그 자리에 들어간다. 파일이 바뀌면 색인이 스스로 그것을 드러내고, 드러나면 다시 수집하면 된다. 드러나지 않는 것이 문제다.

공개 표준도 같은 구조를 전제한다. [NIST SP 800-171 Rev 3](https://csrc.nist.gov/pubs/sp/800/171/r3/final)은 협력사가 다루는 자료에 대한 보호 요구를 계열로 묶어 두었고, [NIST SP 800-53 Rev 5](https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final)는 훨씬 넓은 통제 목록과 그 선택 방법을 정한다. 어느 쪽이든 문서가 정하는 것은 "무엇을 만족해야 하는가" 이지 "그것을 어떤 파일로 보이라" 가 아니다. 그 사이를 잇는 표는 각 현장이 스스로 만들어야 하고, 만들지 않으면 매번 사람의 기억으로 때우게 된다. 로그를 근거로 쓸 때 무엇을 관리해야 하는지는 [NIST SP 800-92](https://csrc.nist.gov/pubs/sp/800/92/final)가 따로 다룬다.

어떻게 동작하나

첫째, 근거를 스스로 설명하게 만든다. 어떤 파일이 어떤 요구의 근거인지를 사람 머릿속이나 별도 엑셀에 두면 곧 어긋난다. 근거 파일 자체에 머리말을 붙여 자기가 무엇을 덮는지 적게 하면, 색인 만들기는 디렉터리를 훑는 일이 된다. 형식이 제각각인 것은 피할 수 없다. 설정 파일에는 주석 줄로, 점검 결과 JSON 에는 최상위 열쇠로 붙는다. 읽는 쪽이 두 경우를 다 다루면 된다.

둘째, 해시를 색인에 넣는다. 경로와 수집 시각만으로는 "지금 그 파일" 을 가리킬 뿐이다. 해시를 넣는 순간 색인은 그때의 그 파일을 가리키게 되고, 검증기가 세 가지를 셀 수 있게 된다. 없는 파일을 가리키는 항목, 해시가 어긋난 항목, 근거가 하나도 없는 요구사항. 세 숫자가 대응의 상태를 요약한다.

셋째, 근거의 세기를 나눈다. 설정 파일과 정책 문서는 "그렇게 되어 있다" 를 보인다. 로그와 점검 결과는 "실제로 그렇게 동작했다" 를 보인다. 둘은 대체재가 아니다. 접근 제한을 설정에 적어 두었다는 사실은 그 설정이 실제로 적용돼 동작했다는 것을 말해 주지 않고, 반대로 로그만으로는 그것이 의도된 규칙인지 우연인지 알 수 없다. 요구사항마다 어느 쪽이 필요한지를 정해 두면, 근거가 있는데도 부족한 자리가 드러난다. 그 자리가 다음 분기의 할 일이다.

넷째, 수집을 다시 돌려 본다. 같은 스크립트를 다시 돌렸을 때 수집 시각 말고는 똑같은 색인이 나와야 한다. 나오지 않는다면 그 색인에는 순서나 시각처럼 판정과 무관한 것이 섞여 있다는 뜻이고, 그러면 두 번의 결과를 견줄 수 없다. 견줄 수 없는 자료는 다음 분기에 무엇이 바뀌었는지도 말해 주지 못한다.

다섯째, 내보낼 때 다시 심사한다. 근거 파일은 내부용으로 모은 것이라 그대로 나가면 안 되는 것이 섞여 있다. 내부 주소, 인증 수단, 개인 연락처 같은 것들이다. 가리고 나면 파일 내용이 달라지므로 해시도 달라진다. 여기서 자주 나는 사고가, 가린 사본을 넣고 색인은 원본 해시를 그대로 둔 채 내보내는 것이다. 받는 쪽에서 검증하면 전부 해시 불일치로 나오고, 그 꾸러미는 통째로 의심을 받는다. 가린 사본에는 가린 사본의 해시를 붙여야 한다.

현장에서 만나는 모습

한 현장에서 지난 분기에 제출했던 색인을 그대로 다시 내려다 멈춘 적이 있다. 그대로 검증해 보니 네 항목이 끊어져 있었다. 둘은 파일이 정리 작업 중에 없어진 것이었고, 둘은 내용이 바뀐 것이었다. 바뀐 쪽이 더 나빴다. 파일은 그 자리에 있으니 사람 눈에는 멀쩡해 보이는데, 내용은 그때 근거로 삼았던 것이 아니었다. 해시가 없었다면 그대로 제출했을 것이고, 감리가 열어 본 내용은 우리가 설명한 것과 달랐을 것이다.

또 하나 자주 보는 것은 근거가 있는데 부족한 자리다. 사고 대응 절차서는 잘 쓰여 있는데 실제로 훈련하거나 대응한 기록이 하나도 없는 경우가 대표적이다. 색인만 보면 근거 한 건이 붙어 있어 초록불이지만, 요구가 묻는 것은 절차의 존재가 아니라 그 절차가 돈다는 사실이다. 근거를 세기로 나눠 두면 이런 자리가 목록으로 나오고, 그 목록이 다음 분기 계획이 된다.

다음 실습에서 할 것

합성 요구사항 12건과 근거 파일 14개로 증거 색인을 만들고, 해시를 못박고, 색인 검증기로 끊어진 곳 세 가지를 셉니다. 근거를 설계와 운영으로 나눠 요구마다 무엇이 부족한지 판정하고, 같은 수집을 다시 돌려 수집 시각 말고는 똑같은지 확인합니다. 마지막으로 반출 심사 규칙으로 가린 사본을 만들고 가린 사본의 해시로 색인을 다시 봉인해, 검증기가 그 꾸러미만 보고도 끊어진 곳이 없다고 말하게 만듭니다. 남은 공백은 숨기지 않고 목차에 그대로 적습니다.