🔓 잘못된 권한 설정 시뮬레이터 KISA A-2 · 잘못된 권한 설정
리소스와 계정이 과도한 권한으로 생성됩니다 — 0777 비밀 파일, GRANT ALL DB 계정, root로 실행되는 앱. 저권한 공격자 계정이 되어 열린 권한이 비밀을 넘겨주는 과정을 확인하세요.
① 취약 호스트: 모두에게 열린 비밀 파일, root로 실행되는 앱 VULNERABLE
배포 과정에서 비밀 파일이 0777(누구나 rwx)로 남았고 서비스가 root로 실행됩니다. 당신은 저권한 www-data 계정으로 로그인되어 있습니다. 동작을 선택해 실행하세요.
| 경로 / 객체 | 소유자 | 권한 | 의미 |
|---|---|---|---|
| /etc/app/secrets.env | root | -rwxrwxrwx (0777) | 누구나 읽기·쓰기 가능 |
| /etc/app/config.yaml | root | -rw-rw-rw- (0666) | 누구나 덮어쓰기 가능 |
| db: appuser@% | — | GRANT ALL ON *.* | 모든 DB 전권 (어디서나) |
| service: webapp | — | running as root | 탈취 시 호스트 전체 장악 |
② 안전 호스트: 최소 권한 SECURE
비밀 파일은 0640 root:app(소유자만 읽기), 설정은 root 소유 0644(타인 읽기전용), DB 계정은 한 스키마에 대한 범위 한정 권한만(localhost 한정), 서비스는 비권한 계정으로 권한 강하합니다. 동일한 공격 동작이 이제 거부됩니다.
③ 취약 vs 안전 프로비저닝
VULNERABLE
# 과도한 권한 — 누구나 비밀에 접근 chmod 0777 /etc/app/secrets.env # rwx for world chmod 0666 /etc/app/config.yaml # DB: 전권 + 어디서나 접속 CREATE USER 'appuser'@'%'; GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%'; # 서비스: root 로 상시 구동 ExecStart=/usr/bin/python3 app.py # User= 미지정 → root
SECURE
# 최소 권한 — 소유자만, 범위 한정 chown root:app /etc/app/secrets.env chmod 0640 /etc/app/secrets.env # owner rw, group r chmod 0644 /etc/app/config.yaml # others read-only # DB: 필요한 권한만, localhost 한정 CREATE USER 'appuser'@'localhost'; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'appuser'@'localhost'; # 서비스: 비권한 계정으로 권한 강하 User=webapp NoNewPrivileges=true ProtectSystem=strict
방어 핵심: 모든 리소스에 최소 권한 적용 — 파일은 0640/0644(0777 금지), DB 권한은 단일 스키마·호스트로 한정, 프로세스는 시작 후 root 권한 강하(setuid/User=).
find / -perm -0002로 world-writable 파일을 정기 점검.
⚠️ 교육용 시뮬레이션입니다. 파일 시스템·DB 권한·셸은 모두 페이지 내부 mock이며 실제 파일·DB·프로세스에 접근하지 않습니다.