LabHub
배우기 러닝패스 코스

폐쇄망 현장 — 방산·국방 도메인 · 시간 동기화와 기록의 증거력 · 실습

배치가 큐보다 먼저 돌았다 — 시계가 2.4초 빨랐다

LabHub 에서 이어서 보기

목표

표기가 제각각인 다섯 호스트의 로그를 한 축으로 모으고, 시각 계통에서 고립된 호스트를 찾고, 요청과 응답의 모순으로 시계 오차의 하한을 구한 뒤, 보정으로 설명되는 것과 설명되지 않는 것을 갈라 시각 신뢰성 진술서를 씁니다.

왜 중요한가

조사도 감사도 "무엇이 먼저 일어났는가" 를 묻습니다. 그 답은 기록의 시각에서 나오는데, 기록의 시각은 그것을 남긴 기계의 시계가 보여 준 값입니다. 2초쯤 어긋난 시계는 아무도 눈치채지 못한 채 원인과 결과를 뒤집습니다. 폐쇄망에서는 바깥 시각원이 없어 망 안의 시각원 하나에 모두가 맞추므로, 서로의 순서는 맞아도 절대 시각은 보증되지 않습니다. 진술서에 그 한계를 쓰지 않으면 나중에 그 문서 전체가 무너집니다.

왜 자료로 판정하는가

실습 파드에는 capability 가 없어 chronyc·ntpdate 를 쓸 수 없고 시스템 시계도 바꿀 수 없습니다. 그래서 이 실습은 동기화 상태 보고와 로그만으로 판정합니다. 실제 현장에서도 감리에 내는 것은 명령 출력이 아니라 이 판정의 결과이며, chronyc trackingsources 의 출력이 여기 sync.json 이 놓인 자리를 차지합니다. 이 실습의 가정입니다.

단계

1. python3/root/clock/datasync.json·meta.json·로그 다섯 개·requests.csv 를 만듭니다.
2. 다섯 로그를 /root/clock/normalized.csvhost,seq,epoch_ms,evt 로 모으고, 오프셋 없는 로그를 UTC 로 잘못 읽었을 때의 영향을 /root/clock/naive.json 에 적습니다.
3. 호스트별 시각원 사슬을 /root/clock/chain.json 에, 선언된 시각원에 닿지 않는 호스트를 /root/clock/isolated.txt 에 적습니다.
4. 응답이 요청보다 앞선 건을 /root/clock/paradox.csv 에, 시계 오차의 하한을 /root/clock/bound.json 에 적습니다.
5. 한 호스트의 로그 안에서 시각이 되돌아간 자리를 /root/clock/backward.csv 에 적습니다.
6. 오프셋으로 보정한 시각을 /root/clock/corrected.csv 에, 보정 전후 모순 수를 /root/clock/paradox_after.json 에 적습니다.
7. 호스트마다 기록 신뢰 등급을 /root/clock/trust.csvhost,level,reason 으로 적습니다.
8. /root/clock/statement.json/root/clock/statement.md 에 시각 신뢰성 진술서를 씁니다.

참고

단계 8개

  1. 동기화 보고와 다섯 호스트의 로그 만들기
  2. 표기 넷을 한 축으로 모으기
  3. 시각원 계통을 끝까지 따라가기
  4. 응답이 요청보다 앞선 건으로 오차의 하한 구하기
  5. 한 호스트 안에서 시각이 되돌아간 자리 찾기
  6. 오프셋으로 보정하고 남는 것 보기
  7. 호스트마다 기록 신뢰 등급 매기기
  8. 믿을 수 있는 것과 없는 것을 함께 적은 진술서 쓰기