폐쇄망 현장 — 방산·국방 도메인 · 계정과 권한을 최소로 줄이기 · 실습
아무도 쓰지 않는 계정이 가장 강한 계정이었다
목표
계정·역할·권한 자료에서 유효 권한을 펴고, 쓰이지 않는 권한·휴면 계정·직무 분리 위반·권한 상승 경로를 찾아 축소안을 만든 뒤, 적용한 상태로 다시 판정해 위반이 줄었음을 숫자로 보입니다.
왜 중요한가
권한 목록은 시간이 지나면 아무도 설명하지 못하는 상태가 됩니다. 폐쇄망에서는 자료를 밖으로 옮길 수 있는 유일한 통로가 그럴 권한을 가진 계정이라, 이 목록이 곧 반출 경로의 목록입니다. 그래서 감리는 "누가 무엇을 할 수 있는가" 를 묻고, 그 답은 기억이 아니라 자료에서 계산해 내야 합니다. 이 실습에서 어려운 부분은 규칙이 아니라 구조입니다. 역할 상속이 순환하면 소박한 재귀가 멈추지 않고, 권한을 부여할 수 있는 계정은 한 단계만 따라가면 실제 도달 범위를 놓칩니다.
단계
1. python3 로 /root/least/data 에 여섯 개 자료 파일을 만듭니다. 생성 스크립트를 그대로 쓰세요.
2. 상속을 편 계정별 유효 권한을 /root/least/effective.json 에, 서로를 상속하는 역할 두 개를 /root/least/cycle.txt 에 적습니다.
3. 가진 권한 중 관측 기간에 쓰이지 않은 것을 /root/least/unused.csv 에 account_id,perm 으로 적습니다.
4. 기준일 기준 미접속 90일 이상이거나 퇴직 표시가 있는 계정을 /root/least/dormant.csv 에 account_id,days_idle,reason 으로 적습니다.
5. 유효 권한에서 직무 분리 규칙을 어긴 쌍을 /root/least/sod.csv 에 account_id,rule_id,perm_a,perm_b 로 적습니다.
6. 스스로 역할을 더해 도달할 수 있는 추가 권한을 /root/least/escalation.json 에 계정별로 적습니다.
7. 배정마다 회수/유지와 사유를 정해 /root/least/plan.csv 에 account_id,role,action,reason 으로 적습니다.
8. 축소안을 적용한 배정을 /root/least/after/assignments.csv 에, 전후 수를 견준 보고를 /root/least/after/report.json 에 남깁니다.
참고
- 기준일은
/root/least/data/asof.txt에 있습니다.date로 오늘을 쓰면 같은 자료에서 날마다 다른 답이 나옵니다. - 직무 분리 규칙과 휴면 기준 일수는
/root/least/data/policy.json에 들어 있습니다. 숫자를 코드에 박지 말고 그 파일에서 읽으세요. - 상속을 펼 때는 이미 방문한 역할을 기억하며 내려갑니다. 그러지 않으면
RecursionError가 납니다. - 7단계의 "그 배정이 혼자만 주는 권한" 은 그 배정을 뺐을 때 사라지는 권한입니다. 다른 역할이 같은 권한을 이미 주고 있으면 그 배정이 주는 것은 없습니다.
- 흔한 실수 1: 6단계에서 한 걸음만 따라가는 것. 부여받은 역할이 또 다른 역할을 부여할 수 있습니다.
- 흔한 실수 2: 8단계에서 원래 배정 파일을 덮어쓰는 것. 적용 전 자료가 남아 있어야 전후를 견줄 수 있습니다.
- 표준 문서: [NIST SP 800-53 Rev 5](https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final), [NIST SP 800-171 Rev 3](https://csrc.nist.gov/pubs/sp/800/171/r3/final). 이 실습의 규칙 번호(SOD-01 처럼)는 표준의 통제 번호가 아니라 자료 안에서만 쓰는 합성 번호입니다.
단계 8개
- 판정의 바탕이 될 자료 만들기
- 상속을 펴서 계정이 실제로 쥔 것 보기
- 가졌지만 한 번도 쓰지 않은 권한 세기
- 기준일로 휴면 계정 가르기
- 함께 쥐면 안 되는 권한 쌍 찾기
- 스스로 늘릴 수 있는 권한까지 따라가기
- 배정마다 회수할지 둘지 정하기
- 적용한 뒤 다시 판정해 줄었는지 보기