LabHub
배우기 러닝패스 코스

Air-Gapped Sites — Defence and Government

Investigate in an Air-Gapped Network and Prepare an Export Summary

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

인터넷이 없고 패키지 설치도 안 되는 파드 안에서 장애 원인을 찾아내고, 그 결과를 망 밖으로 내보낼 수 있는 형태로 만들어 반출 신청서까지 씁니다.

왜 중요한가

이 파드는 폐쇄망을 흉내 내는 것이 아니라 실제로 폐쇄망입니다. curl 은 밖으로 못 나가고 pip install 은 실패합니다. 그래서 여기서 배우는 것은 요령이 아니라 순서입니다 — 가진 것의 목록을 먼저 만들고, 없다는 사실을 종료 코드로 못박고, 서로 다른 두 기록을 시간축에 놓아 원인을 좁힙니다. 그리고 밖으로 내보낼 것은 원본을 지워서가 아니라 빈 파일에서 골라 담아 만듭니다. 지워서 만들면 반드시 하나가 남고, 남은 하나는 아무리 다시 읽어도 안 보입니다.

단계

  1. python3/root/airgap/app.log(600줄)와 /root/airgap/change.log(4줄)를 만듭니다. 시드가 고정된 생성 스크립트를 그대로 쓰세요.
  2. curlpip3 install 을 실제로 돌려 종료 코드를 확인하고, 쓸 수 있는 도구 8개 이상을 세어 /root/airgap/offline.txt 에 적습니다.
  3. /root/airgap/triage.txt 에 전체 줄 수, ERROR 줄 수, 첫 오류 시각, 가장 많은 err 코드, 형상 변경 시각(17:42) 이전의 오류 수를 적습니다.
  4. /root/airgap/cause.txt 에 사건 직전 변경의 식별자·항목·이전 값·이후 값, 변경과 첫 오류의 간격(분), 오류 줄에서 옮긴 근거를 적습니다.
  5. /root/airgap/sensitive.txt 에 계정·사번·호스트명·내부 IP·연락처·작업자 식별자의 고유 개수를 적습니다.
  6. /root/airgap/release/summary.txt 에 반출용 요약을 씁니다. 8줄 이상 40줄 이하로, 판단에 필요한 사실만 담습니다.
  7. /root/airgap/forbidden.txt 에 원본에서 뽑은 금지 토큰 목록을 만들고, 요약본을 대조한 결과를 /root/airgap/release/selfcheck.txt 에 적습니다.
  8. /root/airgap/release/request.md 에 여섯 절짜리 반출 신청서를 쓰고, /root/airgap/release/summary.sha256 으로 무결성을 붙입니다.

참고

조사 대상을 망 안에서 만들기

python3/root/airgap/app.log(600줄)와 /root/airgap/change.log(4줄)를 만듭니다. 시드가 고정된 생성 스크립트를 그대로 쓰세요.

밖에서 받아 올 샘플이 없으니 python3 로 직접 만듭니다. 난수 시드가 고정돼 있어야 모두가 같은 사건을 보고 서로의 판단을 대조할 수 있습니다.

폐쇄망이라는 사실을 증거로 못박기

curlpip3 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 을 적고 같은 값을 해시 파일로도 남깁니다. 요약을 한 글자라도 고쳤으면 둘 다 다시 계산해야 합니다.