개발자 소개

왜 Mac의 네트워크 경계를 자동으로 지키는 앱을 만들었나

개인 개발자 Tetsuharu Fujiki (Lafine Systems Design)가 공공 Wi-Fi와 개발 서버의 노출 위험을 직접 조사한 기록.

시작은 패스트푸드점 Wi-Fi에 대한 사소한 궁금증이었다

시작은 패스트푸드점 Wi-Fi에 대한 사소한 궁금증이었다

어느 날 공공 Wi-Fi로 작업하다가 문득 "이 Wi-Fi에서 옆자리 사람에게 내 Mac이 어떻게 보일까?"라는 생각이 들어 조사를 시작했습니다.

"공공 Wi-Fi라도 클라이언트 분리(AP 분리)가 작동하고 있으면 다른 기기와 통신할 수 없으니 안전하다" — 오랫동안 그렇게 믿고 있었지만, 조사해 보니 전제가 생각보다 허술하다는 것을 알게 되었습니다. 클라이언트 분리는 애초에 모든 Wi-Fi에서 유효한 것도 아니고, 유효한 환경에서도 SANS Institute가 보고한 "AirSnitch"라는 기법으로 우회될 수 있다는 것을 알게 되었으며, Bonjour(mDNS)로 자신의 Mac이 평문으로 여러 정보를 알리고 있다는 것도 직접 dns-sd와 lsof를 실행해 보고서야 실감했습니다.

조사 끝에 내린 결론은 단순했습니다. 대책은 "노출 면을 줄이는 것"과 "네트워크가 바뀔 때마다 사람이 직접 설정을 바꾸지 않는다"는 전제에 서는 것, 이 두 가지뿐이라는 것이었습니다. 카페에 도착할 때마다 매번 설정을 다시 확인하는 사람은 거의 없습니다(저도 하지 않습니다). 그래서 신뢰할 수 있는 네트워크와 그 외를 자동으로 판별하고, 모르는 네트워크에서는 알아서 노출 면을 좁혀주는 구조가 필요하다고 생각했고, 이를 자동화하는 macOS 앱으로 만든 것이 RoamSwitch의 시작입니다.

개발 서버도, 사실 같은 문제를 안고 있었다

개발 서버도, 사실 같은 문제를 안고 있었다

공공 Wi-Fi를 조사한 흐름에서 "그럼 개발 서버는 어떨까"라는 궁금증이 생겨 파보았습니다. "개발 서버는 localhost만 보고 있으니 외부에서는 안전하다"라고 막연히 생각했지만, 이 역시 실제로는 프레임워크마다 제각각이었고 직관에 반하는 기본값도 있었습니다.

next dev는 hostname을 지정하지 않으면 0.0.0.0에 바인딩되고, python -m http.server도 마찬가지로 기본적으로 모든 인터페이스에 공개됩니다. Vite는 비교적 양호해서 기본값이 localhost지만, 실제 스마트폰으로 확인하기 위해 --host를 붙인 경험은 누구에게나 있을 것이고, 실제로 이 지점을 노리는 CVE-2023-34092(경로 순회, CVSS 7.5)도 존재합니다. Docker의 -p 옵션에 이르러서는 호스트 측 방화벽 설정을 우회해서까지 0.0.0.0으로 공개되는 경우조차 있습니다.

결국 이것도 같은 결론에 이르렀습니다. 사람이 매번 기억해서 닫는 것이 아니라, 신뢰할 수 없는 네트워크에 연결하는 순간 자동으로 외부 접근을 차단하는 구조가 더 현실적입니다. 이것은 실제로 RoamSwitch에서 가장 자주 보고되는 사용 사례 중 하나가 되었으며, 열린 포트를 수동적으로 감사하여 위험을 보고하는 동시에, 등록되지 않은 네트워크에서는 커널의 패킷 필터로 외부 LAN으로부터의 접근을 차단하는 기능으로 구현했습니다.

프로필

Lafine Systems Design / 개인 개발자

Lafine Systems Design / 개인 개발자

RoamSwitch의 방화벽 제어(pf/socketfilterfw), ARP 스푸핑 감지, 권한 헬퍼(XPC)를 통한 안전한 권한 분리 같은 기술 기반은 외국계 IT 기업, 대형 전자기기 제조사 그룹에서의 시스템 엔지니어 경험과, 독립 후 관공서·대학·연구기관을 대상으로 자사 ASP 서비스를 제공하며 쌓은 OS·네트워크 기반 기술, 운영 자동화·장애 대응·보안 관리 지식으로 뒷받침되고 있습니다. 관심 분야는 리눅스 저수준, 네트워크 방어, 머신러닝, 고속 데이터 인프라, 시스템 설계 등입니다. 현재는 개인 개발자로서 AI·머신러닝 분야에도 몰두하면서 Mac의 네트워크 보안을 자동화하는 앱 "RoamSwitch"를 개발·제공하고 있습니다. 조사한 내용은 Zenn에서 기술 기사로 공개하고 있습니다.

검증 가능한 형태로 공개

📝 Zenn에서 기술 기사 읽기 고객지원 및 문의

사업자명·소재지·결제 방법 등 법정 고지사항은 특정상거래법에 따른 표기를 참고해 주세요.