LabHub
学习 学习路径 课程

闭网现场 — 国防领域

没人用的那个账号,其实权限最大

在 LabHub 中继续学习

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

목표

계정·역할·권한 자료에서 유효 권한을 펴고, 쓰이지 않는 권한·휴면 계정·직무 분리 위반·권한 상승 경로를 찾아 축소안을 만든 뒤, 적용한 상태로 다시 판정해 위반이 줄었음을 숫자로 보입니다.

왜 중요한가

권한 목록은 시간이 지나면 아무도 설명하지 못하는 상태가 됩니다. 폐쇄망에서는 자료를 밖으로 옮길 수 있는 유일한 통로가 그럴 권한을 가진 계정이라, 이 목록이 곧 반출 경로의 목록입니다. 그래서 감리는 "누가 무엇을 할 수 있는가" 를 묻고, 그 답은 기억이 아니라 자료에서 계산해 내야 합니다. 이 실습에서 어려운 부분은 규칙이 아니라 구조입니다. 역할 상속이 순환하면 소박한 재귀가 멈추지 않고, 권한을 부여할 수 있는 계정은 한 단계만 따라가면 실제 도달 범위를 놓칩니다.

단계

  1. python3/root/least/data 에 여섯 개 자료 파일을 만듭니다. 생성 스크립트를 그대로 쓰세요.
  2. 상속을 편 계정별 유효 권한을 /root/least/effective.json 에, 서로를 상속하는 역할 두 개를 /root/least/cycle.txt 에 적습니다.
  3. 가진 권한 중 관측 기간에 쓰이지 않은 것을 /root/least/unused.csvaccount_id,perm 으로 적습니다.
  4. 기준일 기준 미접속 90일 이상이거나 퇴직 표시가 있는 계정을 /root/least/dormant.csvaccount_id,days_idle,reason 으로 적습니다.
  5. 유효 권한에서 직무 분리 규칙을 어긴 쌍을 /root/least/sod.csvaccount_id,rule_id,perm_a,perm_b 로 적습니다.
  6. 스스로 역할을 더해 도달할 수 있는 추가 권한을 /root/least/escalation.json 에 계정별로 적습니다.
  7. 배정마다 회수/유지와 사유를 정해 /root/least/plan.csvaccount_id,role,action,reason 으로 적습니다.
  8. 축소안을 적용한 배정을 /root/least/after/assignments.csv 에, 전후 수를 견준 보고를 /root/least/after/report.json 에 남깁니다.

참고

판정의 바탕이 될 자료 만들기

python3/root/least/dataaccounts.csv·roles.json·assignments.csv·usage.csv·policy.json·asof.txt 여섯 개를 만듭니다. 난수를 쓰지 않는 생성 스크립트를 그대로 쓰세요.

폐쇄망에는 내려받을 표본이 없으니 자료부터 직접 만듭니다. 난수를 쓰지 않아야 누가 몇 번을 돌려도 같은 자료가 나오고, 서로의 판정을 대조할 수 있습니다. 채점기는 파일 내용을 표준형으로 바꿔 지문을 대조하므로 자료를 손으로 고치면 뒤 단계가 전부 막힙니다.

상속을 펴서 계정이 실제로 쥔 것 보기

/root/least/effective.json 에 계정별 유효 권한 목록을, /root/least/cycle.txt 에 서로를 상속하는 역할 이름을 한 줄에 하나씩 적으세요.

역할은 다른 역할을 상속하고, 상속은 여러 단계입니다. 이미 방문한 역할을 기억하지 않으면 재귀가 끝나지 않습니다 — 그리고 그 사실 자체가 이 자료에서 찾아야 할 것 하나입니다. 두 역할이 서로를 상속하면 둘의 유효 권한은 같아집니다.

가졌지만 한 번도 쓰지 않은 권한 세기

/root/least/unused.csv 에 첫 줄 account_id,perm 을 두고, 유효 권한 중 usage.csv 에 없는 것을 한 줄에 하나씩 적으세요.

사용 기록은 계정과 권한의 쌍입니다. 유효 권한 집합에서 사용한 권한 집합을 빼면 남는 것이 답입니다. 이 목록은 판정이 아니라 질문지라는 점을 기억하세요 — 분기에 한 번 쓰는 권한은 관측 기간에 안 보입니다.

기준일로 휴면 계정 가르기

/root/least/dormant.csv 에 첫 줄 account_id,days_idle,reason 을 두고, 기준일에서 센 미접속 일수가 policy.json 의 기준 이상이거나 상태가 terminated 인 계정을 적으세요. 사유는 미접속·퇴직·미접속+퇴직 중 하나입니다.

기준일은 asof.txt 에 있습니다. 오늘 날짜를 쓰면 같은 자료에서 어제와 오늘의 답이 달라져 감사 자료로 쓸 수 없습니다. 일수는 기준일에서 마지막 접속일을 뺀 날수이고, 두 사유가 겹치면 둘 다 적습니다.

함께 쥐면 안 되는 권한 쌍 찾기

/root/least/sod.csv 에 첫 줄 account_id,rule_id,perm_a,perm_b 를 두고, policy.json 의 규칙마다 두 권한을 함께 가진 계정을 적으세요.

규칙은 권한 하나가 아니라 쌍에 걸립니다. 유효 권한 집합에 a 와 b 가 모두 있으면 위반입니다. 규칙 번호를 코드에 박지 말고 policy.json 을 돌면서 판정하세요 — 규칙이 늘어도 코드는 그대로여야 합니다.

스스로 늘릴 수 있는 권한까지 따라가기

/root/least/escalation.json 에 계정별로, 지금은 없지만 스스로 역할을 더해 도달할 수 있는 권한 목록을 적으세요. 추가로 얻을 것이 없는 계정은 넣지 않습니다.

권한을 부여할 수 있는 권한을 쥔 계정은 자기에게 역할을 붙일 수 있습니다. 그렇게 붙인 역할이 또 다른 역할을 부여할 수 있다면 한 걸음 더 갑니다. 더 붙일 역할이 없을 때까지 반복한 뒤, 도달한 권한에서 원래 가진 권한을 빼세요.

배정마다 회수할지 둘지 정하기

/root/least/plan.csv 에 첫 줄 account_id,role,action,reason 을 두고 배정 하나마다 한 줄씩 적으세요. actionrevoke 또는 keep, reason휴면·중복·미사용·사용 중 하나입니다.

판정 순서가 결과를 바꿉니다. 휴면 계정이면 사유를 따질 것 없이 전부 회수합니다. 그 다음, 그 배정이 혼자만 주는 권한이 하나도 없으면 중복이고, 있는데 하나도 쓰이지 않았으면 미사용입니다. 나머지가 유지입니다.

적용한 뒤 다시 판정해 줄었는지 보기

축소안을 적용한 배정을 /root/least/after/assignments.csv 에 남기고, /root/least/after/report.jsonassignments_before·assignments_after·sod_before·sod_after·unused_before·unused_after·escalation_before·escalation_after·dormant 아홉 개 수를 적으세요.

원래 자료는 그대로 두고 적용 결과를 새 파일에 씁니다. 그래야 전후를 견줄 수 있고, 다시 채점해도 같은 결과가 나옵니다. 보고의 수는 손으로 세지 말고 앞 단계와 같은 함수로 적용 후 배정에서 다시 계산하세요 — 채점기도 같은 계산을 합니다.