閉域網で調査し持ち出し用の要約を作る
한국어 원문으로 표시합니다.
목표
인터넷이 없고 패키지 설치도 안 되는 파드 안에서 장애 원인을 찾아내고, 그 결과를 망 밖으로 내보낼 수 있는 형태로 만들어 반출 신청서까지 씁니다.
왜 중요한가
이 파드는 폐쇄망을 흉내 내는 것이 아니라 실제로 폐쇄망입니다. curl 은 밖으로 못 나가고 pip install 은 실패합니다. 그래서 여기서 배우는 것은 요령이 아니라 순서입니다 — 가진 것의 목록을 먼저 만들고, 없다는 사실을 종료 코드로 못박고, 서로 다른 두 기록을 시간축에 놓아 원인을 좁힙니다. 그리고 밖으로 내보낼 것은 원본을 지워서가 아니라 빈 파일에서 골라 담아 만듭니다. 지워서 만들면 반드시 하나가 남고, 남은 하나는 아무리 다시 읽어도 안 보입니다.
단계
python3로/root/airgap/app.log(600줄)와/root/airgap/change.log(4줄)를 만듭니다. 시드가 고정된 생성 스크립트를 그대로 쓰세요.curl과pip3 install을 실제로 돌려 종료 코드를 확인하고, 쓸 수 있는 도구 8개 이상을 세어/root/airgap/offline.txt에 적습니다./root/airgap/triage.txt에 전체 줄 수, ERROR 줄 수, 첫 오류 시각, 가장 많은err코드, 형상 변경 시각(17:42) 이전의 오류 수를 적습니다./root/airgap/cause.txt에 사건 직전 변경의 식별자·항목·이전 값·이후 값, 변경과 첫 오류의 간격(분), 오류 줄에서 옮긴 근거를 적습니다./root/airgap/sensitive.txt에 계정·사번·호스트명·내부 IP·연락처·작업자 식별자의 고유 개수를 적습니다./root/airgap/release/summary.txt에 반출용 요약을 씁니다. 8줄 이상 40줄 이하로, 판단에 필요한 사실만 담습니다./root/airgap/forbidden.txt에 원본에서 뽑은 금지 토큰 목록을 만들고, 요약본을 대조한 결과를/root/airgap/release/selfcheck.txt에 적습니다./root/airgap/release/request.md에 여섯 절짜리 반출 신청서를 쓰고,/root/airgap/release/summary.sha256으로 무결성을 붙입니다.
참고
- 로그에서 종류별로 뽑을 때는
grep -oE와sort -u가 기본입니다. - 대조는
grep -oFf 목록파일 대상파일로 합니다.-F를 빼면 목록의 점이 아무 글자나 되어 엉뚱한 곳이 걸립니다. - 흔한 실수 1: 요약본을 원본에서 지워 나가며 만드는 것. 반드시 하나가 남습니다.
- 흔한 실수 2: 금지 토큰 목록을 반출 디렉터리에 같이 두는 것. 그 파일이 가장 위험한 파일입니다.
- 흔한 실수 3: 요약을 고친 뒤 해시를 다시 뜨지 않는 것. 심사받은 파일과 나가는 파일이 달라집니다.
조사 대상을 망 안에서 만들기
python3 로 /root/airgap/app.log(600줄)와 /root/airgap/change.log(4줄)를 만듭니다. 시드가 고정된 생성 스크립트를 그대로 쓰세요.
밖에서 받아 올 샘플이 없으니 python3 로 직접 만듭니다. 난수 시드가 고정돼 있어야 모두가 같은 사건을 보고 서로의 판단을 대조할 수 있습니다.
폐쇄망이라는 사실을 증거로 못박기
curl 과 pip3 install 을 실제로 돌려 종료 코드를 확인하고, 쓸 수 있는 도구 8개 이상을 세어 /root/airgap/offline.txt 에 적습니다.
curl 과 pip 를 실제로 한 번씩 돌리고 종료 코드를 적으세요. 도구 목록은 command -v 로 실제로 있는 것만 적습니다 — 없는 연장을 적은 목록은 다음 사람을 속입니다.
사건 구간 확정하기
/root/airgap/triage.txt 에 전체 줄 수, ERROR 줄 수, 첫 오류 시각, 가장 많은 err 코드, 형상 변경 시각(17:42) 이전의 오류 수를 적습니다.
전체 줄 수, ERROR 줄 수, 첫 오류 시각, 가장 많은 err 코드, 그리고 형상 변경 시각(17:42) 이전 구간의 오류 수를 셉니다. 마지막 숫자가 변경을 원인으로 지목할 수 있는지를 가릅니다.
두 로그를 시간으로 이어 원인 지목하기
/root/airgap/cause.txt 에 사건 직전 변경의 식별자·항목·이전 값·이후 값, 변경과 첫 오류의 간격(분), 오류 줄에서 옮긴 근거를 적습니다.
change.log 에서 사건 직전의 변경을 찾고, 그 시각과 첫 오류 시각의 간격을 분으로 계산하세요. 근거는 추측이 아니라 오류 줄이 직접 알려 주는 값에서 가져옵니다.
반출 심사 대상을 종류별로 세기
/root/airgap/sensitive.txt 에 계정·사번·호스트명·내부 IP·연락처·작업자 식별자의 고유 개수를 적습니다.
출현 횟수가 아니라 고유 값의 개수입니다. 그리고 심사 대상은 app.log 하나가 아닙니다 — change.log 에도 한 종류가 숨어 있습니다.
반출용 요약 만들기
/root/airgap/release/summary.txt 에 반출용 요약을 씁니다. 8줄 이상 40줄 이하로, 판단에 필요한 사실만 담습니다.
원본을 열어 지워 나가지 마세요. 빈 파일에서 시작해 판단에 필요한 사실만 옮겨 적으면 옮기지 않은 것은 애초에 없습니다. 40줄을 넘으면 요약이 아닙니다.
금지 토큰 목록으로 자기 검증하기
/root/airgap/forbidden.txt 에 원본에서 뽑은 금지 토큰 목록을 만들고, 요약본을 대조한 결과를 /root/airgap/release/selfcheck.txt 에 적습니다.
여섯 종류를 app.log 와 change.log 양쪽에서 뽑아 sort -u 로 모읍니다. 대조는 grep 의 -F(고정 문자열)와 -f(목록 파일)로 합니다. 그리고 이 목록은 반출 디렉터리에 두지 않습니다.
반출 신청서와 무결성 붙이기
/root/airgap/release/request.md 에 여섯 절짜리 반출 신청서를 쓰고, /root/airgap/release/summary.sha256 으로 무결성을 붙입니다.
여섯 절이 필요합니다. 무결성 절에는 요약본의 SHA-256 을 적고 같은 값을 해시 파일로도 남깁니다. 요약을 한 글자라도 고쳤으면 둘 다 다시 계산해야 합니다.