FrontierStack 사용자 설명서 설명서 처음
데스크톱 설명서 모바일 설명서 English日本語 frontierstack.app ↗
10

제10장

보안 및 강화

경계를 지키는 것은 일의 절반에 불과합니다. 이 장에서는 사용하지 않는 문을 닫고, 사용 중인 문을 지켜보며, 그 문을 통과해도 되는 대상을 증명하는 방법을 다룹니다.

서버가 가장 취약해지는 때는 무언가가 공격해 올 때가 아니라 조용히 어긋나기 시작할 때입니다. 열린 채 방치된 방화벽, 아무도 비활성화하지 않은 암호 로그인, 지난주에 만료된 인증서, 누구의 메일이든 릴레이해 주는 메일 서버가 그런 예입니다. FrontierStack은 보안 강화를 일회성 체크리스트가 아니라 지속적으로 관찰할 수 있는 상태로 다룹니다. 보안 패널은 지금 사용 중인 호스트를 위한 콘솔이며, AI 관리자(13장)는 같은 점검을 SSH를 통해 플릿 전체에 적용합니다. 여기에 있는 모든 기능은 변경을 요청하기 전까지 읽기 전용이며, 모든 변경은 직접 수작업으로도 할 수 있는 것들입니다.

10.1방화벽: 애플리케이션 방화벽과 pf

macOS에는 두 가지 방화벽이 기본으로 들어 있으며, FrontierStack은 둘 다 읽습니다. 애플리케이션 방화벽(ALF)은 시스템 설정에서 지정하는 앱 단위 계층입니다. 보안 패널은 그 상태 — 활성화 여부, 스텔스 모드, 모든 수신 연결 차단, 앱 규칙 수 — 를 보여 주므로 방화벽이 켜져 있는지 한눈에 확인할 수 있습니다. pf 패킷 필터는 그보다 아래인 포트 수준의 계층이며, FrontierStack이 직접 관리하는 것은 바로 이쪽입니다.

앱이 관리하는 pf 규칙은 별도 파일 ~/Library/Application Support/FrontierStack/pf-frontierstack.conf에 저장되며, 시스템 /etc/pf.conf에 멱등적으로 연결된 전용 frontierstack 앵커로 로드됩니다. 규칙을 전용 앵커에 두기 때문에 FrontierStack은 Apple의 기본 규칙 세트를 절대 편집하지 않으며, 다시 로드해도 다른 규칙을 덮어쓰지 않고 사용자의 규칙이 유지됩니다. 규칙을 추가하거나 제거하면 인증된 관리자 프롬프트를 거쳐 pf가 다시 로드됩니다.

AI 쪽에서는 firewall_rule 도구가 포트 하나에 대한 허용/거부 규칙을 하나씩 추가하거나 제거하며, 필요하면 출발지 주소로 범위를 한정할 수 있습니다. 이 도구는 먼저 대상의 운영 체제를 감지합니다. 이 Mac과 원격 macOS 호스트에는 pf(frontierstack 앵커)를, Linux 서버에는 ufw를 사용합니다. Mac에 ufw 명령을 보내거나 Linux에 pf 규칙을 보내는 일은 절대 없습니다.

스크린샷 추가 예정
그림 10.1. 보안 패널: 맨 위에 방화벽 상태가 있고, 그 아래로 침입 방지, SSH 보안 강화 감사, 열린 포트 목록이 이어집니다.촬영 방법: fail2ban이 설치되어 있고 수신 대기 포트가 몇 개 있는 호스트에서 보안 패널을 열고, 애플리케이션 방화벽 요약과 열린 포트 섹션이 보이도록 스크롤하여 캡처
주의잘못된 포트에 거부 규칙을 걸면 원격 호스트에 접속하지 못하게 될 수 있습니다 — FrontierStack 자체가 그 호스트에 접속할 때 쓰는 SSH 포트도 마찬가지입니다. 네트워크로만 접근할 수 있는 서버에서 pf나 ufw를 강화하기 전에, 규칙이 관리용 경로를 허용하는지 확인하고 별도의 접속 수단(콘솔, KVM-over-IP, 헤드리스 설정의 화면 공유)을 확보해 두십시오.

10.2침입 방지와 열린 포트 감시

열어 두어야 하는 포트에도 경비는 필요합니다. 보안 패널은 두 가지 침입 방지 엔진을 통합합니다. fail2ban은 악의적인 로그 패턴과 일치하는 IP 주소를 차단합니다. SSH와 Apache 무차별 대입 공격이 대표적인 사례입니다. 패널에는 fail2ban의 설치 및 실행 여부, jail 수, 현재 차단된 주소 수가 표시되며, 클릭 한 번으로 실행되는 다시 로드와, 사용자의 재정의 설정을 덮어쓰지 않고 적절한 SSH jail을 넣어 주는 “기본 jail.local 작성” 동작이 있습니다. CrowdSec은 그 위에 공유 평판 네트워크를 더하며, 활성 결정(decision) 수와 지표 버튼을 보여 줍니다. 둘 다 Homebrew로 설치되는 root 서비스로 실행됩니다.

열린 포트 섹션에는 호스트의 모든 리스너가 나열됩니다. 함께 동작하는 감시 기능 — 원격 제어 및 화면 공유 노출 — 은 특히 VNC/화면 공유(:5900), Apple Remote Desktop, AnyDesk, TeamViewer, Chrome Remote Desktop, Splashtop, RustDesk, Tailscale 출구 노드 광고를 표시하며, 지금 이 순간 누군가 접속해 있으면 빨간색으로 바뀝니다. 최근 침입과 활성 차단 섹션은 fail2ban.log, CrowdSec, Suricata의 eve.json, Wazuh의 alerts.json에서 탐지 내역을 모아 최신순으로 보여 줍니다. 실행하지 않는 소스는 그냥 건너뜁니다. 새 차단, 새 리스너, 활성 인바운드 세션은 각각 알림을 발생시킬 수 있습니다 — 전달 방법은 11장에서 설정하십시오. 같은 섹션은 이 Mac의 FileVault도 확인하며, 판단 기준은 그 Mac이 무엇을 가지고 있는가입니다. Mac이 연결된 서버에 대한 SSH 접근 권한이나 앱이 관리하는 SSH 키를 가지고 있는데 FileVault가 꺼져 있으면, 행이 빨간색으로 바뀌고 알림이 발생합니다. 노트북을 분실하거나 도난당하면 플릿 전체의 열쇠를 내주게 되기 때문입니다. 플릿 자격 증명이 없는 Mac은 그대로 둡니다.

10.3SSH 보안 강화

대부분의 서버에서 SSH는 가장 중요한 출입문이므로, 보안 패널에는 SSH 보안 강화 감사가 포함되어 있습니다. 이 감사는 sshd -T로 실제 적용 중인 구성을 읽습니다 — 디스크에 있는 파일만이 아니라, 데몬이 드롭인 설정까지 반영한 뒤 실제로 적용하는 값입니다 — 그리고 PermitRootLogin, PasswordAuthentication 등 중요한 설정을 표시합니다. SSH가 네트워크에서 접근 가능한 경우 패널은 이를 분명히 알려 줍니다. 바로 그런 경우에 점검 결과가 중요하기 때문입니다.

인터넷에 노출된 호스트의 기본 원칙은 PasswordAuthentication no와 함께 키 기반 인증을 사용하는 것입니다. 수정 사항은 기본 파일이 아니라 /etc/ssh/sshd_config.d/를 편집해 적용하십시오. 그래야 패키지를 업데이트해도 보안 강화 설정이 그대로 유지됩니다. FrontierStack 자체의 플릿 채널도 이미 이 원칙을 따릅니다. Ed25519 키, BatchMode=yes, IdentitiesOnly=yes를 사용하며, 호스트 키는 처음 접속할 때 신뢰하여 known_hosts에 기록합니다(8장). 호스트의 키 접근이 깨지면 repair_ssh_access 도구가 로컬 보관함에 저장된 일회용 로그인 암호를 사용해 관리 키를 다시 설치합니다 — 암호는 사용자의 Mac에서 읽히며 AI에 전송되지 않습니다.

10.4서버 보안: 원격 호스트의 보안 상태 점검

지금까지 설명한 내용은 이 Mac의 보안 패널입니다. 서버 보안 패널은 그에 대응하는 연결된 서버용 패널로, 같은 보안 상태 점검을 SSH를 통해 플릿의 어느 호스트에서든 수행합니다. 서버의 세부 정보를 열고 보안 옆의 확인…을 클릭하거나, 패널을 직접 열어 호스트 메뉴에서 서버를 선택하십시오. 한 번의 스캔으로 중요한 SSH 보안 강화 항목(PermitRootLogin, PasswordAuthentication, 수신 대기 포트), 방화벽의 존재 및 활성화 여부(ufw, firewalld, nftables 또는 직접 구성한 iptables), 실행 중인 침입 방지 엔진(fail2ban, CrowdSec), 대기 중인 보안 업데이트 수(apt, dnf, yum), 모든 인터페이스에서 수신 대기하는 서비스, 그리고 호스트 무결성의 이상 징후 — sticky 비트가 없는 모든 사용자 쓰기 가능 디렉터리, 예상치 못한 SUID 바이너리 — 를 보고합니다.

각 점검 결과에는 높음 · 경고 · 정보 · OK 등급이 매겨지고 한 줄 요약 배지로 집계되므로, 플릿 전체를 훑어보며 어느 호스트에 조치가 필요한지 한눈에 알 수 있습니다. 이 패널은 아무것도 변경하지 않습니다. 해결 링크를 누르면 실제로 변경을 수행하는 패널로 이동합니다 — 방화벽을 활성화하거나 규칙을 편집하는 서버 방화벽 패널, 원격 도구의 SSH 보안 강화 검토, 또는 fail2ban/CrowdSec을 설치하는 보안 도구입니다. root로 실행하거나 암호 없는 sudo가 있을 때 가장 깊이 점검할 수 있으며, 둘 다 없으면 가능한 항목만 실행하고 그 사실을 알려 줍니다. 상호 링크는 양방향으로 연결됩니다. 로컬 보안 패널은 macOS 방화벽으로, 서버 보안은 서버 방화벽으로 연결되며, 고정된 서버의 패널에서는 둘 다로 이동할 수 있습니다.

보안서버 보안은 철저히 읽기 전용입니다 — 규칙을 열지도, 아무것도 설치하지도 않습니다. 이는 의도된 설계입니다. 변경 작업 시간대를 잡지 않고도 운영 중인 호스트에 실행할 수 있는 보안 상태 스캔이어야 실제로 자주 실행하게 되고, 자주 실행해야 유지 보수 후 누군가 꺼 둔 채로 잊어버린 방화벽을 잡아낼 수 있습니다. ‘높음’ 결과를 알림 채널(11장)에 연결해 두면 호스트가 어긋나는 순간 스캔이 알려 줍니다.

10.5에지 어플라이언스: NetScaler, BIG-IP와 VPN 게이트웨이

네트워크 경계에 있는 어플라이언스 — Citrix NetScaler ADC/Gateway, F5 BIG-IP, FortiGate, Palo Alto PAN-OS, Ivanti Connect Secure, Cisco ASA/FTD, Kemp LoadMaster, SonicWall SMA — 는 최근 몇 년간 발생한 대규모 침입 대부분의 출발점이었습니다. CitrixBleed, 2026년 NetScaler 제로데이, FortiOS SSL-VPN 버그, GlobalProtect, Ivanti의 2024–25년 연쇄 취약점, ArcaneDoor가 그 예입니다. 에지 어플라이언스 패널(라우터 및 방화벽, 그리고 각 제공업체의 카탈로그 패널 안에 있음)은 이러한 공격 캠페인의 핵심이 된 질문들을 계속해서 확인합니다.

패널은 각 어플라이언스의 실행 중인 버전을 읽어 제공업체의 공식 보안 공지와 대조하며, 실제로 악용된 취약점을 먼저 확인하고, 실제로 켜져 있는 기능을 고려합니다 — Gateway 가상 서버나 DTLS가 필요한 CVE는 구성상 해당 기능이 없다는 것이 입증될 때에만 영향을 받지만 사용 중이 아님으로 표시되며, 판단할 수 없을 때는 최악의 경우를 가정합니다. 또한 지원 종료(EOL) 브랜치, 공격자들이 노렸던 구성(데이터 플레인이나 WAN 인터페이스에 노출된 관리 기능, SSLv3/TLS 1.0, 기본 SNMP 커뮤니티, 원격 로깅 없음, 암호화되지 않은 구성 비밀 값, 공격자 플레이북에 나오는 이름의 관리자 계정), 그리고 가상 서버, HA 쌍, 인증서의 상태를 표시합니다. 모든 점검 결과에는 수정된 버전과 보안 공지가 명시되고, NetScaler에서 CitrixBleed 이후 필요한 세션 종료처럼 제공업체가 권장하는 업그레이드 후 조치가 나열됩니다.

스크린샷 추가 예정
그림 10.2. 에지 어플라이언스 패널: 악용된 CVE가 검출된 NetScaler와 그 수정 버전, 패치 후 조치.촬영 방법: 캡처: 라우터 및 방화벽 ▸ 에지 어플라이언스를 열고 NetScaler 하나를 추가해 점검 결과가 나열된 상태

연결. 전용 읽기 전용 계정을 사용하십시오 — read-only 명령 정책에 바인딩된 NITRO 사용자, BIG-IP Auditor, 읽기 전용 프로필을 가진 FortiOS API 사용자, PAN-OS “Superuser (read-only)” 키, Ivanti 읽기 전용 관리자, 쓰기 권한이 없는 Kemp 키 등입니다. Cisco ASA/FTD와 SonicWall SMA에는 안전한 읽기 API가 없으므로 버전을 직접 입력합니다. 자격 증명은 HTTPS로만 전송되며, 어플라이언스가 자신의 신원을 증명한 뒤에만 전송됩니다. 즉, 공개적으로 신뢰되는 인증서이거나, 콘솔과 지문을 비교한 뒤 승인한 자체 서명 인증서여야 합니다. 승인된 인증서가 바뀌면 FrontierStack은 아무것도 보내지 않고 심각 알림을 발생시킵니다.

패치했다고 깨끗한 것은 아닙니다. 대부분이 패치하기 전에 이미 악용된 CVE의 경우, 수정된 버전이라도 처리 완료로 표시할 때까지 침해 검사 실행, 장비에 저장되어 있던 자격 증명 교체, 기존 세션 종료를 상기시키는 알림이 남아 있습니다. NetScaler와 BIG-IP의 경우, SSH 호스트 키를 검증한 플릿 서버에 어플라이언스를 연결하고 침해 스캔을 실행하십시오. CISA, Mandiant, Citrix, F5의 침해 지표를 바탕으로 만든 고정된 읽기 전용 스크립트입니다. 중간에 중단되었거나 필요한 도구가 없는 스캔은 그 사실을 알려 주며, 절대 깨끗한 것으로 표시되지 않습니다.

주의번들된 보안 공지 데이터에는 검토 날짜가 있으며, 패널에 표시됩니다. FrontierStack은 또한 CISA의 Known Exploited Vulnerabilities 목록을 매일 읽어, 사용 중인 제공업체에 대해 번들 데이터에 없는 악용된 CVE를 CISA가 추가하면 경고합니다 — 이런 항목은 제공업체의 보안 공지와 대조해 직접 확인하십시오.

10.6맬웨어 감사 패널

맬웨어 감사 패널은 Mac 한 대를 위한 방어자용 대시보드로, 부담 없이 항상 켜 둘 수 있는 점검부터 무거운 포렌식까지 여러 섹션으로 구성됩니다.

섹션점검 내용
보호 기능Apple 자체의 보호 계층 — Gatekeeper(서명되지 않은 앱 차단), SIP(시스템 무결성 보호), FileVault, 그리고 알려진 맬웨어를 자동으로 검사하고 제거하는 XProtect / XProtect Remediator입니다. 다시 확인을 누르면 상태를 새로 고칩니다.
지속성 및 자동 실행타사 LaunchAgents와 LaunchDaemons — macOS에서 고전적인 지속성 확보 위치입니다. 서명되지 않은 항목은 주황색으로 표시되므로 각 항목을 직접 설치했는지 확인할 수 있습니다. Apple 서명 항목은 정상입니다.
ClamAV 주문형 스캔시그니처 기반 안티바이러스입니다. 경로를 지정하고 스캔을 누른 뒤 감염된 파일 목록을 확인하십시오. 처음 스캔하기 전에 시그니처 업데이트(freshclam)를 실행하십시오. 읽기 전용이므로 보고만 할 뿐, 삭제하거나 격리하지 않습니다.
YARA 규칙 스캔YARA-X(yr) 또는 기존 YARA를 사용해 IOC 및 맬웨어 계열에 대한 규칙 기반 분류를 수행합니다. 위협 인텔리전스 피드의 규칙과 함께 사용하십시오.
파일 평판파일의 SHA-256을 계산하고 VirusTotal 보고서(70개 이상의 엔진, API 키 불필요)를 엽니다. 파일 자체는 절대 업로드되지 않으며, 해시만 사용됩니다.

같은 ClamAV 주문형 스캔이 보안 패널에도 있으며, AI의 malware_scan 도구는 요청에 따라 임의의 경로에 대해 ClamAV 및/또는 YARA를 실행합니다 — 마찬가지로 읽기 전용입니다.

맬웨어 감사 패널의 상단 섹션: Apple의 기본 보호 계층 — Gatekeeper, SIP, FileVault 디스크 암호화, XProtect — 을 각각 점검하고 한 줄 설명과 다시 확인 버튼을 표시합니다. 그 아래(그림에는 없음)에서는 지속성/자동 실행 항목을 나열하고 ClamAV 및 YARA 스캐너를 실행합니다.
그림 10.3. 맬웨어 감사 패널의 상단 섹션: Apple의 기본 보호 계층 — Gatekeeper, SIP, FileVault 디스크 암호화, XProtect — 을 각각 점검하고 한 줄 설명과 다시 확인 버튼을 표시합니다. 그 아래(그림에는 없음)에서는 지속성/자동 실행 항목을 나열하고 ClamAV 및 YARA 스캐너를 실행합니다.

10.7심층 포렌식 도구

빠른 스캔만으로 충분하지 않을 때 사용하는 무거운 분석 도구는 보안 도구 카탈로그 범주에 설치 가능한 서비스로 들어 있습니다 — 카탈로그 필터로 표시하십시오(6장). Volatility 3는 RAM 캡처를 분석하는 메모리 포렌식 프레임워크이고, capa는 실행 파일 안에 숨겨진 기능을 식별하며, CAPE와 Cuckoo 샌드박스는 의심스러운 샘플을 격리된 환경에서 실행해 그 구성과 동작을 추출합니다. URLhaus, OpenPhish, OpenCTI 같은 위협 인텔리전스 서비스는 YARA 및 샌드박스 규칙에 데이터를 공급합니다. Wazuh 같은 SIEM 플랫폼은 아래에서 설명하는 별도의 SIEM 및 보안 데이터 섹션에 있습니다.

10.8EDR 플릿 보드

엔드포인트에서 이미 상용 EDR 에이전트를 실행하고 있다면, EDR 플릿 패널이 모든 콘솔을 아우르는 하나의 읽기 전용 요약을 제공합니다. 콘솔 추가…를 선택하고 제공업체를 고른 다음 API 자격 증명을 붙여 넣으십시오 — 자격 증명은 키체인에 저장되며 AI에는 절대 보이지 않습니다. 엔드포인트 수와 미해결 탐지 수는 SentinelOne, Huntress, CrowdStrike, Sophos Central, Bitdefender GravityZone, Microsoft Defender for Endpoint의 REST API에서 가져옵니다. Jamf Protect와 LimaCharlie는 접속 가능 여부만 확인하며, 그 밖의 콘솔은 일반(접속 가능 여부만)으로 추가할 수 있습니다. 플릿 합계 행은 전체를 합산합니다. 보드는 몇 분마다 새로 고쳐지며, 콘솔에 접속할 수 없게 되면 보안 그룹에서 알림이 발생하고 알림 세부 정보에 해당 콘솔의 미해결 탐지 수가 함께 표시됩니다. 콘솔 열기를 누르면 제공업체 자체의 대시보드로 이동해 심층 작업을 할 수 있습니다.

참고EDR Fleet은 제공업체의 콘솔을 대체하지 않습니다 — 핵심 수치를 모아 보드 하나로 "모두 연결되어 있고 이상 없음"을 알려 주고, 콘솔이 응답을 멈추는 순간 알려 줍니다. 수치는 각 제공업체가 문서로 공개한 엔드포인트를 기준으로 최선을 다해 집계한 것이므로, 이를 근거로 조치하기 전에 자신의 테넌트에서 직접 확인하십시오.

10.9SIEM 및 보안 데이터

SIEM & Security Data 사이드바 섹션은 예전에는 Security Tools와 Logging에 흩어져 있던 보안 운영 워크플로를 따로 모은 것입니다. 이 섹션의 SIEM Overview는 플릿에 관한 첫 번째 질문에 답합니다. FrontierStack이 알고 있는 보안 플랫폼과 데이터 경로는 무엇이며, 감시 중인 관리 엔드포인트에 연결할 수 있습니까? 행은 앱이 구체적인 증거를 확보했을 때만 구성됨으로 표시됩니다 — 저장된 API 자격 증명, 감지된 로컬 설치, 또는 원격 엔드포인트 감시입니다. 저장된 키는 Connected가 아니라 Credentials saved로, TCP 응답은 Healthy가 아니라 Reachable로 표시됩니다. 이렇게 구분하면 포트는 열려 있지만 고장 났거나 관계없는 서비스가 잘못된 녹색 상태를 받는 일을 막을 수 있습니다.

이 섹션은 두 계층으로 구성됩니다.

  • SIEM 플랫폼 — Wazuh, Security Onion, Splunk, Elastic Security, Microsoft Sentinel, Google Security Operations, Graylog, IBM QRadar, Sumo Logic Cloud SIEM, Rapid7 InsightIDR, LogRhythm, Devo, FortiSIEM, OpenText ArcSight.
  • 보안 데이터 파이프라인 — VirtualMetric DataStream, Cribl Stream, Logstash, Vector, Fluent Bit, Fluentd, NXLog, syslog-ng, OpenTelemetry Collector. 이들은 텔레메트리를 수집, 정규화, 필터링, 버퍼링하고 라우팅하며, 그 자체가 반드시 분석가가 인시던트를 추적하는 곳은 아닙니다.

서비스를 열어 알맞은 설정 방법을 선택하십시오. 클라우드 전용 SIEM에는 계정/테넌트와 최소 권한 API 토큰을 입력하는 Connect 영역이 표시되며, 토큰은 macOS 키체인에 저장되고 의미 없는 로컬 설치 버튼은 표시되지 않습니다. 자체 호스팅 또는 하이브리드 플랫폼은 제공업체의 배포 방법과 관리 콘솔을 감시하는 Remote Instance를 제공합니다. 실제 Homebrew formula가 있는 수집기는 로컬에서 설치하고 제어할 수 있으며, Linux/Windows 에이전트와 어플라이언스는 Mac 서비스인 척하는 대신 지원되는 패키지로 연결됩니다.

Sources & coverage는 계층을 합치지 않고 서로 연결합니다. 엔드포인트 콘솔 커버리지에는 EDR Fleet을, 호스트/네트워크 탐지와 침입 방지에는 Security를, 로컬 문제 해결에는 Logs를 사용하십시오. 전체 이벤트 보존, 상관 분석, 헌팅, 인시던트 대응은 SIEM 쪽이 담당합니다. FrontierStack은 상태 확인과 제어 평면 역할을 유지합니다. 자격 증명을 로컬에 보관하고, 증명할 수 있는 구성 요소를 확인하고, 연결이 끊기면 알리고, 심층 작업을 위해 올바른 콘솔로 안내합니다.

보안제공업체가 지원한다면 FrontierStack에는 전용 읽기 전용 또는 모니터링 역할을 부여하십시오. SIEM에는 ID 이벤트, 출발지 주소, 탐지 로직, 인시던트 증거가 담겨 있는 경우가 많습니다. 상태를 읽기 위해서만 전역 관리자 토큰을 재사용하지 마십시오. FrontierStack은 토큰을 키체인에 저장하지만, 그래도 최소 권한을 적용해야 도난당하거나 잘못 구성된 통합이 할 수 있는 일을 제한할 수 있습니다.

10.10읽기 전용 보안 감사

호스트의 실제 상태를 가장 빠르게 파악하는 방법은 AI의 security_audit 도구입니다. 이 도구는 This Mac 또는 SSH로 연결된 서버에서 포괄적이면서도 완전히 읽기 전용인 점검을 실행합니다. OS를 스스로 감지하고 대기 중인 보안 업데이트, 디스크 암호화(FileVault 또는 LUKS), 방화벽(macOS의 Application Firewall + pf, Linux의 ufw / iptables), SSH 강화, 수신 대기 포트, UID 0 및 권한 있는 계정, 암호 없는 sudo(NOPASSWD) 항목, 침입 방지, 최근 로그인 실패를 확인합니다. 암호 없는 sudo는 사용할 수 있는 곳에서만 사용하며, 사용할 수 없는 곳에서는 점검 범위를 줄여 그대로 진행합니다. 아무것도 변경되지 않으며, 우선순위가 매겨진 발견 사항 목록과 구체적인 수정 방법을 받게 됩니다. 이를 직접 적용하거나, 평소의 승인 카드를 거쳐 AI에게 다시 맡길 수 있습니다. 원격으로 감사하려면 target을 서버 이름으로 설정하고, 로컬 Mac을 감사하려면 생략하십시오.

10.11Security Audit 패널: 샌드박스 안에서 실행되는 악용 가능 취약점 전용 감사

위의 읽기 전용 security_audit 점검은 호스트가 어떻게 구성되어 있는지 알려 줍니다. Security Audit 패널은 더 어려운 질문을 던집니다. 여기서 공격자가 실제로 악용할 수 있는 것은 무엇입니까? 이 패널은 코딩 에이전트를 적대적인 감사자로 바꿉니다. 에이전트는 대상을 파악한 뒤 여러 각도에서 취약점을 찾고 — 인젝션, 손상된 접근 제어, 인증 및 권한 부여, 비즈니스 로직, 암호화, 노출된 비밀 값, SSRF, 잘못된 구성, 연쇄 공격 — 이어서 자신의 발견 사항을 하나하나 반증하려고 시도하므로, 최종적으로 남는 것은 구체적인 공격 경로가 있는 문제뿐입니다. 모든 발견 사항에는 시나리오와 수정 방법이 함께 제공되며, 이론적인 잡음은 없습니다.

두 가지 모드로 실행됩니다. Codebase는 에이전트가 저장소나 웹 프로젝트 폴더를 대상으로 소스를 감사합니다. Infrastructure는 FrontierStack이 이미 수집하는 신호로 자신의 환경 전체를 감사합니다 — Cloudflare 영역과 그 TLS/WAF 설정, 도메인 및 인증서 상태, 각 고정된 서버의 OS, 노출된 서비스, 원격 접근 및 MDM/활성화 잠금/FileVault 상태, 로컬 방화벽 — 이를 정리한 비식별화된 인벤토리를 에이전트가 공격합니다.

전체 실행은 Sandcastle Docker 샌드박스 안에서 이루어지므로, 신뢰할 수 없는 코드를 대상으로 하는 적대적 에이전트가 호스트에 직접 닿지 않습니다. 처음 감사를 실행할 때 앱이 샌드박스 이미지와 실행기를 준비하며(Docker 또는 Podman이 실행 중이어야 합니다), 그 이후에는 바로 실행이 시작됩니다. 발견 사항은 심각도 배지와 함께 표시되며, Obsidian에 저장하거나 critical 또는 high 항목을 알림으로 올릴 수 있습니다. 다른 모든 곳과 마찬가지로 Mac 밖으로 나가는 것은 비식별화된 프롬프트뿐이며 — 비밀 값은 먼저 제거됩니다 — 샌드박스 안의 에이전트는 claude setup-token으로 받은 토큰(또는 Anthropic API 키)을 사용해 Claude 구독으로 인증합니다.

주의대상은 git 저장소여야 하며(Sandcastle은 git worktree로 트리의 스냅숏을 만듭니다), 자격 증명 파일 — .env, 개인 키, service-account.json — 이 들어 있는 폴더는 샌드박스에 마운트되지 않고 거부됩니다. 깨끗한 체크아웃을 감사하십시오.
Security Audit 패널: 일회용 샌드박스에서 코드베이스나 인프라를 감사하며, 다른 곳에서는 재사용하지 않는 전용 Claude Code 토큰으로 인증합니다.
그림 10.4. Security Audit 패널: 일회용 샌드박스에서 코드베이스나 인프라를 감사하며, 다른 곳에서는 재사용하지 않는 전용 Claude Code 토큰으로 인증합니다.

10.12Strix: AI 침투 테스트

지금까지의 감사는 읽기 전용입니다. 호스트가 어떻게 구성되어 있는지, 그 코드의 어디가 악용될 수 있는지를 살펴봅니다. Strix는 한 걸음 더 나아가 능동적인 침투 테스트를 실행합니다. Security 패널의 Strix AI Security Testing 섹션에서 저장소 폴더, Git URL, 도메인, URL 또는 IP 주소를 지정하고(또는 연결된 호스트 중 하나를 선택하고), 깊이를 Quick, Standard, Deep 중에서 고르면, Strix가 공격 표면을 파악하고 실제 익스플로잇 경로를 시도한 뒤 침투 테스트 보고서를 작성합니다.

FrontierStack은 호스팅 서비스를 스크레이핑하는 대신, 오픈 소스 Strix 명령줄 에이전트를 Mac에서 로컬로 구동하고 그것이 디스크에 남기는 실행 결과물 — 발견 사항, 실행 메타데이터, 보고서 — 을 읽는 방식으로 이를 수행합니다. CLI가 설치되어 있지 않으면 섹션에 그렇게 표시되고 Install Strix… 링크가 제공됩니다. Update Strix는 스크립트를 셸에 파이프하는 방식이 아니라 uv 또는 pipx로 업그레이드합니다. AI 제공업체 키는 선택 사항입니다. 키를 입력하면 macOS 키체인에 저장되고, 로컬 Strix 프로세스에만 전달되며, 화면에 표시되거나 클라우드 모델로 전송되는 일은 없습니다 — 패널에는 키가 구성되어 있는지만 표시됩니다.

타일에는 마지막 실행이 요약됩니다. Critical, High, Medium 건수, 소요 시간, 최근 24시간 동안 새로 나온 항목, 실패한 스캔입니다. 진행 중인 실행에는 실시간 단계 텍스트와 Stop 버튼이 표시되며, 새로운 critical 또는 high 발견 사항이 나타나면 Silence alerts가 켜져 있지 않은 한 로컬 알림을 받습니다. Open Findings와 Export Report로 세부 정보를 확인하고, Re-run Failed Scan과 Restart Scan Engine으로 잘못된 실행을 복구할 수 있습니다. 심각한 발견 사항은 민감한 정보로 취급되며 클라우드 AI로 전송되지 않습니다. AI 관리자도 strix_status, strix_scan, strix_control을 통해 Strix를 구동할 수 있으며, 모두 13장에서 다룹니다.

보안Strix는 대상을 능동적으로 탐색하므로, “이 대상을 소유하고 있거나 테스트에 대한 명시적인 허가를 받았습니다.”에 체크하기 전에는 스캔이 시작되지 않습니다. 반드시 자신이 소유하거나 테스트를 명시적으로 허가받은 시스템만 대상으로 지정하십시오.

10.13인증서 소스와 TLS

인증서 만료는 스스로 자초한 장애입니다. Certificate Sources 대시보드는 호스트의 발급 스택별로 한 행씩 보여 줍니다 — Let's Encrypt(acme.sh 사용), Certbot, Step CA, Traefik, Cloudflare SSL — 만료일은 openssl로 인증서 자체에서 직접 읽어 옵니다. Cloudflare는 분석용으로 구성한 토큰과 영역을 사용하며, 이 Mac에 없는 소스는 흐리게 표시됩니다. Traefik은 대시보드가 acme.json을 가리키도록, Step CA는 해당 URL을 가리키도록 지정할 수 있습니다.

인증서 발급에는 두 가지 방법이 있습니다. mkcert는 로컬에서 신뢰되는 인증서를 만듭니다 — 공개 CA가 필요 없는 .localhost나 LAN 이름에서의 개발에 적합하며, 설치되어 있으면 Certificates 패널의 Get 동작이 이를 사용합니다. 외부에서 접근해야 하는 모든 것에는 Let's Encrypt를 사용하십시오. AI의 issue_certificate 도구는 This Mac 또는 연결된 서버에서 acme.sh나 certbot을 실행하며, DNS-Cloudflare 방식에서는 실행 시에 주입되는 CF_TOKEN 보관함 비밀 값을 읽고 이 값은 모델로 전송되지 않습니다. 상용 인증서가 필요하면 Certificates 패널의 ACME 섹션에서 인증 기관으로 GlobalSign Atlas를 선택하고, Atlas 포털의 EAB 키 ID와 HMAC 키를 입력해 한 번 등록하십시오. 이후 발급과 갱신은 같은 방식으로 이루어지며 HMAC 키는 키체인에 보관됩니다.

10.14메일 보안

메일 서버에는 서로 다른 두 가지 위험이 있습니다. 위장될 수 있고(누군가 도메인 명의로 메일을 위조), 악용될 수 있습니다(낯선 사람을 대신해 메일을 릴레이). FrontierStack은 두 가지 모두에 대응하며, 그 도구들은 Postfix가 밑에서 동작하는 구형 Apple Server 환경도 이해합니다.

  • 위장 방지 DNS — email_auth_dns는 SPF, DMARC, (선택적으로) DKIM TXT 레코드를 생성합니다. SPF는 도메인을 대신해 누가 메일을 보낼 수 있는지 선언하고, DMARC는 수신 측에 실패 시 처리 방법을 알리며, DKIM은 발신 메일에 암호학적으로 서명합니다. publish=cloudflare를 지정하면 레코드를 대신 만들어 주고, 그렇지 않으면 BIND, dnsmasq 또는 등록 대행업체에 붙여 넣을 정확한 레코드를 출력합니다.
  • DKIM 키 — generate_dkim_key는 도메인과 셀렉터를 지정해 서버에서 opendkim-genkey를 실행하고, 게시할 TXT 레코드 형태로 공개 키를 반환합니다. 개인 키는 OpenDKIM milter용으로 서버에 남습니다.
  • Postfix 강화 — harden_mail_postfix는 SSH를 통해 postconf로 안전한 기본값을 적용합니다. 릴레이에 SMTP AUTH 요구(오픈 릴레이 차단), 알 수 없거나 목록에 없는 발신자 도메인 거부, 선택적으로 발신자/로그인 일치 강제입니다. Postfix를 다시 로드하고 적용된 설정을 출력합니다.
  • 오픈 릴레이 테스트 — test_open_relay는 안전한 SMTP 대화(외부 도메인으로 EHLO / MAIL FROM / RCPT TO 후 전송하지 않고 QUIT)를 실행하고, 외부 수신자가 거부되었는지(정상) 수락되었는지(오픈 릴레이 — 위험) 보고합니다.
  • 전달 프로브 — 서버의 Mail Server Policy 섹션에서 태그가 붙은 테스트 메시지 한 통을 릴레이를 거쳐 끝까지 보내고 정확한 SMTP 판정을 확인합니다. accepted & queued(큐 ID 포함), deferred, rejected, 또는 TLS 인증서 실패입니다. 이것으로 “수락된 뒤 조용히 버려짐”과 실제 전달을 구분할 수 있습니다 — 또한 LAN IP로 지정한 릴레이처럼 STARTTLS 인증서를 검증할 수 없는 경우에는 Trust LAN relay 옵션으로 암호화되었지만 검증되지 않은 채널로 다시 시도합니다. Apple Server.app 서버에서는 구성상 로그가 syslog/ASL에 맡겨져 있어도 FrontierStack이 Postfix의 실제 로그를 찾아내고, 메일 큐와 Server.app의 /Library/Logs/Mail/ 파일도 읽습니다.
  • 계정 확인 — Mail Server 패널에서 메일 계정의 POP3, IMAP, SMTP 설정을 입력하고 Check Settings를 클릭하십시오. 각 서버에 메일 클라이언트가 연결하는 방식 그대로 접속을 시도하며, 단계마다 무엇을 발견했는지 알려 줍니다. 확인되지 않는 서버 이름, 연결을 거부하거나 방화벽에 의해 조용히 버려지는 포트, 포트와 맞지 않는 보안 모드(110 또는 587의 SSL/TLS, 995, 993 또는 465의 STARTTLS), TLS 1.0/1.1, 그리고 이 Mac이 신뢰하지 않는 인증서와 그 이유(만료, 다른 이름으로 발급, 자체 서명 또는 중간 인증서 누락)입니다. 그런 다음 로그인하여 메시지 수를 읽고 로그아웃하며, 로그인이 거부되면 서버의 응답을 그대로 보여 줍니다. 아무것도 다운로드, 전송, 삭제되지 않으며 암호는 저장되지 않습니다. 인증서가 유효하지 않거나 연결이 암호화되지 않은 경우에는, 따로 켜지 않는 한 암호를 아예 전송하지 않습니다.
주의클래식 macOS Server가 실행 중인 Mac에서는 Postfix가 serveradmin으로 관리될 수 있으며, 이것이 main.cf를 덮어써 harden_mail_postfix 변경을 조용히 되돌릴 수 있습니다. 적용 후 결과를 검토하고, 원래대로 돌아갔다면 Server.app에서 같은 설정을 다시 적용하십시오.

10.15암호 자동 완성과 Credential Exchange

FrontierStack은 이미 관리하는 웹 페이지의 로그인 정보를 보관하고 있습니다 — Routers & Network ▸ Web links에 저장한 라우터나 프린터, Synology 또는 QNAP 관리자 계정, Boot Media의 서버 컨트롤러, 서비스 로그인 등입니다. Password AutoFill 패널(Secrets & Vaults)을 사용하면 Safari와 다른 앱이 이를 자동으로 채울 수 있으므로, 더 이상 앱에서 암호를 복사해 올 필요가 없습니다.

  1. Secrets & Vaults ▸ Password AutoFill을 여십시오. 상태 줄에 FrontierStack이 켜져 있지 않다고 표시되면 Turn On…을 선택하고 시스템 설정 ▸ 일반 ▸ 자동 완성 및 암호에서 FrontierStack을 활성화하십시오.
  2. Saved in FrontierStack 아래에서 Safari가 채워도 되는 각 로그인 옆의 Offer를 선택하십시오. 앱의 다른 곳에 보관되어 있지 않은 로그인은 Add a Login…으로 추가할 수 있습니다.
  3. 기기의 웹 페이지에서 FrontierStack 제안을 선택하고(또는 암호 메뉴를 열어 FrontierStack을 선택하고), Touch ID나 Mac 암호로 확인하십시오.
보안자동 완성 확장 프로그램은 자체 키체인 그룹 하나만 가지며, 제공하기로 한 로그인만 읽을 수 있습니다 — FrontierStack 기본 저장소의 API 토큰, sudo 암호, 서비스 키는 절대 읽을 수 없습니다. 모든 채우기에는 Touch ID나 Mac 암호가 필요하며, 조용히 채워지는 일은 없습니다. 사본은 이 Mac 전용이고 Mac 잠금이 해제된 동안에만 읽을 수 있으며, FrontierStack이 시작되거나 앞으로 나오거나 목록이 바뀔 때마다 새로 고쳐집니다.

Credential Exchange(macOS 26 이상)는 암호 관리자 간에 암호를 옮기기 위한 FIDO 표준입니다. 암호 앱 — 또는 이를 지원하는 다른 암호 관리자 — 에서 앱으로 내보내기를 선택하고 FrontierStack을 고르십시오. macOS가 데이터를 바로 넘겨 주므로 중간에 디스크에 기록되는 것은 없습니다. 그러면 FrontierStack이 검토 화면을 보여 줍니다. 주소가 이 네트워크에 속하는 로그인(알려진 FrontierStack 로그인, 플릿 서버, 사설 주소)은 미리 체크되어 있으며, FrontierStack에 로그인은 있지만 아직 암호가 없는 경우에는 가져온 암호로 채울 수 있습니다. 원하지 않는 항목은 체크를 해제하십시오. 패스키, 인증 코드, 카드, 메모, 체크하지 않은 모든 로그인은 완료 시 폐기되며, 감사 로그에는 건수만 기록됩니다.

반대 방향으로는 Export to a Password Manager…를 사용해 저장된 로그인을 체크하여 Touch ID나 암호 확인 후 다른 앱으로 보낼 수 있습니다. 그러면 macOS가 대상을 선택하는 자체 시트를 표시합니다.

참고암호 자동 완성에는 macOS 14 이상과 자동 완성 확장 프로그램이 포함된 빌드가 필요하고, Credential Exchange에는 macOS 26이 필요합니다. 패널에 이 빌드에서는 자동 완성을 사용할 수 없다고 표시되면, 실행 중인 사본이 확장 프로그램 없이 서명된 것입니다.

10.16외부에서 누가 변경할 수 있는가

지금까지 설명한 내용은 모두 FrontierStack이 관리하는 머신을 강화하는 것입니다. 이 섹션은 FrontierStack 자체를 강화하는 방법을 다룹니다 — 플릿 전체의 SSH 키, 데이터베이스 암호, 클라우드 토큰을 보관하는 앱은 그 앱이 관리하는 어떤 단일 서버보다도 매력적인 공격 대상이기 때문입니다.

FrontierStack은 여러 경로를 통해 외부에서 제어할 수 있습니다. AI 클라이언트용 MCP 서버, Webhook과 모바일 패널용 인바운드 HTTP 제어 서버, 단축어와 Siri용 App Intents, 그리고 — 활성화한 경우 — 에이전트 통합입니다. 각각은 이미 자체 토큰을 갖고 있습니다. 이 모든 것 위에 Remote Control & Lock의 두 가지 설정이 있으며, 각 설정이 어떤 질문에 답하는지 분명히 알아 두는 것이 좋습니다.

앱 잠금은 잠금 상태에서 무엇이 남는가에 답합니다. 암호를 설정하고 앱을 잠그면 윈도우가 가려지고, 모든 외부 접점은 완전히 차단되거나 읽기 전용으로 제한됩니다.

10.19.1Fleet: 물리적 보안 키 요구

Fleet 라이선스에서는 암호 잠금 설정 바로 옆에 Physical security key가 추가됩니다. Yubico YubiKey, Google Titan, FEITIAN ePass 중 하나를 선택한 뒤 Apple의 시스템 보안 키 시트에서 키를 등록하십시오. FrontierStack은 공개 자격 증명만 저장하며, 개인 키는 동글 밖으로 나가지 않습니다.

활성화하면 FrontierStack은 잠긴 상태로 시작하고, 백그라운드로 전환되면 다시 잠깁니다. 등록된 키를 연결하거나 갖다 대고 터치하기 전까지는 아무 동작도 하지 않습니다 — 윈도우와 모든 외부 제어 접점이 계속 차단됩니다. 앱 잠금 암호도 구성했다면 잠금 해제는 2단계입니다. 올바른 암호와 물리적 키 터치가 모두 필요합니다. 키가 없다고 해서 암호만으로 접근하도록 대체되는 일은 없습니다.

키는 최대 세 개까지 등록할 수 있으며, 적어도 하나는 백업으로 다른 장소에 보관하십시오. 지원되는 제품군은 YubiKey, Google Titan, FEITIAN FIDO2/ePass입니다. iPhone과 iPad에서는 호환되는 USB-C 또는 Lightning 키를 사용하거나, Apple의 시트가 요청할 때 NFC 지원 모델을 갖다 대십시오. 정책을 해제할 때도 현재 등록된 키의 새로운 터치가 필요하므로, 잠금 해제된 세션을 가진 사람이 몰래 보호를 약화시킬 수 없습니다.

주의복구 위험을 감수하지 않는다면 키 하나만으로 물리적 키 잠금을 활성화하지 마십시오. FrontierStack은 등록된 자격 증명을 읽을 수 없거나 등록된 키를 사용할 수 없을 때 의도적으로 잠긴 상태를 유지합니다. 키 등록과 추가는 Fleet 전용이며, 이미 보호된 설치는 라이선스가 변경된 후에도 등록된 키를 계속 받아들이므로 다운그레이드로 잠금을 우회할 수 없습니다.

페어링된 기기와 Script Secrets

키를 등록하면 Paired devices need the key too가 기본적으로 켜집니다. 페어링 코드 생성, KeyRotate 페어링, 페어링된 기기의 권한 상향 — 더 높은 수준, 원격 셸 또는 AI 변경 — 은 각각 이 Mac에서의 터치가 필요합니다. 기기의 권한을 낮추거나 폐기할 때는 필요하지 않습니다. 휴대폰의 비밀 값 및 셸 요청은 터치로 기기 키 세션(기본 15분)이 열릴 때까지 거부됩니다. 세션 없이 휴대폰이 요청하면 Mac에 키 프롬프트가 최대 1분에 한 번 표시됩니다. FrontierStack을 잠그면 세션이 닫히며, Paired Devices에서 세션이 열려 있는지 확인할 수 있습니다.

AI의 Script secrets도 키로 봉인할 수 있습니다. AI 관리자의 Encrypt with Security Key…는 값을 secrets.env.fsenc에 저장하며, 이 값은 등록된 보안 키의 터치로만 복구할 수 있는 키로 암호화됩니다(FIDO2 PRF, macOS 26.4 이상). 이름은 계속 표시됩니다. 값은 실행하거나 잠글 때마다 터치가 필요하고, 1시간 후 다시 잠깁니다. 값을 사용하는 스크립트는 실행될 때 터치를 요청합니다. 백업 키마다 Add Backup Key…를 사용하십시오. 이 기능이 생기기 전에 등록한 키는 먼저 제거한 뒤 다시 등록해야 하며, 비밀 값이 키에 봉인되어 있는 동안에는 FrontierStack이 모든 키를 제거하도록 허용하지 않습니다.

보안 키를 사용한 SSH. 연결된 서버의 Edit Settings에서 Create Security-Key SSH Key…를 사용하면 보안 키에 ed25519-sk 키를 만들고, 이미 가진 접근 권한으로 서버에 설치한 뒤, 테스트 세션이 성공한 후에만 서버를 새 키로 전환합니다. 원하면 서버에서 이전 키를 제거할 수도 있습니다. 평소에는 Open Key Session으로 한 번 터치하면, 모니터링, 명령, 터미널이 유휴 시간이 시간 제한(기본 60분, 서버별로 설정)에 이를 때까지 그 세션을 공유합니다. 세션이 닫혀 있는 동안 해당 서버의 모니터링은 서버를 다운으로 표시하지 않고 일시 중지되며, 백그라운드 작업이 터치를 기다리는 일은 없습니다. Apple 기본 제공 ssh는 FIDO 키를 사용할 수 없으므로 이 Mac에는 Homebrew의 OpenSSH가 필요하며, FrontierStack이 설치를 제안합니다. 이는 Linux와 Windows를 포함한 모든 서버에 적용됩니다. 서버에는 추가로 설치되는 것이 없으며, OpenSSH 8.2 이상만 있으면 됩니다. Stop Using Security Key…를 사용하면 서버가 이전 키로 돌아갑니다.

External changes는 다른 질문에 답합니다. 잠금 해제된 앱에서 외부 호출자가 무언가를 변경하려면 어떤 절차를 거쳐야 합니까? 이 설정은 모든 외부 접점 — MCP 서버, 제어 패널, 단축어, 명령줄 — 에 한꺼번에 적용됩니다. 수준은 세 가지입니다. Full auto는 외부 도구가 묻지 않고 동작하도록 허용합니다 — 연결된 모든 클라이언트와 그것이 실행되는 머신을 신뢰할 때만 정당화할 수 있습니다. 기본값인 Confirm each action은 모든 변경 앞에 호출자 이름을 표시한 승인 패널을 띄웁니다. 요청이 대기 중이고 FrontierStack이 맨 앞의 앱이 아닌 동안에는 Dock 아이콘이 계속 튀어 오르며 — 응답하지 않고 다른 곳을 보더라도 마찬가지입니다 — 요청에 응답하면 멈춥니다. 대기 중인 요청의 알림에는 Deny와 Allow once 버튼이 있습니다 — 마우스를 올리면 보이고, 시스템 설정 › 알림에서 FrontierStack을 알림 스타일로 설정하면 항상 보입니다. Deny는 알림에서 언제나 동작합니다. Allow once는 사람 존재 확인 보호가 Touch ID를 사용할 때 Touch ID를 요구하고, 하드웨어 입력 보호를 사용할 때는 알림의 클릭과 합성 클릭을 구분할 수 없으므로 대신 패널을 엽니다. 시간제 허용은 패널에서만 할 수 있습니다. 읽기만 하는 호출 — 메일 서버 감사, DNS 레코드 목록 조회 — 에는 확인을 요청하지 않습니다. Password required는 외부 도구가 서버에 손대기 전에 반드시 암호를 요구합니다.

확인 수준에는 인시던트 중에 중요한 안전밸브가 있습니다. 변경을 승인할 때 Allow for session을 선택하면 5분간 허용되지만, 그 호출자 하나와 그 동작 종류 하나에만 적용됩니다. MCP 클라이언트의 서비스 재시작을 승인해도 그 클라이언트의 셸은 허용되지 않으며, 모바일 패널로 요청된 재시작도 허용되지 않습니다. 이렇게 범위를 좁히는 것이 핵심입니다. 장애 중에 확인 요청이 반복되면 사람들은 결국 Full auto로 영구 전환하게 되며, 허용이 옆으로 새어 나간다면 그것이 대신한 확인 요청보다 더 나쁠 것입니다.

어느 수준에서든 세 가지 속성이 유지되며, 이 속성들 덕분에 이 설정은 단지 구성 가능한 것이 아니라 신뢰할 수 있는 것이 됩니다. 읽기는 절대 차단되지 않습니다 — 무엇을 선택하든 모니터링 클라이언트는 계속 동작합니다. 인시던트 중에 꺼지는 대시보드는 오히려 해가 되기 때문입니다. 자격 증명, 셸 접근, FrontierStack 자체 설정은 어떤 수준에서도 외부에서 변경할 수 없습니다. 원격 도구에서 온 요청은 암호를 읽거나 임의의 명령을 실행하기에는 애초에 잘못된 출처라는 판단에 따라, 이러한 요청은 확인을 묻지 않고 거부됩니다. 그리고 세션 허용은 디스크에 기록되지 않습니다. 앱을 종료하거나 잠그면 허용이 지워지므로, 5분간의 편의가 잊어버린 상시 권한으로 몰래 바뀌는 일은 없습니다.

참고암호를 설정하지 않은 상태에서 Password required를 선택하면, 외부 변경은 확인 요청으로 낮춰지는 것이 아니라 차단됩니다. 엄격한 설정이 조용히 가장 약한 설정이 되어 버린다면 아예 설정이 없는 것보다 나쁘기 때문입니다.

10.19.2사람 존재 확인 승인 — AI가 마우스를 움직일 수 있을 때

확인 패널은 그것을 클릭하는 주체가 사람이라고 가정합니다. 컴퓨터 전체를 조작하는 AI 에이전트(“컴퓨터 사용”)는 이 가정을 깨뜨립니다. 합성 마우스 및 키보드 이벤트를 보내거나, 손쉬운 사용을 통해 컨트롤을 직접 누를 수 있으며, 어느 쪽이든 바로 그것을 막기 위해 존재하는 카드에서 사람과 똑같이 Approve를 누릅니다. 같은 Remote Control & Lock 패널에 있는 Human-Presence Approvals는 두 가지 수준으로 이 경로를 막습니다.

Real keyboard & mouse only는 모든 승인 뒤에 있는 입력을 검사합니다. 실제 클릭이나 키 입력은 이를 보낸 프로세스 없이 macOS가 전달하지만, 합성 이벤트에는 이를 보낸 앱의 신원이 담겨 있고, 손쉬운 사용을 통한 누르기는 입력 이벤트 자체가 없습니다. 실제 하드웨어 입력이 아닌 것은 모두 거부됩니다. 승인 카드는 열린 채로 남고, 카드에 무슨 일이 있었는지 메모가 표시되며, 이벤트가 변경 로그에 기록되고(식별할 수 있으면 이벤트를 보낸 앱 이름 포함), 자동화가 방금 무언가를 승인하려 했다는 알림이 표시됩니다.

Real input + Touch ID는 결정적인 증거를 추가합니다. 모든 승인에 Touch ID(또는 페어링된 Apple Watch)도 요구하며, 암호로 대체할 수 없습니다 — 암호는 합성 키보드가 입력할 수 있는 바로 그것이지만, 지문은 Mac의 소프트웨어가 절대 보낼 수 없는 유일한 것입니다. 보안 키가 등록되어 있어도 의도적으로 Touch ID를 요구합니다. Mac에 꽂아 둔 키는 그 Mac에서 실행되는 소프트웨어의 손이 닿는 곳에 있지만, 지문은 그렇지 않기 때문입니다. Touch ID도 Watch도 없는 Mac에서만 등록된 보안 키의 터치로 대체됩니다.

이 게이트는 모든 승인 결정 — 스크립트 카드, 보안 확인, 외부 도구 허용, AI가 제안한 수정, 앱 잠금 암호 — 에 적용되며, 거부에는 증명이 필요하지 않으므로 이 보호는 승인을 막을 수만 있을 뿐 무언가를 계속 실행되게 만들 수는 없습니다. 의도된 부수 효과 두 가지를 알아 두십시오. 화면 공유, VNC 또는 KVM으로 주입된 입력은 합성 입력으로 간주됩니다(머신 앞에서 직접 승인하거나, Watch를 통해 화면 공유에서도 동작하는 Touch ID 수준을 사용하십시오). 또한 Karabiner-Elements 같은 키 리매퍼나 손쉬운 사용을 통해 컨트롤을 누르는 보조 도구도 합성 입력으로 취급됩니다.

10.19.3KeyRotate: 키의 마스터 사본

Enfour의 Mac App Store 키 관리 앱인 KeyRotate는 컴패니언 앱(자격 증명 전용) 수준으로 FrontierStack과 페어링한 뒤, FrontierStack이 사용하는 키의 마스터 사본을 보관합니다. 대상은 AI 제공업체 키, Cloudflare, 호스팅, 이메일 리스트, 에이전트 토큰, CLI Proxy의 클라이언트 키, 그리고 Firecrawl, Supabase, Shopify, PagerDuty처럼 키 하나를 받는 모든 서비스 패널과 SaaS 모니터의 키입니다. Stripe 모니터의 제한된 키와 GitHub, GitLab, Gitea, Bitbucket 토큰은 보통 앱의 키보다 권한 범위가 좁기 때문에, 직접 선택한 경우에만 연결됩니다. 페어링되어 있는 동안 KeyRotate는 이 키들을 각각 FrontierStack에 보내 최신 상태로 유지하며, FrontierStack에 입력한 키는 입력을 멈추고 몇 초 후 KeyRotate로 다시 전송됩니다. 그러면 KeyRotate가 해당 키를 기록하는 모든 파일을 다시 씁니다. 이 전송은 한 계정에 대해 2분간 유효한 일회용 티켓으로 이루어지며, 서명된 컴패니언 앱만 사용할 수 있습니다. 티켓을 전달하는 링크에는 계정 이름만 들어 있고 값은 절대 포함되지 않습니다.

FrontierStack이 실행 중일 때 KeyRotate를 처음 열면 FrontierStack의 키를 가져올지 묻습니다. FrontierStack은 어떤 키가 어느 앱으로 가는지 보여 주며 기본값은 거부이고, 허용하려면 Mac에서 Touch ID를 사용할 수 있을 때는 항상 Touch ID가 필요하며 암호로 대체할 수 없습니다. 사용 가능한 Touch ID가 없는 Mac에서만 Apple Watch, 등록된 보안 키, 또는 그마저 없을 때 로그인 암호를 허용합니다. FrontierStack이 열려 있지 않아도 됩니다. 숨겨져 있거나 백그라운드만으로 종료되어 있어도 KeyRotate가 호출하면 백그라운드 서비스가 앱을 시작합니다. 휴대폰은 전체 제어 권한이 있더라도 이 요청을 할 수 없으며, 모든 전송은 감사 로그에 기록됩니다.

KeyRotate를 통한 교체. KeyRotate가 페어링되어 있으면 AI 관리자가 credentials 도구로 키를 교체할 때 기본적으로 KeyRotate에 교체를 요청합니다. 따라서 새 키가 FrontierStack에만 반영되는 것이 아니라 KeyRotate가 그 키를 기록하는 모든 파일에 반영됩니다. FrontierStack은 계정 이름과 일회용 티켓만 담은 keyrotate://rotate 링크를 열고, KeyRotate는 서명되고 고정된 연결을 통해 그 티켓을 확인한 후에만 동작합니다. KeyRotate는 자체 규칙(활성 구독, 그리고 잠겨 있을 때는 FrontierStack을 요청자로 표시하는 Touch ID 확인)을 적용하고, 새 키를 FrontierStack에 보내며, 자동 업데이트 설정이 켜져 있으면 다른 대상 파일도 다시 쓴 뒤, 대기 중인 도구에 결과를 보고합니다. 이전 키는 절대 폐기되지 않습니다. 이 Mac에서 직접 교체하려면 via: frontierstack을 전달하십시오. 저장된 키는 모두 교체할 수 있습니다. 제공업체의 API가 대체 키를 발급하는 경우(키 자체 또는 저장된 관리자 키 사용)에는 자동으로, 그렇지 않으면 수동으로 교체합니다. 수동 교체 시에는 FrontierStack 또는 KeyRotate가 제공업체의 키 페이지를 열고 붙여넣은 새 키를 검증합니다. AI 관리자에게 보내는 프롬프트에 저장된 키가 나타나면 AI 관리자가 교체를 제안하며, MCP와 CLI(frontierstack keys, frontierstack rotate <service>)를 통해 연결된 외부 AI 도구도 유출된 키를 발견하면 같은 제안을 하도록 안내받습니다.

참고KeyRotate는 실행 중이며 Enfour가 서명한 FrontierStack과만 페어링합니다. 어떤 앱이든 keyrotate:// 링크를 열 수 있으므로, 직접 요청하지 않은 페어링 링크는 수락하기 전에 확인을 요청합니다.

10.17auth.md를 이용한 에이전트 로그인

암호는 자동화하기에 가장 나쁜 자격 증명이므로, FrontierStack은 타사 서비스의 장기 암호를 붙여넣으라고 요구하지 않습니다. 대신 auth.md를 찾아냅니다. auth.md는 서비스가 https://<host>/auth.md에 게시하여 AI 에이전트가 사용자를 대신해 로그인하는 방법을 알려 주는 공개 사양(WorkOS가 처음 제안)입니다. 서비스의 Connect ▸ Login Automation (auth.md) 펼침 영역과 AI의 check_authmd 도구는 이 공개 파일을 가져와 공지된 흐름(에이전트 검증 또는 사용자 주장), 범위, OAuth 엔드포인트를 요약하거나, 게시된 파일이 없다고 보고합니다. 권한 부여 자체는 해당 서비스에서 이루어지며 수명이 짧고 폐기할 수 있으며 범위가 제한된 토큰이 발급됩니다. FrontierStack은 암호를 저장하지 않습니다. 현재 Cloudflare와 Firecrawl이 auth.md를 게시하고 있으며, 지원 서비스는 점점 늘고 있습니다.

10.18서명된 요청 신뢰 모델(FS1)

FrontierStack 자체의 제어 인터페이스(로컬 제어 서버, MCP 서버, 원격 fsagent)는 TLS를 통한 베어러 토큰으로 보호됩니다. 그러나 토큰만으로는 공유 비밀 값에 불과합니다. 재사용(리플레이)이 가능하고, 누가 호출하는지 증명하지 못합니다. FS1 서명된 요청 방식은 그 위에 두 번째 요소를 더합니다. 모든 요청은 승인된 기기별 Ed25519 키로 서명되며, 서버는 공개 키 허용 목록을 유지하고 명시적으로 승인하지 않은 키로 서명된 요청은 모두 거부합니다. 따라서 토큰이 유출되어도 그것만으로는 아무것도 제어할 수 없습니다. 플릿이 이미 신뢰하고 있는 SSH 키의 HTTP판이라고 할 수 있습니다.

각 요청에는 기기의 키 ID, 타임스탬프, 무작위 nonce, 그리고 정규화된 문자열에 대한 서명이 담깁니다. 서버는 키가 승인되었는지, 타임스탬프가 60초 범위 안에 있는지, nonce가 이전에 사용되지 않았는지(서명이 확인된 후에만 nonce를 사용 처리하므로 잘못된 서명으로 nonce를 소진시킬 수 없음), 서명이 유효한지를 확인합니다. 같은 방식이 macOS 앱, Go 에이전트, iOS 클라이언트에 동일하게 구현되어 있으며, 언어 간 테스트로 일치가 보장됩니다.

기기는 사이드바의 Overview 그룹에 있는 페어링된 기기 패널에서 관리합니다(이전에는 이 보안 패널 안에 있었습니다). 페어링된 각 휴대폰이나 태블릿에는 레이블, 키 지문, 마지막 확인 시각, 범위 선택기, 폐기 버튼이 표시됩니다. 페어링은 한두 명이 각자 기기 두어 대를 쓰는 경우를 전제로 하며(등록은 최대 4대), 각 기기에는 범위가 지정됩니다.

범위상태 및 로그 읽기서비스 재시작플릿 작업도구 / CLI / 스크립트
readOnly예———
restart예예——
operate예예예—
full예예예예

같은 섹션에 제어 서버와 MCP 서버별 요청 서명 필수 스위치가 있습니다. 도입은 의도적으로 완만하게 설계되었습니다. 서명이 선택 사항인 동안 서버는 토큰 또는 서명을 받아들이며, 이미 가진 토큰으로 첫 번째 키를 등록할 수 있도록 부트스트랩 예외가 있습니다. 따라서 강제 적용을 켜도 모두가 차단되는 일은 결코 없습니다.

각 행에는 기기별 제어가 두 가지 더 있습니다. AI 관리자 허용(기본적으로 켜짐, 모든 범위에서 사용 가능)은 그 휴대폰이 AI와 대화할 수 있는지를 결정합니다. 신뢰하는 휴대폰은 채팅을 허용하고 다른 휴대폰은 차단할 수 있으며, 이 스위치는 언제나 권한을 제한하기만 합니다. 켜져 있더라도 변경을 가하는 모든 작업에는 여전히 앱 잠금 해제, 서명된 기기, full 범위의 “Allow changes”가 필요합니다. 원격 셸 허용은 full 범위에서만 제공되며 기본적으로 꺼져 있습니다. 휴대폰이 명령줄 셸을 열고, 이 Mac이 오프라인일 때 직접 접속할 수 있도록 서버에 자신의 SSH 키를 설치하려면 이 명시적 허가가 필요합니다. 휴대폰을 분실한 경우 분실한 휴대폰 보호를 사용하면 기기와 대기 중인 이전 작업이 즉시 차단되고, 세션이 닫히며, 접근 가능한 서버에서 직접 SSH 키가 제거되고, 푸시 토큰이 비활성화됩니다. 오프라인 서버는 목록에 남아 있으므로 서버가 돌아오면 정리를 마무리할 수 있습니다.

Bluetooth 페어링 대체 경로. 새 휴대폰이 Wi-Fi나 Tailscale로 이 Mac에 접근할 수 없는 경우(제한된 게스트 네트워크, 클라이언트 격리, 캡티브 포털 등)에도 Bluetooth로 등록을 완료할 수 있습니다. Bluetooth 페어링 허용(기본적으로 꺼짐)을 켜면 페어링 대화상자가 열려 있는 동안에만 Mac이 수명이 짧은 GATT 서비스를 알립니다. 휴대폰은 같은 일회용 QR 코드를 스캔하고 동일한 서명 등록 핸드셰이크를 실행하며, 다만 HTTPS 대신 BLE로 전달합니다. FS1 서명은 전송 방식에 의존하지 않으므로, Bluetooth 경로도 TLS 채널 없이 같은 신뢰 보장을 그대로 이어받습니다.

어디서나 Mac에 접근하기. 기본 상태에서 페어링된 휴대폰은 Mac과 같은 네트워크에 있을 때만 Mac에 접근할 수 있습니다. Mac에서 Tailscale이 감지되지 않으면 페어링된 기기 패널이 설치를 권장합니다. Mac에 Tailscale을, 휴대폰이나 iPad에 iOS용 Tailscale 앱을 설치하고 둘 다 같은 tailnet에 로그인하면 어디서나 페어링이 계속 작동합니다. Mac은 고정된 사설 주소를 유지하고, 트래픽은 종단 간 암호화되며, 라우터 포트는 열리지 않습니다.

보안각 기기는 맡은 일을 할 수 있는 가장 낮은 범위로 페어링하십시오. 멈춘 서비스를 재시작하기만 하면 되는 휴대폰은 full이 아니라 restart로 페어링해야 합니다. 모든 기기를 등록했으면 두 서버 모두에서 요청 서명 필수를 켜십시오(에이전트에서는 require_sign). 그 후에는 호출자가 승인된 개인 키도 가지고 있어야 하므로, 유출되거나 스크린샷에 찍힌 토큰으로는 아무것도 제어할 수 없습니다. 휴대폰을 분실하거나 사람이 떠나면 즉시 해당 기기를 폐기하십시오.

10.19헤드리스 Mac 보안 강화

디스플레이가 없는 서버에는 고유한 보안상의 절충이 있으며, Headless Setup 도구(8장과 17장에서 자세히 설명)는 여기서 가장 중요한 점을 알려 줍니다. System Status 섹션은 FileVault가 켜져 있을 때 경고합니다. 키보드나 화면이 없는 암호화된 Mac은 부팅 시 잠금을 해제할 수 없어서, 온라인으로 돌아오지 못하고 FileVault 프롬프트에서 멈추기 때문입니다. 헤드리스 Mac에서는 일반적으로 전체 디스크 암호화와 무인 재시작 중 하나를 선택해야 하며, FrontierStack은 다음 정전 후에야 이 사실을 알게 되는 대신 이 선택을 명확하게 보여 줍니다. 이런 호스트에서 화면 공유나 원격 로그인을 켜는 것은 바로 Open Ports 감시가 계속 지켜보게 될 종류의 노출입니다.

헤드리스 Mac 설정: FileVault, Time Machine, 모든 공유 서비스의 현재 상태와, 무인 Mac이 정전 후 다시 돌아오지 못하게 만드는 설정에 대한 경고.
그림 10.5. 헤드리스 Mac 설정: FileVault, Time Machine, 모든 공유 서비스의 현재 상태와, 무인 Mac이 정전 후 다시 돌아오지 못하게 만드는 설정에 대한 경고.

FrontierStack 사용자 설명서 · 버전 1.0.0 · 제10장