최종 업데이트: 2026-10-10

사고 직후 첫 1시간

RoamSwitch가 심각한 위협을 감지해 봉쇄한 뒤, 첫 1시간 동안 어떤 기능을 어떤 순서로 쓰는지 정리했습니다.

1. 이 페이지에 대하여

RoamSwitch는 심각한 위협을 감지하면 네트워크 격리(Air-Gap)나 프로세스 동결 같은 봉쇄 조치를 자동으로 실행합니다. 이 페이지는 그 뒤에 무엇을 확인하고, 무엇을 남기고, 언제 해제할지를 환경별로 정리한 것입니다. 화면과 조작의 자세한 설명은 각 매뉴얼을 참조하세요.

RoamSwitch 기능의 사용법을 설명하는 페이지입니다. 조직 차원의 연락, 법적 대응, 복구 계획은 다루지 않습니다.

2. 어느 환경에서나 같은 순서

봉쇄는 이유가 있어서 발동된 것입니다. 서둘러 해제하기 전에 다음 순서로 진행하세요.

  1. 확인합니다. 무엇이 언제 어떤 순서로 감지되었는지 시간순으로 봅니다.
  2. 남깁니다. 해제하거나 재시작하기 전에 기록과 증거를 내보냅니다. 해제나 재시작 뒤에는 실행 중이던 상태의 정보가 사라질 수 있습니다.
  3. 판단합니다. 짐작 가는 조작이었는지, 정말 수상한 움직임이었는지 정합니다.
  4. 해제합니다. 안전을 확인한 뒤에 봉쇄를 해제합니다.
  5. 지켜봅니다. 해제한 뒤 같은 감지가 다시 나오지 않는지 한동안 확인합니다.

로그로 조사할 때는 6절의 PersonalSOC와 AccessScope도 쓸 수 있습니다.

ARP 스푸핑으로 격리되었다면 8.도 읽어 보세요.

Linux 데스크톱판에서 랜섬웨어가 원인이라면 9.도 읽어 보세요.

격리 중에는 그 컴퓨터에서 이 페이지를 열 수 없습니다. Mac에서는 "격리 상태와 해제 안내…" 창에, Linux 데스크톱판에서는 해제 확인 창에 이 페이지의 QR 코드가 표시됩니다. 다른 회선에 연결된 휴대폰으로 스캔하면 이 페이지를 읽을 수 있습니다. QR 코드에는 이 페이지의 공개 주소만 들어 있습니다.

3. Mac

  1. 메뉴 막대의 🛡️ 아이콘을 열어 "🔒 격리 중(전면)" 또는 "🔒 격리 중(제한 모드)" 표시를 확인합니다.
  2. "ℹ️ 격리 상태와 해제 안내…"를 열어 격리가 발동된 이유를 읽습니다.
  3. 🛡️ → Mac 보안 종합 진단 → "📈 보안 활동 로그…"를 엽니다. 기간을 좁히고 중요도와 카테고리로 필터링하여, 직전에 무엇이 감지되었는지 시간순으로 봅니다. 그래프의 막대를 클릭하면 그 시간대만 목록에 표시됩니다.
  4. Pro에서는 필터링한 결과를 CSV로 내보내 보관할 수 있습니다.
  5. "🧾 프로세스 실행 기록…"(Pro)을 미리 켜 두었다면 실행된 프로세스의 이력도 조사에 쓸 수 있습니다. 기본값은 꺼짐입니다.
  6. 랜섬웨어나 XProtect 탐지로 격리가 작동하면, 격리 직전에 증거 보전 데이터가 자동으로 저장됩니다. 내용은 실행 중인 프로세스 목록, 네트워크 연결, 최근 변경된 파일 목록이며, 파일마다 SHA-256도 기록합니다. 저장 위치는 ~/Library/Application Support/RoamSwitch/incident-evidence/입니다. 패킷 캡처는 Mac에서는 할 수 없습니다.
  7. 짐작 가는 조작이 없었는지 되돌아봅니다(수상한 앱 실행 등).
  8. 같은 메뉴에서 "🔓 Air-Gap 격리 해제"를 선택하고, 확인 대화상자에서 "해제"를 선택하면 그 자리에서 통신이 복구됩니다.

랜섬웨어 피해라면 🛡️ → 악성코드 방어 (XProtect & ClamAV) → "🗂 랜섬웨어 복구…" (Pro)를 엽니다. RoamSwitch가 주기적으로 만드는 APFS 로컬 스냅샷에서 파일을 다른 위치(~/RoamSwitch-Recovered/<ID>/)로 꺼낼 수 있습니다. 현재 파일은 덮어쓰지 않습니다. 꺼내려면 전체 디스크 접근 권한이 필요합니다.

통신이 복구되지 않을 때
실수로 차단된 채 통신할 수 없을 때만 🛡️ → 🧰 복구 및 제거 → "🆘 네트워크 긴급 복구…"를 사용합니다. 최후의 수단입니다.

4. Linux 데스크톱 버전

  1. 시스템 트레이의 🛡️ 아이콘을 엽니다. 심각한 위협으로 네트워크가 격리되어 있으면 "🚨 Air-Gap 해제 후 통신 복구"가 표시됩니다. 아직 누르지 않습니다.
  2. 메인 창의 "Notifications"에서 최근 7일간의 알림 이력을 보고 무엇이 알려졌는지 확인합니다.
  3. "Incident Timeline"(실험적 기능)에서 감지부터 대응, 해제까지의 흐름을 시간순으로 봅니다.
  4. "Security Activity Log"에서 기간, 카테고리, 중요도, 키워드를 조합해 필터링하며 직전에 일어난 일을 조사합니다. Incident Timeline과 Notifications의 내용이 하나의 화면에 통합되어 있습니다.
  5. 짐작 가는 조작이 없었는지 되돌아보고, 안전을 확인했다면 트레이의 "🚨 Air-Gap 해제 후 통신 복구"를 누릅니다.
통신이 복구되지 않으면 트레이의 복구 하위 메뉴에서 "네트워크 긴급 복구"를 사용합니다. 5절의 명령어로도 알림, 격리 상태, 동결된 프로세스, 시계열을 확인할 수 있습니다.

5. Linux Server Edition

Server Edition은 명령어로 조작합니다. 여기서 설명하는 명령어는 Linux 데스크톱 버전에서도 사용할 수 있습니다(sudo roamswitch server ack만 Server Edition 전용입니다). 신뢰도가 높은 격리(카나리아 변조, 랜섬웨어 같은 대량 덮어쓰기, eBPF의 Critical / Emergency / Alert 등)는 확인 응답(ack)도, 원인이 사라졌다는 확인도 없이 기본값으로 3600초(1시간)가 지나면 제한(DEGRADED) 모드로 전환됩니다. 제한 모드에서는 유지보수용 SSH 포트와 허용한 IP의 관리 경로 이외의 새로운 통신이 계속 차단되며, 시간이 지나도 자동으로 열리지 않습니다.

5.1 알림 확인

Telegram, LINE, Webhook을 설정해 두었다면 그쪽으로 알림이 도착해 있습니다. 설정하지 않았더라도 최근 1주일의 알림은 로컬에 남아 있습니다.

roamswitch notifications

5.2 격리 상태 확인

eBPF 런타임 가드의 현재 격리 상태와 감지된 인시던트 이력을 표시합니다.

roamswitch server ebpf

5.3 동결된 프로세스 확인

가드가 SIGSTOP으로 동결한 프로세스의 목록입니다. 증거를 남길 때까지 재개하지 마세요.

roamswitch frozen list

5.4 증거 보존

eBPF 런타임 가드가 프로세스 단위로 봉쇄하면 증거 보존 번들이 자동으로 만들어집니다. 내용은 약 30초의 패킷 캡처와, PID를 알 수 있을 때의 /proc/<pid> 스냅샷입니다(tshark가 없는 환경에서는 패킷 캡처만 생략됩니다). 저장 위치는 /var/lib/roamswitch/incident-evidence/<타임스탬프>-<ID>/ 입니다.

호스트 전체를 격리한 경우에는 현재로서는 자동으로 만들어지지 않습니다. 그런 경우나 봉쇄 전의 상태를 남기고 싶을 때는 수동으로 취득합니다.

sudo roamswitch-incident-capture snapshot --pid <PID> --reason "first-response"

5.5 타임라인과 실행 기록 내보내기

통합 인시던트 타임라인(실험적)을 JSON Lines로 내보냅니다. 실행 레코더는 기간이나 프로세스로 검색할 수 있습니다.

roamswitch timeline --export incident.jsonl
sudo roamswitch events search --since 2h

5.6 판단하고 해제

오탐으로 동결된 프로세스는 아래 명령어로 재개합니다(resume all로 전체 재개).

roamswitch frozen resume <PID>

같은 오탐을 영구적으로 허용하려면 허용 목록에 추가합니다. 실행 파일 경로에 연결하는 --exe를 붙이면 프로세스 이름을 위장해도 우회할 수 없습니다.

sudo roamswitch server allowlist add <rule> <process> --exe <path>

격리에 확인 응답을 보냅니다. FULL 격리 중에는 엄격한 격리를 유지한 채 확인 응답합니다(운영자가 인계받은 것으로 간주되어 제한 모드로의 전환과 자동 해제가 멈춥니다). 제한 모드 중에는 확인 응답이 해제를 의미합니다.

sudo roamswitch server ack

5.7 접속할 수 없게 되었을 때

클라우드 사업자의 웹 관리 콘솔(VNC나 시리얼 콘솔)로 로그인하여 긴급 격리를 해제합니다. 기본값에서는 유지보수용 SSH 포트와 관리 IP의 관리 세션은 격리 중에도 유지됩니다.

sudo roamswitch emergency-restore

5.8 나중에 정리

증거 번들은 자동으로 삭제되지 않습니다. 보존 기간(기본 30일)이 지난 오래된 번들은 아래 명령어로 삭제합니다.

sudo roamswitch-incident-capture prune --keep-days 30

6. 로그로 조사하기(PersonalSOC와 AccessScope)

RoamSwitch에는 로그를 조사하는 별도 도구인 PersonalSOC와 AccessScope가 포함되어 있습니다. 둘 다 읽기 전용이며 설정을 바꾸거나 통신을 차단하지 않습니다. 분석은 네트워크를 쓰지 않고 이 기기 안에서만 이루어지므로, 격리 중에도 사용할 수 있습니다.

6.1 PersonalSOC: 이 기기의 로그와 탐지를 한 보고서로 정리

이 기기의 인증 로그(Mac은 sudo와 sshd, Linux는 auth.log, auditd, nginx, apache 등)와 RoamSwitch의 미해결 탐지를 읽어, 위험도의 기준, 시계열, IOC(IP, 도메인, URL, 해시)를 하나의 보고서로 정리합니다.

sudo personalsoc scan --report

6.2 AccessScope: 액세스 로그에서 공격 찾기

웹 서버와 SSH 등의 액세스 로그에서 무차별 대입, 웹 셸, 공격의 연쇄, 평소와 다른 곳에서의 로그인 성공 등을 증거 줄 번호와 확신도(확정, 가능성 높음, 가설)와 함께 보여 줍니다. 침해 자체를 단정하지는 않습니다.

sudo accessscope scan --auto --since 24h --report report.md
관리자 권한(sudo)으로 실행하기
인증 로그, journald, fail2ban 로그, 웹 서버 로그, auditd 로그는 관리자 권한이 없으면 읽을 수 없습니다. 조사할 때는 위의 명령에 sudo를 붙여 실행하세요. sudo를 붙이지 않으면 읽지 못한 로그는 '읽을 수 없음'으로 표시되고, 보고서에는 읽은 로그가 없다고 나옵니다. 이때의 '탐지 없음'은 안전하다는 증명이 아닙니다. 두 도구 모두 스스로 권한을 높이지 않습니다.

6.3 어느 단계에서 쓰는가

sudo accessscope scan --auto --since 24h --since-last --new-only

7. 끝난 뒤에

해제한 뒤에는 같은 감지가 다시 나오지 않는지 타임라인(Mac에서는 "보안 활동 로그")에서 한동안 확인합니다. 내보낸 기록과 증거 번들은 삭제하지 말고 보관하세요.

비밀번호나 키 교체, 관계자 연락 등 RoamSwitch 밖에서의 조치는 이 페이지의 범위 밖입니다.

8. ARP 스푸핑으로 격리되었을 때

공용 Wi-Fi 등에서 같은 네트워크의 공격자가 라우터인 척하며 통신을 엿보려는 수법이 ARP 스푸핑입니다. RoamSwitch는 게이트웨이(라우터)의 MAC 주소가 갑자기 바뀌는 것 등을 감지합니다. Mac과 Linux 데스크톱판은 같은 방식입니다.

  1. 격리되는 경우. 등록하지 않은 네트워크(보호 수준: 락다운)에서 게이트웨이와 관련된 이상을 감지하면 자동으로 격리합니다. 등록한 장소(집, 직장 등)에서는 자동으로 격리하지 않습니다. 경고가 표시되고, "지금 전체 차단"을 선택했을 때만 격리합니다.
  2. 해제 전에 확인할 것. 앱의 확인 창에도 비슷한 안내가 표시됩니다. 같은 네트워크의 다른 기기가 ARP를 위조하고 있지 않은지, 게이트웨이의 MAC 주소가 신뢰하는 값과 일치하는지(Linux 확인 창에는 현재 값과 신뢰하는 값이 표시됩니다)를 확인합니다. 공용 Wi-Fi라면 테더링 등 다른 회선으로 옮긴 뒤 해제하는 것이 안전합니다.
  3. 자동 해제. 시간만으로는 해제하지 않습니다. 게이트웨이의 MAC 주소가 신뢰하는 값과 일치함을 3회 연속, 60초 이상에 걸쳐 확인하면 자동으로 해제하고 알립니다. 확인하지 못한 채 기본 1시간이 지나면 통신을 크게 제한한 상태(축소)로 바뀝니다. 축소 상태는 시간이 지나도 열리지 않으며, 직접 해제해야 합니다.
  4. 직접 해제할 때. Mac에서는 메뉴의 "Air-Gap 격리 해제"를 사용합니다. Linux 데스크톱판에서는 트레이의 "Air-Gap 해제 후 통신 복구" 또는 sudo roamswitch emergency-restore를 사용합니다. 원인이 남아 있는 채로 해제하면 통신이 재개되어 같은 영향을 받으므로, 확인한 뒤에 해제합니다.
  5. 해제한 뒤. 같은 감지가 다시 나타나는지 한동안 살펴봅니다. 다시 나타나면 그 네트워크를 쓰지 말고 다른 회선으로 옮깁니다.

9. 랜섬웨어로 격리되었을 때(Linux 데스크톱판)

짧은 시간에 많은 파일이 바뀌면 RoamSwitch는 랜섬웨어일 가능성이 있다고 보고, 파일을 바꾸는 프로세스를 동결(SIGSTOP)하고 네트워크를 차단(Air-Gap)합니다. Air-Gap 확인 창이 열리고 이유, 프로세스, 바뀐 파일 수가 표시됩니다. 이 절은 Linux 데스크톱판 기준입니다. Mac은 3.을 읽어 보세요.

  1. 확인합니다. 확인 창과 알림 기록에서 어떤 프로세스가 어떤 파일을 바꿨는지 봅니다. 동결된 프로세스는 roamswitch frozen list로도 볼 수 있습니다(5.3).
  2. 기록합니다. 해제나 재시작 전에 5.4와 5.5의 절차로 증거와 시계열을 저장합니다.
  3. 판단합니다. 동결된 프로세스가 짐작 가는 작업(백업이나 압축 등)이라면 오탐입니다. sudo roamswitch frozen resume <PID>로 재개합니다. 실제 공격이라면 재개하지 말고 증거를 기록한 뒤 프로세스를 종료합니다.
  4. 파일을 되찾습니다. 바뀐 파일은 스냅샷에서 꺼낼 수 있습니다. 화면에서는 사이드바의 "랜섬웨어 복구" 탭(Linux 1.11.21 이후)에서 "★ 권장" 피해 전 스냅샷을 고르고 "파일 꺼내기" 또는 "폴더 꺼내기"를 누릅니다. 명령으로는 sudo roamswitch-ransomware-rollback list로 목록을 보고 sudo roamswitch-ransomware-rollback restore-files <ID> <PATH>를 사용합니다. 대상은 btrfs 서브볼륨이나 LVM 논리 볼륨입니다(ext4 홈에서는 쓸 수 없습니다). 피해 전 스냅샷은 기본적으로 6시간마다 자동으로 만들어집니다. 감지 시점의 스냅샷도 자동으로 만들어지지만 암호화된 파일을 포함하므로 암호화 이전으로 되돌리는 데는 쓸 수 없습니다. 현재 파일은 덮어쓰지 않습니다. 꺼낸 파일은 기본적으로 <대상>/RoamSwitch-Recovered/<ID>/에 놓입니다. 전체를 되돌리는 restore는 현재 상태를 덮어쓰므로 최후의 수단입니다(명령만).
  5. 해제합니다. 시간만으로는 해제되지 않습니다. 원인이 사라진 것을 확인했을 때, 또는 트레이의 "Air-Gap 해제 후 통신 복구"나 sudo roamswitch emergency-restore로 해제했을 때만 풀립니다.
  6. 지켜봅니다. 해제한 뒤 같은 감지가 다시 나타나는지 확인합니다. 꺼낸 파일은 원래 위치로 되돌리기 전에 내용을 확인합니다.