본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

권한을 올리는 뒷문은 없어

~11 min · no-escape-hatch, least-privilege, no-bypass

Level 0Finder 에서 헤매는 중
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"파일 관리자가 가질 수 있는 제일 위험한 버튼은 'root 로 그냥 해버리기' 야. Waygate 엔 그게 없고, 없는 게 기능이야."

권한을 올리고 싶어지는 순간

파일 관리자는 언젠가 벽을 만나. 못 읽는 폴더, 못 지우는 파일, macOS 가 안 주는 권한. 솔깃한 해결책이 뒷문이야. 관리자 비밀번호를 묻고 root 로 실행하거나, 뭐든 할 수 있는 특권 헬퍼를 깔거나, 규칙을 무시하는 명령을 셸로 부르거나. 전부 앱을 OS 보호 장치를 우회하는 통로로 만드는 짓이야. Waygate 는 다 거절해.

아예 안 갖고 있는 것들

root 없음. 특권 헬퍼 도구 없음. 임의의 셸 실행 없음, AppleScript 통로 없음, 남의 코드를 돌릴 플러그인 없음, 내려받은 코드 실행 없음. Waygate 는 사용자 계정으로 사용자 권한만큼만 돌고, 그게 천장이야. 로그인한 사용자가 이미 할 수 있는 것 이상으로 올라가는 코드가 앱 어디에도 없어. 뒷문이 없는 건 빠진 기능이 아니라, 샌드박스 없는 앱을 믿고 돌릴 수 있게 만드는 경계야.

막히면 우회 말고 보여주기

그럼 권한 벽에 부딪히면 어떻게 해? Waygate 는 그 사실을 정직하게 보여줘. 어느 항목이 왜 막혔는지 정확히 말하고, 계획이 허락하는 범위에서만 이어가. 정말 접근이 필요하면 macOS 에서 권한을 바꾸면 돼. 시스템 자기 개인정보와 권한 설정에서. Waygate 는 macOS 의 결정을 우회하려 들지 않아. 존중하고, 진짜 권한을 가진 사람한테 선택을 돌려줘.

Waygate 엔 권한을 올리는 뒷문이 없어. root 도, 헬퍼도, 임의의 셸이나 AppleScript 나 플러그인이나 내려받은 코드도. 그리고 권한 거부는 우회하는 대신 보여줘. 앱의 천장은 사용자 자기 권한이야. macOS 가 막은 작업은 우회하지 않고 알려주고, 접근 변경은 시스템 설정에서 사용자가 해.
트랙 클리어. 네트워크와 비밀번호까지 정리됐어. 저장한 주소는 연결이 아니고, 비밀번호는 Keychain 에만 있고, 샌드박스를 안 쓴 건 일부러이자 대신 세운 경계가 있고, 뒷문은 없어. 퀘스트 전체를 관통하는 줄이 보여? Waygate 는 필요 없는 힘을 거절해서 믿음을 얻어. 디렉토리 사본도, 가짜 되돌리기도, 플러그인도, root 도 안 가져. 권한을 최소로 두는 건 기능을 최소로 두는 것과 같은 마음이야. 마지막 트랙은 그래도 일이 틀어졌을 때.

Code

막힌 걸 보여주지, 우회하지 않아·swift
func perform(_ plan: OperationPlan) async throws {
    do {
        try await engine.execute(plan)
    } catch let error as POSIXError where error.code == .EACCES || error.code == .EPERM {
        // Permission denied by macOS. Waygate does NOT:
        //   - prompt for an admin password and re-run as root
        //   - install a privileged helper to force it
        //   - shell out to `sudo rm` to ignore the ACL
        // Waygate DOES: surface exactly what was denied, and stop.
        await surfaceDenial(item: plan.deniedItem, reason: error,
                            hint: "Change access in System Settings > Privacy, then retry.")
    }
}
// The user -- who has the real authority -- adjusts permission in macOS.
// The app respects the system's decision instead of tunneling under it.

External links

Exercise

파일 관련해서 관리자 비밀번호를 물었거나 백그라운드 헬퍼를 깐 앱을 떠올려봐. 그 뒤로 그 앱은 전에 못 하던 뭘 할 수 있게 됐고, 거기 버그가 나면 뭐가 위험해질까? 그다음 왜 '막힌 걸 보여주고 사용자가 권한을 바꾸게 하기' 가 같은 일을 더 안전하게 해내는지 얘기해봐.
Hint
root 를 얻은 앱은(또는 root 헬퍼를 깐 앱은) 이제 시스템의 뭐든 만질 수 있고, 그 길에 취약점이 생기면 전체를 내주게 돼. 깔려 있는 내내 남는 부담이지. '막힌 걸 보여주기' 는 앱을 사용자 권한 안에 묶어둬. 버그가 나도 사용자가 이미 할 수 있던 것까지만 할 수 있어. 시스템 설정에서 권한을 바꾸면 같은 일이 되면서, 악용될 수 있는 힘은 앱한테 안 넘어가.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.